はじめに
こんにちは、槇原です。この記事は「マイクロマウス Advent Calendar 2022」の23日目の記事です。タケぽんぬさんのはじめまして&今までの振り返りという記事が投稿されました。2019年からマウスをやっている方のようですが、このタイミングでブログをはじめたとのこのとなので今後の記事も楽しみです。
さて、今回はここ最近作っていた迷路シミュレータを作って実機でも動かしてみたのでそれについて書こうと思います。
迷路シミュレータについて
目的
今回作成した迷路シミュレータは実行するマイコンやPCに依存せずに迷路を解くアルゴリズムを試すことを目的として作成しました。
以前まではPi:Coのサンプルプログラムを参考に足立法を実装していましたが、斜め走行などいろいろ機能を実装することを考えてアルゴリズム部分だけをチェックしたいと思うようになったので単体でも動くシミュレータを作ろうと思いました。
できたもの
画面を更新するたびにチカチカするのですが最低限の機能は持っています。
現在は既知の迷路情報の表示・足立法の歩数マップの表示ができます。
また足立法のアルゴリズムに従って次のマスへの移動、未知の壁を塞いだ状態での最短走行が試せるようになっています。
実装上のポイント
マイコン上でも動作させることを念頭に置いて作成しています。迷路解析部はマイコンでもPCでも呼び出す部分になるので、独立したコードにしています。もう少し具体的には、図のように解析部には現在の機体座標、ゴール座標、壁情報を入力して、次に進むべき方角を返すものにしています。PC側ではそれをそのまま表示するようにして、マウスの実機では方角から軌道(直進・スラローム動作など)に変換し走行するようにしました。
C++の標準ライブラリもマイコン側では使えないこともあるので、解析部では基本的に外部のライブラリに頼らないような実装をしました。
つまづいたポイント
・二進数リテラル(0b1010のような二進数表記)はC++14からの機能で実はいつでも使えるわけではないらしいです。(2進数リテラル – cpprefjp C++日本語リファレンス)
gccを使っているときは二進数リテラルが使えるのですが、これはgcc拡張でRXマイコン用に使っていたCS+ではRXコンパイラを使っていて二進数リテラルは使えませんでした。
今回はCS+に合わせてB10101のような形式のマクロを作って対処しました。
実際の迷路で走らせてみる
さて、迷路を解く部分の実装ができたということで実際の迷路で走らせたいのですが16×16の迷路が家にない…
と思っていましたが、アールティでは現在月に一度迷路を開放しています!
今月は12/17に開放されていました。私も実際に走らせるためにオフィスに行きましたが、クラシックもマイクロマウスのどちらの参加者の方も来ていたので、走行の様子を見たり話を聞かせてもらったりアドベントカレンダーの残りの枠を埋めるように言われたりすることができました。
走行の様子はこちら
なんとかゴールはできましたが最短走行が思ったようにできていませんでした。小さい区画の迷路ではうまくできていたのですが、実際のサイズにすると試していないパターンが出てきたりしていろいろ問題点が見つかってきますね。シミュレータと合わせて効率よく開発していきたいです。
迷路開放についてのアナウンスは @rt_mouse でつぶやいているので確認してみてください!
【 #マイクロマウス 迷路貸し出しのお知らせ】
※時間変更に伴い再ツイート内容:マイクロマウス競技・クラシック競技の16×16迷路
場所:アールティのオフィス(秋葉原)
日時:12月17日(土)13:00~17:00
上記時間内は出入り自由!大きな迷路で走らせて機体の調整をしてほしいでちゅう! https://t.co/0KfkxGc9dk pic.twitter.com/EJ4Kiu8zwn— マウス係長@アールティ (@rt_mouse) December 14, 2022
明日のマイクロマウス Advent Calendarの記事はもすさんの工具の話だそうです。どんな内容なのか楽しみです!