ObjectSquare [2005 年 8 月号]

[レポート]


ETロボコン参戦記

加賀百万石


はじめに

2005年7月2日(土)、3日(日)に東京都江東区の株式会社内田洋行 潮見ビルにて行われた『ETソフトウェアデザインロボットコンテスト』(以下、ETロボコン)の、ショートトラック競技にて、我がチーム「加賀百万石」が優勝しました!!
初参加、個人参加の我がチームが、奇跡的に優勝することができ自分達でも大変驚いています。今回は、そんな我がチーム「加賀百万石」の不安と苦悩の日々をお話したいと思います。

『ET ソフトウェアデザインロボットコンテスト』とは

組込みソフトウェア開発分野における若年層、および初級エンジニアへの分析・設計モデリングの教育機会を提供することを目的として実施されているもので、2002年~2004年に行われていた『UMLロボットコンテスト』を継承発展させたロボコンです。
コンテストの内容は、自律型ライントレース・ロボットの走行スピードとモデルの美しさを競うもので、ロボットはレゴジャパン株式会社のレゴ・マインドストームを使用します。

チーム紹介

役割 名前 性格
リーダ 田中国見(以下、クニミン) 異常に細かい。
CDにつく指紋は見逃さない。
- 佐々木博子(以下、ボス) 超楽天的。
目を放すとすぐに旅に出てしまう。

地元・金沢の伝統と文化を愛し、組込みソフトの分野でも大きく貢献したいという 意味をこめてつけたチーム名「加賀百万石」です。
基本を忘れず、自分の思いに忠実で、手先が器用な金沢の人間の長所を最大限に活かしたいという思いからつけました。

元上司と部下というメンバ構成ですが、性格は真逆な二人
今回の開発では、それが吉とでたのか。。。

参戦記

<2004/6>

2004/12/末、会社を退職するまでボスはクニミンの上司でした。
(現在はアロマセラピストになるためにアロマセラピーについて勉強している日々です。)

そんなボスがある日、クニミンに言いました。

「ETロボコンやってみたいんだけど」

ボスは業務上の情報収集のためにネットを検索していて偶然「UMLロボコン」について知ったらしく、そこで仕事上でもお付き合いのある企業チーム「ムンムン」さんが優勝したことを知り、俄然興味が沸いてきたたようです。
一方、クニミンもお客様である「チームムンムン」さんの会社では新人教育にこのレゴ・マインドストームが使用されていることを知っており、日頃から興味を持っていました。 まずは、レゴ・マインドストームを購入。

新人教育の成果発表として、ショートトラックの社内大会が行われるから、参加してみないかと「チームムンムン」さんに声をかけていただき、不安な気持ちのまま参加させて頂くことになりました。

当時、ボスは業務多忙で参加することができず、クニミンが1人でしかも2週間弱で作業を行い、とにかく、"早く走る" ためのプログラムを書きました。この時に、走行体である「パスファインダー」の『力量と性格』が少し分かったような気がします。

<2005/4>

「やりますか」

本音を言えば、東京で開催されるこのイベントに北陸から「個人参加」するためには、かなりの出費が予想されます。教育講習会、試走会、本戦、その他自作のコース作成、開発中のテスト用乾電池の購入、UML関連書籍の購入・・・。

いつものように思いつきで言い出したボスの発言。

今回の参加で、「何が得られる」かは後でのお楽しみ。と自分に言い聞かせ参加申し込み終了間際でのエントリーとなりました。チーム構成は、ボスとクニミンたったの二人。
しかもこの時点で、UMLの知識は全くありません。

「検討会」と称した飲み会でも、クニミンの心配をよそにすっかり酔っ払い、ロボコンの話題からまったく話がそれて行くボスです。不安は日ごとに大きくなります。

パスファインダーもボスに組み立て直して貰う事にしましたが、なかなか作成してくれません。
2週間待ってようやく「組み立てた」の連絡を貰って見に行くと、数箇所組み立てミスがあります。明らかにシャフトが歪んでいると思うのだけれどボスは「大変だったのよ~。いい感じでしょ。」とご満悦です。少し直しますね。。。と、半分以上ブロックを外すことに。

「あたし、来週、長野の温泉行ってていないからね~」

次回の検討会はいつになるのでしょうか・・・?

<2005/5/上旬>

5/10(火) 第一回 UML基礎教育1(分析編)

平日ということもあり業務優先して、クニミンは欠席。ボスに参加してもらいました。 講習会の内容は、開発環境の設定から丁寧に教えて貰えます。

初心者向けの勉強会なので、モデリングの必要性から説明してる内容で、演習問題を交えて進めていきます。頭の中では漠然と考えていることをモデルとしてアウトプットするとなると、急に手が止まってしまいます。

ところで、演習問題は積極的に間違うことをお薦めします。ボスも積極的に間違えたそうです。

そうすることで、講師の方に

経費をかけて参加している講習会ですから、習得して帰ろうとする気合が入っています。

この講習会ではUMLの記述方式の習得はもちろんですが、参加者間での情報交換、今回のロボコンの参加者の組込み開発経験レベルのリサーチ、自分達が場違いではないかという不安の解消にもなりました。
また、UMLを書くためのツールの紹介などもあり大変参考になりました。

<2005/5/下旬>

5/21(土) 第二回 UML基礎教育2(設計編)

今回は、具体的にパスファインダーを題材に各モデルの書き方、考え方をレクチャーしていただきました。光センサ・ステアリングモータ・駆動モータ等の関係や、破線走行、障害物あり走行、坂道走行など走行方法を変える場合のモデルの書き方など。

講習を受けてとにかく、各クラスはシンプルにして、仕事をさせすぎないこと。ということを肝に銘じました。

今回のETロボコンは「ライントレース競技」と言って、白のベースに黒いコースラインが引かれて通常は、黒ラインのエッジをライトセンサで読み取りながら、走行するというものです。
右エッジを読み取る場合、ライトセンサの判定が黒なら右、白なら左と左右に激しくステアリングを振りながら、ライン探索していきます。

この時点でボスは「こんなに単純な仕掛け(ハードもソフトも)なのに、どうして去年までの完走率は20%と低いの?」「なぜ、まともに走らない」「なぜ、迷走する」「そんな訳ないでしょ」という気持ちでいっぱいのようでした。何が問題なのか理解できていないので、戦略が立てられないのです。
戦略がないので設計は至ってシンプルです。

#黒なら右、白なら左にステアリングを振りながら全速力で前に進む

そろそろ本格的に作業に取り掛かりますか、単純走行でなぜ駄目なのかボスに身を持って体験して貰いましょう。と思いたち連絡すると

「あたし、来週からドイツに行ってていないのよ~」

・・・またですか。

<2005/6/上旬>

単純なモデルと単純なプログラムが出来上がり、自作コースで走らせてみることにしました。
と、言ってもボスのお宅の6畳間に作ったミニミニコースです。
案の定、まともに走りません。黒や白の閾値が環境とプログラムであっていないからです。
色測定を行うプログラムを作成して調査し、閾値を決め、走行プログラムの閾値を変更する。。。

始めはこんな状態でした。

そこから、キャリブレーション機能、万が一コースから外れた場合の復帰機能、カーブ時の安定走行機能、破線走行機能など、ようやくボスも問題が山済みであるということを認識してくれました。
第一回目の試走会は、キャンセルするしかない状態です。まともに走らないと分かっている走行体を持って東京まで行く経費はかけられません。チャンスは2週間後に行われる第二回試走会のみです。それまでに、作戦を考えて、モデルも修正し、プログラムも完成させなければなりません。やはり、チームメンバが二人だけというのは厳しいように思え少し弱気になってしまいました。

ボス頼みますよ、第二回目の走行日にはモデル提出したいですから。

「あたし、万博行くのよ~。でも、大丈夫なんとかするわ。」

・・・大丈夫なんですか。モデル・・・

<2005/6/下旬>

コンセプトは至ってシンプルです。

モデルを提出しないことには、大会に参加させて貰えません。モデルを書き上げなければなりません。ところが・・・・、モデルをどう書いて良いかわかりません。どのモデルを使えば伝わるのかわかりません。UMLツールの使い方も良くわかりません。モデル以外の表現(文章など)をどの程度、入れて良いのかもわかりません。

どう書いて良いのかわかりませんでしたが、「書かなければ!!」と言う思いだけに動かされ、自分達なりに一生懸命書きました。もちろん、ボスのいい加減なモデル表記をひとつひとつ添削するのがクニミンの仕事です。基本に忠実なのが加賀百万石の信条です。

モデルは提出し、実装もしているが、パラメータのチューニングが上手くいかない、外光の明るさに左右されすぎて、どう触っても走行が不安定になってしまいます。昼の自然光と仕事が終わってからの照明の明かりでは環境が違っているので、うまく合わせられない日々が続きました。狭い部屋では、これで良いのかどうかという不安も募ります。

そんな時に、「チームムンムン」さんの紹介で「チーム夢考房.NET」さんの本番同様のコースで試走させていただけることになりました。チーム夢考房.NETさんは大学からの参加でテスト用のコースを広げる場所が確保されているという、とても羨ましい環境です。両チームにはその後何度も、お世話になり納得のいくまでチューニングをさせていただきました。

「直前に旅行とか行かないでくださいよ!!」
「行かないよ~。前日に東京で寄席には行くかもしれないけど・・・」

<2005/7/本番>

沢山の参加者がいることにまずはビックリしました。各チーム5~6名構成なのでしょう、それにスタッフの方も大勢いらっしゃいますし、少し気おくれしてしまいます。
つぎに、壁に貼られている各チームのモデリングの素晴らしさにビックリというよりも、 唖然とさせられました。「チーム加賀百万石」のモデルは隅っこの方にひっそりと、シンプルに張られています。
メタファとして、いるかや犬を使って表現しているチームや、閾値の取得に難しい関数を使用しているチームもあります。講習会で習ったモデルだけではなく、自己表現的な図やグラフなどを用いて様々に表現されているモデル図を見て、クニミンもボスも激しくカルチャーショックを受けました。

「訴えかけるモデル」っていうのは、こういうことを言うのだったのですね。百聞は一見に如かず。

本番走行前に、試走として各チーム3分だけ時間が貰えましたが、舞い上がっていた「チーム加賀百万石」は、ボタン操作を間違えたり、走行ラインを間違えたり、挙句の果てにはラインを見失って本コースから落っこちる、といった失態ぶりでした。
それにしても、予想以上に明るい会場。これで正しくラインを読み取ることができるのかと不安は一層強くなりました。

最終調整をする時間もなく、論理上この閾値で!!という感覚で、いつもは緻密なクニミンまでもが最終的にはボスに影響されて「エイヤー」なチューニングとなってしまいました。

その後、車検を受けて電池を公式電池に入れ替え、OSの再インストールとプログラムのインストールを行いました。後は運を天に任せるだけです。

「チーム加賀百万石」の一走目は「インライン」です。近道を選択すると「オフロードルート」となります。ところが、やはり会場の明るさが影響して、完走できているチームは予想以上に少ない状態です。確実に完走するのであれば、障害物ルートを回避して通常ルートを選択するべきなのですが、クニミンが迷いながらボスにお伺いをたてると、

「障害物も乗り越えられるようにチューニングしたから大丈夫よ~」

と、笑顔での返答です。では、ボス、インラインの近道ルートでお願いします。
(パスファインダーの起動はボスのお仕事です。)

走り出しました!!早いですっ!! と、いうよりも、早すぎます!!
公式電池「日立マクセル イプシアルファ」さすが『メカが目覚める!』と謳っているとおりのパワーです。でも、「チーム加賀百万石」のパスファインダーはそのパワーでは制御できないのでは・・・。と思っていたら、やはり、カーブでの制御が追いつかず、コース内の障害物にあたってリタイヤとなってしまいました。トホホ。

まともに走れなかったとはいえ、もうプログラムを修正することはできません。
あとは、他の参加チームの走りを楽しみながら二走目の出番を待つのみです。
各チーム一走目を走り終わった時点で、完走できたチームは48チーム中たった7チーム。
かなり厳しい環境です。

二走目が始まった15:30頃、会場内の明るさも少し安定し始め完走率もあがってきました。運が向いてきたかもと思いつつ、会場内でボスを探すも見当たらず、どこに行ってしまったんだろうと思っていると、ふらっ、とボスが戻ってきました。

「内田洋行さんの最新商品を見学できるっていうから、見せて貰っていたの。」

もうすぐ「チーム加賀百万石」の疾走順番ですよ。気合入れてくださいよぉ。二走目はアウトラインですよ、ボタン操作間違えないでくださいね。頼みますよ。

加賀百万石の二走目、走り出しました!!早い!!やっぱり早い!!
そして、アウトラインの近道である破線をなんなく突破!!
多少のラインアウトも前へ進みながら軌道修正しています。予定どおり!!
2周目も問題なく破線クリア!!
歓声が沸きあがります!!
あーーーーー、最後の坂道もコケルなよ。コケルなよ。---問題なくクリア!!

やったー!!完走した!! しかも・・・・・・・・・・・・35秒42!! 昨年の優勝タイムの更新!!

大会新記録がでました。ボスもクニミンも大興奮です。他のチームの方も沸きあがってくれました。単純にうれしいです。結局、最後までこのタイムは抜かれることなく優勝が決まりました。

優勝決定の瞬間、あんな苦労もこんな苦労も未熟なモデルの恥ずかしさも吹っ飛びました。この大会にチャレンジして良かった。そんな満足感につつまれました。

モデル説明

今回、作成した設計書は UML で作成したのですが、なにぶん初めて書いたものでして人様にお見せできるような代物ではございません。そこで代わりといっては何ですが作成したモデルの考え方を簡単に文章で説明させていただきます。
参戦記のセクションでもお伝えしましたが、考え方は至ってシンプルです。
機能としては以下の6機能を持っております。

それぞれの機能の説明は以下の通りです。

キャリブレーション機能

光センサーで読み取った値が白か黒かを判断するための閾値を設定する。

ライントレース機能

ラインの右側をトレースする機能と左側をトレースする機能の二つのパターンを持ちます。ラインのどちら側をトレースするかは走行させる前にボタン操作によって変更することが可能です。
ラインの右側をトレース(外回り)する場合は光センサーの値が黒の場合はステアリングを右に振り、白の場合は左に振ります。
ラインの左側をトレース(内回り)する場合は、右側トレースの逆になります。

カーブ時の安定走行機能

カーブ時にはステアリングの振りが大きくなります。実際に走行させて動作を観察した結果、ステアリングの振りが大きくなると走行が不安定になり高速走行についていけません。(ジグザグ走行になりコースアウトしてしまいます。)
そのため、ステアリングの振りが大きい場合は不安定な状態と判断し速度を下げます。逆にステアリングの振りが小さい場合は安定した状態と判断し速度を上げます。

復帰機能

コースアウトした場合には白色しか見えない状態になってしまいます。そのため、片方の方向にステアリングを振り続けることになり、ステアリングを振り切ってしまいます。これを避けるために、ステアリングを一定の方向に振り続けた場合にステアリングの振りを停止させる機能を持たせてあります。
走行時の動作を観察した結果、ラインの右側をトレースしている場合は、コースアウトのほとんどはラインの右側になります。右側にコースアウトした場合、ステアリングを左に切っている途中にステアリングを一時的に停止させます。そのため、走行体は左に旋回しコースへの復帰を試みます。コースに復帰できた場合はライントレースを再開します。その角度での旋回でコースに復帰できない場合(主に左カーブでコースアウトした場合)はさらにステアリングの角度を左にずらして旋回する角度をあげることでコースへの復帰確率を高めます。
タイムを追求するため、バック走行による復帰機能を持つよりも、常に前に進みながら復帰を試みることに重点をおいています。(バックによるコース復帰は復帰確率は上がるものの、かなりのタイムロスにつながり、よいタイムを出すことができない。)

破線走行機能

実際、機能としては新たに設けていません。復帰機能で持っているコースアウト時にステアリングの振りを停止させる機能を使用することで、破線で黒のラインを見失ったときにステアリングの振りが停止され、次の破線を見つけたときにライントレースを再開するという仕組みになっています。

オフロード走行機能

こちらも破線走行機能と同様、特に新たな機能は設けていません。オフロードでは光センサーとコースとの距離が離れるため、色の識別ができなくなります。そのため、ステアリングを振りすぎてしまい、ステアリングが凹凸の間にはまってしまう傾向がありました。復帰機能で持っているステアリングの振りを停止させる機能により、走行体の直進性が高まり、オフロードではまってしまう確率を低くします。

ここであげたように、持っている機能はすごくシンプルです。機能として考えたものは6機能。実装している機能は4機能。完走率は落ちるものの、完走した場合には速いという、速さにこだわった設計になっています。

感想とこれから

パスファインダーの制御は奥が深い。(思ったように動作してくれない。) そのため、最初に考えた思想は、いろいろと試すうちに次々と変えざるを得ません。まずは走らせて癖を読み取り、設計はそれからという開発形態になってしました。制御というものはそういうものだろうか。。。

実際は違うのでしょう。パスファインダーの特性を読み取り、それに沿った設計を行う必要があるように思えます。走行体の特性を理解しない状態では、思ったとおりに制御できるはずがありません。制御するものの特性を理解し、その特性をうまく利用することで正しい動作を導き出すことが出来るのだろうと感じました。

今回の大会ではパスファインダーを制御し切れているとは言い切れません。
電圧やコース周りの照明による輝度などに左右されているようではまだまだ制御が甘いように思います。次回の大会ではそれらの点を解消し、完走率100%、その状態での速度の限界に挑戦していきたいと思っています。
また、設計思想を分かり易く表現するモデリングも追及したいと思います。


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