ROS 2 Service for Manipulating Prims Attributes
Learning Objectives
In this tutorial, we will
Have a brief discussion on the Isaac Sim ROS 2 service messages types for manipulating prims attributes.
Create ROS 2 services to list prims and their attributes, as well as to read and write a specific prim attribute.
Getting Started
Important
Make sure to source your ROS 2 installation from the terminal before running Isaac Sim. If sourcing ROS 2 is a part of your .bashrc
then Isaac Sim can be run directly.
Prerequisite
Complete ROS and ROS 2 Installation.
Set the
FASTRTPS_DEFAULT_PROFILES_FILE
environment variable per instructions in ROS and ROS 2 Installation before launching Isaac Sim, as well as any terminal where ROS messages will be sent or received, and ROS 2 Extension is enabled.The Isaac Sim ROS 2 Workspace (with the
isaac_ros2_messages
ROS 2 package) built and sourced in the terminal where Isaac Sim is to be launched, as well as in any terminal where the service will be called. See Setting Up Workspaces for more details.
Service message types
The ROS2 Service Prim node provides four service with the following message types:
Get all prim path (and types) under a specific path
isaac_ros2_messages/srv/GetPrims
string path # get prims at path --- string[] paths # list of prim paths string[] types # prim type names bool success # indicate a successful execution of the service string message # informational, e.g. for error messagesGet all attribute names and types for a specific prim
isaac_ros2_messages/srv/GetPrimAttributes
string path # prim path --- string[] names # list of attribute base names (name used to Get or Set an attribute) string[] displays # list of attribute display names (name displayed in Property tab) string[] types # list of attribute data types bool success # indicate a successful execution of the service string message # informational, e.g. for error messagesGet a prim attribute type and values
isaac_ros2_messages/srv/GetPrimAttribute
string path # prim path string attribute # attribute name --- string value # attribute value (as JSON) string type # attribute type bool success # indicate a successful execution of the service string message # informational, e.g. for error messagesSet a prim attribute value
isaac_ros2_messages/srv/SetPrimAttribute
string path # prim path string attribute # attribute name string value # attribute value (as JSON) --- bool success # indicate a successful execution of the service string message # informational, e.g. for error messages
Note
Prim attributes are read and write as JSON (applied directly to the data, without keys). Arrays, vectors, matrices and other numeric containers (e.g.: pxr.Gf.Vec3f
, pxr.Gf.Matrix4d
, pxr.Gf.Quatd
, etc.) are interpreted as a list of numbers (row first).
Manipulating Prims Attributes
The following example shows how to list the prims and attributes, as well as read and write the pose of an object in the stage using the ROS2 Service Prim node.
Note
Make sure the Isaac Sim ROS 2 Workspace (with the isaac_ros2_messages
ROS 2 package) is built and sourced in the terminal where Isaac Sim is to be launched, as well as in any terminal where the service will be called. See Setting Up Workspaces for more details.
In a new stage, create an object (Cube) using the Create > Shape > Cube menu.
Go to Create > Visual Scripting > Action Graph to create an Action Graph and add, connect and configure the following OmniGraph nodes into the Action Graph:
Play the simulation to start the services.
Use the following command in a new ROS2-sourced terminal to:
List the available services:
ros2 service list
Get all child prim paths and types under the prim
/World
:ros2 service call /get_prims isaac_ros2_messages/srv/GetPrims "{path: /World}"
Get all the attribute names and types for the Cube (
/World/Cube
) prim:ros2 service call /get_prim_attributes isaac_ros2_messages/srv/GetPrimAttributes "{path: /World/Cube}"
Get the pose (position and orientation) of the Cube (
/World/Cube
) prim:# get position ros2 service call /get_prim_attribute isaac_ros2_messages/srv/GetPrimAttribute "{path: /World/Cube, attribute: xformOp:translate}" # get orientation (quaternion: wxyz) ros2 service call /get_prim_attribute isaac_ros2_messages/srv/GetPrimAttribute "{path: /World/Cube, attribute: xformOp:orient}"
Set the new pose (position and orientation) of the Cube (
/World/Cube
) prim:# set position ros2 service call /set_prim_attribute isaac_ros2_messages/srv/SetPrimAttribute "{path: /World/Cube, attribute: xformOp:translate, value: [1, 2, 3]}" # set orientation (quaternion: wxyz) ros2 service call /set_prim_attribute isaac_ros2_messages/srv/SetPrimAttribute "{path: /World/Cube, attribute: xformOp:orient, value: [0.7325378, 0.4619398, 0.1913417, 0.4619398]}"
Summary
In this tutorial we learned how to create ROS 2 services to list prims and their attributes, as well as to read and write a specific prim attribute.
Next Steps
Continue on to the next tutorial in our ROS 2 Tutorials series, ROS 2 Bridge in Standalone Workflow to learn how to run the ROS 2 Bridge in the standalone workflow.