新機能・クラッシュ後の自動復帰!

新機能・クラッシュ後の自動復帰!

この記事は,Micro Mouse Advent Calendar 18日目の記事です.

昨日の記事は mako さんの「マイクロマウス2019 機体紹介」でした.
湾曲したセンサ部にフレキシブル基板を使っているのはいいアイデアですね!
マウサーたちは積極的に最新技術を取り入れているのですごくワクワクします!!

はじめに

改めまして,こんにちは.けりです.

今回の記事では,
今年私が制作したマイクロマウス KERISE v4 に搭載されている
新機能「クラッシュ後の自動復帰」を紹介します.

KERISE v4

KERISE v4

目指すは自律賞

マイクロマウス競技には,「自律賞」という賞があります.
現行の競技規定では次のように記されています.

自律賞: 持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマイクロマウスの内、最短走行時間を記録したマイクロマウスに対する評価

つまり,競技の全行程を完全自律で終えるというものです.

32x32迷路での完全自律マウスはまだいない

実は,過去のマイクロマウス競技では,自律賞を獲得したマウスが毎年存在しました.
しかし,ここ数年で自律賞を獲得したマウスはありません.

その理由は,競技ルールの改正があったからです.
2015年までは,自律賞の規定は次のようになっていました.

自律賞(2015年まで): 1回目のスタートから持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマウスの内、最短走行時間を記録したマウスに対する評価。全走行を完了したマウスがない場合は、最初にタッチした時までの最短完走時間を記録したマウスを評価する。

以前のルールでは,最後に追加の1文がありました.
たとえ探索走行だったとしても,1回でもゴールに達したマウスがいれば必ず受賞者が現れるというルールでした.

それが,2016年からは,以下の規定のベストマウサーという賞が追加されて, 自律賞は,完全自律マウスに限定されました.

自律賞(2016年より): 持ち時間内に全走行が完了(最後にスタート地点まで戻る)するまで、ノータッチで走り切ったマイクロマウスの内、最短走行時間を記録したマイクロマウスに対する評価
ベストマウサー(2016年より): 1回目のスタートから最初に操作者がロボットに触れた時までの最短完走時間を記録したマイクロマウスを評価する

このルール改正後に自律賞を獲得したマウスはまだ存在しないのです.
僕はこの賞を目指しています!!

完全自律マウスの課題

現行の自律賞,つまり完全自律走行を達成するためには,

  • 制限時間内に全行程を終えるための時間管理
  • 状況に応じた走行パラメータの自動選択
  • タイヤのホコリ耐性
  • 絶対にクラッシュしない

が必要となります.

最短記録と自律走行のトレードオフ

上記で挙げた絶対にクラッシュしないという条件ですが,これはかなり困難な条件です.

なぜなら,マイクロマウスは走行時間を競う競技なので, いい記録を残すためにはクラッシュするギリギリを攻めなければなりません.

最短走行の記録と自律走行にはトレードオフがあるのです.

新機能・自動復帰による解決

そんな困難な完全自律走行ですが,別の視点の攻略法があります.

それが今回紹介するクラッシュ後に自動復するマウスです!

おそらく今までに自動復帰するマウスを作りたいと考えた人は少なくないと思います.
ただ,実装がかなり複雑で,実現した人はいませんでした.

僕は約1年半前から取り組み始め,遂に今年,自動復帰マウスを実現しました!

自動復帰の様子

最短走行でクラッシュしてしまったとき,次の要領で自動復帰して走行に戻ります.

  1. クラッシュしてしまい,姿勢が乱れる
  2. 前壁補正などを用いて,位置と姿勢を整える
  3. 既知の迷路と比較して,自己位置が一意に定まるまで周辺区画の探索を行う
  4. 自己位置を特定したら,リタイアにならないようにゴール区画を訪問する
  5. スタート区画に戻り,次の最短走行を行う

クラッシュ後の姿勢復帰方法

クラッシュ後は姿勢が乱れ,区画の中央から外れた位置にいる場合がほとんどです.

そこで,マウスの前向きに取り付けてあるToF測距センサで辺りを一周走査して平らな壁を探す方法を取りました.

平らな壁を見つけたら,前壁用赤外線センサによって姿勢を整えます.

自己位置同定アルゴリズム

クラッシュした後は,自分の位置がわからなくなってしまうことが大きな問題です.

そこで登場するのが,既知の迷路情報を用いた自己位置同定アルゴリズムです.

クラッシュする可能性のある最短走行を行うのは,探索走行のあとなので,マウスは迷路全体の壁情報を保持しています.

クラッシュ後,周辺を適当に探索して,既知の壁情報と比較することで自己位置を特定するのが自己位置同定アルゴリズムです.

今回,私が実装した自己位置同定アルゴリズムには,次のような特徴があります.

  • 探索済みの迷路ならば,迷路内のどの位置・方向からでも復帰可能!
  • 自己位置復帰中にスタート区画を避ける機能を搭載

これらについて,簡単に説明をします.

あらゆる位置・方向からでも復帰可能

32x32マス,および東西南北4方向の回転のすべての場合に対してパターンマッチングを行い, 自己位置の候補を洗い出します.

したがって,迷路の中のどの位置や方向でクラッシュしたとしても復帰が可能です.

計算はかなり重たいのですが, 1マスでもズレている場合は壁は食い違いだらけなので, すぐに打ち切ることができます.

いろいろな工夫を凝らして,1マス進むのにかかる時間,約300ミリ秒以内で計算を終えることができました.

スタート区画を避ける理由とその難しさ

マイクロマウスでは, ゴールに到達することなくスタート区画に返ってきてしまった場合, その走行はリタイア扱いとなってしまうので,自律賞を得ることはできません.

クラッシュするのはだいたい最短走行時なので, まだゴールに達しておらず,自己位置同定中の無作為な探索でスタート区画に行ってしまう可能性があります.

そもそも自己位置がわかっていないのに,スタート区画をさけることはとても困難です.

そこで,無作為な探索中でも,スタート区画にマッチする方向には行かない機能を実装しました.

その結果,自己位置同定の初手スタートなどの特殊な場合を除き,スタート区画を避けることに成功しました!

シミュレータによる検証

自動復帰のアルゴリズムはPC上のシミュレータで動作確認をしています.

以下の動画では,上の自動復帰の動きをシミュレータで再現してみました.

画面下に既知の迷路とパターンマッチングしたときの候補数が表示されていて, これが1になると自己位置を特定できたことになります.

全日本大会での結果

今年の 第40回 全日本マイクロマウス大会 2019 で, 自動復帰を携えた KERISE v4 は,32x32の迷路で自動復帰を披露し,ノータッチで競技を終えました!!

だが,しかし…!
残念ながら自律賞の獲得はできませんでした…

なぜなら,制限時間に間に合わず,走行回数が1回分足りなかったからです…(泣)

いやぁ…とてもショックです…

やはり32x32の迷路は壮大でした…

ただ,審査員の方には高く評価して頂き,特別賞をもらいました.
ありがとうございました!

詳しくは大会報告の記事をご覧ください.

おわりに

自律賞を目指して新機能「自動復帰」を搭載したのですが, 今年は壮大な迷路を前に目標を果たすことができませんでした.

来年には時間管理を徹底して,完全自律の自律賞を獲得したいと思います!!

さらに賢く成長した KERISE に好ご期待!

KERISE v4

KERISE v4

明日の Micro Mouse Advent Calendar は,Mice ふくださんの Pythonでターンシミュレータ です.お楽しみに!