新機能・クラッシュ後の自動復帰!
この記事は、Micro Mouse Advent Calendar 18日目の記事です。
昨日の記事は mako さんの「マイクロマウス2019 機体紹介」でした。
湾曲したセンサ部にフレキシブル基板を使っているのはいいアイデアですね!
マウサーたちは積極的に最新技術を取り入れているのですごくワクワクします!!
はじめに
改めまして、こんにちは。けりです。
今回の記事では、
今年私が制作したマイクロマウス KERISE v4 に搭載されている
新機能「 クラッシュ後の自動復帰 」を紹介します。
目指すは自律賞
マイクロマウス競技には、「自律賞」という賞があります。
現行の競技規定では次のように記されています。
自律賞: 持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマイクロマウスの内、最短走行時間を記録したマイクロマウスに対する評価
つまり、競技の全行程を 完全自律 で終えるというものです。
32x32迷路での完全自律マウスはまだいない
実は、過去のマイクロマウス競技では、自律賞を獲得したマウスが毎年存在しました。
しかし、ここ数年で自律賞を獲得したマウスはありません。
その理由は、競技ルールの改正があったからです。
2015年までは、自律賞の規定は次のようになっていました。
自律賞(2015年まで): 1回目のスタートから持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマウスの内、最短走行時間を記録したマウスに対する評価。 全走行を完了したマウスがない場合は、最初にタッチした時までの最短完走時間を記録したマウスを評価 する。
以前のルールでは、最後に追加の1文がありました。
たとえ探索走行だったとしても、1回でもゴールに達したマウスがいれば 必ず受賞者が現れる というルールでした。
それが、2016年からは、以下の規定の ベストマウサー という賞が追加されて、 自律賞は、 完全自律マウス に限定されました。
自律賞(2016年より): 持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマイクロマウスの内、最短走行時間を記録したマイクロマウスに対する評価
ベストマウサー(2016年より): 1回目のスタートから最初に操作者がロボットに触れた時までの最短完走時間を記録したマイクロマウスを評価する
この ルール改正後に自律賞を獲得したマウスはまだ存在しない のです。
僕はこの賞を目指しています!!
完全自律マウスの課題
現行の自律賞、つまり完全自律走行を達成するためには、
- 制限時間内に全行程を終えるための時間管理
- 状況に応じた走行パラメータの自動選択
- タイヤのホコリ耐性
- 絶対にクラッシュしない
が必要となります。
最短記録と自律走行のトレードオフ
上記で挙げた 絶対にクラッシュしない という条件ですが、これはかなり困難な条件です。
なぜなら、マイクロマウスは最短走行時間を競う競技なので、 いい記録を残すためには クラッシュするギリギリ を攻めなければなりません。
最短走行の記録と自律走行にはトレードオフがあるのです。
新機能・自動復帰による解決
そんな困難な 完全自律走行 ですが、別の視点の攻略法があります。
それが今回紹介する クラッシュ後に自動復帰するマウス です!
おそらく今までに自動復帰するマウスを作りたいと考えた人は少なくないと思います。
ただ、実装がかなり複雑で、実現した人はいませんでした。
僕は 約1年半前 から取り組み始め、遂に今年、 自動復帰マウス を実現しました!
自動復帰の様子
最短走行でクラッシュしてしまったとき、次の要領で自動復帰して走行に戻ります。
- クラッシュしてしまい、姿勢が乱れる
- 前壁補正などを用いて、位置と姿勢を整える
- 既知の迷路と比較して、自己位置が一意に定まるまで周辺区画の探索を行う
- 自己位置を特定したら、リタイアにならないようにゴール区画を訪問する
- スタート区画に戻り、次の最短走行を行う
今年の新機能「クラッシュ後の自動復帰」の様子です!最短走行でクラッシュ → 前壁補正で姿勢を整える → しばらく周辺を探索 → 自己位置を特定 → 記録を残すために一度ゴールを訪問 → スタートへ戻る → 次の最短走行 pic.twitter.com/1WFvqikmfg
— けり (@kerikun11) December 16, 2019
クラッシュ後の姿勢復帰方法
クラッシュ後は姿勢が乱れ、区画の中央から外れた位置にいる場合がほとんどです。
そこで、マウスの前向きに取り付けてある ToF測距センサ で辺りを 一周走査 して平らな壁を探す方法を取りました。
平らな壁を見つけたら、前壁用赤外線センサによって姿勢を整えます。
クラッシュ直後は、姿勢を整えるために1周回って平らな壁を探す。そして前壁補正によって区画の中央へ復帰。 pic.twitter.com/jMbGSj47mu
— けり (@kerikun11) December 16, 2019
自己位置同定アルゴリズム
クラッシュした後は、自分の位置がわからなくなってしまうことが大きな問題です。
そこで登場するのが、既知の迷路情報を用いた 自己位置同定アルゴリズム です。
クラッシュする可能性のある最短走行を行うのは、探索走行のあとなので、マウスは 迷路全体の壁情報を保持 しています。
クラッシュ後、周辺を適当に探索して、 既知の壁情報と比較 することで自己位置を特定するのが自己位置同定アルゴリズムです。
今回、私が実装した自己位置同定アルゴリズムには、次のような特徴があります。
- 探索済みの迷路ならば、迷路内のどの位置・方向からでも復帰可能!
- 自己位置復帰中に スタート区画 を避ける機能を搭載
これらについて、簡単に説明をします。
あらゆる位置・方向からでも復帰可能
32x32マス、および東西南北4方向の回転の すべての場合に対してパターンマッチング を行い、 自己位置の候補を洗い出します。
したがって、迷路の中のどの位置や方向でクラッシュしたとしても復帰が可能です。
計算はかなり重たいのですが、 1マスでもズレている場合は壁は食い違いだらけなので、 すぐに打ち切ることができます。
いろいろな工夫を凝らして、1マス進むのにかかる時間、約300ミリ秒以内で計算を終えることができました。
スタート区画を避ける理由とその難しさ
マイクロマウスでは、 ゴールに到達することなくスタート区画に返ってきてしまった場合、 その走行はリタイア扱いとなってしまうので、自律賞を得ることはできません。
クラッシュするのはだいたい最短走行時なので、 まだゴールに達しておらず、自己位置同定中の無作為な探索でスタート区画に行ってしまう可能性があります。
そもそも自己位置がわかっていないのに、スタート区画をさけることはとても困難です。
そこで、無作為な探索中でも、 スタート区画にマッチする方向には行かない機能 を実装しました。
その結果、自己位置同定の初手スタートなどの特殊な場合を除き、スタート区画を避けることに成功しました!
シミュレータによる検証
自動復帰のアルゴリズムはPC上のシミュレータで動作確認をしています。
以下の動画では、上の自動復帰の動きをシミュレータで再現してみました。
画面下に既知の迷路とパターンマッチングしたときの候補数が表示されていて、 これが1になると自己位置を特定できたことになります。
この動画の動きをシミュレータで再現してみた。左が正解の迷路で、右がロボット内の迷路。クラッシュ後は自己位置がわからないので、とりあえず迷路の中央から動き始めている。今回の場合、90度回転した状態になってるのでかなりわかりにくい… pic.twitter.com/BFboHNwQH1
— けり (@kerikun11) December 17, 2019
全日本大会での結果
今年の 第40回 全日本マイクロマウス大会 2019 で、 自動復帰を携えた KERISE v4 は、32x32の迷路で自動復帰を披露し、ノータッチで競技を終えました!!
だが、しかし…!
残念ながら自律賞の獲得はできませんでした…
なぜなら、制限時間に間に合わず、走行回数が1回分足りなかったからです…(泣)
いやぁ…とてもショックです…
やはり32x32の迷路は壮大でした…
ただ、審査員の方には高く評価して頂き、特別賞をもらいました。
ありがとうございました!
詳しくは大会報告の記事をご覧ください。
おわりに
自律賞を目指して新機能「自動復帰」を搭載したのですが、 今年は壮大な迷路を前に目標を果たすことができませんでした。
来年には時間管理を徹底して、完全自律の自律賞を獲得したいと思います!!
さらに賢く成長した KERISE に好ご期待!
明日の Micro Mouse Advent Calendar は、Mice ふくださんの Pythonでターンシミュレータ です。お楽しみに!