![]() |
[2013 年 8 月号] |
ETロボコン特集
オージス総研コンサルティング・サービス部辻 博靖 | × | 聖望学園高等学校科学部部長石川 公一 |
今回は活動開始からチャンピオンシップ大会までの約8ヶ月間の活動内容を紹介します。
高校生たちはこの8ヶ月間、何につまずき、何を学んでいったのか?その過程が掴めるよう、時系列に沿ってオージス総研の支援メンバーの辻と、科学部の石川さん(背景が黄色の部分)が交互に執筆しています。
最後に今回の活動の主役である高校生チームのメンバーと科学部の顧問である永澤先生、そして支援メンバーの感想も掲載しています。
前編の成果と合わせて高校生たちの成長をご覧ください。
今回の支援活動は、弊社メンバー(林田、辻)が埼玉県の聖望学園高等学校へ訪問することから始まりました。高校に入るのは十数年ぶり。緊張な面持ちで顧問である科学部の永澤先生と職員室で初対面。互いに挨拶をした後、理科室に移動し、それぞれの思いや状況について話し合いました。
永澤先生の目標は2012年度もチャンピオンシップ大会へいくこと。それを目指してモデリングやプログラミングを見よう見まねで取り組んでいるが、限界にきているようでした。モデリングとプログラミングについてヒアリングした結果を表1に示します。
モデリング | 見よう見まねのモデリングを脱却したい。 多くの優秀モデルを比較することで何がいいのかを考えたが、結局のところよくわからない。そもそもなぜモデルを作らないといけないのかを知りたい。 また、クラス図に対してフローチャートのイメージがある。どのように理解すればよいのか教えてほしい。クラス図における汎用性って何かを知りたい。 ETロボコンのモデルの評価の判断基準を理解したい。 |
---|---|
プログラミング | 実装に関してわからない点をいろいろとアドバイスしてほしい。 プログラムのお手本を示してほしい。それを真似させ、少しずつ変更させたい。 審査員の方からUMLを使って開発をするのであればC++の方が楽であることを聞いた。今回C++にチャレンジしようと思っているが、初めてなので心配。まずは動かせるレベルまでもっていきたい。 |
今回の支援はボランティアで行うこともあり、支援できるのは月1回程度。それを前提に永澤先生の表1の課題を解決できるよう支援内容を検討することを約束し、その日は帰路につきました。
オージス総研の方々にはこの時点で伝えられていませんでしたが、2011年度の大会終了時(2012年の活動開始時)の私たちの状況は以下のようなものでした(表2, 3)。
言語 | C言語 |
---|---|
テキストエディタ | TeraPad |
モデリングツール | 使用せず(紙と鉛筆) |
モデル図作成 | パワーポイント |
利用したUML図 | ユースケース図、クラス図、シーケンス図、ステートマシン図のみ |
UMLの学習 | ETロボコン主催の技術教育。書籍が数冊。ETロボコンで公開された優秀モデル。 |
プログラミング力 | 他チームのプログラムを見たことがないので、我流で作成していた。構文はif, for, switch, while文を使用し、ポインタは使用してなかった。2011年度のチャンピオンシップ大会直前に構造体とポインタを初めて使用した。 |
クラスの概念 | それぞれのクラスでファイル分割すればよいという認識。 |
---|---|
トレーサーアビリティ | 毎回モデルで指摘されたが、なんのことだかまったく理解していなかった。なので、モデル図間の関連はなかった。 |
インスタンス | 言葉自体知らなかった。この概念はまったくなく、利用もしていない。 |
多重度 | よく分からないので基本的に1と書けばよい。モーターは2個あるから2、という程度の理解であった。 |
可視性 | 属性は−(マイナス)、操作は+(プラス)という決まり。カプセル化という概念を理解しておらず、「−(マイナス)は自分のクラスだけで利用する」という意味が分からなかった。 |
今回の支援メンバーは林田、手嶋、岩附、辻の4名。表1の課題を共有し、支援内容を検討しました。2012年3月から10月の地区大会までの期間、月1回の頻度での支援を前提とすると計7回しかありません。高校生の皆さんはC++初挑戦ですが、C++のプログラミング教育に時間を割くとモデリング教育の時間がなくなってしまうため、C++の学習自体は高校生に任せる形で各月の活動内容を考えました。考えた地区大会までのロードマップが図1です。
|
図1. オージス総研が考えた地区大会までのロードマップ |
---|
まず3月は基礎力を鍛えるということで、C++のプログラミングスキルを習得してもらうための期間としました。
そして4月、5月からモデリングの本格的な教育を開始します。優秀モデルと高校生たちの昨年度のモデルを一緒に分析し、解決すべき課題を洗い出すことにしました。
6月、7月はモデルチェンジということで、オブジェクト指向の開発プロセスを学習してもらい、モデルの作り方を変えていきます。要求分析から実装までモデルを使ってどのように開発を進め、何に気をつけてモデルを作り込む必要があるかを理解してもらう計画にしました。
8月、9月は、モデル提出に向けてラストスパートしている段階です。こちらから体系的に教えるというよりも今まで学習してきたことをもとにモデル作成と実装を行っていると考えられるので、レビュー中心の指導を考えました。この時期は、かなり大変なことも予想されるが、あきらめずに仲間を思いやって目標を達成するために頑張ろうという思いを込めて活動テーマを「走れメロス!」としました。
このように大まかな活動テーマを決め、あとは高校生たちの習得状況に応じて教育内容を変えていこうという考えで3月から支援活動を開始しました。
高校生たちと初対面。本支援における永澤先生の思い、我々の思い、そして高校生たちの思いを確認してから、図1のロードマップを共有し、支援を開始しました。
|
|
支援初日は、モデリング教育のとっかかりとしてUMLとC++のソースコードの対応関係を教えました。UMLのモデルがどのようにC++のソースコードに対応づくのかをイメージできないと、モデルを作ることの価値が伝わらないと思ったためです。ETロボコンではクラス図とシーケンス図がどのようにC++のソースコードに対応つくのかを理解さえすれば十分だったので、その2つの図に絞って教育を行いました。実際に図を見てプログラミングを行わないと覚えられないので、自己学習用に弊社のUMLによるC++プログラミングコースの演習問題も提供しました。
当日の支援の最後に、高校生の皆さんに1つの課題を提示しました。その課題は、前年度のチャンピオンシップ大会に提出したモデルのC++による再実装です。C++で実装してもらうことで自分たちのモデルの欠陥に気づき、それがその後の品質改善につながるのではないかと考え、1ヶ月間かけて実装してもらうことにしました。
C++の勉強を開始した時期です。C言語にはクラスの概念が無かったので、C++を勉強し始めたときはクラスの概念をつかむのにも一苦労でした。
昨年(2011)の構造をC++で再実装してみようとしたのですが、途中で挫折してしまい、自分たちで分かる範囲で作った構造でC++で走らせることを目標にプログラム作りをすることにしました。
併せて、この月の支援で学習したクラス図・シーケンス図のマッピングの仕方をもとにオージス総研から頂いた演習問題もやりました。わからないこと(前方宣言と#includeの違いなど)も沢山あって大変でしたが、オージス総研の皆様とやり取りするために用意したメーリングリストで質問したり、書籍『やさしいC++』(著:高橋麻奈)を使って勉強しながら演習問題をクリアしていきました。
ここから本格的なモデリングの学習です。
モデリングの本質を理解して、自分たちのモデルをより良いものに作り変えるには、何が良くて何が悪いのかの基準を理解してもらうことが重要です。そこでモデルに求められることは何かを伝え、目指すべきモデルを具体的にイメージしてもらえるような教育を行いました。具体的には、モデル(設計図)の利用タイミングからモデルに求められる品質の観点(図2)を提示し、その観点をさらに具体的な評価項目に掘り下げました。そして、その評価項目をもとに前年度の優秀モデルを高校生と対話しながら一緒に評価を行いました。
|
図2. モデルの評価の観点 |
---|
優秀モデルはもちろん良い点が多いのですが、評価作業の中で問題点にも気づいてもらうようにしました。優秀モデルであってもまだまだ改善箇所があることを伝え、高校生たちの努力次第で入賞できる可能性があることを実感してもらいました。
昨年(2011)の優秀モデルの評価を自分たちで行いました。何が良いのか何が悪いのかがよく分かっていない時期でしたが、支援を通じてその頃の私たちでも良い点と悪い点を見つけることができました。
先月に続いて4月もクラス図からプログラムへ落とす勉強をやっていました。コーディング規約など、C++の概念やお作法の理解を深めることができた月でした。
そして、3月から作っていた自分たちで分かる範囲で作った構造をC++で実装し、走らせることができました。機能としてはライントレース、直進、旋回など乏しいものでしたが初めての言語で動かすことができ、感慨深いものがありました。部員と先生みんなで歓喜してた記憶があります。
C++でロボットを動かせるようになった後、4月の支援で学習したモデルの評価項目をもとに昨年の私たちのチームのモデルを自分たちで見直すことをし始めました。先輩たちがメインで書いたモデルでしたが、案外見なおすべき点が多いものでした。
4月に学習したモデルの評価項目を参考に高校生たちが昨年度のチャンピオンシップ大会のモデルを評価してきていたので、5月はその評価結果の確認を行いました。また、この確認を通じてクラス図におけるクラス間の関連を引くときの大事な視点を伝えました。関連はメッセージ呼び出しを意識して引くのではなく、クラス間の意味的なつながりを意識して静的な視点で引くこと。時間軸でモデルを揺さぶった際に、静的な視点で引いた関連の方がよりモデルが安定し、機能変更に対して強くなることを伝えました。
|
|
最後にモデリング対象の本質を構造的に捉える力を身に着けてもらうために、モデリングカフェのような身近にある題材をモデリングする練習を行いました。また、部活で練習できるようモデリングエクササイズの書籍を提供しました。
モデリングエクササイズの書籍を使って静的な視点でモデリングできるように練習をしました。オージス総研の皆様から習う際は、そこまで大変ではなくむしろ楽しいもので、物の見方が変わるようなものでした。しかし、実際に自分たちだけで考えて作ってみると、それは静的とは言えない何かができてしまい、何度もつまづいていました。特に、モデリングの対象の本質を見極める過程(一番大切)で何度もつまづいていました。
6月に入る前に astah* professional を導入しました。去年まで手書きとパワーポイントだけでUMLを書いていたので、作業効率が悪く、整合性も取りにくかった環境が、astah*の導入によって爆発的に向上しました。
6月からモデルの作り方の教育を開始しました。まずはモデルの背後にあるオブジェクト指向の考え方の教育からです。オブジェクト指向の世界は人間社会と類似していて、オブジェクト間のメッセージのやりとりで処理が進んでいくという基本的な考え方を最初に押さえてもらいました。その後にオブジェクト指向の重要概念であるカプセル化、継承、ポリモフィズムの意味とそのメリットを伝えました。概念的な説明だけだと十分に伝わらないと思っていたので、メッセージのやりとりや重要概念がC++でどのように実現されているのかを実際にプログラミングを通じて確認してもらうことで理解を深めてもらいました。
|
|
この日は、もう1つ要求分析に関する教育を行いました。ETロボコン向けの要求分析の作業に着手できるよう要求分析で考えべきことを伝えました。要求分析のゴールは「作るモノの仕様を明文化すること」であり、そのためには機能要件、非機能要件、制約の観点で整理する必要があること。それらの要求を洗い出すためには、まずシステムに関わりのある人を特定する必要があり、その人の関心事から具体的な要求が洗い出せることを伝えました。
|
ちなみに、この教育を通じて最終的に形になったのがモデルシートの1枚目に掲載されている利害関係者分析です。この時期から利害関係者として主催者、競技者、開発者を抽出し、3者の要求をマインドマップを使って深堀しはじめました。
今回は本格的なオブジェクト指向を学びました。プログラムは考えずにモデリングすることだけを意識するようにしていました。オブジェクト指向はプログラムの設計だけに使うものだと思っていたのですが、普段の生活(テレビやレストランなど)もオブジェクト指向でモデルにして表現することが出来て、衝撃的でした。
試走会が近づき、走行プログラムも作り始めないといけない時期になりました。しかし、新しく取り入れたC++でのプログラムは構造の設計に着手したばっかりだったので走行する状態ではありませんでした。
そこで使い慣れていたC言語でも走行プログラムの開発を行いました。予定ではベーシックコースのライントレースを倒立2輪走行で走破しようと考えていたのですが、機体の状態が悪く試走会当日まで倒立走行が不安定でした(グラグラふらついてた)。仕方なしに、試走会中に尻尾走行にチャレンジしたところ、あっさり走行させることができました。しっぽ走行は難しいと思い込んでいたので挑戦すらしていなかったのですが、やればできるということを実感しました。
後々に発覚したのですが、倒立走行ができなかった原因は車輪モーターの不具合でした。長年使っていたので劣化していたようです。機体の整備や点検は日々行った方がよいです。
先月に引き続きモデルの作り方の教育を行いました。弊社の分析モデリング実践コースの教材を用いてユースケース分析から構造分析、振る舞い分析までの進め方と各成果物について教え、踏み切り制御システムを題材にモデリングを実施してもらいました。ちなみに踏み切り制御システムを題材に選んだのは聖望学園高等学校の近くに踏み切りがあり、高校生にとって一番イメージがしやすいと思ったためです。
|
|
ユースケース図、ユースケース記述、クラス図、コミュニケーション図の成果物を順に作ってもらい、各成果物のどの部分とどの部分(例えば、クラス図の操作とコミュニケーション図のメッセージなど)で整合性をとる必要があるのかをレビューを通じて指導していきました。また、このタイミングで抽象度の高いクラスを抽出するためのテクニックも教えました。具体的にはユースケース記述の各ステップを抽象度を上げて記述し、各ステップから Where、What、Whom の観点でオブジェクトの候補を考える方法です。
分析モデルの作成後、設計モデルに落とし込み、そこから実装へつなげることを高校生には体験してもらいたかったのですが、ETロボコンのモデル提出まで時間がなかったので、モデルの作り方の教育は分析モデル作成までで終了することにしました。以降は、ETロボコンの分析モデルを作成してもらい、その分析モデルを使ってソースコードへ落とし込む方法を教えることに内容を変更しました。
本格的なモデルの作り方を勉強しました。今まで習ってきたものより圧倒的に難しかったことをよく覚えています。特に踏切制御システムにどのようなオブジェクトがあるかを考えるところで試行錯誤していました。
夏休みに入る前に要求分析が終わって、そろそろ本格的な開発に入ろうとした時期でした。構造も少しづつ形になってきた頃でしたが、まだ実装するには程遠かったです。この頃、本当に苦労したのはクラス間の関連名でした。今まで自分たちが処理のみを意識した設計しか行ってきたからかもしれませんが、静的視点で構造を作ることは簡単そうに見えて案外難しかったです。
走行プログラムのほうは、C言語ですが、ベーシックを安定して走行できるようになってきていました。なんとか順調に進んでいました。
地区大会のモデル提出まで1ヶ月を切りました。この日から高校生が作成しているETロボコンのモデルに対して本格的なレビューを開始しました。この段階の高校生が作成するクラス図は、まだ処理中心のクラスがいっぱいでした。動きではなく構造的な視点で捉えられるよう1つずつ指導していきました。
|
|
いきなりクラス図を作るのではなくオブジェクト図を書いて考えみようと伝え、結果を確認。多重度の誤りは修正されたが、構造的には大きく変わらず。今度は、オブジェクト図ではなくまず走行戦略を「区間」と「走法」と「終了条件」に分けて表としてまとめてみようと伝え、結果を確認。高校生たちが考えている戦略が表に示されるようになりました。その表からオブジェクト間の関係性としてどのように表現できるかを伝え、考えている走行戦略をすべてオブジェクト図に落としてもらい、そこからクラス図を導出してもらいました。
このような指導を通じて出来上がったのがチャンピオンシップ大会に提出したモデルの原型です。以降、レビューを通じてさらに洗練されていきました。
また、このタイミングで作成した分析のクラス図をもとにソースコードにどのように落とし込むのかの指導も行いました。
これまでオージス総研の皆様から基礎知識(?)を勉強していましたが、この月からは自分たちの成果物を発表し、それに対して議論を行うという形式で進めていくことになりました。
夏休みが始まったと同時に、本格的に開発が進んでいきました。クラス図もまだまだ精査が必要でしたが、少しづつ形になっていきました。
さらに手嶋さんが主催するETロボコンの東京連合に参加して、ドリフトターンの戦略についてディスカッションを行ったり、すねいるの吉田さんからBluetoothについて様々な技術(高校生にとって難解でした)を教えてもらったりして、視野が広がりました。
8月下旬に、とうとう設計が終わりました。しかし、北関東大会は10月7日・・・。はたして実装は間に合うのでしょうか。科学の妖精の運命やいかに。
高校生たちが設計を終え、モデルシートに反映し始めた段階です。出来上がっていたETロボコンの要求モデルやクラス図に対してレビューを行いました。例えば、要求を整理したマインドマップのモデルを見て「この2つの要求は粒度を意識して細分化できている?」と問いかけながら注意すべき点を指導していきました。また、モデルシートを作成する際に、各シートに何をどんなサイズで記述するかのレイアウトを最初に決めておくと作成しやすいなどのアドバイスも行いました。
|
ついに夏休みが終わってしまい、学校が始まって活動時間がいつもの半分以下になってしまいました。しかもこれからやることはastah*で作ったクラス図やシーケンス図をモデルシートに書いて提出することと、構造を実装して動かすことです。オージス総研の方からレイアウトについてのアドバイスをして頂けたので、モデルシート完成までの方向性は立っていました。実装はかなり時間がかかることで、正直間に合うか不安でした。
オブジェクト指向の考え方を組み込んだ構造でプログラムを動かすのはやったことがなく、わからないことだらけで、果たして間に合うのかどうかという不安でいっぱいでしたが、だいたい一週間ぐらいでクラス図からプログラムへ落とす作業は完了し、コンパイルもエラーなしで通るような状態までできました。
C++で実装する前にC言語でベーシック走行(IN・OUT)とドリフトターンのペットボトルを避けるプログラムは作ってあったのですが、ドリフトターンのペットボトルの位置によって進行方向を決めるプログラムとその他の難所のプログラムができていないのが問題として残っていました。
月1回の支援を原則としていましたが、地区大会のモデル提出までに間に合うか不安だったので、モデル提出前にも支援を行いました。高校生たちはモデルとプログラムの完成に向けてラストスパートしている段階。高校生がモデル作成担当とプログラム作成担当に分かれて活動していたので、我々も2グループに分かれてレビューやアドバイスを行いました。高校生が考えてきた内容について「この内容では伝わらない。何故そのように考えるのかを文章でしっかり説明する必要がある」と指摘する等、高校生と真剣な議論を交わしていたと思います。
また、このタイミングでタスク設計に関する個別指導も行いました。
|
|
支援翌日、無事にモデルを提出しました。
モデル提出後は、大会直前まで難所攻略のプログラムを作れるだけ作りました。北関東大会当日までのプログラムの状態は、
今このように振り返ると、未完成のものが多かったですね…(汗)
北関東大会当日は、非常に緊張していました。試走会の時と光量が違うということが予めわかっていたので、ちゃんとライントレースができるかどうかが非常に不安でした。本番前の試走の調整で全てが左右されるということを考えたら、手が震えるほどのものでした。
1回試走させたときは、ベーシックの第3カーブあたりで、脱線してしまいドキッとしましたが、PID制御のPゲイン値を変更したら上手くライントレースできてホッとしました。しかし、試走の段階ではうまくいっていた階段も本番では失敗してしまいました。やはり、何が起きるかがわかりません。ただ走るだけではなく、どんな時でもどんな環境でも動くソフトウェアを作らないといけないなと実感しました。
競技結果は前編にも掲載しましたが、競技部門:1位、モデル部門:エクセレントモデルで総合優勝という結果になりました。2011年の北関東地区大会では競技部門2位でしたので、完全優勝できてとても嬉しかったです。
しかし、ドリフトターンを決め撃ちで走行させてしまったことをETロボコンの実行委員長の星さんに怒られてしまいました(汗)。
チャンピオンシップ大会に向けての最後の支援。地区大会に提出したモデルに対する審査員の評価コメントと、地区大会までに対応できなかった残課題をインプットとしてモデルの改善支援を行いました。クラス図の多重度が妥当かどうかわからないという審査員のコメントがあったため、振る舞いの相互作用図をシーケンス図からコミュニケーション図に変更し、コミュニケーション図上でクラス図の多重度の妥当性を説明できるようにした方がわかりやすいといったアドバイスなどを行いました。
|
|
|
北関東地区大会で優勝したし、さて一休みと言いたいところですが、そんな暇はありません。主力である2年生(当時)は修学旅行(チャンピオンシップの2日前に帰宅)もあったので、部活に割ける時間が少なくなっていました。
モデルも指摘された点が多いし、プログラムも未完成の部分が多すぎるので、さらに忙しくなってきていました。まずドリフトターンのペットボトルの位置によって走路を分岐するという機能が実装されていなかったので、これを最優先で実装することにしました。構造から見なおしたので、他の難所と同時進行で作っていきました。
しかし、NXTの画面に「Data Abbort」と表示されてNXTが暴走するバグが発生してしまいました。この時の絶望感は口では言い表せないものでした。せっかく、チーム史上初の完走ができるようになってきているのに・・・。
インスタンスをたくさん作って難所を実装していったので、このバグはヒープ領域の枯渇によって起きたものだと思っていたのですが、oilファイルのタスクごとに割り振られているスタックサイズを変更したら暴走せずに動くようになりました。
プログラムの実装は修学旅行前日まで行なっていました。シーソーの成功率が少し低く、不安を残して修学旅行に行きました。
CS大会までにすべてのプログラムを完成させ、もしかしたら完走できるかもしれないという期待を胸に大会会場に到着。
試走時間になり、いざ走行させてみるとまったく走行しないトラブルに見舞われました。周りを見渡すと他のチームも同じような状態になっていました。どうやら原因は大会会場の照明のようでした。白と黒の輝度の差がほとんどなく、私たちはその環境に対応できず、まともに走行することができませんでした。この現実にめげそうになりましたが、なんとかベーシックコースを走れるようにしました。しかし、難所はまったく走行できませんでした。
本当にショックでしたが、どのような環境にも対応できるソフトウェアにしなければならないことを学びました。来年は、外乱光対策など、リスク対策の検討をしていかなければならないと感じました。
大会は非常に楽しく、いろいろな方と接することができ有意義な時間を過ごすことができました。来年参加する後輩たちに頑張ってもらい、来年もチャンピオンシップ大会に行ってもらいたいです。
最後に、高校生でここまでのモデルが書けるのは、部活の顧問の先生が専門家であるからと思われるかもしれませんが、そんなことはありません。顧問は植物を愛する生物教員です。部活動でC言語を始めたのは、ETロボコンに参加するにはC言語というものが必要らしいというのがきっかけです。当時の科学部の部長が「ちょっとやってみたら、案外いけそうです」という発言から始まり、書籍を購入し、ネットで調べ、サンプルプログラムをすこしだけ変化させるといことで、初めの大会を乗り切りました。モデルもすごく簡単なものでした。そこから数年かけて少しずつ改良し、ここまできました。
これから始めようと思っている方は、難しいと思わず、とにかく参加してみてください。いろいろな方が助言してくださるのでなんとかなります。そして、数年かけて上位を目指していけばよいと思います。
私たちはこれからも大会に参加していきます。ETロボコンでみなさまとお会いできること楽しみにしています。
ETロボコン2012への参加は2度目の参加でした。1度目の参加は、私たちが高校1年生の時のETロボコン2011で、プログラミングやモデルに対する知識がまったくと言っていいほどなく、大会用モデルのほんの一部を担当させてもらったくらいでした。しかし、先輩たちの奮闘のおかげで地区大会を競技部門2位、モデル部門1位、総合1位でチャンピオンシップ大会(以後CS大会)という大きな大会に参加できました。そのとき先輩たちを見てかっこいいなと思って、当時1年生だった部員たちと「今年は先輩たちにCS大会に連れてきてもらったけど来年は競技部門も含めたすべての部門で1位をとって先輩たちにCS大会に来ても らおう!」と約束しあい、「全部門1位」という目標をたてました。
しかし、2年生になって先輩方が引退し自分たちが部活を引っ張っていく時となっても、私を含め2年生全員のプログラミングやモデルの能力は素人同然でした。組み込みシステムのスペシャリストたちが凌ぎを削りあうETロボコンに出場するのに、このままでは全部門1位なんて到底無理だと、目標と自分の距離を改めて自覚するとともにとても焦ったのを今でも覚えています。それでもどうしても夢を諦めきれなかったので「もう本気でやるしかない」と思いました。それと同時に去年先輩方はどうしていたのだろうと前年について振り返ったところ、部員全員で1つの作業をやるのではなく、部員がそれぞれ自分の担当の箇所を決めて活動していたことを思い出しました。
さっそく全員で分担を決め、私はモデル全般の責任者になりました。そこからいろいろな人に教わりながら、顧問の先生に協力していただいて平日は毎日放課後から夜まで 、休日もみんなで集まって1日中悪戦苦闘しながらひたすら頑張りました。夏休みも含めて大会が終わるまで2年生の間はほとんど部活動をしなかった日がなかったです(笑)。たぶん他の何をする時間よりも前年の他チームのモデルを分析したり、モデルの参考書で記号の意味や用法を調べる時間の方が長かったです!
そんな中、本気で努力をすると結果はついてくるもので、集約やコンポジットなどの図に使用するマークの意味すらわからなかったのですが、意味や用法はもちろんのことどういったモデルがよいのかというポイントまでだんだん理解できるようになりました。最終的には過去の自分や他のメンバーが作ったモデルの良い点と悪い点や記号の用法ミスを素人ながらにも理由を付けて評価できるようになりました。しかし、それがやっとできるようになったのは大会のモデル提出日の直前で、本番に提出したモデルは提出日当日まで修正に修正を重ねて作りあげました。
そして運命の地区大会の日。去年の先輩達の背中を必死に追いかけ続けた1年間。その1年間の成果が試されているのかと思うと緊張で胸が張り裂けそうでした。大会中のことは緊張のあまり頭が真っ白でよく覚えていませんが、競技中ロボットが練習通りの動きをしてほっと胸をなでおろしました。
そして運命の結果発表・・・ 目標通り全部門で1位を獲得することができました。特にモデル部門においては自分が責任者だったので感激のあまり涙が出そうでした!その瞬間、1年生の時に部員たちと「来年は全部門で1位になって先輩たちにCS大会に来てもらおう」と話しあったときのことが頭に浮かびました。1年間の必死になって努力したことが報われたと思い、今までの人生で一番感動しました。
このETロボコンを通じて努力する素晴らしさや夢を追いかける喜び、そして叶えたときの達成感など、多くのことを学びました。これらはETロボコンだけではなく他のことにも通じることだと思うので、これからの自分の糧としていきたいです。
今は3年生になり受験勉強に勤しむ毎日ですが、学びたいことがまだまだたくさんあるので、無事受験を乗り越えたあと、またプログラミングやモデリングをしたいです。
私が「ETロボコン」という大会の存在を初めて知ったのは、高校1年生の夏休み前でした。夏休みから先輩たちの手伝いや難所のひとつであるET相撲のプログラミングをしましたが、基本的な作業だけでむずかしいことはすべて先輩たちが行っていました。
この年のETロボコン2011北関東大会において総合優勝し、CS大会出場が決定しました。この勝利は私を大きく変えました。「来年こそ、この場所に自力で」この想いを胸に来年の大会にむけてスタートしました。
いよいよ私たちが主力となる時期です。私はモデルを主に担当しました。私自身、モデル製作どころかモデルを正確に読むことさえままならない状態でしたが、試走会で審査員の方にモデルの評価やアドバイスを頂いたりしていくうちに、モデルは自己満足のものではなく誰が見ても理解できるように製作しなければならないことが分かりました。
モデルはプログラム製作の上で不可欠な設計図であり、モデルが正確でなければプログラムは出来ません。しかも膨大な量の記事を僅か数枚の用紙でまとめなければいけない。これは決して簡単な作業ではありません。しかし、モデルは走行するロボの姿からは読み取ることが出来ないプログラムの全てを示す場でもあります。モデル製作にあたってはメンバー全員で話し合い、この動作には何が必要なのか、それはどこの部分と関係があるのか、など何度も話し合いをして製作し、それが本当に正しいのか確認していきました。
おおまかな概要が完成した後は、それをベースにより正確なモデルを目指すために書き加えたり修正したり、見やすくするために色や文字に差をつけたりなど無数の作業がありました。ですが、日に日に成果は出てきているのは明確で、最初は全然読めなかったモデルもほぼ読めるように私はなっていました。
夏休みや秋休みを返上した活動は過酷で、迫ってくる大会までの日数におびえ、さらに見返すと白紙の宿題の山・・・・「逃げたい!!」と何度思ったことでしょう(笑)。ですが、そのかいあって満足でき、自慢できるモデルを作りあげることが出来たと思っています。プログラミングにおいても作業の休憩中にフィールド上をすいすいと走行するロボの姿に去年からの進歩を実感した記憶があります。
そして北関東大会当日、不安に思うメンバーが多くいるなか私は妙な自信がありました。「敗退するはずがない」、全力でメンバーと共に製作したからこそ思えたのだと思います。この大会の結果は全部門優勝という最高の形となって私たちは再びCS大会出場を果たすことができました。
私が初めてモデルに触れたのは高校一年でした。それまで、パソコン知識ですら素人同然でした。先輩方の作業の手伝いから始まり、本格的に取り組み始めたのは高校二年でした。オージス総研の方や大学生の方々などに休日に教わったりもしました。
モデルで悩んだのが、何を載せ、何を載せないかでした。モデルでは、載せたものが「本当に実現できるのか?」を示す必要があります。そのために繰り返し走行体を走らせて、実験を行い、収集したデータをまとめて、モデルへ載せなければいけません。ところが、モデルの用紙の空間には限りがあるため、何かを載せるためには何かを載せない。つまり、モデルに載せる内容の取捨選択が問われます。さらにその内容はそれぞれに関連性があり、筋の通ったものにし、実用性の高いものにする。最終的には「他人が見ても理解できるもの」にしなければなりませんでした。「載せなければ伝わらず、載せれば伝わりにくくなる。」「その図はいるのか、いらないのか。」「その文章はいるのか、いらないのか。」「字は大きいか、小さいか。」何も知らない人に伝えるのは、これほどまでに難しいのかと頭を悩ませたものです。最後の最後まで悩み続け、モデルにぎっしり内容を載せたのを覚えています。
最後に、これからもこの分野に携わるのかどうかはわかりません。しかしここで得たものは大きく、無駄ではないと実感できます。自分がこのことを通して得ることができたものはプログラムの知識、モデルの知識だけでは決してないからです。
私は今回の大会において、リーダーとして活動しました。1年生のころは本格的な設計や実装に携わっておらず、お手伝いだけでした。
今回リーダーとして携われたのは光栄です。前編にも書きましたが、今回私たちは新しいこと(C++、オブジェクト指向など)をたくさん学び、取り入れたので、ソフトウェア品質も向上したと思います。特に、オブジェクト指向によって構造が大変使いやすいものになりました。もちろん、それを実現するのは大変な道のりでしたが・・・。
モデルはある意味では開発を楽にするためにあると思いますが、楽をするのも楽ではなかったです。構造が大変使いやすいものになった証拠として、プログラミング初心者である1年生の小泉くんが2つの難所の走行プログラミングを完成させてくれました。
それと、プログラミングやモデリングももちろん難しいものでしたが、メンバーをまとめることの難しさを学びました。プログラミング初心者の1年生もいましたので、プログラミングやモデリングを教えながらの開発は想像していたよりも大変でした。
このように、ETロボコンを通じてモデリングやプログラミングだけでなくチームで活動したり、後輩への教育も体験できました。大学や就職後もこの大会を通じての体験は絶対に活かしていきたいと思います。
私は今回のETロボコンが初めての大会でした。私は右も左もわからない状態でしたが、先輩方から色々なアドバイスをもらったり、意見を出しあったり、試行錯誤して大会に臨みました。
特に私が大変だったのは、モデルとプログラムのエラーです。モデルは、最初は何を書いてあるかさっぱりわかりませんでしたが、やっていくうちにわかるようになり、今ではモデルを使ってプログラムを書くことができるようになりました。プログラムは必ずといっていいほどエラーが起こり、修正するのに時間がかかりました。
今回の大会は、先輩メインだったため1年生であった私は手伝い程度しか出来ませんでした。しかし、先輩方がくれた貴重な経験や反省を生かし、2013年度のETロボコンでも頑張っていきたいと思います。
私達科学部がETロボコンに初めて参加したしたのは2008年でした。その当時はC言語もモデリングもまったく未知の存在でした。それから5年たちチャンピオンシップ大会に参加できるまで成長してきました。参加当初はここまで成長できるとはまったく思ってなく、企業の方々が本気になっている姿を生徒たちにみせることで、自分たちの活動が将来にもつながっていくということを分かってもらうことが大会参加の目的でした。
私たちのチームは5年かかってここまできましたが、高校生チームなのでメンバーは毎年入れ替わります。そのため技術の引き継ぎが重要になります。3年生は受験勉強で早々に部活を引退してしまうので、大会には1、2年生が参加します。2年生がパソコンも使ったことがない1年生を指導して1年間でそこそこの状態まで育て上げることを毎年繰り返し技術を引き継いでいます。また、2年生は新しい技術を1つ取り入れることを目標にして、毎年進化していきます。
今回は、C言語からC++に変更し、オブジェクト指向を取り入れました。このようにして、毎年少しずつ成長してきました。部活の顧問としての私の役目は、とことん生徒に付き合って、じっくり何度も基本的なことを教えたり、議論したり、エラーを探したり、専門書をともに調べたりと生徒だけではめげてしまいそうなことをサポートすることです。生徒たちを成長させるには、生徒のモチベーションが重要です。そのため顧問として、夢を見させてじっくりサポートすることが必要と常々感じています。
今回はオージス総研の方々から支援を受け、基本的なことから教わり、また、C++への挑戦と初めてのことばかりで、大変でした。けれども生徒たちはよく学んでくれ、成果を上げてくれました。生徒たちが今後の人生で役立ててくれると期待しています。
高校生達はとてもパワフルで、朝から夕方までいるだけで、いつもへとへとになっていました。 座学が少し多かったかな、全員が理解するには一日じゃ足りないなと悩むこともありましたが、 みんな自主的に調べたりと、教えられるだけにならずに進めることができたんじゃないかと思います。
印象的だったことは、野口君が石川君の書いたソースコードを読むことに苦労していたこと。 インデントがなくてどこまでがif文の中身なのか、この変数は何に使われているのか…わからなくなっていたようです。 複数人で開発する大変さも実感できたんじゃないかな、と感慨深く思いました。 私も仕事中に気をつけないと、と色々省みる機会もありました。
ちょっと大変で、楽しいETロボコン参加となりました。今年も、チャンピオンシップ大会目指して頑張りましょう。
「科学の妖精」チームと最初に出会ったのは、ETロボコン2011チャンピオンシップ大会後の懇親会でした。その出会いをキッカケに支援を始め、約1年半が経ちます。
当初、高校生がオブジェクト指向を使いこなせるかどうかは未知数でしたが、彼らの頑張りや、先生方の手厚いサポートもあり、今では自力でモデリングやプログラミングできるメンバが出てくる程に成長しています。「地区大会2連覇」という結果も高校生としては快挙です。
今後もその活躍を通して、ETロボコンや組み込み業界に良い刺激を与えていってください。そして、高校生にもオブジェクト指向が広まっていくと良いですね。
若手育成の活動として、今まで「大学」生に対する技術支援は実施したことがありましたが、「高校」生に対する技術支援は今回が初めてであり、私にとって貴重な経験になりました。
当初は若い彼らに専門的な言葉が通じるか等、多少の不安がありましたが、いざ支援を始めてみると、まったくの杞憂に終わりました。専門分野の難解な技術であっても、素直に学ぶ姿勢や持ち前のガッツにより、彼らは柔軟に内容を解釈し習得しました。また担任の永澤先生の適切な指導により、彼らは最後までモチベーションを維持し、活動してくれました。結果的には、社会人エンジニアに対する支援と同レベルの、充実した支援活動が実現できたと思っています。
全国大会では残念ながら、彼らを優勝に導くことは出来ませんでした。しかし彼らが経験した今回の活動は、将来どのような仕事をする上でも、何らかの形で役に立つと思います。今後も、更なるスキルアップを目指して頑張ってほしいと思います。
短い期間でしたが、貴重な経験をさせていただき、ありがとうございました。
高校生が活躍することで組み込み業界を盛り上げたい、そんな思いをもって高校生への技術支援を行いました。
普段、企業のエンジニアの方々にオブジェクト指向やモデリングを教える仕事をしていますが、高校生は初めてです。 どんな言葉を使ったら伝わるのかまったく想像できなかったのでどう関わるべきかで悩みましたが、高校生に教えるというよりも、高校生から教わろうという気持ちで臨むことにしました。
仕事では「何をするのか」、「何故そうするのか」ということを大事に教えていますが、この支援期間は「具体的にどうするのか」という点で考えさせられることが多かったように思います。特に要求(要求モデル)や構造(クラス図)の導出の考え方を伝えることに苦労しました。
高校生の「これ何ですか?」という率直な質問、一生懸命伝えた後の高校生たちのポカンとした反応、想定範囲外のアウトプット、支援の中での高校生たちの発言・振る舞いすべてが自分の学びにつながったと思います。仕事にも役立つ非常によい経験をさせていただきました。
高校生の頃からプログラミングを行っている方にはたまに出会いますが、モデリングを行ってチーム開発を行っているケースは少ないと思います。これを機に高校生たちにモデリングやオブジェクト指向が普及し、将来の組み込み業界を支えるエンジニアが出現すればうれしく思います。
今回、弊社トレーニングサービスの教育教材を用いてボランティアとして高校生に教育することを許可してくださったオージス総研に感謝します。
© 2013 OGIS-RI Co., Ltd. |
|