Tools
Isaac Sim のジョイントドライブ調整
振動・追従不良を damping/stiffness の試行錯誤でなく I_eq からの計算で解決する手順
要点
ドライブゲインは調整せず計算で決める: K = I_eq·ω², D = 2ζ·I_eq·ω(ζ = 1.0)。
数字・コマンド
PhysX の位置ドライブはバネダンパ: τ = K·(q_target − q) + D·(q̇_target − q̇)
- 固有振動数 ω = √(K / I_eq) [rad/s]。必要帯域から選ぶ(アーム級で 100–200 rad/s)
- 減衰比 ζ = D / (2√(K·I_eq))。ζ < 1 で振動、ζ = 1(臨界減衰)が振動しない最速
- I_eq は PhysX の一般化質量行列の対角から実測する。USD の
physics:JointEquivalentInertia属性は実測と桁が違うことがあり使わない - I_eq は姿勢で変わるため、動作範囲を掃引して最大値で決める(小さい姿勢で決めると 他の姿勢で追従しない)
- 減速機付きモータは armature(反射慣性)= ロータ慣性 × 減速比² を joint に設定する。 軽い軸ほど必須(慣性ほぼゼロの軸を強いバネで駆動するとジッタの典型源)
- 数値安定条件の目安: ω·dt を小さく保つ。K を上げるなら物理レート(60→120–240 Hz) か solverPositionIterationCount(16–32)も上げる
症状からの切り分け
| 症状 | 原因 | 対処 |
|---|---|---|
| 目標到達後にリンギング | ζ < 1 | D = 2√(K·I_eq) へ |
| 静止時の微小ジッタ | ω·dt 過大 / 慣性過小 | 物理レート↑ / K↓ / armature 追加 |
| 目標に届かず遅れる | maxForce 飽和 / K 不足 | 上限と K を実負荷から再計算 |
| 重力方向の定常偏差 | バネの静的たわみ | K↑ か重力補償トルクを feedforward |
| 動き出しの段付き | 位置目標が階段状 | 目標を毎物理ステップ供給 + 速度フィードフォワード |
詳細な背景
- ゲイン以外に効くノブは 5 つ: 目標の与え方(速度 FF 込みの連続供給)、armature、 物理レートとソルバ反復、リンク慣性の正しさ(URDF のプレースホルダ慣性は I_eq を 狂わせる)、力上限。
- 速度フィードフォワード: 位置目標だけだと D 項がブレーキとして働く。q̇_target を 与えると D 項が追従補助になり、同じゲインでも滑らかになる。
- URDF インポータは全関節に一律の naturalFrequency/dampingRatio を付与することがある (例: ω=25, ζ=0.1 = 強い低減衰)。インポート後にゲインを上書きする工程を挟む。
- mimic 関節(平行リンク等)はインポートで柔らかい拘束になりがちで、垂れ・振動源に なる。剛拘束化する。
- 操舵軸(タイヤ接地)特有: 静止操舵はねじり摩擦(スクラブトルク)と戦うが、PhysX の
接触ねじり摩擦は既定 0(
torsionalPatchRadiusで有効化)。実機より軽く回る/ maxForce 不足で途中停止、の両方向のずれが出る。ホイールコライダはメッシュ凸包でなく 円筒/カプセルにする(多角形の角で引っかかる)。
関連
- /docs/control/pid — 減衰比・固有振動数の一般論
最終更新: