Tools
MuJoCo でクローラ (履帯) を動かす方法
MuJoCo には面の速度 (surface velocity) が無い。履帯を表す 3 つの方法と、段差の縁に押しつけて登る用途での選び方
要点: MuJoCo は接触面に速度を持たせられない。履帯は (1) 小ローラの列、(2) 剛体パッドの鎖、(3) 接触力を自前で計算するプラグイン、のどれかで表す。最初は (1) で足りる。
3 つの方法
| 方法 | body 数 (履帯 1 本, 長さ 0.35 m) | 段の縁への接触 | 実装 |
|---|---|---|---|
| (1) 小ローラ列 | 約 30〜70 | ピッチを詰めれば平面に近い | MJCF だけ |
| (2) パッドの鎖 | 約 40〜80 + hinge | 実物に近い | MJCF。張力・巻き付きの調整が難しく、発散しやすい |
| (3) 接触力プラグイン | 1 (箱 1 個) | 平面そのもの | C++ (model plugin / mjcb_control) |
(1) 小ローラ列
- 履帯の外形 (直線部の上下 + 両端の円弧) に沿って半径 のローラを並べ、各ローラを hinge で回す
- ローラは全部同じ表面速度で回す。
<equality joint>で駆動ローラの角度に比 で拘束するか、全ローラに同じ velocity actuator を置く - ピッチ の間に段の縁が落ちる深さ:
- mm, mm で mm
- mm, mm で mm (縁がローラ間に挟まる)
- を目安にする
- 段の縁 (角) で登る機体では、押しつける側の直線部だけでなく、腕が回ったときに当たる面 (上側の直線部・先端の円弧) にもローラが要る
(2) パッドの鎖
- パッド同士を hinge でつなぎ、プーリに巻き付ける。張力はプーリ間距離を slide joint + spring で与える
- 接触数が多く、パッドとプーリの噛み合いで発散しやすい。見た目・グローサの効果を見たいとき以外は使わない
(3) 接触力プラグイン
- 履帯の直線部を箱 1 個にし、その geom の接触を毎ステップ読み、接触点での相対速度と履帯速度の差 (すべり) から摩擦力を計算して
xfrc_applied/qfrc_appliedに入れる。MuJoCo 側の摩擦はその geom だけ 0 にする - Gazebo の TrackedVehicle (ODE の
fdir1+ surface motion) と同じ考え方 - 力と速度の関係 (すべり率, 摩擦係数) を自分で決められるので、実機の測定値に合わせやすい
ローラ列と実物の履帯の違い
| 項目 | ローラ列 | 実物 | sim の結果への効き方 |
|---|---|---|---|
| 直線部の支え | 全長が剛体のローラで支えられる | プーリ間のベルトは張力だけで支えられ, 押すとたわむ | 段の縁が直線部の中ほどに当たると, 実物はベルトが沈んで縁を包む. sim は沈まない |
| 段の縁との接触 | 点接触 + クーロン摩擦 (力 ≤ μN) | ゴムの変形で接触面が広がり, ラグ (突起) が縁に引っかかる | 実物の方が引く力が大きいことがある (sim は悲観側) |
| 張力・たるみ | 拘束が硬いので張力は無限大と同じ | 緩み側がたるみ, 大トルクで歯飛び・脱輪する | sim は歯飛び・脱輪を出さない (楽観側) |
| 駆動の損失 | ほぼ無し | ベルトの曲げ損失・軸受摩擦 (効率 85〜95 %) | sim の方が速く, 力が出る (楽観側) |
| 摩擦係数 | 一定値 (例 1.0) | 材質・ほこり・ラグ形状で変わる | 値次第で登れる/登れないが入れ替わる |
| ベルト経路 | 端のプーリ 2 個の外形だけ | 駆動プーリ・テンションプーリを回る | 接地部の形はほぼ同じ. 内側の経路は接地に効かない |
| 表面速度 | 全ローラ同じ (拘束) | 同じ | 差は無い |
実物に近づける順番:
- 摩擦係数を実測する (ベルトを段の材質の上で引き, すべり出す力 / 垂直荷重)
- 駆動の上限を「モータのトルク上限」ではなく「歯飛びするトルク」と比べて小さい方にする
- 直線部のたわみが効く場面 (縁が中ほどに当たる) が重要なら, ローラを slide joint + ばねで支えて沈むようにする. ばね定数はベルトを押して測る
関連
- /docs/tools/mujoco-omni-wheel-lateral-slip
- /docs/tools/mujoco-physics-config
最終更新: