📄

Isaac SimでROSロボットを追加する(スタンドアローン起動)

2022/05/07に公開

前回、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