Please advise me on how to enable the ROS2 Humble bridge extension in standalone application. My test code cannot enable the bridge for the following error message:
[39.868s] [ext: omni.isaac.ros2_bridge-humble-1.10.1] startup
2023-03-10 07:54:55 [40,042ms] [Error] [omni.isaac.ros2_bridge.scripts.extension] omni.isaac.ros2_bridge-humble-1.10.1 bridge extension cannot be enabled if omni.isaac.ros2_bridge is enabled
Please find my test code below:
# Create a simulation application instance at first
from omni.isaac.kit import SimulationApp
CONFIG = {
'renderer': 'RayTracedLighting',
'headless': False,
'width': 1280,
'height': 720
}
simulation_app = SimulationApp(CONFIG)
import traceback
import os
import carb
import time
from omni.isaac.core import World
from omni.isaac.core.utils.extensions import enable_extension, disable_extension
from omni.isaac.core import SimulationContext
import omni.graph.core as og
ENV_URL = '/Isaac/Environments/Grid/default_environment.usd'
CLOCK_GRAPH_PATH = '/ClockGraph'
def create_clock_graph() -> None:
"""Creates an action graph to generate ROS2 clocks"""
clock_topic = 'clock'
system_clock_topic = 'system_time'
try:
og.Controller.edit(
{'graph_path': CLOCK_GRAPH_PATH, 'evaluator_name': 'execution'},
{
og.Controller.Keys.CREATE_NODES: [
('ReadSimTime', 'omni.isaac.core_nodes.IsaacReadSimulationTime'),
('ReadSystemTime', 'omni.isaac.core_nodes.IsaacReadSystemTime'),
('OnPlaybackTick', 'omni.graph.action.OnPlaybackTick'),
('PublishClock', 'omni.isaac.ros2_bridge.ROS2PublishClock'),
('PublishSystemClock', 'omni.isaac.ros2_bridge.ROS2PublishClock'),
],
og.Controller.Keys.CONNECT: [
('OnPlaybackTick.outputs:tick', 'PublishClock.inputs:execIn'),
('OnPlaybackTick.outputs:tick', 'PublishSystemClock.inputs:execIn'),
('ReadSimTime.outputs:simulationTime', 'PublishClock.inputs:timeStamp'),
('ReadSystemTime.outputs:systemTime', 'PublishSystemClock.inputs:timeStamp'),
],
og.Controller.Keys.SET_VALUES: [
('PublishClock.inputs:topicName', clock_topic),
('PublishSystemClock.inputs:topicName', system_clock_topic),
],
},
)
except Exception as e:
print(e)
simulation_app.update()
def main():
# Disable ROS1 bridge extension
print('Disabling ROS1 bridge extension')
ret = disable_extension('omni.isaac.ros1_bridge')
print('Return from disable_extension: {}'.format(ret))
simulation_app.update()
# Disable ROS2 bridge extension
print('Disabling ROS2 bridge extension')
ret = disable_extension('omni.isaac.ros2_bridge')
print('Return from disable_extension: {}'.format(ret))
simulation_app.update()
# Enable ROS2 Humble bridge extension
print('Enabling ROS2 Humble bridge extension')
ret = enable_extension('omni.isaac.ros2_bridge-humble')
print('Return from enable_extension: {}'.format(ret))
simulation_app.update()
world = World(stage_units_in_meters=1.0)
world.scene.add_default_ground_plane()
create_clock_graph()
time.sleep(1.0)
simulation_context = SimulationContext(physics_dt=1.0 / 60.0, rendering_dt=1.0 / 60.0, stage_units_in_meters=1.0)
simulation_context.initialize_physics()
simulation_context.play()
world.reset()
while(True):
world.step(render=True)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Existing...')
except Exception as e:
carb.log_error(f'Exception: {e}')
traceback.print_exc()
finally:
simulation_app.close()
print('Simulation application closed.')
humble_bridge_test.py (3.4 KB)
Thanks.