前の記事はこちら RoboCupJunior Rescue New Simulation のプログラム
さて、いよいよマッピングに挑戦です。
で・・・Pythonを良く知らないので、文法をググりながらコーディングをしていきます。
今回は、自分のPythonの勉強を兼ねているので・・・できるかぎり単純なプログラムでマッピングをしています。
こういうマッピングは2次元配列に地図情報を書き込んでいくのですが・・・
今回は1次元配列を2つ使ってマッピングをしています。
出来たのがこれです!
マップは、NewSIMのページにあるサンプルコース(Area1-02)です。
RoboCupJunior Rescue New Simulation(DEMO) sample robot-4
相変わらず、元々ロボットに装備されているセンサーしか使っていません。
周囲6方向の距離センサーと、床の色を見分けるカラーセンンサー、あとは車輪の回転角を検知するロータリーエンコーダです。
ジャイロやGPSを使えば、より正確になると思いますが・・・基本のセンサーだけを使うことにこだわりました。
で・・・今回 Python の配列を使って・・・これはすごい(便利!)とおもったのが・・・
・配列の大きさを宣言せずに、配列の大きさがダイナミックに変化すること
例えば m=[1,2,3] に m.append(4) で m=[1,2,3,4]になる
・配列の最後の要素を簡単に取り出せること
例えば m=[1,2,3,4]のときに m[-1] で最後の4が取り出せる
・配列の要素の中にある数値があるかを簡単に調べられること
例えば m=[1,2,3,4]のときに result = 3 in m とすると、mの配列の中に「3」があるかどうか調べることができる。この場合は、 result は Ture になる。
これらを駆使して、マッピングのプログラムができました。
と・・・マッピングのプログラムは、意外とあっさりできたのですが・・・苦労したのはここからでした。
壁からの距離や、1タイル分の進む距離、90度回転の微妙な調整など・・・迷路を普通に進むための調整が大変でした。
努力の結果・・・上の動画のように、正確にマップを一周できるようになりました。
(誰もほめてくれないので、自分でほめときます。よくやった! 俺! 笑)