2008年秋,東京代々木の国立オリンピック記念青少年総合センターで,「MDDロボットチャレンジ」(情報処理学会 組込みシステム研究会主催)が開催されました。
MDDロボットチャレンジは,小型飛行船ロボットを制御するシステムを開発し競うコンテストです。ただし,単に飛行船を飛ばすだけではなく,飛行船を制御するソフトウェアをMDD(Model Driven Development:モデル駆動開発)に従って開発します。その過程で得られるモデル(ソフトウェアの設計図)や,実際の飛行をコンテスト形式で競い,組込みシステム開発の教育実践を目的としています。参加者は,組込み技術を学んでいる大学生や専門学校生,組込み技術を専門とする企業の技術者などさまざまです。
京都コンピュータ学院(KCG),京都情報大学院大学(KCGI)と,株式会社ヒューマンエンジニアリングアンドロボティックス(HERO)の産学連携チーム「京魂英雄(きょうこんひーろー)」は,2008年のMDDロボットチャレンジの大会に前年にひき続き参加し,自動航法競技で単独1位を獲得しました。「No.1 & the Only One!」の結果となりました。
2007年の夏休みのある日,KCGIの江見准教授の「飛行船が飛びます!」という謎の一言で,KCGIの学生2人,KCGの学生3人が百万遍キャンパスに集まりました。HERO社のエンジニアの姿もありました。この時点では誰も,MDDロボットチャレンジについて知らされていませんでした。しかしこの日,プロジェクトが発足するという急展開を迎えることになります。
実はこの日M102教室で,MDDロボットチャレンジについて,大会実行委員長である二上貴夫氏(東陽テクニカ)による熱いトークが繰り広げられたのです。KCG・KCGIの5人の学生はすぐに参加するという意思を示し,組込み技術を得意とするHERO社のエンジニアもメンバーに加わることになりました。これがMDDロボットチャレンジ参加のきっかけとなりました。
しかし,参加するという決意を示したものの,スケジュールは大変厳しいものとなりました。大会本番までは残り2ヵ月。他の大学や企業のチームは,5月頃から準備を始めているので,3ヵ月近く遅れたスタートとなりました。一般的に,厳しいスケジュールの中で連日連夜,開発に取り組むと,いわゆる「デスマーチ」になり,病人が出ることも珍しくありません。遅れを取り戻したいKCG・KCGIの学生たちでしたが,「笑ってお仕事」をコンセプトに決め,楽しく活動を続けることを強く意識して,全力で開発に取り組みました。その結果,短い開発期間でしたが,本番までに無事,飛行船を飛ばすためのプログラム,モデルとも完成に漕ぎ着けました。苦しみながら取り組むのではなく,楽しく取り組んだことが成功に繋がったのでしょう。
そんな笑ってお仕事をしている2007年のチームの姿を見て,2008年は多くのメンバーが集まりました。筆者(後藤)もその1人で,昨年の大会当時は他大学の学生でしたが,たまたま(?)MDDロボットチャレンジの大会本番を見学しており,そこでKCG・KCGIの技術の高さと楽しそうな姿を見て感銘を受けたのを覚えています。もしかすると,これがKCGI入学のきっかけだったのかもしれません。
その後,春には2008年の大会参加プロジェクトが発足し,KCGIからの参加者が8人に増え,合計15人のチームとなりました。昨年の参加者が笑ってお仕事をしている姿を見て,自分たちも「笑ってお仕事をしたい!」という気持ちになったのかもしれません。
2008年は15人での開発となりました。昨年に引き続き,ハードウェアとファームウェアに関してはHERO社の若手技術者に担当していただきました。その結果,KCG・KCGI側は,モデリングとソフトウェア開発に全力投球できました。
この機会に,これまで講義で学んできたことを実践するべく大規模ソフトウェアの開発手法を踏襲することにしました。自動航法競技の担当と,相撲競技の担当の2つのグループに分かれて,それぞれ開発プロセスを計画し,リーダー,モデリング,コーディングなどの役割分担を決定しました。筆者を含むKCGIの1回生は,日本語プログラミング言語「ドリトル」を使って相撲競技のモデリングと実装を担当することになりました。「ドリトル」は教育用のプログラミング言語で,オブジェクト指向にも対応しています。
われわれのチームでは,マインドマップとUML(Unified Modeling Language)とを用いてソフトウェアのモデル化を行いました。マインドマップとは,本来は絵と言葉によって思考プロセスを書きとめていく発想法ですが,今回はMDDロボットチャレンジの全体像を掴むための分析方法としてUMLモデリングの前段階に使用しました。これによって,プロジェクトの方向性が定まり,どのようなソフトウェアを作っていけばよいのかメンバー全員が把握することができました。その後,UMLでのモデリング作業に入りました。UMLとはオブジェクト指向モデリング言語です。KCGIでの「オブジェクト指向システム設計」の授業を通じて理解しているメンバーが多かったことから,このモデリング言語を選びました。モデル化の作業は,モデリング担当がモデルを作り,そのあと他のメンバーとディスカッションをし,修正が必要であれば反映させる,という方法を繰り返し行いました。コーディング後に修正をするよりも,モデル化の段階で可能な限り不具合の可能性を見つけて修正し,矛盾のないものにしていくよう努めました。
筆者(高瀬)は主に,相撲競技のモデリングを担当しました。モデリングは授業で経験しましたが昨年のMDDロボットチャレンジには参加しておらず,何から始めてよいのか分からない状態でした。ですからまずはマインドマップを描いたり,メンバーに質問したりして,飛行船の仕組みを理解することからはじめました。飛行船の仕組みを理解できたら,次はUMLでのモデリングを,コーディングや機体作成担当のメンバーから意見を聞きながら行いました。
MDDロボットチャレンジでは,このモデルが審査対象として大きなウェイトを占めます。モデルやチーム活動の成果を1つのドキュメントとして提出しました。このドキュメントの作成は主に筆者(後藤)が担当しました。
昨年の大会は「ドリトル」を使用して参加しましたが,2008年は日本語プログラミング言語と一般的なプログラミング言語との作業工程の比較を行うため,自動航法競技にはプログラミング言語「C#」を使用し,相撲競技部門では「ドリトル」を使用しました。
日本語プログラミング言語は,日本人にとって扱いやすいプログラミング言語となっています。日本語のネイティブスピーカーがプログラミングを初めて学ぶ場合,日本語で記述されたプログラムのほうが馴染みやすく,学習しやすいと考えられます。また,日本語の設計図をもとに日本語でコードを記述することができるので,作業効率もアップします。前回,今回と「ドリトル」でのモデリング,コーディングを担当した村上智史さん(KCGI1回生)は,設計図をもとにコードを書いた際,日本語プログラミングは「設計さえ固まってしまえば実装は難しくない」と言っていました。彼のプログラミング能力の高さ(2007日本語プログラミングコンテスト「ドリトル」部門金賞を受賞)と,ドリトルの使いやすさを物語った言葉だといえます。
分析,設計,コーディングと,ソフトウェア開発を進めましたが,ハードウェア制御のソフトウェアの場合は実際にモノを動かさなくてはなりません。大会本番では飛行船を正確に飛ばさなくてはなりません。筆者らが担当した相撲競技では,飛行制御のソフトウェアを開発し,大会本番はコントローラーを通してパイロットが飛行船を操作します。飛行船はデリケートで,人間が感じないような空気の流れや気温の影響を受けます。このような外的要因を考慮して操作することが,相撲競技の難しさでもあり面白さでもあります。
わがチームでは,「ドリトル」の実行画面上からPCのキーボードで操作できるコントローラーを開発しました。また,昨年の反省を活かし,機体重量を10%以上軽量化,駆動モーターの選択も工夫して,機動力抜群の仕上がりとなりました。
まずは競技会場で,機体の微調整が念入りに行われました。1グラム程度の重さでも飛行に大きく影響します。担当者によって,重心の確認,基本動作の確認,ジャイロ等のセンサーの動作確認など,チェックリストの順に行われました。
先に自動航法競技が始まり,あっという間にわがチームの出番となりました。審査員がチーム紹介をしている後ろでは,最後まで機体の微調整が行われていました。合図とともに,「京魂英雄」が離陸しました。あとはセンサーを頼りに飛行船が動く自動制御です。第1通過点を無事に通過し,第2通過点もかろうじてうまく通過したのですが…その後は予定コースを大きく外れてしまいました。ゴール地点ではない場所でしたが,着陸には成功し,得点を重ねました。結果,参加全チーム中最高の9ポイントを獲得し,2位(4ポイント)以下に大差をつけて,見事優勝を果たしました。
相撲競技はトーナメント方式で行われ,筆者らはパイロットとその補助を務めまし た。抽選の結果,1回戦の第1試合で昨年度総合優勝のチームと対戦することになり,機体の特長である機動力を活かす,会場の気温や空気の流れを考慮する,などといった作戦を練って試合に臨みました。パワー重視で迫りくる相手を優雅にかわすという見せ場もありましたが,残念ながら初戦敗退(相手チームは優勝)。
今年の結果は残念なものとなりましたが得るものも大きく,大会の様子や他チームの飛行船と対戦した体験は来年への糧になりました。来年は総合優勝を目指し,開発や戦略に取り組んでいきたいと思います。
【モデル審査】 飛行競技2種目について,その仕様に基づき作成したモデルを,事前に提出し審査を受ける。モデルに基づくソフトウェア開発を推進してソフトウェアの品質を高める手法を身につけることが大会の主眼の1つであり,配点の半分以上を占める。プロジェクトの大規模化や,多人数のエンジニアでの開発が増えている現在,文書化やモデル化など,言葉や図を用いてプロジェクトの方向性や目標を明確にするためのコミュニケーションは欠かせないという側面もある。
【自動航法競技】 飛行船を出発地から離陸し,決まったポイントを通過しながら目的地に着陸する様に航行させることを競う。飛行船は,地上に配置された超音波センサーによって自分の位置を検知し,基地局であるノートパソコンに送信する。基地局は位置情報をもとに,プロペラを制御する命令を飛行船に送る。これにより,飛行船は予め決められたルートを自律的に飛行する。
【相撲競技】 1対1で争う。それぞれの飛行船が後部に長いリボンを付けており,先に相手のリボンに触れる,または相手を場外に押し出した飛行船が勝ちとなる。試合時間は5分。制御コントローラは各チームに委ねられており,マウスやキーボードで操作するチーム,ゲームのコントローラやジョイスティックを使うチーム,自作コントローラで挑んだチームなどさまざまであった。
小型飛行船ロボットの制御を競う「MDDロボットチャレンジ」自動航法部門で, 見事1位に輝いた「京魂英雄(きょうこんひーろー)」。この産学連携チームをまとめたのはKCGI2回生の高橋修司さんだ。チームリーダーとして前大会の失敗を教訓に,マインドマップを導入した分析やシミュレーションソフトを使っての試行錯誤が功を奏し,並み居る〝強敵〟を抑えて快挙を達成した。「机上での勉強だけでなく,KCGIが目指している〝実践に即した研究〟を経験できたのが私としても,メンバーにとって意義深いと思います」と語り「自動航法でトップになれたのはHERO(ヒューマンエンジニアリ ングアンドロボティックス)社の技術力に支えられた面も大きい。KCGI,KCG側は今回の反省点を洗い出して,来年こそは総合優勝を掴み取ってほしい。なかなか難しいことですけどね」と微笑みながら後輩に夢を託す。「思い出として楽しくもあり,あるときは辛かった」という高橋さんに話を伺った。
―MDDロボットチャレンジは昨年も出場しましたね
高橋 江見圭司准教授が「KCGIで飛行船が飛びます」と突然言ったのが2007 年8月のことでした。技術者らしき人(※1)が,おもむろにキャリーカートを引きずってきたのですが,何かおかしい。カートの中からユニットが出てきただけでした。「飛行船だろ?」って正直,頭が混乱したのを覚えています。空をゆったりと舞う,あの巨大な飛行船をイメージしていましたからね。でも解説を聞きながらユニットが動く様子を見て,これが飛行船を飛ばす源になるのか,と非常に興味がわきました。10月に大会があると聞かされ,迷うことなく「参加したい」と声を上げました。
※1 二上 貴夫氏 (株)東陽テクニカ MDDロボットチャレンジ2007実行委員長
でも開発期間は2ヵ月足らず。まともにやったのでは,間に合うはずがありません。 するとKCGIの別の学生から「ドリトルでプログラムを作るのはどうだ」との意見がました。礎ともいえるハード面はHERO社の方が担当してくださり,大会に向けて設計と分析を大急ぎで繰り返したことが,今でも鮮明に思い出されます。でも大会では残念ながら,飛行船はうまく飛びませんでした。「参加することに意義がある」レベルでした。
―初チャレンジの教訓はありますか
高橋 製作期間は非常に短かったし,大会では操作でケアレスミスを犯してしまった,など言い訳はいくらでもできます。一方で,ドリトルで参加できた,という自信も同時に得ることができました。でも,やはりこの“惨敗”を経験し,何とか次回は,と思いを強くしたのは確かです。大会で学んだことは数多かったですしね。たとえば飛行船そのものの重量。1グラム,2グラム軽くすることで飛行ががらりと変わることが分かりました。
―そしていよいよ「リベンジ」に向けてスタートを切ったわけですね
高橋 スカウトするなど人材をこちらで集める方法もあったのですが,前年の私たちの活動を見て,KCGIから8人,KCGから1人集まってくれました。それに前回に続きHERO社のスタッフの方々を加えチームを結成。次に大事なのは役割分担でした。このプロジェクトに参加すれば単位がもらえるというわけではありませんし,やはり個々の意欲と自主性を優先させようと思いました。KCGIの講義「リーダーシップセオリー」で学んだことを思い出し,実践に移したわけです。適材適所よりもむしろ自主性を重視しました。
役割を決め,自主性を尊重する方針を固めたからには,「絶対こうしなさい」という類のことは言わないでおこうと決めました。でも今になって考えると,この方針が良かった点でもあり,失敗した点でもあると思います。それぞれが任せられた部門に専念し,できない場合は自ら必死で勉強して克服した,というような例が多くみられた半面,目が行き届かなかったため,対策が手遅れになってしまったということも…。チームによるプロジェクト進行の難しさを痛感しました。
―製作でもいろいろ工夫を凝らしたようですね
高橋 昨年はプログラミングの言語としてドリトルを使いましたが,ある講演(※2)でC#を組込みに使うことも可能という話を聞き,この技術を使って臨もうと決めました。さらにメンバー全員が意見を持ち寄って「マインドマップ」を作り,製作の全体像を把握するとともに,日々の成果を報告しあい,フォローするといった形式で進めました。これは製作が佳境を迎えると,なかなか機能しませんでしたけどね。また,実機だけでなく,ソフトウェアのみのシミュレーションによる分析ができたのも大きかったですね。実機による試運転なら1000円もする電池が3時間ほどしか持たない,ヘリウムガスも非常に高価でコストはかかる,セットアップにも時間がかかります。シミュレーションを用いると,温度,風といった,いろいろな環境の変化への対応も分析できますしね。パイロットの腕も上がりました。大会の審査でも高く評価されました。
※2 太田寛氏 マイクロソフト エンベデッドエバンジェリスト
―そして大会当日,「京魂英雄」は華麗に舞いました
高橋 自動航法競技では無事に飛んでくれて1位を獲得することができた。でも,大会で最も重視されているモデル審査は,出場11チーム中5位,今年新設された相撲競技は1回戦負けですから,まだまだもろ手を挙げて喜ぶというところまでには至っていません。
ただ,私たちのチームは産学連携チームでしたので,学ぶことが非常に多かったのは事実です。われわれ学生にとっては,講義では補えない実践的な開発を体験できる。実際の業務ではもっとシビアかもしれませんが,企業の方々とともにプロジェクトに取り組めたことは,開発手法の評価を受けるといった点においても大きな経験になりましたね。一方,私が言うのはおこがましいかもしれませんけど,企業側にとっても,本業の開発案件ではリスクが大きく手が出せないような開発手法を試みることができる,小規模プロジェクトに全員で参画でき全体を見る目が養える,といったメリットがあったと聞いています。
私自身は,リーダーとしての力不足を猛省しています。開発を急ぐ余り,大会が近づくにつれてチームとしてのまとまりが保てたのだろうか,サポート体制は果たして十分だったのだろうか…。オブジェクト指向設計やプロジェクト管理についてKCGIで勉強はしましたが,やはり実践は大変だと痛感しています。これらの教訓を土産に,次のリーダーにバトンを渡したいと思います。