📄
Isaac SimでROSロボットを追加する(スタンドアローン起動)
前回、ROSロボットを作成しましたが、これをPythonからスタンドアローンで起動した場合、ROSトピックが出力されません。これはROSトピックのブリッジが有効になっていないからです。Isaac Simで言うところのWindows -> ExtensionsのROS Bridgeを有効にする操作をする必要があります。
コード
以下のコードはIsaac Simにサンプルとして付属しているオフィス環境にROSロボットを配置する例です。
add_ros_robo_office.py
import numpy as np
import carb
from omni.isaac.kit import SimulationApp
simulation_app = SimulationApp({"headless": False})
from omni.isaac.core import World
from omni.isaac.core.utils.nucleus import find_nucleus_server
from omni.isaac.core.utils.stage import add_reference_to_stage
from omni.isaac.core.utils.extensions import enable_extension
my_world = World(stage_units_in_meters=0.01)
enable_extension("omni.isaac.ros_bridge")
_, nucleus_server = find_nucleus_server()
asset_path = nucleus_server + "/Users/hardbake/Office/office.usd"
add_reference_to_stage(asset_path, "/World/Office")
asset_path = nucleus_server + "/Users/hardbake/vehicle_robo.usd"
add_reference_to_stage(asset_path, "/World/Office/vehicle_robo")
my_world.play()
while simulation_app.is_running():
my_world.step(render=True)
my_world.stop()
simulation_app.close()
備考
- サンプルのoffice.usdの環境を読み込んだ後、作成したROSロボットであるvehicle_robo.usdを読み込んでいます(実行する場合はパスは適宜変更してください)。vehicle_robo.usdにはROSロボット以外の余計なもの(Ground Planeなど)が含まれていますが、add_reference_to_stateで読み込むとDefaultPrimに設定されているROSロボットのみが読み込まれます。
- ROSのブリッジを有効にしているのはenable_extensionsの行です。
Discussion