ObjectSquare [2005 年 8 月号]

[レポート]


ETロボコン参戦記

あジャイ子2


モデル解説

私たちのチーム((株)リコー あジャイ子2)のモデルは、2005年度ロボコンでエクセレントモデル(モデル部門優勝)として高い評価をいただきました。身に余る光栄で、メンバー一同泣きじゃくっています。せっかく高評価をいただきましたので、私たちのモデルが共にオブジェクト指向開発に従事する皆さんに少しでもお役に立つことを期待して、エクセレントモデルの解説をさせていただきます。

モデリングポリシー

あジャイコ2チームでは、モデリングに先駆けてモデリングポリシーを定めました。モデリングポリシーとは、ドメインをどのように捉えてモデリングするかという指針です。これを定めておくことで、ドメインに対する一貫した捉え方を基に、モデルを構築することができます。またポリシーが要求モデルと分析モデルのトレーサビリティを高めるため、モデルを読む方に対してその理解を促進してくれます。

実際に定めたポリシーは、「コースに合わせた最速の走行をするライントレーサに必要な「判断」とそれに応じた『行動』に着目してモデリングする」というものです。これはライントレーサを、「コースに合わせた最速の走行をするために、「判断」とそれに応じた『行動』を繰り返して走るもの」と捉え、またシステムの対象ドメインのミッションを「ライントレーサの「判断」と『行動』を制御する」と捉えたことを基にして、定めたものです。ポリシーを言い換えると「コースに合わせた最速の走行をできるライントレーサの持つ「判断」と『行動』に関わる概念と、その概念間の関係をモデル化しよう」ということです*1

(*1) ちなみに反復1では、ライントレーサに実際の「車」のメタファーを適用して、「“ドライバーが状況判断しながら、車を操作する姿”をモデリングする。」というモデリングポリシーでモデリングを行いました。ポリシーによるモデルの変化がわかるように、そのモデルを付録に添付します(図 15)。

静的モデル

静的側面は、クラス図で表現しました。ライントレーサの持つ「判断」『行動』に関わるドメインの特徴として、次の3点を捉えました。

  1. 判断に使える情報は、センサから取得する路面状況のみである。(図 1)
  2. コースに合わせた最速の走行をするためには、長期的な路面状況の変化から「コース状況を判断」して、状況に応じた最適な『走行法を選択』する必要がある。(図 2)
  3. 走行法に合わせてラインを走行するには、短期的な路面状況の変化から「ライン状況を判断」して、状況と走行法に応じて『車を操作』する必要がある。(図 3)

図1 ドメイン特徴1
図 1 ドメイン特徴1

図 2 ドメイン特徴2
図 2 ドメイン特徴2

図 3 ドメイン特徴3
図 3 ドメイン特徴3

この特徴を基に、クラス名などをより理解性の高いものに整理して、骨格クラス図を作成しました(図 4)。そしてロボコンのコースに存在する走行区間と、それに対する走行法を分析して、分析結果をそれぞれ「走行区間」クラスと「走行法」クラスの子クラスとしてモデリングしました(実際のモデリング手順は、骨格クラス図→骨格の動的分析→ロボコンコースの分析)。この結果が提出モデルのクラス図になります(図 5)。

図 4 骨格クラス図
図 4 骨格クラス図

図 5 クラス図
図 5 クラス図
<クリックすると拡大して表示します>

動的モデル

動的側面は、次の図で表現しました。

コラボレーション図は、「走行開始(図 6)」、「走行時(図 7)」、「走行区間変更(図 8)」、「コース仕様設定(図 9)」の4つのシナリオについて、モデル化しました。

図 6 コラボレーション図(走行開始)
図 6 コラボレーション図(走行開始)
<クリックすると拡大して表示します>

図 7 コラボレーション図(走行時)
図 7 コラボレーション図(走行時)
<クリックすると拡大して表示します>

図 8 コラボレーション図(走行区間変更)
図 8 コラボレーション図(走行区間変更)
<クリックすると拡大して表示します>

図 9 コラボレーション図(コース仕様設定)
図 9 コラボレーション図(コース仕様設定)
<クリックすると拡大して表示します>

クラスのライフサイクルについては、路面センサクラス(図 13)、ラインモニタ(図 12)、コースモニタ(図 11)、走行法(図 10)についてモデル化しました(走行区間クラスは状態を持たない)。

路面センサクラスには、漆黒線検知のために動的キャリブレーション機能を持たせました。それはアクティビティ図(図 13)でモデル化しました。

図 10 ステートチャート図(走行法クラスとそのサブクラス)
図 10 ステートチャート図(走行法クラスとそのサブクラス)
<クリックすると拡大して表示します>

図 11 ステートチャート図(コースモニタクラス)
図 11 ステートチャート図(コースモニタクラス)

図 12 ステートチャート図(ラインモニタクラス)
図 12 ステートチャート図(ラインモニタクラス)

図 13 ステートチャート図とアクティビティ図(路面センサクラス)
図 13 ステートチャート図とアクティビティ図(路面センサクラス)

これまで紹介したモデルはすべて分析モデルですが、本システムの特徴を特に表すものとして設計モデルから一つのモデルを紹介します。それはタスク分割とタスク間の通信を表すアクティビティ図(図 14)です。あジャイ子2モデルは、クラス間の責務の差別化が十分に取れたモデルになりました。よってクラス単位の並行動作を取るのが非常に容易でした。この特性を生かし、「路面センサ」と「コースモニタ系」と「ラインモニタ系」の3つのタスクを並行動作させて動作する設計でシステム化しました。この設計では、3つのタスクはモデリングポリシーに関わるドメインの特徴として捉えた3点とマッピングできるため、理解性を高めることに成功していると思っています。

図 14 アクティビティ図(タスク分割とタスク間の通信)
図 14 アクティビティ図(タスク分割とタスク間の通信)

図1 ドメイン特徴1


図 15 <付録>反復1クラス図
図 15 <付録>反復1クラス図

モデルの特徴

開発メンバー自身が感じているモデルの良い点、悪い点を説明します。

良い点

クラス間の責務が明確に区切れており、クラスの凝集度が高く、クラス間の結合度が低いモデルになっている。

この点はオブジェクト指向モデルの品質にとって重要な点ですが、かなり良いレベルのものにできたと感じています。このおかげで、開発時にクラス単位での作業分割、クラス単位でのタスク分割などが非常にやりやすかったです。特にコース切り替えの責務がコースモニタクラスの責務として独立している点は、審査員の方にもモデルの良い点に挙げていただきました。

また今後も、システムの保守や再利用を行うような時(チャンピオンシップ大会?)には、効果が現れると期待しています。特に一度開発した走行区間クラスのサブクラスや、走行法クラスのサブクラスは再利用される可能性が高いと思っています(例えばカーブクラスは今後ずっと使えるでしょうし、ステアリング角制限走法も今後様々な新たらしい走行区間用として使われると期待しています)。

走行法の動きの違いが、モデルに現れている。

この点も審査員の方にもモデルの良い点に挙げていただきました。各走行法サブクラスの動きの違いは、等しく受信可能な4つのイベント(ラインイン、ラインアウト、ライン上一定時間経過、ライン外一定時間経過)に対する状態遷移の違いとしてモデル上に現れます(図 10)。どのサブクラスも外部から走行法クラスとしか認識されません(受信可能なイベントは同じ)が、それぞれ異なる動きができることになります。このような動きの違いはソースコードに隠蔽されてしまいがちですが、動きがモデルに現れることでシステムの理解性を高められています。

今後新たな走行法が必要になった際にも、受信可能な4つのイベントに対する新たな状態遷移を持ったサブクラスを開発すればよく、拡張性も非常にすぐれています。

どのようなコースにも対応可能

ロボコン本番でリタイアしておいてこれを言うのは恥ずかしいのですが(^_^;)、走行区間の組み替えで新しいコースを表現したり、走行区間と走行法のマッピングを変更したり、新しい走行区間や走行法を開発することで、どのようなコースにも対応できる・・・・と信じています。

悪い点

ドメインの特徴とも言える外乱要素への対応が、モデルに現れていない

ライントレーサは例え同じコースを走ったとしても、まったく同様の走りをするということはありません。

電池残量のわずかな違いでもスピードは変わりますし、センサの値は外部照明や陰、ノイズの影響で微妙に変化します。またコース路面の凸凹も走りに影響を与えます。ひょっとすると、観客の声援や熱気による影響もあるのかもしれません。このような外乱要素は、ライントレーサドメインにとって、解決すべき問題と言えると思います。本モデルにはそのような外乱の影響を排除できるような仕組みはまったく現れていません。そのようなものがまったくない理想的な環境をイメージして、モデルが作られています(事実、点線走行、漆黒線検知、カーブ検知などは、理論上はできるはずですが実際走らせてみると成功確率は低いです(;>_<;))。
どのような環境であっても常に最高の走りをする、それを実現するモデルこそ真のエクセレントモデルと言えるでしょう?

コースの切り替え失敗に対応できない

-コースを走行区間の繋がりで表現するモデルであるため、コース切り替えに失敗して現実に走行している区間とシステムが認識している区間が食い違った場合、悲惨なことになります(例えばカーブなのにスピードを上げてしまうとか、ゴールしていないのに突然音を鳴らし出すとか・・・)。上記した外乱要素がある限り、常にコース切り替えができるとは限りません。失敗したら最後、という現状のモデルは、走行中いつもひやひやです。観客に安心と感動を与えられる、それを実現するモデルこそ真のエクセレントモデルと言えるでしょう?

実際走らせてみたら、本番すべてリタイア

なによりも悪い点です・・・・でも実装本格化したのがモデル提出後で、時間がなくて、チューニングできなくって、本番も直前で「加賀百万石」さんが最速タイム出してくれたので勝負に出るしかなくって・・・・・、ってみんな言い訳ですね・・・すみませんでした。

ライン

ロボコンへの道(エントリから大会当日までのエピソード)

◆3月22日 ロボコンへの参加エントリ

今年はリーダーがエントリをすっかり忘れていたため、締め切り当日になって慌てて申し込むことになりました。チーム名は去年ロボコンに参加した先輩方のチーム名を無断で受け継ぎ「あジャイ子2」になりました。去年のチーム「あジャイ子」はモデル部門でゴールドに輝いていたのですが、この名前を継いだことが後々までプレッシャーになっていくとは、この時は思いもよりませんでした。

◆5月27日 参加メンバー決定

大会当日までほぼ1ヶ月となった時点で急遽リーダーから召集がかかり、参加者の募集とキックオフミーティングが行われました。参加者はリーダーに運悪く捕まった自主的に集まった3名に決定。この時点で第1回の試走会まで1週間しかない事がリーダーから告げられました。ちなみにチーム「あジャイ子2」のスローガンは「モデル、レース、パフォーマンスの三冠王!」でした。あの頃は若かったです・・・。

◆6月2日 第1回モデルレビュー開催

まずモデルの骨格が決まらない事には試走会どころではないということで、早速参加メンバーが各自でモデルを思案し、持ち寄ってレビューを行いました。しかし、やはり各自のモデルそれぞれに一長一短あり、なかなか骨格となるモデルが決まりませんでした。去年ロボコンに参加された先輩方をレビューアに迎え、遅くまで熱い議論が繰り広げられました。

◆6月6日 第1回試走会に参加

この時点ではまだモデルの骨格も決まっていなかったのですが、最も走る可能性の高いモデルをひとまず採用し、最低限ラインに沿って走る状態まで実装して試走会に望みました。さすがに細かい走行データなどを取ることは出来なかったのですが、ある程度今後の課題が明確になりました。

ただ、この試走会の際に新品電池で最高速にセッティングした状態で通常コースを何回か完走できました。今思えば、この時の経験がレース本番での強気なセッティングにつながったと思われます。

また、この試走会では走行体の脆さを実感しました。走りながらレゴブロックがポロポロとコース上に落ちていくような状況でした。大会ではこの経験を活かして、走行体をしっかりと固定しました。

実はこの時、去年参加した先輩方の実行ファイルを持って行き、本番用コースをぐるんぐるん走らせて試走会に来た他のチームを驚かせようなどという姑息な作戦も考えていました。しかし同じ時間帯に試走会に参加したチームが私たちのみだったため、この目論見は見事に失敗に終わりました・・・。

◆6月14日 モデルの骨格決定!

何度かレビューを重ねた結果、ようやくモデルの骨格が決定しました。この間には様々なメタファーも出されて検討されました。検討時に上がったメタファーの例としては、自動車、人、GPSシステム、電車、リニアモーターカー、モノレール、鶏などです。最終的にはライントレーサのドメイン内の言葉を使ってモデルをうまくまとめることが出来ました。いろいろと紆余曲折がありましたが、結果的に「何をモデル化したかが分かる」モデルになったと自負しています。

図:モデル検討過程
図:モデル検討過程

◆6月22日 なんとかモデル提出

この日の昼12時が期限だったのですが、結局資料作成がギリギリになりタクシーで直接大会事務局に持ち込んで締め切り15分前に提出するという状況まで追い込まれました。当初はちゃんと計画して余裕を持って提出するつもりでしたが、通常業務との兼ね合いもあり、かなりバタバタしたモデル提出になってしまいました。あの姿を見ていた先輩方は、「きっと今年はモデルの賞は無理だな・・・。」と思っていたことでしょう。

◆7月2日 大会1日目(レース)

レース開始時にはモデルの賞が発表されており、私たちのモデルが見事エクセレントモデルに輝いていました!スローガンにもあったように、私たちのチームは本気でモデル、レース、パフォーマンスの三冠を狙っていました。このモデルでの受賞も、レースでの強気な走りを後押しした事は言うまでもありません。

図:展示モデル
図:展示モデル

○本番1回目:インコース

インコースでは、一箇所だけラインからラインへ飛び移る掟破りのショートカットが出来る箇所がありました。噂では過去の大会でもこのショートカットを本番で成功させたチームがないということでしたので、私たちのチームは早い段階からこのショートカットを狙っていました。しかし本番直前の試走では失敗。一度はこのショートカットを諦めようということにもなったのですが、もし失敗しても2回目のアウトコースで完走すればいいかという甘い考えから、本番でも果敢にチャレンジしてしまいました。結果はショートカットに失敗してあえなくリタイア。練習でうまく行かないことは本番でもうまく行かないということを改めて痛感させられました。1回目のレース後に実行委員の方から「あジャイ子2はバランスが良さそうなモデルだからきっと完走してくれると期待していたのに・・・。審査員の方々もみんな肩を落としていたよ・・・・・。」という2回目にプレッシャーのかかるありがたいお言葉を頂きました。

○本番2回目:アウトコース

2回目のレース前に、休日返上で応援に駆けつけてくれたK先輩がアウトコースは完走するためにスピードは少し落とした方がいいとアドバイスしてくれました。そのため予定より若干スピードを抑えたセッティングにしてレースの順番を待っていたのですが、レース直前に今大会の最速タイムが飛び出しました。優勝しか見えていない私たちは、このままでは勝てないと急いでピットに駆け戻り、最速のセッティングにしてレースに臨みました。結果としては10秒後にカーブを曲がりきれずリタイア・・・。2回とも記録なしという非常に不甲斐ない結果に終わってしまいました。

図:完走できなかった本番用走行体
図:完走できなかった本番用走行体

◆大会2日目(モデル発表)

正直前日までの作業で燃え尽きてしまい、準備も不十分なままモデル発表に望んでしまいました。しかし他の参加チームのコンセプトや戦略など、様々な考え方に触れる事ができ、この日はとてもよい刺激になりました。午後のパネルセッションでは良いモデルと速いモデルの相関について議論されましたが、審査員の方が「う~ん・・・」と唸っているのを聞くたび、せっかくモデルで賞を頂いたのにレースでリタイアしてしまったあジャイ子2としては少し心が痛みました。これは、11月に開催されるチャンピオンシップ大会でリベンジするしかありません。

ライン

総括

入社3年目、実務経験は1年たらずの若手3人のチームで出場いたしました。我々の部署では毎年出場者は異なりますが4回連続参加しております。第1回、及び前回の第3回でゴールドモデル受賞というsetプレッシャーのもと、諸先輩方のノウハウをそっと盗みながら開発を行ってまいりました。

上述の通りモデル審査部門では最優秀賞を頂きましたが、タイムトライアル部門では…。以下は完走出来なかった感想です。敗因分析ですね(汗

最も大きな敗因として、ハードウェアや外部環境の特性調査、分析がほとんど出来ていなかったことがあげられます。たかがマインドストーム、されどマインドストームです。表面的には工数不足が主な要因ですが、チームメンバの組込み開発の経験不足から、これらの重要性をあまり認識していなかったのが真の要因かと思われます。

最後のパネルディスカッションでも、「組込み系開発においては、モデリングというトップダウンのアプローチと、組込み特有の技というボトムアップアプローチの両方が必要」というコメントがありました。この内容については今回のロボコン参加でいたく実感しました。

また、そもそも我々のモデルは速さを追い求めたモデルではなかった、言い換えると、速さのために必要な要素がモデリングできてなかった、ことも敗因かと思います。我々のモデルでは現在走行中のコース区間を認識し、各区間に適した走法に切り替えることを基本方針としておりました。しかし、区間と走法の対応関係については述べられておらず、具体的な走法アルゴリズムに対する確固たる戦略もありませんでした。

結果として具体的な走法アルゴリズムは個人任せでコードに埋もれてしまい、各アルゴリズムの妥当性をモデルで十分に検証できませんでした。また走行スピードを最適化するためのコースでの走りこみといった実施検証も不十分でした。このあたりは一つ目の敗因にもつながるかと思います。チーム新潮流さんだったと思いますが、「パラメータチューニングを行わなければならないモデルの時点でよくなかった」とのコメントも同じような意味が含まれているのではと思いました。

今回のロボコンに参加した我々若手メンバーにとっては、組込み開発の奥深さを窺い知ることができ、非常に良い経験になりました。運営にご尽力くださった大会関係者の皆様、また参加にあたりご協力くださった上司、先輩方にこの場を借りてお礼を申し上げます。本当にありがとうございました。

最後に負け犬の遠吠えになりますが、リスクを犯さずスピードを下げていれば完走は出来た!!とメンバー一同信じております。

・・・がしかし、もちろんチャンピオンシップ大会でも爆走します!(笑)

ライン

(株)リコー あジャイ子2 メンバー(3名) (五十音順)

久保田隆司 
 (株)リコー MFP事業本部 GW開発センター ソフトウェア生産技術開発室 

松崎昌也
リコーソフトウエア株式会社 プロダクト開発センター プロダクト開発2G 

矢崎洋平
(株)リコー MFP事業本部 GW開発センター ソフトウェア生産技術開発室 



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