[レポート]
UML Forum / Tokyo 2003 では、昨年に引き続き、UML ロボットコンテストが同時開催されました。 オージス総研オブジェクトテクノロジーソリューション部は、新メンバーで 2 年連続の出場となりました。今年のチームの結成から当日までの奮闘レポートです。
UML ロボットコンテストとは、レゴ社の LEGO Mindstorms (レゴ マインドストーム)という製品を使って走行ロボットを作成し、 規定のコースを走らせる競技会のことです。LEGO Mindstorms の RCX という部品にはソフトウェアを転送させることができ、それによってモーターを回転させたり、センサーの値を取得したりすることができます。 UML ロボットコンテストでは、単に走行ロボットを走らせてそのタイムを競うだけでなく、 その走行ロボットを制御しているソフトウェアを UML を使って表現し、そのモデルの優劣を競うのです。
昨年はチームも部署もキャリアも様々なメンバーで結成された「ビーチくらぶ」がショートトラック部門に参加しました。
(昨年の様子はこちら)
今年は、(当時)新人のみのメンバーで構成したチームで出場することになりました。
「モデルを書きたい!」「レゴで遊びたい!」「とりあえず面白そう。」など、動機は様々でしたが、"イベント好き"なメンバー 5 人
(今堀、角内、北野、玉木、吉田)でチーム「たまちゃん」は結成されました。
今年のロボットコンテストに用意されていたのは、昨年と同様のショートトラック部門と、今年新たに設けられたレスキュー部門の 2 部門でした。
レスキュー部門は、コース上の様々な障害を乗り越えて、ゴール地点にいるお姫様をいかに早く助けるかというレースです。
基本的には、スタート地点からお姫様の地点まで黒いラインが引かれており、その上を走行すればお姫様に辿り着けるようになっています。
ただし、途中で黒ラインが無くなっている「空白エリア」や、ラインの濃淡が場所によって異なる「荒野エリア(グラデーションエリア)」
などの障害が用意されています(下図参照)。
タイムトライアル部門と異なり、走行体の形態は自由に設定できます。
そこで、ロボットを自由に製作できること、コースが複雑なことから、難しそうですが、それ以上に楽しそうなレスキュー部門へ参加することになりました。
レスキュー部門では、お姫様を救出したタイムと UML モデル図が審査対象となるため、
「速く走る走行体」と「美しいモデル」が求められるのです。
レスキュー部門のコース図 (図をクリックすると拡大します) |
レスキューコース |
モデル作成に先立ち、まずは、どのような走行体にするのか、どのように空白エリア、 荒野エリアを突破するかのアルゴリズムを決定することにしました。 しかし、空白エリアと荒野エリアを突破するためのアルゴリズムを思いつくままに色々試してみたのですが、 どれも上手くいかず、試行錯誤が続きました。アルゴリズムが決定しないので、ハードウェアも決定出来ません。 日々アルゴリズムを思いついては、走行体を作成し、テスト走行を繰り返すこと約 3 週間。 各エリアを走破するアルゴリズムを決定し、そこから、走行体「ザリガニ君」を誕生させることができました。
決定した走行アルゴリズムは、以下のようになりました。
走行体「ザリガニ君」
アルゴリズム決定の際に作成した概念クラス図と、状態図(ステートチャート図)はこちらです。
ハードウェア構成を示した概念クラス図 (図をクリックすると拡大します。) |
ライントレースエリア走行中のステートチャート図 (図をクリックすると拡大します。) |
ザリガニ君には、センサーを 3 つ、モーターも 3 つ使用することにしました。
センサーは、次のように使用しました。
ハードウェア構成も決定し、いよいよ分析作業の開始です。
モデリングの際の方針は、
結果、完成したモデルはこのようになりました。
パッケージ構成図 (図をクリックすると拡大します。) |
分析クラス図 (図をクリックすると拡大します。) |
このモデルの特徴としては、
分析、設計が完了して、いよいよ、ザリガニくんの実装です。
昨年のクラスの再利用を考えて分析、設計を行っていたので、今年新たに実装するクラスはザリガニ君特有のクラス(アームクラスなど)のみで済みます。
また、走行制御部分は、「ライン走行制御クラス」、「空白エリア走行クラス」、「荒野エリア走行クラス」と
段階的に開発出来るようにしておいたので、実際は並行作業で開発を進めていくことが出来ました。
バグに悩まされることもなかったので、実装作業は平穏なまま終了していきました。
ちなみに、実装言語は C++ で行いました。
実装も完了し、残る作業はチューニングのみです。特に左右の光センサーの感度を一緒にする闘いが延々と続きました。
同じ光センサーであっても個体差があるので、この差を吸収できなければ、微妙な濃淡の差を検知して走行しなければならない荒野エリアで誤作動を起こし、
ザリガニ君が同じ場所でぐるぐる回って迷走してしまうのです。
対策として、両センサーの誤差を吸収する数式を組み込んだりもしたのですが、この方法も成功・失敗の差が大きく、なかなか安定しません。
また、会場の状況(照明など)にも、このチューニングは大きく左右されることが判明したので、左右光センサーの感度を細かく、
かつ簡単に設定できるように改良し、本番に臨むことにしました。
本番を前に、2 度、東京大学工学部にて本番のコースを用いて試走会が催されました。
レスキュー部門では、他のチームも荒野エリアに苦労している様子。 ザリガニくんのアームが開くと、周りからは「お〜!」というどよめきが聞こえ、狙いどおりウケたことに小さくガッツポーズ。
前回と変わり、ザリガニ君は絶不調・・・。光センサーを交換したためか、荒野エリアで同じ場所で迷走してしまう状態に度々陥りました。 この事態を回避するために、チームメンバーと光センサーとの戦いが本番まで続くのでした。
いよいよ本番です。当日の午前中には、ザリガニ君のセッティングを行う時間が用意されていました。 セッティング中は、最後まで課題になっていた「本番会場の条件下で左右センサーの誤差が最も少なくなるセッティングを見つける」 作業に追われていました。
ショートトラック部門が終了し、レスキュー部門のスタートです。我々のチームは、8 チーム中、4 チーム目の出走でした。 第 1 レースのチームは、見事完走し、好タイムをマークしていました。 「さすがだなー」と見ていたのですが、その後のレースでは、次々とリタイア・・・。 自分達も同じ運命になってしまうのか・・・。不安と緊張が高まります。 「運動会で我が子の徒競走を見守る親御さんの気持ちはこんな感じなのかしら」と思いました。
いよいよ出走です。紹介を終えて、最後のセッティングも終了し、いよいよスタート! ザリガニ君はゆっくり着実に進んでいます。 無事ライン走行エリア、空白エリアを走破し、荒野エリアへ。 荒野エリアに入ったことを認識したザリガニ君、見事アームを開いてくれました!会場から起こる「おぉぉ!」の声。 期待通りのアクションと、会場の反応に、思わずガッツポーズです。 その後、順調に前へ進み、姫の捕われている壁をタッチし、無事ゴール!姫と従者( 1 人)を救出することが出来ました。 速く走ることよりも、確実にラインを認識出来るチューニングを行ったので、 タイムは 1 位のチームには全く及びませんでしたが、まずは完走することが出来たので、大満足な結果を残すことが出来ました。
荒野エリアを突き進むザリガニ君。
その後のレースも苦戦が続き、結果、完走したのは 2 チームのみという残念な結果に終わってしまいました。 午前中の試走では、良い結果を見せていたチームも本番ではリタイアしてしまい、「勝負は水物」という言葉がとても似合うレース展開でした。 ともあれ、私たちチーム「たまちゃん」は見事、タイム部門で 2 位に入賞することが出来ました。
会場内では、出走全チームのモデルが展示されていました。また、今年はポスターセッションの時間も設けられ、 モデルを作成された方に直接質問する時間も設けられていました。 同じテーマでも、角度を変えればこのような見方が出来るのかと大変参考になりました。
会場に展示されていた私達のチームのモデル | 会場でのモデル展示の様子 |
本番走行が終わった後は、表彰式が行われ、タイム部門の結果発表と共に、モデリング部門の審査結果も発表されました。 ここで、我らがチームたまちゃんは、なんとモデル図で 1 位(エクセレントモデル)を受賞することが出来ました。 モデルとタイムの両部門で賞をいただき、予想以上の結果にみんなで大興奮してしまいました。
賞状、楯を持ったチーム「たまちゃん」のメンバー全員と、審査委員長の渡辺さんで記念撮影
© 2003 OGIS-RI Co., Ltd. |
|