notes
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 個の外形だけ駆動プーリ・テンションプーリを回る接地部の形はほぼ同じ. 内側の経路は接地に効かない
表面速度全ローラ同じ (拘束)同じ差は無い

実物に近づける順番:

  1. 摩擦係数を実測する (ベルトを段の材質の上で引き, すべり出す力 / 垂直荷重)
  2. 駆動の上限を「モータのトルク上限」ではなく「歯飛びするトルク」と比べて小さい方にする
  3. 直線部のたわみが効く場面 (縁が中ほどに当たる) が重要なら, ローラを slide joint + ばねで支えて沈むようにする. ばね定数はベルトを押して測る

関連#

  • /docs/tools/mujoco-omni-wheel-lateral-slip
  • /docs/tools/mujoco-physics-config
最終更新:

On this page