ObjectSquare [2008 年 10 月号]

[レポート]


ETロボコン2008 参戦記

 

☆☆☆田町雑伎団☆☆☆

0.目次

  1. はじめに
  2. 開発の流れ・スケジュール
  3. モデル作成 ~ 開発しやすいモデルを意識 ~
  4. 実装 ~ 単なる実装からモデルベース開発へ ~
  5. 試走会
  6. 関東大会当日
  7. おわりに

1.はじめに

私たち「田町雑伎団」は、血液型O型が実権を握るややざっくりとした、 "組み込みド素人の5人"で構成されたやんちゃなチームでした。

一週間前にはC++を初めて学び、3日前にはLEDが光っただけでお祭り騒ぎをしていた、 こよなくコーヒーを愛す(カフェイン中毒)、脱線大好きな大馬鹿ヤロウたちです。  

また、この組み込み新人教育の恒例イベントとなりつつあるETロボコン出場ですが、私たちはたった2週間の猶予しかもらえなかった先輩たちに比べ、 2ヶ月半という多大な時間を頂き、一部からは「こんなに時間あんだから…。」なーんて、プレッシャーがあったことも付け加えておきましょう。  

では、こんなプレッシャーはなんのその、引越し休みや夏休みなど休みもガッツリ頂きながらも、凹んだり喜んだりしながら、 結果(関東大会総合2位でチャンピオンシップ出場)を出した生きるレジェンド「田町雑伎団」の波乱万丈な参戦記を乞うご期待…。

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

【2008年7月10日(木)ETロボコン開発 スタート!】

2週間後に控えた試走会に向けて、とにかく実装を開始。

サンプルプログラムをもとに、ほぼMain文の中でライントレースの仕組みを書いてしまうというC++で書いている意味なーぃ!状況でした。 今考えると・・・無謀。

【2008年7月27日(日) 第1回 試走会】

どんな雰囲気なのか。ちゃんと走ってくれるのか。という不安を抱えつつ、挑んだ初の試走会。

詳細は・・・試走会のページにて!

【第1回 試走会終了後  モデルベース開発 本格スタート!】

試走会の振り返り(KPT)を活かし、(まじめに)計画的な開発スケジュールを検討。

・ モデリングによる要求分析・分析・設計を行い、実装という流れに沿って開発を進める。

また、開発における環境整理も同時に検討・実施。

・ チーム開発の進め方を学ぶ。

・ Subversionによるバージョン管理を学ぶ。

(この時期、コーヒーの消費量がグングン伸びていきました。)

【2008年8月28日(木) 大会のモデル審査のためのモデルシート 提出】

モデルを提出しなければ、これまでの苦労が水の泡。そんなの絶対イヤ!という気持ちで、投函するときもドキドキでした。

【2008年8月31日(日) 第2回 試走会】

1回目で試走会の雰囲気は知っているものの、蘇る記憶。

緊張の中挑んだ第2回試走会の詳細は、試走会のページにて!

【第2回 試走会終了後  本選に向けてスパート】

試走会で得た実験データをもとに、課題に対する最終調整。

いよいよ大会に向けてラストスパートを切りました。

【2008年9月6日(土) まさかの第3回 試走会 in 群馬】

非公式な試走会ですが、せっかく群馬まで行ったので、ご紹介

【2008年9月15日(月) 関東地区大会】

「夏が終わる・・・」甲子園球児のような想いで挑んだ大会。

詳細は、関東地区大会のページにて!!

3. モデル作成 ~ 開発しやすいモデルを意識 ~ 

モデル作成の中で最も時間をかけたのは、「分析クラス図」です。ハードウェア要素(ドライビングやステアリング)のクラス抽出は容易に出来たのですが、 ソフトウェア要素(ライントレースを行うための仕組み)のクラスをどう抽出しようか、悩みました。

ライントレースを行うための仕組みは、走らせる基盤となる部分です。そのため、使いやすいのが一番!面倒な処理は書きたくない!だから、 しっかり振る舞いと責務を考える!という方針で議論を行いました。議論した結果、

・ 光センサーから値を受け取り、色を判定するクラス(色判定クラス)

・ 色判定クラスから値を受け取り、直前の色と現在の色を比較することで現在の位置を判定するクラス(エリア判定クラス)

・ エリア判定クラスから値を受け取り、ステアリングを制御して走らせるクラス(走行パターンクラス)

という3つの柱となるクラスを作成しました。

結果だけを見ると、とても地味~なクラス達ですが、この『縁の下の力持ち』クラスたちによって、その後の開発が驚くほどスムーズに進んでいきました。

また、ハードウェア要素であるステアリングの振る舞いについてもじっくり考えました。初めは、「右に振る」「左に振る」という一般的な制御にしていました。 しかし、ラインの右側を走るか(右エッジ)左側を走るか(左エッジ)によって、走行パターンクラスの中で判断して命令しなければなりませんでした。 『何度も何度もif文書くのって面倒だな』と考えた私達。そこで、エッジを考えなくても良いように「コースインさせる」「コースアウトさせる」という制御に改正しました。

では、モデルシートで提出した分析クラス図の全貌を載せておきます。

 

分析クラス図を作成した後、クラスメソッドの具体的な処理を考えるため、シーケンス図やアクティビティ図を作成しました。これらのモデルを作成することで、 実装を行う際、スムーズにコードを書く事ができました。

4. 実装 ~ 単なる実装からモデルベース開発へ ~

【ETロボコンの開発スタート ~ 第1回試走会】

2週間という限られた時間の中で、私たちは『走れば良い』というスタンスで、実装を行いました。走らせるためのアルゴリズムを考えては、それを実装し、動かしてみる。 その繰り返しでした。関数ごとに分割はしていたものの、汎用性なんてものはなく、試走会前のソースコードは、まさにスパゲッティコード(x_x)

とりあえず1回目の試走会を終え、落ち着いた私たちは、これじゃ、いかん!ということで、モデルベース開発で実装することになりました。

【第1回試走会後 ~ 第2回試走会】

モデリングの章でも書いたように、分析クラス図に力を入れ、さらに詳細な処理はシーケンス図やアクティビティ図に落とし込むようにモデルを作成していきました。 そして、いざ実装へ。

書き始めて、スイスイ進むことに自分達でもびっくりしました。シーケンス図やアクティビティ図があることで、これほどにも実装が楽になるとは思ってもいませんでした。 第1回試走会までの実装時間とは比べものにならないほど早くでき、モデルベース開発の威力をひしひしと感じることができました。

また、モデルベース開発を行っていると、進捗状況が把握しやすくなり、何を行っていかなければいけないのかが見えるようになりました。 また、修正箇所がどこに影響するのかを見て分かるため、モデルベース開発の保守性を実感しました。

【デザインパターンの登場】

順調に実装が進んでいました。しかし、インスタンス管理ができておらずOSをとばすことが多々ありました。最初は、なぜOSがとぶのかわかりませんでした。 ハードが壊れたのではいかという疑問さえ抱きました。数日間悩んだ末、インスタンス管理ができていないということを知り、インスタンス管理をきちんとできるようなモデルへ 修正することになりました。探してみると、デザインパターンのシングルトンを使用して、インスタンスの一元管理を行うクラスを作ればよいことを知りました。 このように、実装してからモデルの修正を行い、また実装するという工程を繰り返し、よりよいモデルへと修正していきました。

5. 試走会について

(ⅰ)第一回試走会(7/27)

チーム発足より約2週間で組まれた第一回試走会

モデルも書かず、サンプルコードを修正して書いたプログラムで、ツインループ攻略を狙う!!

今から考えると、予期せぬ前兆は前々日から始まっていた。それまでサンプルコードを修正し、

「意外と走るやん!」と鼻が伸びつつあった私たち。

ただ、ツインループはなかなかうまく走らず、いろいろなパラメータをいじっているうちに、

パスファインダーの挙動がおかしく…???

「なんでやねん!!なんでうまく走らんねん。」

「……仕方ない。試走会では、うまく走っていたコードで走らしましょう。」

次の日(試走会当日)

 隅田川の花火大会を挟んだ試走当日、いざ、レディー、ゴー…

 

Aさん「…ん?…んん!?動きませんけど?」

 

B君 「ん~、サンプルコードでとりあえず走らします?」

 

Aさん「隊長…やっぱり応答ありません!!」

 

……おわた。

 

そんなこんなをしているうちに、持ち時間2時間のうちの1時間半消費…。

原因は、ばらばらに各自の開発環境で組んでいたプログラムの不整合。

当日に持っていくパソコンと、走らすであろうプログラムを組んでいた人が異なり、

前日に約4時間もかけて作った試走会用チェックシートはほぼ白紙…。

これは未だに私たちのトラウマです。

(ⅱ)第二回試走会(8/31)

 第一回に生涯忘れることのできないトラウマを抱えこんでしまった私たちも、

この振り返りからバージョン管理(Subversion)をチーム内で使用し順調に?モデル、コンセプトシートを提出し終わりました。

 日々のコーヒーの量も日増しに多くなった頃、ほぼ大器晩成気味で第二回試走会を向かえました。

トラウマ対策はそれぞれ相互作用しそうなチェック項目ごとにプロジェクトを分け、前日に

試走の試走を行うというもの…くどい(笑)

ただ、これでもやはりチームの頭の片隅にこびりついて離れない

トラウマ=動かないというトラブル

「動け!」「動け!」「動け!」「動け!」「動け!」(全員の祈り

…動いたぁ☆

ツインループはうまくいかなかったものの、チェック項目は全て予定通りこなし、さわやかな笑顔を残し、夜の街へ…。

(ⅲ)第三回試走会(9/6)

 エキストラ感覚で第三試走会。

これは公式のものではなく、群馬にある本番と同じコースを「利用できるんなら行きましょう!」

「やりましょう!」と2週間前に急遽決まったものである。

 コース全体やツインループ、坂などを本番前にできることは貴重なのです。

第二試走会以来すっかり変な自信を取り戻した(元々おだてられ易い)私たちは、なんとなく調子に乗り、

通称「ドルフィンジャンプ」というコースをショートカットする荒業にも挑戦していました。

 この試走の目的はほぼ三つ、

 ⅰ)全体コースの走行切り替えチェック

 ⅱ)ツインループチェック

 ⅲ)なんと言ってもドルフィン見極め

 そうです。優先度は低くたって、一番観客を驚かせることのできるドルフィンを、なんとしても実際環境で試して、できるようにしたかったんですよ。

 結果から、

 ⅰ)ツインループ…だめ。

 ⅱ)走行切り替え…グレー読まずだめ。

 ⅲ)ドルフィン…かなり成功。

結局、ツインも走行切り替えも「グレーの色が薄い!!」なんて文句すら言いつつ、ドルフィンが出来たことになぜか優越感を覚え、

群馬の温泉へ…。

6. 関東大会当日

---2008年09月15日(日)ETロボコン関東大会最終日---

私たちはこの日、押しつぶされそうなプレッシャーを感じていました。

さかのぼること2日前…、なんと同じ研修を受けてきた格下(内緒)のライバル(芝浦雑伎団)がモデル部門第2位を受賞していたんです。

「これは、ウケを狙ってでも、報告できる何か形を残さなければ…。」

そんな思いで本番に挑みました。

 

開会式前・・・与えられた最後の試走(15分間×2回)。

1回の試走では、10チームが同時に1つのコースを使用します。

いっぱいいっぱいなのは皆さん同じで、それはまさにコースのバーゲンセール…。

過去二回の試走会の

「あ、お先にどうぞ。」

なーんて気遣いはなく、

「我が、我が…!!」

負けない、私負けない…。

 

【一回目の試走】

難所に挑戦する内周を最初にチェック。

内周の狙いは2箇所、「ツインループ」と「ゴール後停止」です。

この攻略でキーとなるのはやはり、「グレーをきちんと読むことができるかどうか?」。

(頭をよぎるのは第三試走会でのグレー誤検知…。)

グレー判定のためのパラメータを調整し、いざ…。

「ピッ!」

きたぁぁぁ。パスファインダーさんはちゃんと読んでくれてます。

試しに、2周連続で走らせてみることに。すると、難所のツインループを2周連続で

クリアしました。2回連続で成功したのは初めてです!

パスファインダーさん、本番強えぇぇ。やりおる。

しかーし、ゴール後停止は、グレーが読めずうまくいきませんでした。

「パッシィ、どうした?」

おそらく坂でスピードがつき過ぎているため、落としてみようと2回目の試走では

プログラムで調整することになりました。

ある程度安定したグレー判定のできに、多少調子に乗った私達が挑戦するもの…。

そう!あのドルフィンです。

「なんなら、最初からやるつもりでしたよ。」

しかし、ここには大きな壁…いやまさに壁(スポンサー会社のロゴ)。

残り時間は、ドルフィンに専念。

だが、何度やってもスポンサーに阻まれる。

「踏んづけてしまえ、もぅいいから、踏んづけてしまえ!!」


(AVIファイル。約20MBとファイルサイズが大きくなっています。ダウンロードしてご覧ください。)

…踏んづけて、すいませんでした。

ここでタイムアップ。二回目の試走でこれも調整です。

 

【ニ回目の試走】

まずは外周のチェック。特に問題なく、走ってくれたので、すぐ終了。

続いて内周のチェック。内周では、「ゴール後停止」「ドルフィン」の調整が未完成でした。

ゴール後停止が成功するようプログラムを変更し、再度チャレンジ。

なんと、1発成功!!残るは、改良版ドルフィン!!

内周のプログラムを入れ直し、ドルフィンリベンジ。

スポンサーを鮮やかに交わしながら…M○croSo○tにドーン。

スポンサーを鮮やかに交わしながら…もう一回M○croSo○tにドーン。

ドーン、ドーン、はい、ドーン。

スポンサーの紙を破壊するのみ。近くで見ていた実行委員のスタッフさんも苦笑い。心が痛くなりました。ここで試走終了です。

残念ながら、ドルフィン断念。

 

【 1回目:内周 】

どきどきを抑えながらの順番待ち、コース上のレースを見ていました。

内周のツンインループにチャレンジするチームは多いものの、そこでリタイアするチームも数多く観客はそのたびに大きな歓声をあげる。

その中、順番ひとつ前のチーム(名前は覚えていますが教えません。)

…ツインループ回るわ、ゴール後停止止まるわ、両方を決めてきましたよ。

さらにプレッシャーの波が押しよせてくる。試走では、うまくいっている。あとは、あとは、パスファインダーの気分次第。

急遽スターターに抜擢されたB君のボタン押しは…絶妙!!皆が見守る中、パッシィはヘアピンカーブを抜け、ツインへ。

「ツイン前でグレー読むのかぃ?パッシィ君?」

読んだぁ!!回る回る。坂道も好調!!

「また、ツインに入っちゃうのかぃ?パッシィ君?」

はいったぁ。回る回る。きたぁぁぁぁぁぁ。

後は、坂後のグレー読んで止まるだけですやん!!

…はい、スルー。

坂前でパッシィはスルー。

止まらず…おしぃ!!

でも、なかなかの出来です。いや、今までのこと考えるとありえないくらい好調です。

 

【 2回目:外周 】

外周は何のことはない「ゴール後停止」のみ。

難所のショートカットって何…?快走しますよ。

試走の外周ではゴール後停止は100%で成功している。

「いけるやろ~!」

内周で失敗していることなんか忘れた、根拠のない自信を持ってレースに挑みました。

そして、2回目のレース開始!!

内周と同様、スタートから飛ばします!

1周目を予定通り走りきる。2周目、ゴールへ向かう坂前のグレーを感知した!

そして、ゴール前最後のグレーを読むためスピードダウン!!

「よし、よく読んだパッシィ♪これでゴール後停止頂き!!」

とチームが確信した。

だがしかし…

…はい、スルー。

やっぱりパッシィはスルー。

なぜ読めなかったのか、いや読まなかったのかは現在も不明です。

結局、ゴール後停止は内外周共に成功ならず。

 :

リタイアしているチームもあり、タイムがいいチームもあり、順位が全く読めませんでした。

果たして賞は取れるのか。淡い期待を寄せつつ、いざ発表の時へ。

 :

【競技部門】

ぎりぎり3位にでも入っていてくれ。そう思いながら立っていました。

第3位 … ドラムの音が鳴り止み、発表されました。

他チームが呼ばれる。やばぃ …… そう思っているうちに、次の発表。

      競技部門 2位

第2位 … ドラムの音が鳴り止み、発表された。

      「田町雑技団」

きた、漢字きた!!

一気に報われた気がしました。

 :

【モデル部門】

表彰を頂いた後、欲が出て、モデルも欲しい。

2、3位あたりで呼ばれてくれ。

そう願ったが、入賞ならず。

 :

【総合】

いよいよ、総合の表彰。5位以内なら、チャンピオンシップへ出場できます。

モデルは入っていないけど、競技で2位をもらっただけに、希望を持って発表を待ちました。

第3位まで私たちのチーム名が呼ばれることはなく、半ば諦めていました。

        総合準優勝

という文字がステージのスクリーンに表示され、ドラムの音が会場に響き渡る。

ここまで来たら無理だー…でも、でも!呼ばれて!!

       「田町雑技団」

きたー!!漢字5文字。きました。

何がなにやら分からないうちにステージに上がり、インタビューを受けていました。総合で準優勝をいただけるとは夢にも思っておらず、感動いっぱいで大会を終えました。

7. おわりに

開発段階ではここに書き尽くせないほど、様々なことがありましたが、 最終的には、総合2位・競技部門2位というすばらしい結果を得ることが出来ました。

私たちのチームは、完走することを目標としていたので、安全な走り方やコースアウト してしまった時のリカバリなど、「安全策」に力を入れていました。大会で多くのチーム がコースアウトでリタイアした中、私たちは完走できたことが入賞の大きな理由だと思います。

また、勝因の一つとしてチーム開発が上手くいったことも挙げられると思います。 私たちのチームは、こまめにミーティングを行うことで、全体の情報共有を心がけていました。 チーム開発は、情報共有をしなければ、お互いがどんなことをしているのか分からなくなって しまいがちなので、全員で共有する大切さを実感しました。

<長澤>血液型O型構成の私達は一言で言えば、「ざっくりなチーム」ですが、この経験からしっかり 決めるところは決める「ちゃんとざっくりなチーム」になれた気がします。(私自身も…)

<森谷>全体を通して、モデルから実装までの一連の流れをチームで体験でき、ひとつのプロジェクト を成し遂げたというのが、貴重な経験だと思います。この経験を活かして、これからも 頑張っていきたいです。

<小澤>ETロボコン活動を通じてモデリングの大切さ、組込みソフトウェアの面白さ、 そしてチーム開発の楽しさを学ぶことができました。今後もチャンピオンシップ 大会に向けてがんばります。

<曽我>毎日毎日コーヒー(ブラック)をのみ、 本番前日にゲンをかついで髪を真っ黒に染めた甲斐がありました。 うちのパスファインダーのライン判定は完璧でした!マーカー命!ツインループ完全攻略! チャンピオンシップに出場できたこと、このチームで勝てたことがとても嬉しい。

<本川>この参戦記からチームカラーは分かると思いますが、とても楽しく開発を進めることが 出来ました。チームリーダーとして、仕事がちゃんとできたかどうかは不明ですが、 なによりも結果が出てよかったです。


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