こんにちは,pebbleです.
とよはし☆ロボコン ズに3年ちょっといました.
(個人スポンサー になればとよはし☆ロボコン ズのマル秘情報が見られるかも..?)
この記事は学ロボ Advent Calendar 2024 - Adventar の6日目の記事になります.
アドベントカレンダー に参加するのは初めてです.
昨日の記事 はソフトウェアのオールラウンダーかつ最強のロボコン 同期@eyrin 君でした.
昨年の新入生教育で僕は新入生の能力に頼り切りでロボコン の楽しさを伝えきれなかったのですが,今年はプログラムを触ったことが無い子でも動かして楽しめるように考えられていてすごいなあと思います.
(卒業研究のプログラムのマルチタスク 化で一昨日くらいまで沼っていたのでRTOS の勉強もすればよかったな,,)
高専 ロボコン 2019の近畿地区大会では自動機のプログラム担当してました.
その時の経路追従の話を書いておこうかなと思います.
ABU2023では走行や射出を主に担当していました.
ABU2023で優勝した豊橋 のERも似たようなアルゴリズム で走らせてます.
学ロボのアドベントカレンダー なので,最後にちょっとその話もします.
(というか,その話をするための長い前置きです.)
自動走行させたことのある人は分かると思うのですが,経路追従は動き出しの加速と停止するときの減速が一番時間を喰っている感じがします.
制御で走行タイムを縮めるには,走行途中で停止する動作を無くすのが第一歩かなと思っています.
ちなみに,こんなロボットでした.
予選ルールの満点を出すことはできたものの,1回戦で敗北してしまったため地区の予選リーグで敗退しました.
交流ロボコン 等でPure pursuitアルゴリズム で経路追従をしている高専 や大学をよく見かけます.
Pure pursuitアルゴリズム は経路の最適性や制約条件をぼかしてしまっているので私はあまり好きではないですが,強ければなんでも良いと思います.
経路追従
位置PID制御にフィードフォワード 項(以降FF項)を足していました.
narajin_senzu
以上です.
電圧,電圧指令と書いていますが,実際には電圧の次元の要素を に持つベクトルです.
FF項は経由点毎に持たせています.
I制御は切ってあったので実際はPD制御ですね.
非常停止解除後に暴走する可能性があるのでI制御は強めの出力制限を設けるか,使わないのが吉と思っています.
経由点から離れているときはPID制御が優位(PID制御器の出力が大きい状態)になります.
経由点に近づくとPID制御器の出力が小さくなり,FF項優位になってFF項の示すベクトルの向きへ進みます.(この時はFF項の示すベクトルの向きは前の経由点から目標点の延長線上,つまり通ってきた経路の延長線上にしてました.)
1本の経路に対して経由点が10個程度のカクカクした経路なのですが,惰性で軌道が膨らんでいい感じになるとかならないとか,,
線形なので それぞれに対して分解して計算することができます.
PID+FF項(電圧の次元の大きさと向きを持つベクトル)をオムニの向きに成分分解して足のモーターの指令電圧にしてます.
本題はこれで終わりなんですが,しょうもなすぎるのでついでに他の話もしようと思います.
経由点の選択,通過の判定
経路は複数の経由点からできています.
はじめの経由点を通過すると,目標位置を次の経由点へ進めます.keiro_image
(前の経由点から次の経由点のベクトル) と(前の経由点からロボットへのベクトル)
の内積 が正で通過と判定し,目標経由点を次に進めます.
tuuka_hantei
シンプルですが,これ以上必要無いですね.
最後の経由点(終着点)では通過の判定ではなく別で収束の判定を行っています.
余談ですが当時高専 1年生で,2回目の留年確定により退学も確定していたので,ロボコン とオンラインゲームに明け暮れていました.
当然勉強なんてしておらず内積 なんて知り得ないので実装はこれと等価ですが汚いです.
また余談ですが,学ロボ2023ルール発表前の開発*1 では経路に対して数百の経由点があり,経由点同士が近すぎたので目標速度ベクトルとの内積 によって判定していました.
走行中の姿勢の決定
このロボットですが,スタート直後に頭を振って走行するのが特徴的かなと思います.
速度の出るロボットの前後左右いずれかの向きが,経路の直線と平行になるように姿勢制御してます.
そのせいで,頭を振るような動きをしています.
omuni_hayaimuki
これによって,全てのオムニにほぼ最大電圧をかけてマシンスペック上での最高速度に近い速度で走行することができます.
ロボットの重量に対してあまり強くないモーター(マブチモーター さんの555とかだっけ?)が使われていたので,この制御でいくらか速くなったと記憶しています.(何秒早くなったかは記憶していませんが何秒か早くなりました.)
PIDゲインの切り分け
高専 ロボコン 2019の競技テーマが洗濯物干しだったのですが,シーツを掛ける動作でシーツが引っかかってロボットが引っ張られ,経路からずれてしまう問題がありました.
同点の場合干された洗濯物の美しさ(とかだったかな?)で勝敗が決まるので,ずれによるシーツのしわ対策のために偏差を経路と平行,垂直方向に分解して,それぞれのパラメーターを持たせてPIDをかけていました.
pid_bunkai
経路に垂直方向のゲインが高いので,走行中経路直線から大きく外れることはありませんでした.
ABU2023(チェイヨー) 豊橋 ER
豊橋 のABU2023のERも似たような感じのシステムで走らせてました.
ただ,電圧FF項,電圧指令の代わりに速度FF項,速度指令があります.
abu_senzu
こちらもPID制御器が組んでありますが,P制御以外はゲインを0にして切ってあります.十分な制御周期の中で速度のPゲインが十分高ければオーバーシュートは殆ど発生しません.
速度指令でswervedriveの操舵角 度,加速度指令で操舵角 速度とホイールモーター のトルクを決定して走行します.(swervedriveの操舵角 度はロボットの現在速度から決定されるべきで,しばらく現在速度を使用していましたが,低速走行時のがたつき と接地エンコーダー のトラブル時の暴走の回避を考慮すると速度指令を用いるほうが都合が良い,という判断になりました)
経由点は位置・速度・加速度目標の情報を持ちます.
経由点の選択はロボットに最も近い点が使われていました.
学ロボ2023ルール発表前の開発の時は速度目標ベクトルと位置の偏差の内積 によって目標経由点を進めており,経路が自己交差していても問題なく走行できる,経由点を進めていくので探索が発生しないなどの利点があります.
が,数千程度の経由点の探索の計算時間なんて知れてるし自己交差している経路を走ることなんてまずないので実用的に違いは無く放置していました.
また,ABU2022豊橋 の先輩方のロボットは連続した経路に追従していたので離散的な経路を持たせるのは改悪なのですが,どのみち離散時間での制御を行っているので連続した経路を細かく分割して経由点を十分多く取ればこちらも実用的に違いありません.
ERの曲率が高い経路に対する追従は学外の人からすると結構レア動作かもしれません.
動画を探したのですが,走行試験する時は限界までタイヤが汚れてから行っていたので滑ってる動画しか持ってませんでした.
VIDEO www.youtube.com
NHK のこれが一番見やすい動画なのかなあ,,ERが5秒くらい走ってますね.
NHK フィールドのグリップが高くて大会中ずっと振動しながら走行してます.
とはいえ離散的な経路であることを感じさせない程度には割と滑らかに走れていると思います.
やっぱり曲率があると経路追従っぽさが増しますね.
言い訳ですが世界大会仕様ではもう少し加速度が上がってます.誰に対しての言い訳なのか分かりませんが,,
おわり
だいぶ昔のことを書いてしまいました.勝っていないロボットのことを長々書くのもなと思ったのですが,ABU2023の制御のベースになっていた部分も多いロボットなので書いてみました.
おかしいところとか理解不能 なところでもし興味があれば私のX か何かにdmで質問いただければ有難いです.この記事のコメントはめったに見ないと思います.
そんなに珍しいことをしている訳ではないと思うのですが,2019年以降の交流会とかに特に参加していないので他チームの実情がよく分かっていません.
ABUロボコン 2023豊橋 の某チームメンバーが,「足回りが動かないのは競技進行以前の問題で論外」,「なんで毎年やってることができないの?」などと随分勝手なことを言ってくれていたのですが,実際その通りだと思います.経路追従のような使いまわせる部分の開発は早めに終わらせて,ルールやロボット固有の問題に開発リソースを割かなければいけません.(解っていても楽しいので時間を割いてしまいますが,,)
この記事がどれくらい役に立つかは知りませんが,足回りの事故や不調によって学ロボの予選リーグで機能を見せられないまま敗退してしまうチームが少しでも減れば良いなという願いがこめられていたり,,するかも?
明日はロボコン独ステ Advent Calendar 2024 に投稿させていただく予定です.
まだ記事かけてないので今日のより酷いかもしれませんが,ご容赦ください.
それでは.