2018年10月31日水曜日

コース記録

ロボトレース、コース記録や加減速走行について結構悩んでる人が多いようなので、よく採られているアプローチを簡単に紹介しようかと思います。

---------
まず、現在加減速走行をしているロボットの大半は走行計画=速度計画を立てている感じだと思います。つまり、コース上のどこでどれだけの速度を出すかを決めるための情報を1回目の走行で取ればいいというわけです。

探索走行でマシンが取れるデータは主に、エンコーダから出した距離や速度、ジャイロセンサから取得した角速度や角度などになると思います。(ちなみにジャイロを積んでいなくても、左右のモータにそれぞれエンコーダをつけていれば回転差から角度や角速度は取れます)

では、コースに対してそれらデータをどのように保持して、どのように使えば加速減速する走行ができるのか。
現在よく使われているデータの代表的な記録方法は以下の二つです。

①マーカーを取得したときの距離、角度を記録する
②一定距離ごとに角速度を記録する

それぞれの手法と速度決定について簡単に説明します。

--

①マーカーを取得したときの距離、角度を記録する

こっちは比較的お手軽な手法。
 ロボトレースでは曲率変化点にマーカーがあります。つまりカーブするところや直線になるところがマーカーで区切られており、マーカーとマーカーの間の区間で車体がどれだけ曲がったかという情報から、その区間で出す速度を決めることができます。

「どれだけ曲がったか」という情報は、曲率(R10とかR20とか)で決めている人が多い印象です。曲率は区間の距離L(cm)と角度θ(deg)を使って、外周=2π*Rの関係からR=(L*360)/(2π*θ)で簡単に求められます。

マーカーごと距離と角度を記録し、区間ごとの曲率を求め記録しておくことで、区間ごとに曲率に応じた速度を決められます。速度の決め方は、R10くらいなら1m/s、R20くらいなら1.3m/s、…という感じで曲率ごとに速度を手打ちで決める方法が一番お手軽です。面倒臭いなら曲率に応じてマシンに自動決定してもらうようにしても面白いかもしれません。

ここまでこれば、あとはマーカーを読むたびに目標速度を切り替えて走るだけで加減速走行が行えます。ただし、次の区画の速度が今の速度よりも遅い場合は、次のマーカーを読む前に減速を行う必要があります。これは、どれだけの加速度で減速するかを決めておけば、高校物理の等加速度運動の式から減速を開始する位置を計算できます。


この方法のメリットは
メモリ使用量が少ない
 マーカーごとに数個の情報を記録するだけなので、メモリが数kBしかないようなマイコンでも普通に使える
コースデータが確認しやすい
 マーカーごとにしか情報を記録しないので、データが少なく済む。何が起こったか確認しやすい
多少のタイヤ空転を許容できる
 区間内で少々滑っても、次のマーカーを無事拾えればそこで距離を補正できるため、マーカーが拾える範囲であれば多少の無理はさせても大丈夫なことが多い
直線ショートカットがやりやすい
 マーカーごと情報から、マーカー位置ごとの車体の位置がなんとなくわかるので、直線と直線の間にある小さなコーナーをショートカットするといったことがやりやすい

デメリットは
マーカーを読み間違ったら終了
 マーカーを頼りに走るため、マーカーを1度でも読み間違ったら基本的には吹っ飛ぶ。上位者でも結構読み間違って吹っ飛んでる。そのため、マーカーを確実に取れるマシン設計をする、または加減速走行時にマーカーを読み飛ばしても検知してある程度復帰できるようにするといった工夫が必要になる。
細かい区間が連続すると危険
 細かい区間が多いと正確にRが測れず大き目のRだと判断されてしまったり、小さい直線のような区間が連続したあとに急なコーナーがあると減速しきれずに曲がれないといったことが起こるため、対策が必要。
曲がる方向で差異が生じる
 右コーナーではマーカが外側、左コーナーではマーカが内側にあるため、マーカーセンサの位置次第では右と左で取れる情報が異なってしまう。大体は気にならない程度だが、場合によっては左右の曲率判定の時に若干バイアスをかけるといった工夫が必要になる。


比較的お手軽な方法ではありますが、使いこなせば十分に上位に食い込める手法です。
角度と距離だけではなく、最大角速度、平均角速度、加速度センサのデータ等をマーカー情報に付与しておけば、色々工夫の余地もあるかと思います。


---

②一定距離ごとに角速度を記録する

マーカー利用よりも単純なではあるものの、メモリを大量に消費する手法。走らせる難易度は若干高い。

エンコーダで距離を計測しつつ、一定距離(例えば1cm)進んだらその時点での角速度を記録する。記録した角速度に対し、1点1点速度を決定する。たったそれだけ。

速度決定は、記録走行時の速度と加速度から旋回半径Rを求め、Rの大きさ対して速度を決定するか、等速円運動の加速度の式から加速度を拘束することで速度を決定するといった方法がとれます。

あとは加減速走行のときに1cmごとに速度を読み出していくだけで加速減速が行えます。ただし、このままの状態だとコーナー付近で急激に速度が変化するためおそらくマシンでは加速や減速しきれないといったことが起こります。そのため、マシンが加速減速できる範囲の速度変化をするように速度を書き換える必要があります。これはマシンの加速度を設定して、マシンが加速して記録されている速度を出せるのかを順に追って見ていき、無理ならばそこの速度を加速できる範囲に落とすといったことを行えばOKです。

やることはこれだけです。


これのメリットは
アルゴリズムが単純
 一定距離ごとに記録し、記録したところ毎に速度計算し、走行時に速度を再生する。それだけ。コードもかなり短く書ける。
マーカーに頼らず加速減速できる
 マーカーを読んでから加速~という感じではなくコーナー途中で加速し始めるのでなめらかに加速。無駄が少ない。
マーカーを比較的柔軟に使える
 全マーカーを読む必要がないので、必要なマーカーだけ利用するといったことが可能。

デメリットは
膨大な量のメモリを消費する
 角速度記録だけでも最低で数十kBから場合によっては数百キロバイトレベルのメモリが必要。別の情報も記録しようとするととてつもない量のメモリが必要になる。不揮発メモリに保存するのも一苦労。
情報が膨大になる
 コース情報一つ見るためにもかなり長い時間かけてPCにデータを転送しなくてはならなくなる。最低でもグラフ化しないとデータまともに読めない。また、マシンに乗せたディスプレイでコースデータを確認することが難しくなる。コース情報が多いため、それを使ってマシン内で何か処理を行おうとするとかなり重い。 
局所的な調整がしにくい
 マーカー読みのときはR○○の時に曲がれないから速度落とすといったことが可能だが、この手法だと細かい距離ごとに速度が決まっているため、そういったことがやりづらい。上手くやらないとネックとなる部分に合わせて全体の速度が決めなければならないので速度が上げにくくなってしまったりする。
段差等で跳ねると計画速度が一気に落ちる
 段差等で一瞬大きな角速度が出てしまうと直線途中で減速をしたりする等が発生する。フィルタ等でこれを上手く除去しなければいけない。
慎重にコースデータを取る必要がある
 マーカーベースの手法は、マーカーを取った時点で姿勢が正しければいいので結構ラフに走っても大丈夫ですが、この手法では綺麗に制御してできるだけコースをなめらかに走って記録しなければ加減速走行時に速度計画が上手くいかずロスが発生します。


データ量が多く処理が重くなったり、高価なマイコンが必要であったり、調整が慣れていないと結構面倒くさかったりと、そこそこやりにくい要素はありますが、単純で無駄の少ない速い走行がしやすいためなかなか強力な方法です。最近はメモリが大きいマイコンが多いためそのうちこっちが主流になりそうだなぁ~といった感じがします。

-----
大体こんな感じです。

あくまでここに書いたのは良く使われている方法というだけで、すべてではありません。現に、今トップのほうを走っているトレーサーはどれもこれらの手法をベースにオリジナルのアレンジを加えた手法をとっているマシンがほとんどです。

また、完全に違う手法もまだまだたくさんあると思います。
・完全にマーカーを見ないで走る
・マシンが走った座標を記録して、座標ベースで加減速走行をする
・そもそも走行経路まで計画している
なんていうマシンもちょこちょこ出てきています。

ロボトレースはマイクロマウスと違いまだまだ王道のような手法が確立されていないため、是非色々試して速い、面白い走行方法を探してみてください。
その手助けとなれば幸いです。


文字だらけで見難くなってしまったので、そのうち気力があったら図とか追加しときます。
あとblogger結構段下げとか見つからないし使いにくいなって思った。

2018年9月27日木曜日

新ましん



というわけでニューマシンです。新作です。2年ぶりくらいの新作です。
とはいっても回路はピン配置含めて前作とほぼ同じで、変更点といえば外付けディスプレイ以外にウェィリンさんから貰った小型のOLEDディスプレイを追加したくらい。
そのためソフトは前作のものを移植、というかほぼまるまるそのまま使う。
車体は基板シャーシからNC削り出しの3mm厚アルミフレームに変更。硬すぎた。
モーターは去年の大会で賞品で貰った1717を使用。DCX10に比べるとかなりここがネックになりそうだが、まぁ必要最低限のパワーは出てる感じ。
ギアはKHKのPOMスパーギア+極東技術結社製アルミピニオン。に比べてバックラッシが大幅軽減。
タイヤはMINI-Z LMワイドタイヤに変更。前作のマシンが滑りすぎやろってなるくらいにはグリップするので改めてなんだこのチートタイヤってなった。

エンコーダーはMTL様より無償提供していただいたMES-6-P-300を使用
速度制御を入れてみたところ、自作エンコーダを使った前作では10msくらいで移動平均フィルタをかけてもガリガリ音が鳴るくらいには速度が振動していたが、MTLエンコーダでは1msでも何も処理せず制御かけても異音が鳴らない。すごい…ってなった。

-

とりあえず台湾大会ではライン追従がうまくできず最短走行でリタイヤしたので、全日本までに自宅の小さいコースで頑張ってパラメータ調整します。

2018年9月20日木曜日

たいわんたいかい

今年もマイクロマウス台湾大会(單晶片電腦鼠暨智慧輪型機器人競賽2018)に参加してきました。


結果は2位でした。5年目にしてついにトロフィーをもらえました。やったー。いえいいいえい。
国際枠ではついにア○キを倒してトップタイムを出したのですが、現地吸引マシンのタイム一歩及ばず国際国内マージした結果では2位となってしまった。惜しい。
前半は中高速ターンが多くかなり良いペースで飛ばしていたが、後半は直線が多かったためあまり直線速度が伸びない自分のマシンはそこで結構タイムを失ったっぽい。毎回直線速度が問題になってる気がするのでそろそろ対策しないとな~と思った。
まぁなにはともあれ、やっとアニキの本命マシンより上の順位取れました。ロボトレース始めて8~9年くらい経ったでしょうか、長かった。

この並びの中にやっと入ることができたので嬉しい。
と同時にオジサン勢の仲間入りをしてしまったな~という気分でもある。

-----
大会:
マシンは去年と同じ状態で、3年連続吸引Whitechip7での参戦。
使っているMini-z NASCARハイグリップタイヤが生産中止ということで急遽LMワイドタイヤを両面テープ留めして無理矢理履かせた状態で持って行った。コンマ1ミリ程度タイヤが偏芯するとタイヤ同士が接触する危険な状態だったがなんとかなった。パラメータ変更も特にしないで走ったのでタイヤ選びは意外と適当でいいのではという気分になった。

台湾行きは昼到着の高い飛行機を使うお金が無かったので土曜夕方着のLCCで台湾へ。台風が来ていたため着陸でとてつもなく揺れて何回か叫んでしまった。長時間着陸しないしほんと怖かった。もう二度と台風の日に飛行機は乗りたくない…。
そして台湾市街についたのが6時くらいだったので試走会には参加できず。今回はほとんど当日試走が出来なかったため、日本で自宅コース調整からのほぼぶっつけ本番だった。

現地で走らせたらなんかガリガリ音が鳴ってたり不安な状況だったり、2走目シケインで振り落とされたりともうダメだー…ってなって投げやりで速度上げたら完走してトップタイムが出た。迷ったときはスピード上げればいいなってお気持ちになった。

一応新作と二台エントリーしたものの、大会4日前にマシンが完成したためチューニングが色々と間に合わず、スピードを出していないのにコース後半で吹っ飛んでしまった。まぁ新作の件は別途ブログに書きます。覚えてたら。

--
新チーム:
実は今回会社の同期と一緒に3台体制で台湾大会に参加していた。
6月からマシンを作り始めて初手台湾大会するというクレイジーな男と二人で、今年は「天竜技術集団」というチーム名で大会に参加する予定。住んでるところの近くに流れてる川の名前を使い、二人で何かとお世話になっている極東技術結社リスペクトな感じでつけたチーム名。

ちなみに同期は普通に台湾大会完走。すごい漢だ。

-----
観光:
今年は
三峡老街と


鴬歌老街に行ってきた。

平日なので人は少なめ。町並みがきれいで近くの朝市もにぎわってたので良い感じにのんびり観光できた。

鴬歌老街は陶器の町ということで、台湾茶用に急須とか台湾仕様の湯のみとか買って来た。アニキを倒した祝杯を台湾茶であげました。

---
おまけ:
SuperDry 極度乾燥(しなさい)風Tシャツ。
仕事がつまらないときに会社で着ようと思う。

2018年7月13日金曜日

ぼちぼち

すこしずつかつどうしようかと。

田舎なのに僻地通勤になり、寮から通うと通勤時間がハンパ無くて(片道2時間)自分の時間が取れず精神的に逝きそうだったので、寮を飛び出し貯金ほぼ全投入で会社にアクセスしやすい場所で一人暮らしをはじめた。現状給料高くないしこの会社手当ても補助も出ないので現状カツカツで死にそう。
その代わりディスプレイが置けるようになって楽に回路が引けるようになり、はんだごても使える環境になりました。長時間勤務も寮での叫び声や騒音も無くなって精神的にもマシになってきた。これが生きるということだなと。
少しずつロボット含め色々活動していきたい。

(しっかし寮から離れた僻地に事業所作っておいて会社都合で配属決めてるくせに、寮から出たら二度と寮に戻さないとか家賃の補助も出さないとかこの会社ほんと従業員バカにしてんのかと。)
---

手始めに4年使って老朽化してきた充電器の換えの回路を引いてEagleの使い方を思い出している。
某無料回路CADと違ってしばらく使わなくても大体の操作は覚えているのでさすがはEagle。

---
一応新作っぽいものの準備は去年の時点である程度できているので、あとはパーツ揃えて配線2~3日でパパッと引いて発注すればいいくらいにはなっている。今年は流石に新しいネタぶち込む余裕が無いので去年のをベースに車体性能アップ方向で検討中。

今年もま~たエンコーダ無しモータを使うので、エンコーダをどうしようかな~という状態。磁気式だと去年値がブレまくって速度制御がまともにかからなかったので、光学式を使って見ようにも結構これがお高くて、残高が心もとなさ過ぎる現在の状態で買える代物ではない…。
聞いた話ではMTLで無償提供プログラムがあると聞いたので、応募してみようかと考え中。

---

最近会社の人間一人引き込んだのでちょっとやる気がでているので、いまのうちにガッとやらないといけない。

2018年3月29日木曜日

そつぎょう

曲折ありましたが卒業しました。

奈良先端某大学院大学で休学・退学したときからほんといろいろありましたが、いろんな人のおかげで卒業し就職というなんとか一般人的レールのところまでは戻ってこれました。

院生含めて9年やってた大学生生活を終えて来週から社会人、つぶれないようにぼちぼちやっていきます。

2017年11月21日火曜日

ぜんにほん2017

東日本大会あたりから再起動してちゃんとロボット触って全日本出てきました。
そしてまさかの6位というミラクル。
あとマーカー処理の方法が若干特殊だということで特別賞も貰いました。
(うまくいけば)学生最後の年なのですごく嬉しい。
前作で動かなかった若干ヘンテコな走行アルゴリズムを再び組み込んでみたらなんか上手く走ってしまい、おまけに結構良いタイムが出た。ミラクル。
今年も他人と違う事をやれて、しかも今回はちゃんと結果が出たので満足。

みなさん今年もありがとうございました。お疲れ様でした。

2017年10月15日日曜日

かいぞう

気が向いたので今年もマシンを触る。
お金無くて新作作るのは無理なので、
ハードに少しだけ改造を加えました。
ソフトは去年のままですが走りました。
台湾大会に行ってきて出て5位でした。
東日本は最短走行できませんでした。