2021年2月21日日曜日

ロボトレースのショートカット経路生成

 お久しぶりです.


ロボトレースのショートカット経路生成方法のリポジトリを作りました.

https://github.com/kyamashita5/robotrace-shortcut-path

説明はまだあまり書けていませんが,とりあえず公開します.

2020年1月25日土曜日

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

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

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

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

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

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

2020年1月22日水曜日

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

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

コース記録とは

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

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


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

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

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

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


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

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



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


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

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

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



2019年12月17日火曜日

2019RT テクニカルデータ

大会時にテクニカルデータとして登録したもの.

ロボット名:
F2P
メカニズム(機械):
製作者名:
製作期間:2週間
自分自身で設計したオリジナルです
ハード(電気):
製作者名:
製作期間:1週間
自分自身で設計した回路を主にプリント基板で作りました
ソフト:
製作者名:
製作期間:4ヶ月
自分自身で作ったオリジナルプログラムです
CPU:
系列 : ARM系
メーカ名:STmicro
CPU型番: STM32F4
動作周波数: 84[MHz]
ROM 1.024 [MB] / RAM 320 [kB] / Data Flash 0 [kB]
バッテリー【CPU関係】:
種類・数 :LiPo / 2 [セルor本]
使用電圧(公称電圧):7.4[V]
容量:300 [mAh]
メーカ名:Turnigy
バッテリー【モータ関係】:
CPU関係と共用
モータドライバICの型番やメーカ名など:
DRV8835(Texas Instruments)
走行(推進)用モータ:
DCモータ
2(個)
メーカ名や型番:FAULHABER 1717-003SR
走行用以外のモータ 1:
用途:ダウンフォースのためのプロペラ
DCブラシレスモータ
4(個)
メーカ名や型番:1103
走行用以外のモータ 2:
無し
センサ(種類、個数、メーカ名):
赤外線センサ:28(個)
メーカ名や型番、用途や特徴 :TPR-105F / ラインセンサ(反射光量をAD変換)
ジャイロセンサ:1(個)
メーカ名や型番、用途や特徴 :MPU6500(TDK) / デジタル値出力型
エンコーダ:2(個)
メーカ名や型番、用途や特徴 :AS5050A(ams) / デジタル値出力型
動輪(車輪の個数と寸法):
2[輪]
直径:26.5[mm]
幅:12[mm]
補助輪(車輪の個数と寸法):
無し
ロボットの寸法:
長さ:150[mm]
横幅:240[mm]
高さ:35[mm]
重さ:135[g]
ロボットの操舵機構:
左右(2輪)速度差方式
運動性能:
直進時の最高速度 [m/s]
最高加速度 [m/s/s]
ターン時の最高速度 [m/s]
開発ツール:
マイコン統合環境やコンパイラなどのツール :
   GCC

機械CAD、基板CADなどのツール :
   Fusion 360, kicad
探索アルゴリズム:
トレース コース記憶あり
ロボットPR:
2次走行では最速経路の走行(いわゆるショートカット走行)を目指す.
- ライントレース的な制御は一切しない.ラインと異なる目標経路に追従するよう制御する.
- 経路生成を無理矢理グラフの最短経路問題に落とし込んで最速経路っぽいものを得る.
- 記録したコースマップから推定されるライン位置と実際に観測したライン位置のずれをもとにオドメトリによる自己位置推定を修正.
自己PR:
二次走行が完走したら嬉しいです.
ロボット製作の目的、大会参加目的:
ポイント獲得,実戦テスト
競技参加歴、成績(ロボット名):
競技会参加歴:5~9年目
マイクロマウス経験:3年目
トレースロボット経験:5~9年目
2015年:
2016年:
2017年:
2018年:
備考:

2019年12月7日土曜日

全日本大会

全日本大会に出場しました.

ロボトレース:第四位・ニューテクノロジー賞・特別賞 
マイクロマウス:第三位・ベストマウサー・特別賞 
全競技を通しての特別賞:田代賞

トレーサ・マウスともにほぼ期待通りに走り,多くの賞を受賞しました.特にロボトレースにおける賢いラインどり(ショートカット走行)が高く評価されたことはとても嬉しく思います.

全日本大会に向けた対策:

中部地区大会以降はロボトレーサの走行速度向上を行いました.全日本大会は国内の上位陣および海外の強豪のほぼ全員が出場します.地区大会時の速度レンジではショートカット走行をもってしても彼らに太刀打ちできません.走行性能改善のため,主にハードウェア要素の見直しを行いました.その結果,全日本大会では地区大会の時よりかなり速いコーナー速度で完走することができました.

最大の変更点はスポンジとシリコンシートを組み合わせたタイヤ(以降シリコンタイヤと表記)の解禁です.シリコンタイヤは路面との相性にもよりますがゴムタイヤよりもよくグリップします.一方で,ゴムタイヤよりもコーナーで大きく変形するためオドメトリのずれを引き起こしやすいという難点もあります.自分のマシンの自己位置推定はオドメトリに頼る部分が大きく,オドメトリの精度を落としかねないシリコンタイヤの採用はこれまで見送ってきました.しかし,上位陣に対抗するためにはゴムタイヤであれ横滑りしてオドメトリがずれる速度域で戦う必要が出てきたため,シリコンタイヤを使うことにしました.シリコンシートはマイコンカーラリー販売の黒いシートを使用しました.スポンジは3mm厚のPORONですが,マイコンカーラリーでよく使われているものより少し硬めのものを使っています.プロペラによるダウンフォースの効果もあり,変形しやすいという短所を消しつつ長所を引き出せたように思います.

また,ダウンフォースの最適化を行いました.プロペラの推力を上げると当然滑りにくくなります.しかし一方で,推力を上げすぎると消費電流が大きく増えて駆動系の方に電流が流せなくなり,制御に悪影響が出ます.これらのトレードオフについて実機のログを見て吟味し,これまでいい加減に決めていたプロペラの推力をちゃんと調整しました.

ロボトレースにおける賢いライン取り(ショートカット):

上から撮影した動画をアップロードされている方がいたので紹介させていただきます.上からだとロボットの走行軌道がよくわかります.

最初と最後のショートカットのインパクトが大きいですが,実はS字カーブや細かいカーブの連続もラインとは別の経路をたどっています.お気づきでしたか?自分は特定のパターンをショートカットするのではなく,ラインを辿らない方が速く走れる箇所は全てショートカットすることを目指しています.こういった動画で見ないと派手なショートカット以外はなかなかわかりにくいですが,速く走るという本来の目的のためには細かいショートカットも重要だと考えています.

また,この動画を見ると,実はコースアウトしそうになっている箇所があることに気付きます.(コマ送りして画面に定規を当ててみた感じだとぎりぎりコースアウトはしていないと思います) 今のロボトレースは速度レンジが上がっており,走行軌道を肉眼で正確に把握することはかなり難しいです.もし,ラインとは関係なく曲がり始めるショートカット走行が今後普及していくとしたら,ラインズマンが正確な判定をすることはかなり難しくなっていくと思います.

今後について:

ショートカット走行は速く走るためのものです.より速く,安定して走れるようにしていきたいと思います.また,(勝つために企業秘密にしたい気持ちも当然あるのですが,) ショートカット勢を増やしたいのでショートカット走行についてある程度情報公開していこうと考えています.というか企業秘密的な観点だと一番バラしちゃいけない上位の人達にすでに色々話しちゃっている

マウスについては…どうしましょうか… 自分はこじまうすの安定した動きに憧れてマウスを始めたという面があり,こじまさんやほかの宇宙人と呼ばれる方たちのマウスの設計や戦略などを真似をすることで自分のマウスを進歩させてきました.それはそれでとても勉強になったのですが,そろそろ新しいコンセプトを考えないといけない時期かもしれません.

2019年12月4日水曜日

中部地区大会

(下書きのものがあったので公開)

1年ぶり4回目の中部遠征.今年は初めて試走会から参加(試走会に行かないと大きいコースで調整する機会がない)

トレース:
試走会場でロボトレースのコースを見る(中部地区大会や関西地区大会では運営の都合上本番コースで試走できる.全日本に向けた調整機会としてはありがたい) 例年通り長いコース.ショートカットしがいのありそうなパターンもちらほら.
走らせてみる.攻めなければスタートまでは戻ってくる.しかし,大R→ショートカット→180度ターンというパターンで自己位置推定がずれ,180度ターンで疑惑の判定を生み出す(ラインより手前でターンする)現象がそこそこの頻度で発生.これはまずい.

色々試行錯誤してみるうちに,角度推定の累積誤差が原因なのではないかという考えが浮かぶ.ラインを使った推定角度の補正を強めてみる.改善した気がする.(試行回数が少ないので本当にそうかは不明) この状態で実戦に投入.疑惑の判定を生むことなく完走.3位.


マウス:
マウスは毎度のことながら動作確認だけするので精一杯.とりあえず壊れてなさそう.

本番の迷路は開幕からの連続ターン,からの櫛歯.壁を使って姿勢を整える場所がなく難しい.さすがに無理目のパラメータはだめだったが,それ以外は走った.他の競技者も苦戦していたため2位.

その他
ホテルが1103号室だった.ブラシレスのサイズと同じ.



2019年11月5日火曜日

学生大会

ロボトレースの調整機会を得るために学生大会に参加した.

試走日:
明星大学に向かう.何種類か経路があり,結構乗り換えが多い.町田・多摩ルートを選択.町田駅に見覚えがあると思ったら東京工芸大(厚木)に行くときにも通るんだった.

明星大学に到着.東日本の時はトレースの試走コースは板一枚の小さなコースだけだったが今回は東北地区大会で使われる予定だったコースもあった.実戦的なコースで調整できてうれしい.

大小2種類のコースで試走.東北コースではうまくいけばきれいにショートカットを決められる.しかし,安定しない それなりの割合でずれる・発振する.ログを取るとコーナーで過剰な横Gがかかっている.どうしたものかと悩んだまま試走会終了.ログやシミュレーションを見ながらホテルで悩む.位置に対するフィードバックのゲインを1/4にして明日試すことを決定.

大会当日:
前日決めた通りゲインを下げて試した.当然追従は甘くなるが許容範囲と判断しそのまま本番に投入することに決定.
本番のコースは終盤にやや大きめのぽこっとカーブやかなり長いなみなみがある.見せ場でショートカットできるか.
最終出走の一つ前で出走.探索は問題なく完了.経路計画も無事完了し,2走目開始.前半の長い直線などは問題なくクリア.ぽこっとカーブは完全にまっすぐ走るショートカットとはならなかったが,なみなみはしっかり直線のように走った.(なみなみショートカット中の少し右に偏っているように見えたが).この時点で暫定一位を獲得.残念ながら最終出走のUさんとはまだ勝負にならないとわかっていたので3走目は気楽な気持ちで少し攻めたパラメータを選択.完走できタイムを少し短縮.第2位.ラインとは別に速そうな経路を生成して走る取り組みが評価され特別賞もいただいた.

マウスは吸引と非吸引の2台出場.ロボトレーサの面倒を見るので精いっぱいで試走日に一回ずつ動作確認しただけでそのまま投入することになったが,問題なく走ってワンツーフィニッシュ(2位の非吸引マシンは同一製作者の2台目なので表彰対象外).非吸引の方は非吸引2輪でもこれだけ走れるという自分(や他の競技者)への煽りの意味もあって出場させ続けてきたが,そろそろ引退かな自分のマシン以外の話題だと,Cheeseのけりさんが二次走行におけるクラッシュからの復帰機能を実装していた.ピックアップすることなくマウスが走行し続けるという状況を実現しており,久々に感動した.

優勝,第2位,特別賞と3つ受賞したこともあり質・量ともにかなり豪華な副賞を頂いた.明らかに自分だけでは捌ききれない.どう配ろうか.