はじめに
この記事はIsaac Simの入門として,4輪のシンプルなロボットを作成し,駆動することを目標としている.
こちらが参考にした資料である.
https://learn.nvidia.com/courses/course-detail?course_id=course-v1:DLI+S-OV-27+V1
Isaac Simは使用者が少なく記事も少ないが,その分公式ドキュメントが非常に充実している.この記事は公式の上記サイトの日本語版という位置づけでまとめようと思う.上記サイトは英語ではあるが入門から発展まで学べるコース形式となっており,自分で学ぶ分には無料なので,非常におすすめである.
環境
| 項目 | 仕様 |
|---|---|
| メモリ | 32.0 GiB |
| CPU | Intel i7-14700F @ 5.300GHz |
| GPU | NVIDIA GeForce RTX 5080 |
| OS | Ubuntu 22.04.5 LTS 64ビット |
| Isaac Sim | 5.1.0 |
キューブを追加,Phisicsの理解
Visual meshの作成
Create > Mesh > Cubeから作成
Visual meshは見た目だけの情報なので,物理シミュレートの情報(Phisics)は定義されていない
この状態でPlayボタンを押しても,何も起こらない.
Phisicsを有効化
Create > Physics > Physics Sceneを追加

この状態でPlayボタンを押しても,何も起こらない.キューブにPhisicsが追加されていないから
キューブにPhisicsを追加
キューブを右クリックしてAdd > Physics > Rigid Body with Colliders Presetを追加

Collision meshは他のオブジェクトに相互作用する方法や他のオブジェクトに反応する方法を提供する
目のアイコンのShowアイコンを開き,Show by Type > Physics > Colliders > Selectedを選択する.すると,Collision meshとして緑色のメッシュとして表示される.

ここで再生ボタンを押すと,オブジェクトは下に永遠と落ちていく.これは地面が追加されておらず,物理シミュレートを有効化して自由落下が再現されたためである.

地面を追加してシミュレート
Create > Physics > Groundから地面を追加


Cubeを選択して開いたプロパティを見ると,Zに0.5が指定されており,地面に設置しているので,1[m]を設定すると,ちょうど0.5m浮くことになる.

先程追加したPhisics Sceneのプロパティで,重力のY方向に1を与えてみる

キューブを浮かせた分やY軸に設定した重力は戻しておく
4つの車輪を追加
機体の準備
キューブを選択し,座標をWorldの原点である (0, 0, 0) に設定
Stage Panelを右クリックしてCreate > XformからXformを作成.これがロボットの親として機能する.Xformはオブジェクトの座標系のようなものである.

ドラッグアンドドロップでCubeをSimpleRobotに追加する.

SimpleRobot Xframeを選択し,Transformのz軸を1.0に設定する.すると,Xformとともにキューブも上へ移動する.これはXformがコンテナのように機能しており,それに属しているものすべてに適用されるからである.

車輪を作成
ロボットでは,親子関係で各リンクの座標系の関係を設計する.tree形式になり,循環関係のようにはならない.例えば,車輪ロボットでは車体がbase_linkといった名前のframeが親になり,その子としてwheel1, …wheel4といった形でframeが接続されていく.
SimpleRobotを右クリックして, Create > Mesh > Cylinderを選択して,円柱を追加する.

OrientのXを90に設定し,X方向に90度回転
Scaleに (0.75, 0.75, 0.75) を設定する.

Translateには (0.5, 0.75, 0) を設定.これは親リンクである機体のXformに対しての座標変換で設定している.

Cylinderを「Front_Left_Wheel 」とリネームする.

作成した車輪を複製する.複製は右クリックメニューからもできるが,「Ctrl + D」でもできる.

複製した3つの車輪について,Front_Right_Wheel, Rear_Left_Wheel, Rear_Right_Wheelとリネームする.

それぞれの車輪について,機体のXformからの位置関係を考えながら,座標の値を設定
ただ,車輪に関してはまだVisual meshしか持っていないので,Physicsを追加する必要がある.すべての車輪を選択し,Add > Physics > Rigid Body with Colliders Presetから追加する.

ここでPlayボタンを押すと,機体とともに車輪が落下する.座標的な位置関係は設定したが,機体との接続情報等(joint)が設定されていないため,再生するとバラバラになる.

jointの準備
jointによってロボットの関節や車輪といったものを実装できる.
回転ジョイントの作成
回転ジョイント(Revolute Joint)は一つの軸に対して回転するジョイントを作成できる.
まず親リンクであるCubeを選択し,Ctrlキーを押したまま子primであるFront_Left_Wheelを選択し,右クリックからCreate > Physics > Joint > Revolute jointでジョイントを作成する.Ctrlキーを押すことで複数選択をするが,親子の関係を設定するため,先に親,次に子という順番でクリックする必要がある.

回転ジョイントの設定
ここで,jointの関係を可視化するために,目玉マークのViewportから,Show By Type > Physics > Jointsを有効化する.

すると,回転の方向を表す,緑色の矢印の円が,水平方向に向いていることがわかる.そのため調整する必要がある.
ここで,以下の項目が重要になる.
local rotation 0: 親リンクに対して,どの方向にジョイントの回転軸が向くか決定する.
local rotation 1: 子リンクのどの方向が joint frame の軸に対応するか を決める.子リンクのメッシュと関節の向きを合わせる
なお,local rotation 1のわかりにくい点として,車輪を選択して見えている座標系はメッシュの座標系であり,元の座標系とは異なるということである.元の座標系ではZ軸が円柱の高さ方向だったことからもわかると思う.
よって,local rotation 1として以下のような変換が必要になる.

親リンク(機体)のy軸に対して,子リンク(車輪)のy軸を向かせたいので,座標変換はいらず,local rotation 0を(0, 0, 0)に設定する.また,local rotation 1を(-90, 0, 0)に設定する.

ジョイントをFront_Left_Jointとリネーム
Ctrlで親子の順番で選択するのを忘れずに,同じように他のジョイントも作成.名前も車輪に合わせる.回転軸も同じY軸である.

後輪に駆動力を与える
後輪のジョイントを右クリックし,Add > Physics > Angular Driveを選択する.

プロパティの下の方へスクロールし,Driveのなかのamping という項目を10000に設定する.正確な速度制御を実現し,振動を減らし,安定性を確保するために,後輪の減衰値として 10,000 が選択された.
Target Velocityに50**[degrees / second]**を設定する.

もう片方の後輪にも同じように設定する.
Playボタンを押してシミュレーションを動かすと,車輪ロボットとして動かすことができた.

次回













