🔖

【Isaac Sim × Isaac Lab入門】#2 PythonでIsaac Simの3D環境に直方体を配置し、重力を付与する

に公開

以下の記事にて、Isaac Simに空のシーンを表示することができた。
https://zenn.dev/kprn/articles/57dea2a3951bd3

今回はPart2として、公式チュートリアルを参考に、

  • Pythonスクリプトで、Isaac Sim上に「地面」「ライト」「直方体」を配置する
  • 直方体にRigid Bodyを付与し、重力に従って直方体を落下させる

ことを試してみる。

Rigid Bodyとは?
  • Rigid Bodyとは、物理的な力が加わっても、変形しない物体のことを指す。
  • Rigid Bodyが付与された直方体は、どんなに外力がかかっても、形が変化しない。
  • Rigid Bodyが付与されていない物体は、他の物体とぶつかることや、重力に従って落とすことはできない。
  • Rigid Bodyを付与すると、その物体に質量や摩擦、反発係数などを設定でき、物理的なシミュレーション(例えば物体を落下させるなど)が行えるようになる。

参考

この記事の内容を実施すると、以下のように

  • 空中に固定された直方体(立方体)
  • 重力によって落下する直方体(立方体)

の2つを作成することができる。
https://youtu.be/GE8GKiGBCJk

手順

手順1. Pythonスクリプトの作成

前回までの手順と同様に、C:\Users\{ユーザ名}\work\python_scriptsディレクトリの中に、create_object.pyというPythonスクリプトを作成する。

C:\Users\{ユーザ名}\work\
├─ IsaacLab
└─ python_scripts
   └─ create_empty_scene.py
   └─ create_object.py

そしてcreate_object.pyの中に、以下のコードを貼り付ける。

今回のコード
create_object.py
import argparse
from isaaclab.app import AppLauncher


# ステップ0. 引数を受け取る
parser = argparse.ArgumentParser(description="Tutorial on spawning prims into the scene.")
AppLauncher.add_app_launcher_args(parser)
args_cli = parser.parse_args()

# ステップ1. シミュレータの起動
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app

# ステップ2. Isaac Simからモジュールをインポート
import isaaclab.sim as sim_utils


def create_scene():
    """
    空のシーン内に地面、ライト、直方体を配置する
    """

    # 地面を配置
    cfg_ground = sim_utils.GroundPlaneCfg()
    cfg_ground.func("/World/defaultGroundPlane", cfg_ground)

    # ライトを配置
    cfg_light_distant = sim_utils.DistantLightCfg(
        intensity=3000.0,
        color=(0.75, 0.75, 0.75),
    )
    cfg_light_distant.func("/World/lightDistant", cfg_light_distant, translation=(1, 0, 10))

    # Rigid Bodyを付与していない(=視覚的な)直方体を配置
    cfg_cuboid_visual = sim_utils.CuboidCfg(
        size=(0.5, 0.5, 0.5),
        visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 0.0, 1.0)),
    )
    cfg_cuboid_visual.func("/World/Objects/CuboidDeformable_visual", cfg_cuboid_visual, translation=(0.0, -0.5, 1.5))

    # Rigid Bodyを付与した直方体を配置
    cfg_cuboid_physics = sim_utils.CuboidCfg(
        size=(0.5, 0.5, 0.5),
        rigid_props=sim_utils.RigidBodyPropertiesCfg(rigid_body_enabled=True),
        mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
        collision_props=sim_utils.CollisionPropertiesCfg(),
        visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 1.0, 0.0)),
    )
    cfg_cuboid_physics.func("/World/Objects/CuboidDeformable_physics", cfg_cuboid_physics, translation=(0.0, 0.5, 1.5))


# ステップ3. シミュレーションコンテキストの設定
sim_cfg = sim_utils.SimulationCfg(dt=0.01, device=args_cli.device)
sim = sim_utils.SimulationContext(sim_cfg)

# ステップ4. ビューポートを映すカメラの位置・注視点を設定
sim.set_camera_view([3.0, 0.0, 2.5], [-0.5, 0.0, 0.5])

# ステップ5. 地面、ライト、直方体をシーンに配置
create_scene()

# ステップ6. シミュレーションの実行
sim.reset()
while simulation_app.is_running():
    sim.step()

# ステップ7. シミュレーションを終了
simulation_app.close()

このコードは、公式のコードを参考に、ステップが分かりやすくなるように整理したものである。

コードの詳細は、今後別記事にて説明する。

手順2. 実行前の事前準備

Isaac SimとIsaac Labを実行する事前作業として、パスを通す。

コマンドプロンプト上で、以下を実行する。

cd C:\Users\{ユーザ名}\work\IsaacLab
set ISAACSIM_PATH="C:/isaacsim"
set ISAACSIM_PYTHON_EXE="%ISAACSIM_PATH:"=%\python.bat"
isaaclab.bat --install

手順3. 実行

コマンドプロンプト上で、以下を実行する。

isaaclab.bat -p ..\python_scripts\create_object.py

実行が成功すると、Isaac Simが起動し、以下のように空中に固定された青い直方体と、重力に従って落下する緑色の直方体が表示される。
https://youtu.be/GE8GKiGBCJk

シミュレーションを終了するときは、

  • コマンドプロンプトで「Ctrl+C」を押す
  • シミュレータ画面を「×ボタン」で消す

のどちらかを実行する。

Next Action

今回はPythonスクリプトによって、Isaac Simで直方体を配置することや、Rigid Bodyを付与し、重力で落下させることができた。

今後の記事では、落下中の直方体の位置を取得することや、カメラを操作して撮影する方法などを検討する。

Discussion