🔖
【Isaac Sim × Isaac Lab入門】#2 PythonでIsaac Simの3D環境に直方体を配置し、重力を付与する
以下の記事にて、Isaac Simに空のシーンを表示することができた。
今回はPart2として、公式チュートリアルを参考に、
- Pythonスクリプトで、Isaac Sim上に「地面」「ライト」「直方体」を配置する
- 直方体にRigid Bodyを付与し、重力に従って直方体を落下させる
ことを試してみる。
Rigid Bodyとは?
- Rigid Bodyとは、物理的な力が加わっても、変形しない物体のことを指す。
- Rigid Bodyが付与された直方体は、どんなに外力がかかっても、形が変化しない。
- Rigid Bodyが付与されていない物体は、他の物体とぶつかることや、重力に従って落とすことはできない。
- Rigid Bodyを付与すると、その物体に質量や摩擦、反発係数などを設定でき、物理的なシミュレーション(例えば物体を落下させるなど)が行えるようになる。
(参考)
この記事の内容を実施すると、以下のように
- 空中に固定された直方体(立方体)
- 重力によって落下する直方体(立方体)
の2つを作成することができる。
手順
手順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が起動し、以下のように空中に固定された青い直方体と、重力に従って落下する緑色の直方体が表示される。
シミュレーションを終了するときは、
- コマンドプロンプトで「Ctrl+C」を押す
- シミュレータ画面を「×ボタン」で消す
のどちらかを実行する。
Next Action
今回はPythonスクリプトによって、Isaac Simで直方体を配置することや、Rigid Bodyを付与し、重力で落下させることができた。
今後の記事では、落下中の直方体の位置を取得することや、カメラを操作して撮影する方法などを検討する。
Discussion