Isaac Sim 入門 (5) - Core API の概要
「Isaac Sim」の「Core API」の概要をまとめました。
前回
1. Core API
「Isaac Sim Core API」は、USDと物理エンジンのAPIのラッパーで、ロボット工学アプリケーション向けにカスタマイズされています。シミュレーション内のあらゆる要素 (シーン、ロボット、センサー、物理演算など) をプログラムから制御することができます。
主な機能は、次のとおりです。
・シーン構築
Prim(ロボット、環境、ライトなど)を生成・配置・削除
・USD 操作
アトリビュートやトランスフォームをプログラムで編集
・物理シミュレーション
剛体、関節、衝突、センサーなどの設定や実行制御
・レンダリング制御
カメラ、ライト、ビューポートの操作
・タイムステップ制御
シミュレーションの進行・一時停止・再開
・イベントループ管理
自動更新処理やカスタムコールバックの登録
・拡張との統合
Isaac Core API を通じて ROS 2 Bridge、RL Framework、Sensor API などと連携
また、「USD API」が細かい構造や手続きを直接扱うのに対し、「Core API」はロボット開発でよく使う操作を簡潔なクラスやメソッドでまとめいます。そのため、よりシンプルにシーンやシミュレーションを扱えます。
・USD API でキューブをステージに追加
from pxr import UsdPhysics, PhysxSchema, Gf, PhysicsSchemaTools, UsdGeom
import omni
stage = omni.usd.get_context().get_stage()
# 物理シーンの設定
gravity = 9.8
scene = UsdPhysics.Scene.Define(stage, "/World/physics")
scene.CreateGravityDirectionAttr().Set(Gf.Vec3f(0.0, 0.0, -1.0))
scene.CreateGravityMagnitudeAttr().Set(gravity)
PhysxSchema.PhysxSceneAPI.Apply(stage.GetPrimAtPath("/World/physics"))
physxSceneAPI = PhysxSchema.PhysxSceneAPI.Get(stage, "/World/physics")
physxSceneAPI.CreateEnableCCDAttr(True)
physxSceneAPI.CreateEnableStabilizationAttr(True)
physxSceneAPI.CreateEnableGPUDynamicsAttr(False)
physxSceneAPI.CreateBroadphaseTypeAttr("MBP")
physxSceneAPI.CreateSolverTypeAttr("TGS")
# グランドプレーンの設定
PhysicsSchemaTools.addGroundPlane(stage, "/World/groundPlane", "Z", 15, Gf.Vec3f(0,0,0), Gf.Vec3f(0.7))
# キューブの追加
path = "/World/Cube"
cubeGeom = UsdGeom.Cube.Define(stage, path)
cubePrim = stage.GetPrimAtPath(path)
size = 0.5
offset = Gf.Vec3f(0.5,0.2,1.0)
cubeGeom.CreateSizeAttr(size)
cubeGeom.AddTranslateOp().Set(offset)
# 剛体と衝突プリセットをアタッチ
rigid_api = UsdPhysics.RigidBodyAPI.Apply(cubePrim)
rigid_api.CreateRigidBodyEnabledAttr(True)
UsdPhysics.CollisionAPI.Apply(cubePrim)・Core API でキューブをステージに追加
import numpy as np
from isaacsim.core.api.objects import DynamicCuboid
DynamicCuboid(
prim_path="/new_cube_2",
name="cube_1",
position=np.array([0, 0, 1.0]),
scale=np.array([0.6, 0.5, 0.2]),
size=1.0,
color=np.array([255, 0, 0]),
)2. USDにおける5つの主要要素

元の「USD」から存在する概念は、次のとおりです。
・Prim (プリム)
「Prim」は、USDの最小構成要素です。マグカップやテーブル、ライト、カメラなど、シーン内のすべてのオブジェクトが「Prim」として表現されます。それぞれは形状・位置・マテリアル・物理特性などの「属性」を持っています。
・Stage (ステージ)
「Stage」はUSDの概念で、シミュレーションにおける「Prim」の論理的かつ関係的なコンテキストを定義します。マグカップの「Prim」がテーブルの「Prim」の上にある場合、その関係はステージ上の「Prim」の相対的な位置と、それぞれの「Prim」が持つ特定の属性によって表現されます。このように、「Stage」はアプリケーションにコンテキストを提供します。「Prim」は「Stage」なしでは存在できないため、「Prim」を扱うアプリケーションは「Stage」なしでは機能しません。
元の「USD」には存在しない「Isaac Sim」の概念は次のとおりです。
・Simulation (シミュレーション)
「Simulation」は、「Prim」の属性を時間とともに変化させるプロセスです。物理シミュレーションやアニメーションを通して、オブジェクトに動きを与えます。
・Application (アプリケーション)
「Application」は、シミュレーションの全体的な設定 (例えば、オブジェクトのレンダリング方法など) と、ユーザーによるシミュレーションとのインタラクションを管理するものです。シミュレーションにGUIがある場合は、それはアプリケーションの一部です。
・World (ワールド)
「World」はシミュレーション全体の世界観を形づくる存在です。時間の流れの中でどの「Prim」が関係するかを定義し、シーン全体の構成や、ユーザーにとって重要な要素を管理します。
演劇にたとえると次のようになります。
・Prim : 舞台上の「俳優」や「小道具」
・Stage : 演劇が行われる「舞台そのもの」
・Simulation : 「演技」や「シーンの進行」
・Application:「劇場」や「観客が入る空間」
・World:「舞台全体を支える世界観」
この5つがそろうことで、USDベースのシミュレーション世界が成り立ちます。
3. Core API チュートリアル一覧
「Core API チュートリアル一覧」が提供されています。
・Hello World
・Hello Robot
・Adding a Controller
・Adding a Manipulator Robot
・Adding Multiple Robots
・Multiple Tasks
・Adding Props
・Data Logging
