AVE-1・ソフトウェアの秘密




探索方法



探索方法は最初拡張左手法を使っていました。

拡張左手法とは・・・

・基本は左手法(左に曲がれるなら左へ、駄目なら直進、それも駄目なら右へ。それすら駄目ならバック)。

・ただし、左手法で決定した先が、すでに探索済みであったら、未探索の方向へ曲がるようにする。

・すべて探索済みであったなら通った回数の少ない方へ進む。


といった方法です。「拡張」の部分は、人によっていろいろらしいので、(どう拡張するかはあなた次第って事です。)
↑は、一般的な拡張左手法とは少し違うかもしれませんが・・・。


初期のAVE−1は、秋月製のアセンブラで拡張左手法を用いて走っていました。
ところが、ハードウェア的な要因から、正確な走行ができず、正確なマップ・正確な現在の座標を得ることができませんでした。
その後、ハードウェア・ソフトウェアともに全面的な見直しを行ったため、拡張左手法の実装&検証は
この時点で中止しています。


その後、ロボコンマガジン8号〜14号を入手する機会があり、これに書かれていた
「等高線(後ほど詳しく書きます)を用いた探索方法」(いわゆる足立法のことです)
の考え方そのままに、GCCでコーディングを行いました。

また、このコードがちゃんと動くか不安だったので、Windows上で検証用のコードを書き、
等高線がちゃんと書かれているか、アルゴリズムが正確か、をテストしました。



なお、足立法とは・・

一言で表すと、
「一歩進むたびに、『どっちへ行けばもっともゴールに近いか?』を考え、それに従って進む」方法です。
細かく書くと、以下のようなものになります。



・探索していないところは、壁がなく単なる道であるとして、考えることにする。

・それを元に等高線を引く。
等高線とは、目標地点から一歩分離れた地点を1、2歩分離れた地点を2・・・というようにして、
(ほぼ)すべての区画に目標地点までの距離を書きこんだものである。
壁があるなら、距離情報を書きこまず、放置しておく。(後で自動的に書かれることもある。)

たとえば、目標地点の北側と南側に壁があった場合、
東と西の区画には壁がないので、「1」を書きこむが、北と南には壁がないので書きこまない。
次に、東と西の区画について同じように行い、「2」を書きこむ・・・といった具合。


・これを元に、もっともゴールに近い方向へ進む。

・もし、近い点が2つ以上存在するなら、未探索の方向へすすむ。未探索の方向が2つ以上あるなら、
好きなように優先順位をつけて進む。
(ロボコンマガジンでは、「未探索で直進の場合」「未探索で曲がる場合」「探索済みで直進の場合」「探索済みで曲がる場合」
の順に優先順位をつけていました。BASICMOUSEもやはりそうなっているようです。)

・進んだら、また再び等高線を引きなおし、再び進む方向を考える。




・・・といった方法です。進むたびに考えるので、結構重たい処理になります。
(現在のPCレベルでは一瞬ですが、クロックがたかだが10数Mhzのマイコンでは、結構苦しい処理です。)


また、今回から「2秒以上マウスが静止したら、走行を中止したものとみなす」
という規定があるため、進む→止まる→考える→進む・・・というような探索方法を使うと、場合によってはこの規定に
引っかかってしまう恐れがあります。(特にクロック数一桁MHz、命令一つ一つが重たいマイコンだと危険です。)


探索とは関係ありませんが、AVE−1はRS232Cから等高線の状態、探索の状態が見れるように
してあります。(ベストテクノロジー製のH8モニタに、ちょうど良いモジュールがあったため、流用させていただきました。)





戻る