Control
全方向移動機の経路追従
横に動ける機体 (スワーブ・メカナム・オムニ) では pure pursuit をやめ、横ずれを横方向の速度で直接消す。向きは θ(s) から前向き項を取る
要点: 横に動ける機体では、pure pursuit の先読みが曲がりで内側を通る原因になる。横ずれ を横方向の速度 で直接消し、向きは を前向き項にする。
制御則 (毎周期)
射影 s* = argmin |p − c(s)| 窓の中だけ探し、単調に進める
基準点 s_r = s* + v·(τ + dt/2) τ = 指令が効き始めるまでの遅れ
横ずれ e = (p − c(s*))·n̂(s*) 符号つき
速度 v_cmd = v·t̂(s_r) − clamp(k_e·e, ±v_lat_max)·n̂(s_r)
向き ω_cmd = θ'(s_r)·v + k_ψ·wrap(θ(s_r) − ψ)
速さ v = min(速度上限の包絡線(s_r), 加速の上限, 終端まで止まれる速さ)閉ループは になり、時定数は 。
pure pursuit が内側を通る理由
| pure pursuit | 横ずれを直接消す | |
|---|---|---|
| 前提 | 横に動けない機体 (差動二輪・アッカーマン) | 横に動ける機体 |
| 横ずれの消し方 | 先読み点へ向けて幾何的に収束 | 横方向の速度 |
| 曲がり | 先読み距離 > 曲率半径だと弦を張って内側を通る | 計画した曲線をそのまま通る |
| 向き | 目標角への PID だけ | の前向き項 + 誤差の補正 |
先読み 0.3 m・最小曲率半径 0.15 m の経路では、運動学だけの閉ループで計画からのずれが最大 102 mm になった。横ずれを直接消す方式は同じ経路で 0.2 mm (詳細: RC27 BR の経路計画と追従)。その代わり pure pursuit は短い道を通るので、所要時間は 3.9% 短く出る。
向きを θ(t) でなく θ(s) で持つ理由
- 機体が遅れると回転も同じだけ遅れる。回転が間に合わないことが起きない
- 、 なので、回転の上限が の制約になる。TOPP-RA にそのまま入る
- θ(s) の補間は PCHIP (形状保存 3 次エルミート) にする。線形補間は ω が段になり、素の 3 次スプラインは節点の間で行き過ぎる
スワーブで追加で要るもの
- 旋回中心が車輪に乗る特異点: 輪 i の接地速度 。 でステア角が無限に速く回る。見る量は (0〜1)。追従の補正でこの値は計画より下がる (例: 計画 0.109 → 走行中 0.021) ので、計画側と実行時の 2 段で下限を持つ
- 低速での方向保持: 速度が小さいとき指令方向が数値誤差で回り、ステア目標が巻き取り限界まで回る。一定速度を下回ったら方向を保持する
- 終端: 下限速度を出し続けると止まらない。残り数 cm で経路追従をやめ、位置と向きの寄せに切り替える (許容差の中に一定時間入ったら到着)
関連
最終更新: