ObjectSquare [2005 年 8 月号]

[レポート]


ETロボコン参戦記

Two Weeks


私たちTwo Weeks(@オージス総研・組み込みソリューション部)は、今年入社の新人5人でETロボコン2005に挑みました。悩み、苦しみ、楽しんだ日々を振り返り、チーム結成の日から大会当日までの20日間を参戦記としてまとめます。


◇クリックすると動画で確認できます◇

はじめに

思い返せば、6月13日。新人として配属されたその日にETロボコンへ出場することを言い渡されました。しかし、その時点でレース本番まではあと20日!コンセプトモデル提出にいたっては残り10日!!かなりのハードスケジュールでしたが、なんといっても配属後の初めての仕事、下手な結果は出せません。休日も返上で作業が続きます。
そして、何度となく襲いかかってくるトラブルも、メンバ一丸となってナントカ乗り切りました。苦心の末に“丸太バック走行”なる大技も開発し、あとは本番を待つばかり。さあ果たして、Two Weeksはみごと丸太バック走行を成功させ、喝采を浴びることができるのか!

丸太走行、本番でも成功なるか?

1.ETロボコンって何?

ETロボコン2005

ETロボコン(ETソフトウェアデザインロボットコンテスト)は今年で4回目を迎える大会で、組み込みソフトウェア分野でのUML技術の普及と教育を目的に開催されています。
大会では、規定の走行ロボットでレースを行い、開発を通じて作成したUMLモデルの美しさ(モデリング部門)とレースでのタイムの速さ(タイム部門)の2つの部門を競います。 使用するロボット(以下、パスファインダー)は、レゴマインドストーム(LEGO Mindstorms)でつくられており、黒テープで描かれたコースをトレースしながら走行します。パスファインダーは各チーム同じ構造のものが使われ、改造は許されません。つまりはハードウェアでは差はつかず、ソフトウェア(特にモデリング)にフォーカスした大会ルールとなっています。

<モデリング部門>

審査内容は以下の4点です。

<タイム部門>

レース内容は以下の通りです。

2.開発スケジュール

開発スケジュール
◇開発スケジュール◇

3.モデル作成

<モデリングの開始>

モデルに対して掲げたTwo Weeksの目標はエクセレントモデルの獲得!
しかし、私たちにはモデリング経験がほとんどありません。そのため他のチームに対抗するには経験不足を逆手に取った斬新さだけが頼りです。新入社員研修で学んだことをベースにしつつ、頭の中では、観客や審査委員の注目を集めるモデル探しに必死。また、分析作業はメンバ全員が納得しないと先へ進まない(進めない?)完全なる全員参加型で行われ、時には火花が散ったことも。

モデリング風景

以下提出したクラス図です↓
走行方法を切り替えながら走行できるようにしました。また、デバイスに依存するもの・依存しないものを切り離すよう心がけています。

提出したクラス図
◇提出したクラス図◇

<丸太バック走行の誕生!!>

モデリングも中盤に差し掛かった頃、私たちは悩んでいました。モデリングの作業自体は順調なものの、モデル自体のオリジナリティが決定的に欠けていたのです。せっかくの機会、モデルに何か驚くようなアイデアを盛り込みたいのですが・・
そんな時、誰かが発した何気ない一言、「バック走行なんてどう?」
私たちはワラをすがる思いで、それを試しました。丸太の前にパスファインダーを設置、RUNボタンオン・・・、「ゴトッ、ゴト、ゴト・・・」とっ、とっ、通った。すんなりいくではありませんか!丸太を完璧に突破でき、かつ注目を集める荒技。そうついに、“丸太バック走行”が誕生したのです!!

以下、丸太バック走行のアルゴリズムを示したステートマシン図 & 映像です↓
丸太の手前で方向転換し、バックで勢いよく丸太を超えていきます。

丸太バック走行のステートマシン図
◇丸太バック走行のステートマシン図◇


◇クリックすると動画で確認できます◇

↓「日本の組み込み情報」に丸太バック走行の映像が掲載されました!!
ETソフトウェアデザインロボコン見学報告(※ビデオ映像のところです)

<そして暴走へ、、>

モデル提出まで残り数日。丸太バック走行でオリジナリティを盛り込んだ(?)私たちに残る課題。それは、約50チームもの提出資料の中でいかに目立ち、審査委員の注目を集めるかです。メンバ全員疲れからくるハイテンションの中、話し合いは弾みます。
「メタファ使うといいらしいよ。」
「でも~、アリとかじゃ前に使われたことあるからインパクトに欠けるよねえ。」
「じゃー似たようなので、金形警部がルパソの足跡をたどってるっていうのは?」
「あー!それなら絶対ウケる!!」

もはやそこに誰も止める人はいませんでした・・
メタファをおもしろくすることでウケを狙おうとしたのです。モデルの洗練度で審査するという大会のルールを忘れた私たち。その後の私たちの暴走は最後まで止まることはありませんでした。

暴走したメタファー
◇暴走したメタファー◇
(ルパソの絵を描くだけで丸一日使いました・・)

4.コーディング開始

<マルチプロセスによる実装>

(勢い任せで作成した)モデルの提出も終わり、大会当日まで残り一週間です。あとは実装あるのみのはずですが、ここでまたも問題が発生します。なんとっ、私たちメンバの中にC++実装経験者が一人もいなかったのです!
私たちは話し合いました。モデルを無視してコーディングオンリーでいくのか、モデルからコーディングへ落とし込んでいくのか。
コーディングだけなら提供されているAPIを適当に組み合わせれば何とかなり、C++に詳しくない私たちでも何とかなるハズ。(でもロボコンに研修として参加してるのにモデリング全く無視っていうのもなぁ。かといってモデルドリブンだと、まず設計モデルに落として、コードジェネレータ使って、コーディングして・・・。ホントに一週間で終わるのかあ?)

悩んで悩んで決断しました。「どっちもやって間に合った方で大会に出よう!」っと。
トップダウンとボトムアップの‘マルチなプロセス開発’。う~ん、なんて斬新!! 

【トップダウンな開発】

ミッション:

最終的にボトムアップ班との結合を行うことを目標に頑張りました。
実際は、トップダウンとは言いつつも動くことを確認しながらの設計モデル作成(設計モデル→Age→コーディング→テストを繰り返しながら開発)。今考えてみると、コードジェネレータにスケルトンコードを吐かせるために設計モデルを作成していた感が強かったです。結果、なんとか走行できる状態にまでは持っていけたものの、漆黒線判定のあたりでボトムアップ班とうまく結合できませんでした。

【ボトムアップな開発】

ミッション:

コースごとの目標を掲げ、担当2人が分担して開発しました。
2人とも動作アルゴリズムのコーディングは早々に書き上げました(構造化プログラミングで・・)。が、漆黒線判定に作業を移したところでハマりました。安定的に漆黒線を感知するアルゴリズムができないのです。結局、残り一週間の大半がここに費やされることとなりました。しかし何とか粘って、最終的には自前のコースで9割近い成功率まで持っていき、また、丸太バック走行の方も問題ない程度にまで仕上げることができました。
※トップダウン・ボトムアップ開発の統合ですが、最後は時間的制約からボトムアップ開発のコードのみを利用しました。(残念ながらトップダウンで開発したコードは今回は使われずじまい・・)

さてさて当日はどうなることやら。

5.いよいよ大会当日

図1

2005年7月2日、ついにETソフトウェアデザインロボットコンテストが開催されました。会場は、あの「踊る大捜査線」のロケ地にもなっていた(株)内田洋行さんの潮見オフィスです。とても開放的でオシャレな場所でした。しかしその日は大会当日。過去最多の49チームが参加していることもあり、会場は終始、異様な熱気で満ちていました。

<試走>

開会式の後、レース本番に先立ち各チーム3分間×2回の試走時間が与えられました。実コースを使った最後の調整機会ということで、各チームとも調整に余念がなく、控え室は緊迫感で張り詰めています。そんな中、我がチームTwo Weeksも短い時間を有効に使うためインコース、アウトコースの合計2台のパスファインダーで試走に臨みました。

【1回目の試走】

まず、インコースの調整では、丸太バック走行の全貌は封印し、単純な漆黒線の感知や時間制御の調整だけに留めました。そして、丸太バック走行の肝であるステアリングの角度やモータの強さは、これまでの経験を生かして調整することにしました。
また、アウトコースの調整では、スピードを出しつつ漆黒線を感知することが求められ、走るスピードと漆黒線感知の精度との間で妥協点を見つけることが目的でした。

ところが、、、イン・アウトコースともに全く漆黒線の感知が安定しません!!昨日までのテストでは9割以上の精度を保っていたはずなのに・・・

おそらく、当日のコースで使用された黒テープの反射率が予想以上に低かったこと、そして練習中にはなかった太陽光(会場の開放感が災いしました)が原因でしょう。こうして一回目の試走は過ぎていき、あとには焦りだけが残ったのです。

【2回目の試走】

1回目の試走結果を踏まえ、2回目の試走ではパスファインダーの速度をかなり落として臨みます。これで漆黒線感知の精度が上がるはずです。速度を落とした時点で上位進出は狙えませんが、そこはやはり“記録より記憶”。観客のみなさんの歓声だけを夢みて、丸太バック走行にすべてを賭けます。

ところが、、、、またも漆黒線の感知が安定しません!!!

どうも黒テープを漆黒線と認識しているようでした。良い解決策も見つからないまま二回目の試走も終了し、一回目の試走時よりもさらに大きな焦りに襲われました。かなり危険な状況ですが、残りの時間、必死の思いで最終チューニング!
なんとか完走だけでもしてもらいたいのですが…

<レース本番>

【1回目:アウトコース】

いよいよ第1回目の走行が始まりました。
なんといきなりFF宮ノ台さんが43:44の好タイム!焦ります。しかしその後は完走するチームが少なく、コースアウトの連続です。タイムも上がってきません。
試走会で35秒を切ったチームも本番ではうまくいってないようで、最終走者である私たちTwo Weeksの時点でも依然FF宮ノ台さんがトップタイム。
こうなると人間、欲が出てきます。「もしかしたらトップも狙えるかもしれない」、そんな誘惑に負け、試走もうまくいってないのにスピードをコーナリング可能な上限値まで上げることにしました。

そしてスタートの時。

震える指でなんとかボタンを押し、いざスタート!!
出だしは好調、1、2コーナーを快調に突き進んでいきます。これならいいタイムが出るかもしれません。
がしかし、悪魔の漆黒線!!! 感知せず・・・
感知しなくても走りきってくれ!という願いも空しくコースオフ、そして逆走。No Time・・無念です。

逆走しようとするパスファインダー
逆走しようとするパスファインダー

【2回目:インコース】

もうタイムでの上位進出はなくなりましたが、まだTwo Weeksには丸太バック走行があります。
ほとんどのチームがチャレンジしてない丸太近道を、大技「丸太バック走行」で攻略し、大いに会場を沸かせようではありませんか!

そう意気込んで迎えた第2回目の走行。私たちには秘策がありました。
実は、インコースの漆黒線感知に、失敗したアウトコースとは異なるアルゴリズムを使っていたのです。さらに漆黒線の手前で減速し確実に漆黒線を捉えるという方法もとっていました。これならいける!!

そして2回目のスタート。

Two Weeksの運命を乗せ、パスファインダーGO!!
アウトコースの時と同様、見事スタートダッシュを決め、飛ばします。
そして漆黒線の手前で減速。
じわじわと進みながら漆黒線を探すパスファインダー、ドキドキの瞬間です!!
が… あれ? 何事も無かったかのように漆黒線上を通過していくパスファインダー。丸太に引っかかるパスファインダー。。係員に取り上げられるパスファインダー。。。
またもや無念です。

係員に取り上げられるパスファインダー
係員に取り上げられるパスファインダー

結局、Two Weeksは見せ場を作ることなく2回ともリタイアに終わってしまいました。

6.ETロボコンを振り返って

うまくいった点、うまくいかなかった点に分け、分析してみたいと思います。

<モデル部門>

【うまくいった点】

視覚的にわかりやすいモデルとの評価を受けました。

<分析>
モデルのクラスやオブジェクトをカラフルにしたことが良かったのだと思います。

【うまくいかなかった点】

メタファの意味がわからないと言われてしまいました。

 <分析>
メタファはシンプルなものにするべきです。
メタファはあくまでモデリング対象を現実世界のわかりやすい例に置き換え、メンバ間の意識を共通化するためのもの。決して、ウケ狙いに使うものではありません。(自責の念を込めて、、)

【うまくいかなかった点】

提出したクラス図に属性・操作を入れなかったため、クラスの存在意義などを伝えきれませんでした。

<分析>
今回本文では触れていませんが、私たちはモデル部門で提出したクラス図に属性・操作を入れませんでした。それは見やすさを優先してあえて入れなかったのですが、それが逆効果となりました。やはりクラスの存在意義や役割を第3者に伝えるために、属性・操作は入れたほうが良いようです。

<タイム部門>

【うまくいった点】

大技で注目されました。(失敗はしたけれど・・)

<分析>
完全な主観ですが、大技は入れたほうがいいと思います。
例え本番で失敗しても、チャレンジするだけで少し注目されますし・・

【うまくいかなかった点】

漆黒線感知アルゴリズムが正常作動しませんでした。

<分析>
できるだけハードウェアに依存しないアルゴリズムを考える必要があります。
正直、大会当日の2回×3分間の調整時間内でパラメータ調整を完成させることはかなり難しいです。黒テープの光センサー値が予想外に低くかったり、発泡スチロールとタイヤとの摩擦力が高かったり(←ステアリングの回転角度が狭まります)します。私たち自身、答えは出せていませんが、ソフトウェアで動的に変化させる部分の割合を増やす必要があると考えています。

7.感想

以下、ETロボコン2005を終えてのメンバの感想です。

<畔上>

今回の研修を通して、グループワークの難しさを知りました。しかしそれと同時に、他の人の意見を聞くことで、新たな発想に出会え多くの刺激が得られました。限られた時間、かつ決して余裕のない期限付きだったので、集中しモチベーション高く取り組めました。これからの社会人生活に生かしていきたいです。

<小田>

今回は新人研修の一環としてトータルで3週間という短い期間でのプロジェクトでしたが、さまざまな条件、状況にあわせた開発を行うことの難しさを痛感した大会だったと思います。ぜひ、上位完走チームのプログラムがどういうふうに作られていたのか今後の参考に一度見てみたいですね。

<手嶋>

丸太バック走行の開発担当として、本番での失敗はショックでした。ただチャレンジしてこその人生、後悔はしてません。次回こそは更なる大技をひっさげて会場を沸かせてみせます!

<時岡>

レース結果もモデルの評価も期待通りには行きませんでしたが、分析から実装まで一通りの流れを楽しみながら体験できました。そして、ハードウェアを制御することの難しく泥臭い一面をまざまざと見せつけられました。これもまた良い収穫です。

<藤野>

今回のETロボコンは、モデル部門では絶対一位をとると目標を掲げたもののトップ10にも入らなかったし、走行部門ではみんなを期待させたバック走行を披露することができず悔しさしか残らない大会でした。しかし、研修という観点からみると、UMLモデルを作成する一連の流れ、UMLモデルから実装に落とす技術等を学ぶことができ、実りの多い大会でした。


以上、ETロボコン奮闘レポートでした。

長々と駄文に付き合っていただきありがとうございます。この記事を読んで、ちょっとでもETロボコンに興味を持っていただけたら幸いです。また、もしこの記事がもとでETロボコンに参加される方がいらしたなら、これ以上の喜びはありません。その時はともに良きライバルとしてがんばりましょう!

それでは最後に、ETロボコン関係者のみなさまへの感謝と、これからの組み込みソフトウェア分野の発展を願って!! 

ヨーーオッ、ポン!

図1


©2005 OGIS-RI Co., Ltd.
Prev Index
Prev. Index