ObjectSquare [2008 年 10 月号]

[レポート]


ETロボコン2008 参戦記

芝浦雑伎団

目次

  1. はじめに
  2. 開発の流れ・スケジュール
  3. クラスの責務をしっかり考えたモデル
  4. インスタンス生成に悩まされた実装
  5. うまくはいかない試走会
  6. 関東大会当日!
  7. おわりに

1.はじめに

芝浦雑技団は、グーパーによる運命のメンバー決定会の結果、4人のメンバーが決定されました。

C++、モデリングは研修でしか経験していない4人です。新人研修の一環で今回のロボコンに参加しました。

例年は研修開始から大会まで2週間程しか猶予がないということですが、今年は2ヶ月半の期間がありました。「これだけ時間があるのだから、結果を出せよ」というプレッシャーを受けながら、私たちのロボコンプロジェクトは開始しました。

2. 開発の流れ・スケジュール

配属 → C&C++研修 → h8を使った演習 → ETロボコンに向けた活動開始!

サンプルコード解読 → 第一回試走会 → モデル制作 →

実装&モデル修正 → 第二回試走会 → 実装&モデル修正 →

群馬大会用コースを借りて試走 → 実装、実寸大コース印刷&貼り合わせ → 関東大会!

3. クラスの責務をしっかり考えたモデル

ETロボコンはモデル審査と競技部門に分かれています。ここでは、提出したモデルについて説明します。

提出したモデル図(PDFファイル 約8MB ※ブラウザで表示されない場合は、ダウンロードしてご覧ください。)

(1) モデル重視のコンセプト

今回の参戦に当たって、チーム内で「モデルを作ってから実装始めよう」「コードに修正入れるときはまずモデルを直してから」というコンセプトを決めました。

そのため、モデルはかなり気合を入れました。1週間会議室に詰め、モデルについて延々と話し合ったのは良い思い出です。(←二度とやりたくない)

以下が、分析クラス図です。

(2) 提出したモデル図

(3) 芝浦雑技団、注目箇所

コースをより早く走るためには、場所によって適した走り方をする事が必要です。そこで、コースをカーブ・直線・難所に分けて考える事にしました。区間クラスを作り、その場にあった走り方に切り替えながら走行するという戦略です。

コースクラス・区間クラスの特徴

・ コースが持つ区間の並び順を変えれば、簡単に経路を変えられる

・ 各区間にあわせた走り方に切り替えられる

・ グレーマーカーが無い区間ではグレー判定機能をオフに。グレーの誤検出を避ける

区間クラスの導入を売りにして提出用のモデルを作成しました。モデルを作るときもコース・区間を中心に、各クラスの責務を考えています。

4. インスタンス生成に悩まされた実装

分析・設計が終了して、いよいよ実装です。 メンバー4人で、初期設定、色判定、基本走行、リカバリ、難所などの機能ごとに作業を分担して、その機能で必要となるクラスをC++で実装していきました。このとき、 まずセンサやモータなどの物理的なデバイスを制御するハードウェアクラスから各自実装を進め、続いてそれらを使うクラスといったようにボトムアップにクラスを実装していきました。また、1つのクラスが完了するごとにテストケースを洗い出し、単体テストを実施し、早期にバグを発見することに努めました。

実装で苦労した点は2点です。1点目は、各自で実装したクラスを結合し、実機でテストしたときのバグです。「newしているのに、deleteしてない」といったミスが複数あり、何度もOSを飛ばしてしまいました。2点目は、走行のための各パラメタの調整です。理論的に間違いないと思ったアルゴリズムでも、いざ実装してみると理論通りに動いてくれないことが多々ありました。このため、走行中の光センサ値のログを収集・解析するなどして、何度もテスト・検証を繰り返し、パラメタの調整を行いました。

5. うまくはいかない試走会

関東大会本番までに試走会が2回行われました。参加者にとっては、本番と同じコースを使って走行テストができる貴重な機会となります。

第1回試走会(7月27日(日))

この時点では、まだモデルができておらず、事前に提供されているサンプルプログラムに少し修正を加えたもので参加しました。ここでは、カーブなどでコースアウトせずに安定して走るためには、ステアリングを素早く切ることが必要であることを確認できました。

第2回試走会(8月31日(日))

前回と異なり、モデルを作り、それに基づく実装に十分に時間をかけたはずでしたが、コース全体を1度も完走できませんでした。このため、事前に予定していたテストをほとんど行うことなく試走会を終えることになりました。そして、ここから本番まで、その原因究明と必死の調整が続くことになります…。

6. 関東大会当日!

私たちのチームは関東大会初日の9月13日(土)に出場しました。メンバー全員の努力の甲斐あって、走行全体の安定性は増し、コースアウトの不安は無くなりましたが、依然、区間の切り替えやツインループ、グレー判定には不安を残したまま本番を迎えることとなりました。

試走

本番前に2度の試走(15分)の機会が与えられました。ここで、坂道前のマーカをうまく判定できないことがあるという恐れていた事態が発生しました。また、試走車が多かったこともあり、ツインループに関して予定していた調整を十分に行うことができませんでした。

本番

開会式も終り、いよいよ本番がスタートしました。私たちのチームは第15レースに出走でした。出番までに他チームの走りを見ましたが、40秒に迫るようなタイムで高速に走り抜けるチームや軽々とツインループや新ショートカットをクリアするチームが続出し、レベルの高さを実感しました。

1回目のレースはインコース走行でした。ここでは、直前まで迷いましたが、不安要素を抱えながらも、悔いを残さないように、思い切って難所であるツインループに挑戦することを決意しました。スタートして順調に走り始めるパスファインダー。そして、入口手前でしっかりスピードを落としツインループ突入成功です。しかし、第1ループ進入を失敗、そして、第2ループ進入時にコースアウト。リカバリが発動するもパスファインダーはコースに復帰することはありませんでした。ある程度コースアウトは覚悟していましたが、ショックでした。そのいくらかのショックを引きずりながら、2回目のアウトコース走行を迎えました。アウトコースは難所(新ショートカット)を走らずに、最後にゴール後停止をビシッと決めるという戦略で臨みました。不安があった坂道前のマーカ付近では祈るように見ていましたが、無事完走しゴール後停止も決めることができ、大満足の走りでした。

表彰式

競技終了後には、競技部門、モデル部門、そして両者を合わせた総合成績の発表・表彰がありました。ここで、なんと私たちの芝浦雑伎団がモデル部門でゴールドモデル(2位)を受賞することができました。競技でうまくいかなかった分、メンバー全員大喜びでした。ちなみち、あとで審査員の方に伺ったところ、総合では6位で惜しくもチャンピオンシップ大会への出場を逃したとのことでした。(やはり、ツインループの失敗が悔やまれます)

7. おわりに

第2回試走会前はモデル制作に時間をかけすぎ、実装が遅れていました。2回目の試走会後はあまりの惨走に開場下のカフェで落ち込んだものです。今回のロボコンではいかにスケジュール管理をするか、ということが課題として残りました。

また、ミリ秒単位の細かなパラメータ設定が行われる中、大会前日に方向制御用のモータが壊れるというアクシデントにも見舞われました。その他色々な点でハード依存する組み込み技術には悩まされました。

それでも結果は堂々のゴールドモデル賞(モデル部門2位)!大変な事、反省する事はたくさんありましたが、色々と勉強になり成果も残せました。

こうやってモデル賞が取れたのは、モデル作成にとことんこだわって、丁寧にモデルを書いたからだと思います。

最初に考えた、「場所によって最適な走りを実現できるか?」を正確にモデルで表現することで、モデルと設計思想の整合性が取れた点は良かったと思います。

モデル図作成に当たっても、分かりやすくしようと頑張りました。締め切りぎりぎりまでねばって、分かりやすい図を入れよう!構成はこれで良いのか?ここはもっと目立たせた方が・・・と修正を繰り返しました。

以下、個人の感想で締めます。

上保:チームでの制作の難しさを感じました。ですが、色々な人の意見を聞きながら一つのものを完成させる作業はとても面白かったです。会議の進め方なども勉強にもなりました。

清水:モデリングや実装などで技術的にも多くのことを学びましたが、最も難しさを感じ、そして、学ぶことが多かったのが、スケジュールの立て方や会議の進め方、チームでの仕事の進め方などのビジネスパーソンとしての基本的な事項でした。今後は、この活動を通して得られた経験を、実務に生かしていきたいと思います。

中村:プログラムの経験はありましたが、ハード制御を行ったのは初めてでいろいろ楽しく学べました。組み込み開発の恐ろしさの片鱗を見た気がします。

赤尾:今年は勝つ気だったのでチャンピオンシップに進めず本当に残念でした。しかし力を入れたモデル部門で、賞がもらえてとてもうれしかったです。またロボコン参戦を通して上流工程の重要さを改めて勉強できました。チームメンバーに恵まれてよかったです。


© 2008 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP INDEX INDEX