2020年1月25日土曜日

マイクロマウスのゴール突き抜け

自分のマウスは,斜め走行の際にゴールの入り口で止まらずにそのまま直進し続けるようになっている.大抵の場合ゴールの中で止まるが,進行方向に壁がなければゴールを突っ切って行けるところまで進む.斜め直進でそのままゴールを突っ切るのは珍しいということで2018年の学生大会で特別賞を貰ったりもした.

ゴールの斜め突っ切り.まだ進めるのに途中で止まっているのはそれ以上進む必要がないと判定しているから…だとかっこいいが,実際はその先の部分を最速経路に無関係な袋小路と判定して探索していないだけ.

で,理論も実装も比較的単純なこの機能についてなぜ急に語りだしたかというと,導入した目的を書いておこうと思ったからだ.ゴールの突き抜けはタイム短縮のための機能だと解釈されることが多い.ゴールの入り口で止まらず突き抜ければ減速の開始を遅らせることができ,僅かではあるがタイム短縮が期待できる.確かにそういったご利益もあるのだが,自分はどちらかというと完走率を上げる効果に期待してこの機能を入れている.

マイクロマウスでは機体全体がゴール領域に入らないと記録として認定されない.ゴール入口で止まるようになっていると,タイヤの滑りなどによって走行距離が少し縮んだだけでもゴールの手前で止まってリタイアになってしまう.ゴールを突き抜けるようにすることで,あまり実装の手間をかけずにこのリスクを低減することができる.

マイクロマウスは探索にしろ二次走行にしろ完走そのものの難易度が高い.ハードウェア性能やシステム全体の完成度を高めることももちろん大事だが,ちょっとした工夫を色々仕込むのも大会で実力を出し切るためには大事だと思っている.

2020年1月22日水曜日

ロボトレースのコース記録

ロボトレース競技のコース記録について,よく使われる方法と自分のマシンの記録方法について紹介します.どのようにコースを記録するべきかはマシンのコンセプトによって変わると思いますが,何らかのヒントになれば幸いです.

コース記録とは

ロボトレース競技ではコース情報の記録・活用が重要です.ロボトレースでは3回まで走行を行うことができ,最も速い1回のタイムで順位が決まります.1走目で記録したコース情報を2走目以降に利用することが認められており,直線では速く,コーナーでは滑らないように減速するといった賢い走りをすることがタイム短縮の鍵となります.グリップの限界ギリギリを攻めた走りをするためにはコース形状の正確な把握が必要になります.

ロボトレース競技のコースの例.様々な曲率・長さの区間がある.スピードを出しすぎるとコースアウトしてしまうが,スピードを落としすぎるとタイムロスになる.良いタイムで走破するためには各区間で出せる速度を見極めなければならない.


マーカーを使ったコース記録

よく用いられるコース記録方法として,マーカー間の走行距離と角度変化を記録する方法があります.ロボトレースのコースには曲率変化点の左側にマーカーが配置されており,マーカー間の区間は曲率が一定の円弧または直線になっています.区間長と曲率は各区間の形状を表現するのに必要十分な情報であり,この2つを各区間について記録すればコース形状を記録したことになります.区間長についてはロータリーエンコーダを使えば計測することができます.曲率については,区間の始点と終点でのマシンの角度(向き)の変化をロータリーエンコーダやジャイロセンサで記録すれば,(曲率)=(角度変化)/(区間長)という関係を使って求めることができます.この方法は各区間について区間長と曲率だけを記録すればよく,メモリ容量の少ないマイコンでも実装することができます.しかし,マーカーを1つでも読み飛ばすと実際とは大きく異なる曲率が計算されてしまいます.また,区間長が短い場合はラインと走行軌道の違いやマーカー検出位置と曲率変化位置の違いが無視できず,正確な曲率計算は困難です.

マーカーを使わず密に曲率を記録する

コース全域について密に曲率を記録するというアプローチもあります.走行軌道の曲率はマシンの並進速度と旋回角速度(ヨーレート)から求めることができます.センサで計測した並進速度と旋回角速度をもとに各地点での曲率を求め,そのまま全て記録することでコース形状に関する密な情報が得られます.メモリの使用量が多いのがこの方法の欠点ですが,最近のマイコンはRAMサイズが大きいのでこの点はあまり気になりません.


コースを2次元点列として記録する

自分のマシンではコースの2次元的な形状をそのまま1cm間隔の2次元点列として記録します.走行中,マシンはデッドレコニングによってスタートからの相対的な2次元位置を計算しています.このマシンの位置もとに今センサが見ているラインの2次元的な位置を計算し,マシンが1cm移動するごとに記録します.二次走行ではこのコース情報を使って経路計画や位置推定を行います.



2019全日本大会における自分のマシンのコース記録結果.(スタートとゴールが少しずれているのはデッドレコニングの累積誤差のため.)


走行軌道ではなくライン形状を記録する

自分のマシンのコース記録では旋回中心とラインセンサの位置のずれの補正を明示的に行っており,走行軌道ではなくラインの形状を記録しています.ロボトレース競技のラインは曲率変化点で曲率が不連続に変化し,完全に追従することはできません.そのため,マシンの旋回中心が描く走行軌道とラインは少し違います.この差分を補正する計算を行うことで,コース形状をより正確に記録することができます(ライン位置がラインセンサで正確に検出できていれば,ですが).ちなみに,上位のマシンの中には,センサ配置や制御の具合を調整してライントレースの走行軌道自体を少しショートカットっぽくしているものも見受けられます.

マシンの走行軌道を記録するべきか,ラインの形状を記録するべきかは二次走行の戦略によって変わると思います.ライントレースそのものをショートカットっぽくして二次走行で加減速によるタイム短縮のみを行うのであれば,走行軌道を記録した方が無駄な減速をせずに済むでしょう.一方,私のマシンのように二次走行で一走目と全く違う軌道を走るのであれば,ラインの形状そのものを記録した方が位置推定などに利用しやすいと考えています.