This repository has been integrated into semu.robotics.ros_bridge, in which its source code has been released.
Visit semu.robotics.ros_bridge
This extension enables the ROS action interfaces used for controlling robots. Particularly those used by MoveIt to talk with the controllers on the robot (FollowJointTrajectory and GripperCommand)
- Prerequisites
- Add the extension to an NVIDIA Omniverse app and enable it
- Control your robot using MoveIt
- Configure a FollowJointTrajectory action
- Configure a GripperCommand action
All prerequisites described in ROS & ROS2 Bridge must be fulfilled before running this extension. In addition, this extension requires the following extensions to be present in Isaac Sim:
- omni.usd.schema.add_on: USD add-on schemas
- omni.add_on.ros_bridge_ui: Menu and commands
-
Add the the extension by following the steps described in Extension Search Paths or simply download and unzip the latest release in one of the extension folders such as
PATH_TO_OMNIVERSE_APP/extsGit url (git+https) as extension search path:
git+https://github.com/Toni-SM/omni.add_on.ros_control_bridge.git?branch=main&dir=exts -
Enable the extension by following the steps described in Extension Enabling/Disabling
MoveIt's move_group talks to the robot through ROS topics and actions. Three interfaces are required to control the robot. Go to the MoveIt website to read more about the concepts behind it
-
Joint State information: the
/joint_statestopic (publisher) is used to determining the current state information -
Transform information: the ROS TF library is used to monitor the transform information
-
Controller Interface: move_group talks to the controllers on the robot using the FollowJointTrajectory action interface. However, it is possible to use other controller interfaces to control the robot
Isaac Sim side
-
Import your robot from an URDF file using the URDF Importer extension. Go to ROS Wiki: Using Xacro to convert your robot description form
.xacroto.urdf -
Add a Joint State topic using the menu (Create > Isaac > ROS > Joint State) according to the ROS Bridge extension
-
Add a TF topic using the menu (Create > Isaac > ROS > Pose Tree) according to the ROS Bridge extension
-
Add the corresponding ROS control actions implemented by this extension (see the sections below) according to your robotic application's requirements
Note: At that point, it is recommendable to setup the MoveIt YAML configuration file first to know the controllers' names and the action namespaces
-
Play the editor to activate the respective topics and actions. Remember the editor must be playing before launching the move_group
MoveIt side
-
Launch the MoveIt Setup Assistant and generate a new configuration package loading the same
.xacroor.urdfused in Isaac Sim. Also, select the same ROS controller interfaces inside the step ROS Controlroslaunch moveit_setup_assistant setup_assistant.launch
-
Launch the move_group using the configured controllers
For example, you can use the next launch file (sample.launch) which is configured to support the FollowJointTrajectory and GripperCommand controllers (panda_gripper_controllers.yaml) by replacing the
panda_moveit_configwith the generated folder's name and/panda/joint_statewith the Isaac Sim joint state topic nameroslaunch moveit_config sample.launch
panda_gripper_controllers.yaml
controller_list: - name: panda_arm_controller action_ns: follow_joint_trajectory type: FollowJointTrajectory default: true joints: - panda_joint1 - panda_joint2 - panda_joint3 - panda_joint4 - panda_joint5 - panda_joint6 - panda_joint7 - name: panda_gripper action_ns: gripper_command type: GripperCommand default: true joints: - panda_finger_joint1 - panda_finger_joint2
sample.launch
<launch> <!-- Load the URDF, SRDF and other .yaml configuration files on the param server --> <include file="$(find panda_moveit_config)/launch/planning_context.launch"> <arg name="load_robot_description" value="true"/> </include> <!-- Publish joint states --> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <rosparam param="/source_list">["/panda/joint_state"]</rosparam> </node> <node name="joint_state_desired_publisher" pkg="topic_tools" type="relay" args="joint_states joint_states_desired"/> <!-- Given the published joint states, publish tf for the robot links --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" /> <!-- Run the main MoveIt executable --> <include file="$(find panda_moveit_config)/launch/move_group.launch"> <arg name="allow_trajectory_execution" value="true"/> <arg name="info" value="true"/> <arg name="debug" value="false"/> </include> <!-- Run Rviz (optional) --> <include file="$(find panda_moveit_config)/launch/moveit_rviz.launch"> <arg name="debug" value="false"/> </include> </launch>
Also, you can modify the
demo.launchfile and disable the fake controller execution inside the main MoveIt executable<arg name="fake_execution" value="false"/>
-
Use the Move Group C++ or Python interfaces to control the robot
To add a FollowJointTrajectory action go to menu Create > Isaac > ROS Control and select Follow Joint Trajectory
To connect the schema with the robot of your choice, select the root of the articulation tree by pressing the Add Target(s) button under the articulationPrim field. Press the play button in the editor, and the topics related to this action will be activated for use
The communication shall take place in the namespace defined by the following fields:
rosNodePrefix + controllerName + actionNamespaceThe following figure shows a FollowJointTrajectory schema configured to match the panda_gripper_controllers.yaml described above
To add a GripperCommand action go to menu Create > Isaac > ROS Control and select Gripper Command
To connect the schematic to the end-effector of your choice, first select the root of the articulation tree and then select each of the end-effector's articulations to control following this strict order. This can be done by pressing the Add Target(s) button repeatedly under the articulationPrim field. Press the play button in the editor, and the topics related to this action will be activated for use
The communication shall take place in the namespace defined by the following fields:
rosNodePrefix + controllerName + actionNamespaceThe GripperCommand action definition doesn't specify which joints will be controlled. The value manage by this action will affect all the specified joints equally
The following figure shows a GripperCommand schema configured to match the panda_gripper_controllers.yaml described above

