特集
» 2006年04月27日 00時00分 公開

アルゴリズム改良で分かった“組み込みならでは”“ハッスルCATS”のETロボコン2005参戦記(後編)(3/3 ページ)

[赤穂/ラン/唐/渡辺 キャッツ,@IT MONOist]
前のページへ 1|2|3       

状態遷移表を利用した実装

 走行戦略を練り直し、それぞれのコースに応じた走行案を設計したところで、自社製品のCASEツールであるZIPCと拡張階層化状態遷移手法を用いて詳細な設計を行っていきました。まず、すべての走行案のベースとなる黒の実線走行から取り組んでいきました。黒の実線走行では、新たな走行案とループカウントのリセットタイミングについて状態遷移表を用いて設計を試みました(図6)。


ZIPCを使用した走行案の状態遷移表 図6 ZIPCを使用した走行案の状態遷移表

 走行案を状態遷移表にするに当たり、すべての状況を状態としてとらえ設計しましたが、複雑で見づらいものとなってしまい、チーム内のメンバーだけでなく自分自身も混乱させてしまいました。

 ZIPCの機能により、作成した状態遷移表からCコードを生成して、実機に載せて走らせてみたところ、走行アルゴリズム以前に複雑な設計をしてしまったためレスポンスが悪くなり、とても安定した走りとはいえませんでした。

 新しい走行アルゴリズムの設計に時間がかかり、優勝への兆しが見えなくなってきていました。設計書となる状態遷移表が複雑で見づらいものだったため、チーム全員で設計を行っていくことができなかったこともあり、新しい走行アルゴリズムの設計と予選会のプログラムの最適化を行う2つのグループに分かれて作業を行うことになりました。

新規に作った走行アルゴリズム

 新しい走行アルゴリズムでは、設計と実機テストを繰り返し行っていく中で、走行アルゴリズムの粗(あら)が見つかりました。もともと推進力を得るために、一定までかじを切ったらかじを戻すべきだと考えていましたが、実機テストをしたところ、カーブで曲がりきれないケースが多々あること気付きました。そこで、かじを戻すのをやめて、一定までかじを切ったらかじの位置を維持することにしました。

 実機テストを行う中で気付いたことがもう1つありました。一定となるかじの限界位置をプログラムのループカウンターによって検知していたのですが、かじを切り返すたびに値の基準にしていた中心がずれてしまっていることが分かりました。状態遷移表上では、かじの切り返しなどにかかる時間を無視していたため、論理的な数値と実際の数値に誤差が生じました。

 そこで、基準となる中心を維持するために、タッチセンサを使用することを考えました。タッチセンサとは、かじ部分に付いているセンサで、かじが真っすぐかどうかを判定するためのものです。タッチセンサの精度はあまり良いとはいえない代物でしたが、中心を検知するだけなら何とかなると判断し、使用することにしました。タッチセンサがONからOFFになったときにプログラムループカウントをリセットし、中心の位置を維持しようとしました(図7)。

タッチセンサを使用したかじ位置の判定 図7 タッチセンサを使用したかじ位置の判定

 かじの切り方とタッチセンサによる中心位置の維持を設計した状態遷移表を図8に示します。

かじとタッチセンサの状態遷移表 図8 かじとタッチセンサの状態遷移表

 シミュレーションを行い、論理的なバグをなくしたうえで、実機テストを行いましたが、結果は失敗に終わりました。原因はタッチセンサの精度が想像以上に悪かったことと、プログラムカウンターでは、均等な間隔を測ることができないことにありました。

 チャンピオンシップ大会では、予選会のときよりも与えられた開発期間も短く、黒の実線走行をベースにほかの走行アルゴリズムを考えていたため、新たに考えた走行アルゴリズムを1つも実装することができませんでした。そのため、チャンピオンシップ大会は予選会のプログラムを最適化するチームに委ねることとなりました。

既存プログラムを最適化した走行アルゴリズム

 既存プログラムの最適化を目指した開発チームは、より安定した走行を目指しました。まず、予選の失敗を踏まえて敗因分析を行い、理論上問題のないアルゴリズムをコード化し、走行体に実装しました。

 通常のエッジ走法では余分な処理が数多く存在していたため、かじによる制御が遅れて不安定な走りになることが多くありました。それを避けるため、まずアルゴリズムの無駄をなくすべく、予選会で設計した状態遷移表の最適化を行いました。テストを行った結果、予選より若干安定して走行しましたが、長時間走るとふらつきが発生してコースアウトしてしまいました。処理の最適化を行ったのですがなぜか安定しません。アルゴリズム自身が複雑なのではないかと考え、アルゴリズムを最適化・改良を行い、安定した走行を実現しました。

 予選では、タッチセンサがON状態の間のみにかじ幅を調節し、破線走行としていました。しかし、常にタッチセンサの状態を見なくてはいけなくなり、かじの制御が対応し切れませんでした。そこで、新しい破線走行を考案しました。破線走行時のみかじを振るスピードを左右で変化させるものです。試験的に走らせた結果、自社コースで約8割の走破率でした。

チャンピオンシップ大会での激走とレース結果

 チャンピオンシップ大会では、本番走行の前に試走時間が設けられました。そこで最終的に破線走行をテストしたところ、自社コースでの条件では光センサーは漆黒線の値を取得できたのですが、レース会場ではまったく取得できません。さらにレース会場の環境は、通常走行にも影響を与え、走行が不安定になってしまいました。このままでは完走も危ういという問題に直面しました。結局、破線走行はあきらめ、何とか試走時間内に通常走行で安定した走りができる程度まで調整するのがやっとでした。

 初戦のINコースは超速い走行速度で会場の皆さんを魅了しました。私たちもひと安心できて、次のOUTコースで同じような走行ができれば、入賞する可能性もあると思いました。

チャンピオンシップ大会のレース結果 写真3 チャンピオンシップ大会のレース結果。ハッスルCATSは合計タイム55.6秒でフィニッシュ。優勝したムンムンとのタイム差は7.4秒だった。OUTコースでのマシン・コンディションが万全だったら……

 INコースでのレースが終わり、OUTコースの開始を待つ間に不注意で走行体を地面に落としてしまいました。このまさかの出来事でチームの皆がびっくりしました。急いで走行体を点検して、応急の補強作業を行いました。そして臨んだOUTコースでの走行では、スタート直後にコースアウトしてしまい、リカバリー走行でコースには戻ったものの、いきなりタイムをロスしてしまいました。その後、落下事故の影響なのか、コースアウトしたせいなのか分かりませんが、直線上でも加速されず、走行タイムは伸びませんでした。

 結局、通常走行でIN/OUTコースともに完走できましたが、入賞にならず、惜しくも第4位になりました。

ETロボコンに参加して学んだこと

ラン  優勝を目指してチャンピオンシップ大会に参加しましたが、あと一歩で優勝に届く第4位という惜しい成績になり、本当に悔しいです。私はETロボコンの参戦により、仕事で常に一歩前に踏み出す意識を身に付けられ、組み込みへの熱情が高まりました。今後、組み込み業界で誰にも負けないシステムを作る夢を追いかけたいと思います。

  ETロボコンの参戦で、最初の分析から、最後の実装まで、UML表記法とZIPC状態遷移表の設計手法など、組み込みならではの専門知識を身に付けました。私自身にとっては、大きな成長になると思います。しかも、ETロボコンに参加することにより、組み込み業界に対して持っていたイメージも変わり、組み込みの面白さを実感しました。

渡辺 ETロボコンには新人教育の一環として参加させてもらいました。右も左も分からぬ組み込みの世界をETロボコンを通して体験し、非常に密度のある経験ができました。ハードウェアを意識したプログラミングや、モデルベース開発、何よりグループワークの難しさを知り、まだまだ力不足な自分ですが、良い経験になったと感じています。

赤穂 ETロボコンで開発した自律走行型のマシンはかなり小規模なシステムで、最初は余裕だと思っていました。ですが、実際はそんなに単純なものではありませんでした。中でも一番苦労したのは、理論的に動作確認をしたものが実機で通用しないことでした。もっとトライしてみたかったことは多々ありましたが、レースは第4位という結果で幕を閉じました。悔いの残る結果ではありますが、ETロボコンに参加して学んだことをこれからの作業に生かしていきたいと思います。(完)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.