新機能・未知区間加速!
はじめに
こんにちは。そろそろ修論研究が佳境になってきた けり です。
今回の記事では、 マイクロマウス KERISE v4 に 最近搭載した、 新機能「未知区間加速」を紹介します。
既知区間加速と未知区間加速
既知区間加速
マイクロマウスをやっていると、「既知区間加速」という言葉はよく耳にするかと思います。
既に探索済みで、壁がないとわかっている直線部分を台形加速して走行するのが、既知区間加速です。
未知区間加速
一方、今回紹介するのは、「未知区間加速」なので、一見矛盾したことを言っているように聞こえます。
しかし、2マス先の前壁を判定できる機体ならば、 まだ通っていない部分でも加速することができるのです!
なぜ加速するのか
マイクロマウスの全日本大会では32x32の迷路を10分で走破しなければなりません。
最短走行ですら十数秒から数十秒かかるので、探索にはとてつもない時間がかかります。
実際に、探索のみや最短走行を5回走りきる前にタイムオーバーになってしまう例は少なくありません。
そのため、探索を早くする技術はとても重要になってきます。
どうやって2マス先の壁を判定するか
マイクロマウスにとって、2マス先の壁を判定することは意外と難しく、 赤外線フォトリフレクタではおそらく厳しいのではないかと思います。
ToFセンサを使用
一方、私が制作した KERISE v4 には、 前向きにToFセンサがついているので、 それによって2マス先の壁を見ることができるのです。
動画
それでは、実際に動画を見てみましょう。
新たに「未知区間加速」を実装した!既知の直線だけでなく、未知の直線も前壁がなければ加速する! pic.twitter.com/rMdGr2vPbO
— けり (@kerikun11) October 3, 2019
未知の区画でも、前壁がなければ加速できていることがわかります。
これなら探索時間をいくらか短縮できるでしょう。
難しかった点
ここでは、未知区間加速を搭載する上で苦労したことを紹介します。
実装がめんどくさい
探索中の処理は、1マスごとに壁を見ないといけないので、1マスごとに処理が独立していました。 なので、加速という、複数マスにまたがった処理を探索中に行うこと自体が結構大変でした。
横壁の読み間違いが怖い
前壁がないので加速をしていますが、その間も横壁は各マスごとに見なければなりません。
進行方向のズレを補正したり、なるべく姿勢を崩さずに加減速することが大切になってきます。
探索アルゴリズムも微妙に変更
未知区間加速を活かすため、足立法的には曲がったほうがいい場合でも、前壁がなければ直進するように変更しました。
この探索が本当に効率的かどうかはわかりませんが、 直線が多くなることで加速状態を維持できるので、 全体的には早くなっているように感じます。
計算時間が足りなくなる可能性がある
直線で加速している間も、横壁を見ながら通常の探索アルゴリズムを回さなければなりません。
今までの速度でできていたことも、速度を上げると間に合わなくなることがあるので注意が必要です。
僕の探索アルゴリズムだと、32x32の迷路で最悪の場合、 計算が間に合わなくなりそうでした。
最大速度を落とすか、他に何らかの例外処理が必要になりそうです…
加速できる上限
未知区間加速では、2マス先に壁があった場合、次のマスでターンをするため、 そのときには通常の速度に戻っている必要があります。
つまり、1マスの間で加速(または減速)できる分の速度が上限ということになります。
1マスで到達できる速度
物理の公式を思い出します。
始点速度$v_s$、終点速度$v_e$、加速度$a$、移動距離$x$に対し、
$$ v_e^2-v_s^2 = 2 a x $$
の関係がありました。 終点速度$v_e$について解くと、
$$ v_e = \sqrt{v_s^2+2ax} $$
が得られます。
僕のマウスのパラメータだと、
$$ v_e = \sqrt{300^2+2*4800*90} = 976 ~\mathrm{[mm/s]} $$
となりました。
ただ、横壁の見間違いが怖いので、現時点では 720 [mm/s] 程度に抑えて走行しています。
まとめ
もう過去にやっている人がいたとしたらちょっと恥ずかしいのですが、 新概念「未知区間加速」を紹介しました。
マイクロマウスは知的ロボットと呼ばれるくらいなので、 探索部分をもっと工夫して賢いマウスを作りたいですね!
ではまた!