Tools
MuJoCo パラメータを機体構造から推算する
アルミ角パイプ + 板 + ボルト結合 + 既知モータの機体で、質量・慣性・摩擦・damping・armature・電気特性を datasheet と幾何から推算し、実測補正を最小化する手順
要点
質量・慣性は CAD から、モータ特性は datasheet から、摩擦は材料表からそれぞれ推算し、実測で補正するのは friction と forcerange の 1-2 個 に留められる。ゼロから試行錯誤する必要はない。
推算できるもの
1. Body の質量・慣性
- アルミ角パイプ (20mm×20mm×1.5mm): 断面積 111 mm² × 2700 kg/m³ = 0.3 kg/m
- アルミ板 (2A2011): 厚さ t × 面積 × 2700. 例 200×200×1.5mm → 0.16 kg/枚
- CAD (STEP) から: FreeCAD の "Mass Properties" で m と I_xyz が直接出る. Assembly の material を Al 2011 (2700 kg/m³) にしておく
- 電子系: LiPo 4S 5000mAh ≈ 0.5 kg / モータ M2006 100g / M3508 400g / 基板 ~100g / ケーブル・ネジ ~10-15% 加算
2. Reflected inertia (<joint armature>)
モータ回転子の慣性 × 減速比² が joint 側に効く。これを省くと加速が実機より速すぎて不安定。
| モータ | J_rotor [kg·m²] | 減速比 N | armature = J_rotor × N² |
|---|---|---|---|
| RoboMaster M2006 P36 | ~2e-7 | 36 | 2.6e-4 |
| RoboMaster M3508 P19 | ~2e-6 | 19 | 7.2e-4 |
| RoboMaster GM6020 (direct) | ~1.5e-4 | 1 | 1.5e-4 |
| RobStride 03 | ~1e-5 | 9 | 8.1e-4 |
3. モータ電気特性 (<dcmotor>)
- fibril_sim_models の preset を継承:
class="fibril_sim_hw_robomaster_m2006_p36_nominal"など - 手書きなら nominal 値:
- M2006 P36:
resistance="0.46"motorconst="0.18 0.29"(Kt Ke), 電流上限saturation="6.5 0 0" - M3508 P19:
resistance="0.19"motorconst="0.30 0.39",saturation="10 0 0"
- M2006 P36:
- 電圧上限は使用バッテリ. S1: 22.2V, S2: 25.2V
4. Wheel の慣性
- 円板近似:
I_wheel = 0.5 × m × r². 例: 50g × 5cm → 6.25e-5 kg·m² - 密度指定でも良い:
<geom density="1100">(ゴム),2700(アルミハブ) <geom mass="X">で直接指定してもよい
5. Wheel 摩擦
| タイプ | friction="slide roll spin" |
|---|---|
| ゴムタイヤ on 合板 (競技床) | "0.9 0.005 0.0001" |
| ゴムタイヤ on タイル | "0.7 0.005 0.0001" |
| オムニホイール | "1.0 0.05 0.0001" (side を意図的に低く) |
| メカナムホイール | "0.5 0.5 0.0001" (両方向グリップ) |
| ラジコン用スポンジタイヤ | "1.2 0.01 0.0001" |
6. 接触剛性 (solref)
- ボルト固定・アルミ板同士: default
"0.02 1"で問題なし - ゴムホイールで跳ねる: 柔らかく
"0.04 1.2" - 硬い接触 (競技床) を正確にしたい:
"0.01 1"+ timestep 0.0005 に下げる
7. Joint damping
| 機構 | damping [N·m·s/rad] |
|---|---|
| ラジアルボールベアリング のみ | 0.001-0.01 |
| モータ内部粘性 (M2006 実測) | 0.02-0.05 |
| ハーモニックドライブ | 0.1-0.3 |
| ウォームギア (逆駆動不可) | equality 制約で表現 |
8. forcerange (peak torque × gear)
モータ peak torque を forcerange に入れる. 「burst OK なら定格 × 3」を目安。
| モータ | 定格 [Nm] | peak [Nm] (burst) |
|---|---|---|
| M2006 P36 | 1.0 | 3.0 |
| M3508 P19 | 3.0 | 5-8 |
| GM6020 | 1.2 | 2.5 |
推算しにくい (実測が必要)
- ギアバックラッシュ
- モータ Kt の電流依存
- タイヤの速度依存ローリング抵抗
- 経時摩耗
- 接触の湿度依存
実用手順 (SRC 系 3-omni の例)
- CAD (STEP) を FreeCAD に読み込む → material=Al 2011 で mass properties → chassis mass ≈ 6-8 kg, I_zz を control テーブルにコピペ
<inertial>を link ごとに手書き:<inertial pos="cx cy cz" mass="m" fullinertia="ixx iyy izz ixy ixz iyz"/>(CAD の値をそのまま)- モータは preset class を include:
<include file="package://fibril_sim_models/mujoco/actuator_presets.xml"/> - armature を計算して入れる: J_rotor × N² を joint に
- friction は表から: オムニなら
"1.0 0.05 0.0001" - 試走: cmd_vel = 一定値 → 定常速度を実機と比較. 合わなければ
friction[0]を上下 (実測補正 1) - 加速時の pitch (前傾) が実機と違う → CoG 高さ or wheel damping を微調 (実測補正 2)
参考
- MuJoCo XML reference: https://mujoco.readthedocs.io/en/stable/XMLreference.html
- RoboMaster モータ datasheet: https://www.robomaster.com/en-US/products/components
- MuJoCo Menagerie (実例集): https://github.com/google-deepmind/mujoco_menagerie
- 関連: MuJoCo 物理設定の 5 階層
最終更新: