こんなことやっている場合では・・・

ロボットが動いているのを見るのは楽しい。
楽しいのだけど、動いているのを見るだけではロボットがどういった手順でそう動いているのか分からない。
特にマイクロマウスのような知能型のロボットでは。
というわけで、シミュレータを強化しています。
作るのはめんどいけど、実機でいろいろデータを集めるよりもシミュレータの方が実験楽チンだしね、という理由も大きかったり。

現在作っているのは
・探索シミュレータ(迷路をどのように探索していくかの可視化)
・最短シミュレータ(ロボットがどの経路を選択するのかの可視化)
とそのアルゴリズムです。
この2つはだいたいできているのですが、可視化することで色々と問題が発生してきました。
その問題とは「そうなって欲しくはなかった」という経路を通過することです。
例えば、最短シミュレータの場合、現状のアルゴリズムを用いると最短経路の候補として、以下の4つの経路が計算されます(迷路はマイクロマウス2009クラシックエキスパート予選のもの)。


図1



図2



図3



図4


これら4つの経路を走行時間シミュレータの入力とすると、スラロームで走行する場合、図1の経路が選択されます。
しかし実はこれら4つの経路の中には、そもそも本当の最短時間経路が存在しません。
本当の最短時間経路は、スタート地点から北方向に2歩進んだのち、東に1歩移動し、さらに北に8歩移動するというものです。
スタート地点から北に2歩進んだ時の重みは58となっており、
その後東に進もうが北に進もうが重みはどちらも57なのでどちらが選択されてもよいのですが、どちらか一方を選択する形になっているので最短でない方向が選ばれる事も多々あります。
かといって安直に「周囲に選択候補が複数ある場合、どちらの方向の経路も計算する」とすると、
計算に必要なバッファサイズが分からないため、メモリが動的確保になり、最悪では分岐が多い場合にメモリを使いきっても計算できない可能性が有ります。
自分のマシンはとっても遅いので、今はまだこのような状況の対応策を考えなくてもよいかもしれませんが、コンマ1秒で全く結果が変わるような世界に身を置けるようになったらこういうのは重要になってくるのかな、とも思います(はたしてそんな世界に身を置けるようになるのか???)。
という訳で、今回はとりあえずの覚え書き、という事にとどめておきますが、何とかしないとなぁ。


今後の予定としては、
・センサの距離取得シミュレータ
を作る予定です。…とは考えているものの、距離≠センサ値ではないためなかなか作るのは厄介そうです。
使っているセンサの特性や外乱光による影響、壁の光反射率、LEDの反射光がどのように周りに影響を及ぼすのか…とか考えると頭が痛くなります。
まぁでもセンサ配置を考えたいだけだし、そこまで厳密に作る必要もないのかなという気もするので、指標程度に作ろうと思います。