見出し画像

Isaac Sim の Joint Drive設定 まとめ

「Isaac Sim」のdrive設定をまとめました。

・Isaac Sim 5.1


1. はじめに

「Isaac Sim」にロボットを読み込んでも、最初からうまく動くとは限りません。Joint Drive 設定を調整してはじめて、シミュレータ上で意図どおりに動くようになることも多くあります。
このとき、多くの人が次のような疑問を抱くのではないでしょうか。

・このJoint Drive設定は実機にも関係あるのか?
・実機の制御パラメータを、そのままここに入れるべきではないのか?
・そもそも、配布されている URDF にこの種のパラメータがあまり入っていないのはなぜか?

結論から言うと、「Isaac Sim」の Joint Drive設定は、そのまま実機の制御パラメータではありません。
ただし、実機らしい挙動をシミュレータ上で再現するうえでは重要な要素です。

大事なのは、実機の設定値をそのまま持ち込むことではなく、実機の入出力応答を再現することです。

この記事では、この考え方を整理しながら、「Isaac Sim」の Joint Drive設定をどう調整すべきかをまとめます。

2. Isaac Sim の Joint Drive とは

まず前提として、「Isaac Sim」の Joint Driveは、実機のサーボドライバそのものではありません。

ざっくり言うと、

・stiffness は主に目標位置への引き込みの強さ
・damping は主に目標速度への追従と速度誤差の抑制の強さ

として使われます。

見た目はPD制御にかなり近いのですが、実装としては「実機の PID をそのまま再現している」というより、シミュレータ内で関節を安定して駆動するためのモデルになります。

なので、「Isaac Sim」上で Joint Drive設定を調整してロボットが動くようになったとしても、それはシミュレータ内でそのロボットが適切に駆動されるようになったという意味です。

実機のサーボアンプやファームウェアのゲインが直接変わるわけではありません。

3. 実機とどう関係するか

無関係ではありません。

「Isaac Sim」の Joint Drive設定は、実機の制御パラメータそのものではない一方で、実機の見かけの応答を再現するための重要な調整値です。

たとえば実機では、同じ位置指令を出しても、

・どれくらい速く立ち上がるか
・行き過ぎるか
・振動せず止まるか
・負荷がかかったときにどれくらい追従性が落ちるか

といった振る舞いがあります。

シミュレーションで本当に再現したいのは、こうした挙動です。つまり、再現したいのは「ゲイン表」ではなく「応答波形」です。

4. 実機パラメータをそのまま使わない理由

ここでよくあるのが、「実機の Kp や Kd が分かっているなら、それをそのまま Isaac Sim に入れればいいのでは?」という発想です。

でも実際には、そう単純ではありません。

実機には、

・モータドライバ内部の制御ループ
・電流制御や速度制御の内側ループ
・制御周期
・フィルタ
・摩擦補償
・重力補償
・トルク制限や速度制限
・メーカー固有の保護や補正

など、いろいろな要素が入っています。

一方で「Isaac Sim」の Joint Driveは、それらを丸ごと同じ形で再現しているわけではありません。そのため、実機の Kp/Kd を「Isaac Sim」の stiffness/damping にそのまま対応づけることは基本的にできません。

だから正しい考え方は、値を写すことではなく、実機の応答に合うようにシミュレータ側を調整することになります。

5. 何を一致させるべきか

では、何を基準に Joint Drive設定を調整すればいいのでしょうか。

答えはシンプルで、実機の入出力応答です。

見るべきなのは、以下のような項目です。

・立ち上がり時間
・オーバーシュート
・減衰のしかた
・定常偏差
・負荷をかけたときの追従性
・飽和時の速度感、力感

実機で位置指令や速度指令を与えたときの応答を観測して、「Isaac Sim」でも同じ入力を入れ、波形が近づくように Joint Drive設定を調整します。

つまり、

(1) 実機に入力を与える
(2) 応答を測る
(3) シミュレータに同じ入力を与える
(4) 応答が似るまでパラメータを詰める

という流れです。

これは一見遠回りに見えますが、実機に近いシミュレーションを作るにはかなり本質的な方法です。

6. drive 種別ごとの考え方

6-1. 位置制御の関節

アーム関節のように、目標角度に追従してほしいなら position drive を使います。
この場合は `stiffness` が中心になります。

基本的な見方はこうです。

・目標位置まで届かないなら `stiffness` を上げる
・行き過ぎる、振動するなら `damping` を上げる
・安定だが遅いなら `stiffness` を上げる
・速いが落ち着かないなら `damping` を上げる

6-2. 速度制御の関節

車輪のように、目標速度で回ってほしいなら velocity drive を使います。
このときは stiffness は 0、damping を主に調整します。

直感的には、

・目標速度まで上がらないなら `damping` を上げる
・加速が荒すぎるなら `damping` や上限値を見直す
・無負荷では合うが負荷時に遅いなら `damping` や `maxForce` を見直す

という考え方になります。

7. Joint Drive だけでは実機らしくならない理由

シミュレーションで実機に近い応答を出したいなら、drive だけでは不十分です。
少なくとも次のような要素も大きく効きます。

・質量
・慣性
・重心
・関節摩擦
・接地摩擦
・最大トルク
・最大速度
・必要に応じて armature や重力補償

たとえば wheel 系では、Joint Driveを合わせても接地摩擦が違えば加減速の感じは変わります。
アームでも、質量や慣性がずれていれば、同じ Joint Driveでもまったく別の応答になります。

つまり、実機に近づけるには、駆動モデルだけでなく物理モデルも合わせる必要があるということです。

8. なぜ URDF に Joint Drive 設定がないのか

これもかなり自然な疑問です。

ただ、ここは少し丁寧に分けて考える必要があります。

まず「URDF」は、ロボットの構造や基本的な物理情報を表すための形式です。基本的な動力学パラメータは持てます。

・リンク構造
・関節構造
・軸
・可動範囲
・質量
・慣性
・関節の damping・friction

つまり、URDF が物理情報をまったく書けないわけではありません。

一方で、実機のサーボゲインやドライバ内部の制御パラメータ、あるいは「Isaac Sim」固有のJoint Driveの stiffness / damping のような値は、標準的な URDF だけできれいに表しにくいことが多いです。
なぜなら、そうした値はロボットの形そのものではなく、どの制御器を使うか、どのシミュレータを使うか、どんな駆動モデルを使うかに依存するからです。実際、「Isaac Sim」側でも position drive では stiffness、velocity drive では damping を主に使う、といった simulator 固有の扱いがあります。

そのため実際の運用では、

・URDF には構造と基本物理を書く
・実機寄りの制御設定は controller 側や実機側設定に持つ
・シミュレータ固有のJoint Drive設定はシミュレータ側で調整する

という分離がよく行われます。

だから、配布されている URDF に細かい Joint Drive設定があまり入っていないのは、URDF が不完全だからというより、役割分担として自然だと考えたほうが実態に近いです。

9. 実務での進め方

実務では、次の順番で整理するとかなり進めやすくなります。

まず、「URDF」にはできるだけ正しい物理情報を入れます。
質量、慣性、可動範囲、速度上限、努力上限などです。

次に、「Isaac Sim」側では用途に応じてJoint Drive設定を調整します。

・アームの位置追従なら position drive
・車輪の回転なら velocity drive
・上位 controller でトルク制御したいなら、Joint Driveは無効化するか、stiffness / damping を 0 に近づける

そのうえで、実機と同じ入力を与えて応答を比べます。
必要なら stiffness、damping、maxForce、maxJointVelocity、frictionなどを調整します。

この流れにしておくと、単に「シミュレータ上で動く」だけでなく、「実機に近い動きを返すモデル」に近づけていけます。

10. まとめ

「Isaac Sim」のJoint Drive設定は、実機の制御パラメータそのものではありません。ただし、実機らしい挙動をシミュレータで再現するためにはとても重要です。

大事なのは、実機の設定値をコピーすることではなく、実機の入出力応答を再現すること です。

そしてそのためには、Joint Driveだけではなく、質量、慣性、摩擦、速度上限、力上限といった物理側の整合も必要です。

「URDF」にJoint Driveなどの値があまり入っていないのは、「URDF」が主に構造と基本物理を書くための形式であり、制御器依存のパラメータまで標準的に持つものではないからです。

「Isaac Sim」を触るときは、URDF は構造の土台、Joint Driveは応答を再現するための調整レイヤー と考えると整理しやすいと思います。



いいなと思ったら応援しよう!