isaac_manipulator_bringup#
Source code available on GitHub.
Overview#
isaac_manipulator_bringup contains the launch files for Isaac for Manipulation.
These launch files support multiple reference workflows:
Pose-to-Pose: Move the robot between predefined poses
Object Following: Track and follow detected object in real-time
Pick and Place: Detect, grasp, and place objects
Gear Assembly: Perform precision assembly tasks using reinforcement learning policies
The package provides a unified interface through configuration files to launch different workflows with various robot configurations (UR5e/UR10e with Robotiq grippers) and sensor setups (RealSense cameras or Isaac Sim).
For step-by-step instructions on running these workflows, see the Isaac for Manipulation tutorials section.
Configuration#
The manipulation workflows are configured through YAML files that specify camera types, perception models, and workflow-specific parameters. The Manipulation Workflow Configuration Guide provides:
Required parameters for all workflows (
workflow_type,camera_type)Perception workflow options including depth estimation methods (ESS, Foundation Stereo, etc.)
Camera compatibility options showing supported combinations
Sample configuration files for different robot setups
Advanced parameters for fine-tuning performance
Tip
Quick Start: Use the sample configuration files in the isaac_manipulator_bringup/params directory as starting points for your setup.
Main Launch File Parameters#
workflows.launch.py#
This is the main meta launch file that launches manipulator-supported workflows including pose-to-pose, pick and place, object following, and gear assembly workflows.
The launch file coordinates three main components:
Sensor launch file (
sensors/cameras.launch.py): Provides RGB camera streams, camera info, and depth estimation. Includes camera-to-robot calibration data. Supports ESS, FoundationStereo depth estimation for RealSense, or stereo depth from Isaac Sim.Robot driver launch file (
drivers/ur_robotiq_driver.launch.py): Launches drivers for UR e-Series robots and Robotiq 2F grippers, exposing joint states and robot descriptions. For simulation, provides topic-based control throughros2_control.Core launch file (
workflows/core.launch.py): Launches cuMotion for GPU-accelerated motion planning, nvblox for 3D reconstruction, and perception pipelines (DOPE, RT-DETR + FoundationPose, or Grounding DINO + FoundationPose for object detection and pose estimation). Optionally includes Segment Anything/Segment Anything 2 for segmentation.
Launch Argument |
Description |
|---|---|
|
Path to the YAML configuration file that determines which Isaac for Manipulation workflow to run and its detailed configuration. Supported workflow types: |
record_realsense.launch.py#
This launch files records a rosbag containing the RealSense’s data, which can be useful for debugging purposes.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
|
Whether to run the RealSense or not |
|
|
|
The number of cameras to run |
|
|
|
Whether or not to run RQT to visualize the image |
|
|
N/A |
The file path to write the rosbag |
camera_calibration.launch.py#
This launch file is used to perform camera calibration. Please consult the Isaac for Manipulation Camera Calibration page.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
|
Camera sensor used for calibration |
Sub Launch File Parameters#
cumotion.launch.py#
This launch file launches components related to cuMotion based on several interdependent parameters.
Parameter Dependencies and Launch Logic:
The launch behavior is controlled by three key boolean parameters with complex interactions:
Primary Launch Decision:
not from_bag and not no_robot_modeWhen true: Launches cuMotion Planner and Static Planning Scene server to plan and execute robot motions
When false: Launches ESDF Visualizer to display the 3D environment map without moving the robot
Robot Segmentation:
not no_robot_mode and read_esdf_worldOnly launches when both robot mode is enabled and ESDF integration is enabled
Required to filter robot from depth images before nvblox creates ESDF
Object Attachment:
not no_robot_mode and enable_object_attachmentOnly available in robot mode (requires actual robot for attachment)
Additional constraint (lines 201-210): When
read_esdf_world=false, object type cannot beSPHERE(must beCUSTOM_MESHorCUBOID)
Key Terms:
ESDF Visualizer: Displays the 3D environment reconstruction as colored voxels in RViz, showing obstacles and free space detected by cameras. Used to verify that nvblox is correctly mapping the environment and to debug perception issues (e.g., checking if objects are properly detected, if the workspace bounds are correct, or if camera calibration is accurate).
Bag Playback Mode: Processing pre-recorded sensor data from ROS bag files instead of live camera streams. Used for testing and development without hardware.
Robot Segmentation: Filters out the robot itself from depth camera images to prevent the robot from appearing as an obstacle in the environment map.
Common Configuration Scenarios:
|
|
|
|
Launched Components |
|---|---|---|---|---|
|
|
|
|
Live Robot Mode: cuMotion Planner + Robot Segmentation + Static Planning Scene |
|
|
|
|
Live Robot (No ESDF): cuMotion Planner + Static Planning Scene |
|
|
|
|
Visualization Only: ESDF Visualizer (view environment map in RViz, no robot movement) |
|
|
|
|
Bag Analysis: ESDF Visualizer (analyze pre-recorded sensor data) |
|
|
|
|
Full System: cuMotion + Robot Segmentation + Static Planning + Object Attachment |
|
|
|
|
Limited Attachment: cuMotion + Static Planning + Object Attachment (CUSTOM_MESH/CUBOID only) |
For detailed component information, see Isaac ROS cuMotion.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
N/A |
|
Type of camera system being used |
|
|
|
When true, disables robot mode and launches ESDF Visualizer instead of cuMotion Planner and Robot Segmentation nodes |
|
|
|
When true, enables object attachment functionality (only available when robot mode is enabled) |
|
|
|
Whether to enable DNN depth estimation in RealSense cameras |
|
|
|
When true, indicates data is being played from a ROS bag file (pre-recorded sensor data) rather than live cameras. Forces visualization-only mode. |
|
|
|
Number of cameras to process |
|
|
N/A |
Name of the workspace bounds configuration to use |
|
|
|
Whether to use simulation time |
|
|
N/A |
The URDF for cuMotion to use for planning - used by sim |
|
|
N/A |
The file path that describes the robot. You must specify the full file path and the files can be found in the |
|
|
N/A |
Speed scaling factor for the planner |
|
|
N/A |
Maximum distance from a given collision sphere (in meters) at which to mask points in the CumotionRobotSegmenter |
|
|
N/A |
Maximum allowed delay (in seconds) for which depth image and joint state messages are considered synchronized in the CumotionRobotSegmenter |
|
|
N/A |
Maximum allowed delayed between the buffer of depth images with respect to the current time |
|
|
N/A |
The joint states topic that receives robot position |
|
|
N/A |
The tool frame of the robot |
|
|
|
When true, indicates that cuMotion should read a Euclidean signed distance field (ESDF) as part of its world |
|
|
N/A |
Object link name for object attachment |
|
|
N/A |
Search radius for object attachment. |
|
|
N/A |
Update link sphere server for the Robot Segmentation node |
|
|
N/A |
Update link sphere server for cuMotion planner |
|
|
|
Whether to bypass clustering |
|
|
N/A |
List of action names for object attachment |
|
|
N/A |
HDBSCAN min samples for clustering |
|
|
N/A |
HDBSCAN min cluster size for clustering |
|
|
N/A |
HDBSCAN cluster selection epsilon |
|
|
N/A |
Number of top clusters to select |
|
|
|
Whether to group clusters |
|
|
N/A |
Minimum points for clustering |
|
|
|
When true, indicates that cuMotion should publish its world representation |
|
|
N/A |
Indicates what QOS setting is used in the app |
|
|
N/A |
Radius for object surface collision spheres |
|
|
N/A |
Amount by which to pad each dimension of the AABB enclosing the object, in meters, for the purpose of ESDF clearing |
|
|
|
When true, indicates that object attachment should instruct nvblox to clear an axis-aligned bounding box (AABB) encompassing the object |
|
|
|
Object attachment type for object attachment functionality |
|
|
|
Whether to enable CUDA Multi-Process Service (MPS) for GPU resource sharing |
|
|
N/A |
The directory for the CUDA MPS pipe |
|
|
N/A |
The client priority for the MPS for robot segmentation |
|
|
N/A |
The active thread percentage for MPS for robot segmentation |
|
|
N/A |
The client priority for the MPS for cuMotion planner |
|
|
N/A |
The active thread percentage for MPS for cuMotion planner |
|
|
N/A |
Path to MoveIt .scene file with static collision objects to load at startup |
dope.launch.py#
This launch file launches the DOPE network, which performs pose estimation. This pose is used as the target to follow in object following.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The absolute file path to the ONNX file |
|
|
N/A |
The absolute file path to the TensorRT engine file |
|
|
N/A |
The object class that the DOPE network is detecting |
|
|
N/A |
The minimum value of a peak in a DOPE belief map |
|
|
|
Whether Dope Decoder will broadcast poses to the TF tree or not |
|
|
N/A |
Number of samples to ensure pose stability |
|
|
N/A |
Maximum distance in meters between poses for stability |
|
|
N/A |
Maximum angle in degrees between poses for stability |
|
|
N/A |
Enable DOPE pose estimation to be rotated by X degrees along y axis |
|
|
N/A |
Enable DOPE pose estimation to be rotated by X degrees along x axis |
|
|
N/A |
Enable DOPE pose estimation to be rotated by X degrees along z axis |
|
|
N/A |
FPS for input messages to the drop node of DOPE |
|
|
N/A |
FPS that are dropped by the drop node of DOPE |
|
|
N/A |
QOS setting used for DOPE input |
ess.launch.py#
This launch file launches the ESS network to estimate depth images for stereo depth estimation.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
|
Type of camera |
|
|
N/A |
The absolute path to the ESS engine plan |
|
|
N/A |
Threshold value ranges between 0.0 and 1.0 for filtering disparity with confidence |
|
|
|
Depth estimation type |
|
|
N/A |
Input topic for left camera raw image |
|
|
N/A |
Input topic for left camera info |
|
|
N/A |
Input topic for right camera raw image |
|
|
N/A |
Input topic for right camera info |
|
|
N/A |
Output topic for depth image |
|
|
N/A |
Output topic for RGB image |
|
|
N/A |
Output topic for RGB camera info |
|
|
N/A |
Namespace for the camera |
|
|
|
Input image height |
|
|
|
Input image width |
foundationstereo.launch.py#
This launch file launches the FoundationStereo network for stereo depth estimation, an alternative to ESS.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
|
Type of camera |
|
|
N/A |
The absolute path to the FoundationStereo engine plan |
|
|
N/A |
Input topic for left camera raw image |
|
|
N/A |
Input topic for left camera info |
|
|
N/A |
Input topic for right camera raw image |
|
|
N/A |
Input topic for right camera info |
|
|
N/A |
Output topic for depth image |
|
|
N/A |
Output topic for RGB image |
|
|
N/A |
Output topic for RGB camera info |
|
|
N/A |
Namespace for the camera |
|
|
|
Input image height |
|
|
|
Input image width |
foundationpose.launch.py#
This launch files launches the FoundationPose network to estimate the pose of an object detected by the object detection network (RT-DETR). This is used as the target for object following and as the object to grasp in Pick and Place.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The absolute file path to the mesh file |
|
|
N/A |
The absolute file path to the texture map |
|
|
N/A |
The absolute file path to the refine model |
|
|
N/A |
The absolute file path to the refine engine plan |
|
|
N/A |
The absolute file path to the score model |
|
|
N/A |
The absolute file path to the score engine plan |
|
|
N/A |
The RT-DETR class ID of the object |
|
|
N/A |
TF name for detected object |
|
|
N/A |
The number of pose refinement iterations to run |
|
|
N/A |
The axes that the object is symmetric about |
|
|
N/A |
The sensor data quality of service for FoundationPose nodes |
|
|
|
Whether to discard old messages or not. This is only applicable with the real robot since GXF does not support ROS sim time clock |
|
|
N/A |
The time in milliseconds to discard old messages |
|
|
|
Whether to enable DNN depth in RealSense or not |
|
|
N/A |
The topic name of the camera info for the segmentation mask |
|
|
N/A |
The topic name of the segmentation mask |
|
|
N/A |
The topic name of the output pose estimate |
|
N/A |
N/A |
The topic name of the depth camera info for the RealSense |
|
N/A |
N/A |
The width of the RGB image |
|
N/A |
N/A |
The height of the RGB image |
|
N/A |
N/A |
The width of the depth image |
|
N/A |
N/A |
The height of the depth image |
goal.launch.py#
This launch file launches the Goal Initializer node, which is used to
set goals given the object pose in object following.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The world frame of the robot |
|
|
N/A |
The grasp frame (goal) that the robot should target |
|
|
N/A |
The duration until a grasp frame (goal) not updating is considered stale |
|
|
N/A |
The minimum amount that the goal must move to be targeted |
|
|
N/A |
The time in seconds for which the goal should request a plan |
|
|
N/A |
The MoveIt group name that the planner should plan for |
|
|
N/A |
The MoveIt pipeline ID to use |
|
|
N/A |
The MoveIt planner ID to use |
|
|
N/A |
The name of the end effector link for planning |
nvblox.launch.py#
This launch file launches nvblox to provide a 3D voxel representation of the world as an Euclidean Signed Distance Function (ESDF). It’s used to determine obstacles that the planner should avoid.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
N/A |
|
Type of camera system being used |
|
|
|
When true, disables robot mode and uses direct depth images instead of robot-segmented depth |
|
|
|
Whether to enable DNN depth estimation in RealSense cameras |
|
|
|
Number of cameras to process |
|
|
N/A |
Name of the workspace bounds configuration to use |
|
|
N/A |
Name of the container to load nodes into |
For the base configuration of nvblox, refer to the configuration found here and the documentation found here.
The modifications that are made from the base configuration can be found here.
pose_to_pose.launch.py#
This launch file launches the pose-to-pose node, which is used to set goals between two different poses in the Pose to Pose example.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The world frame of the robot |
|
|
N/A |
The list of target frames that the robot should plan towards |
|
|
N/A |
The time in seconds for which the goal should request a plan |
|
|
N/A |
The MoveIt group name that the planner should plan for |
|
|
N/A |
The MoveIt pipeline ID to use |
|
|
N/A |
The MoveIt planner ID to use |
|
|
N/A |
The name of the end effector link for planning |
realsense.launch.py#
This launch file launches the RealSense camera drivers.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
|
Number of cameras to launch |
|
|
N/A |
Name of the camera ids/setup config to use |
|
|
N/A |
Name of the container to load nodes into |
|
|
|
Whether to run in standalone mode with visualization |
|
|
|
Whether to enable DNN depth estimation in RealSense cameras |
|
|
|
Whether to enable depth processing |
|
|
N/A |
Target output frame rate (FPS) after frame dropping. The drop node reduces frame rate to balance processing load and latency. |
|
|
N/A |
Input frame rate (FPS) from the camera. Frames are dropped to achieve the target output rate. |
Refer to the configuration file that can be found here.
rtdetr.launch.py#
This launch file launches the RT-DETR pipeline for object detection in order to determine the object’s location in the image.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The absolute path to the RT-DETR engine plan |
|
|
N/A |
The minimum score for a bounding box to be published |
|
|
N/A |
FPS for input message to the drop node of RT-DETR |
|
|
N/A |
FPS that are dropped by the drop node of RT-DETR |
|
|
N/A |
QOS setting used for RT-DETR input |
|
|
N/A |
QOS setting used for internal nodes of RT-DETR after going through drop node |
grounding_dino.launch.py#
This launch file launches the Grounding DINO pipeline for open-vocabulary object detection using text prompts.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
FPS that are dropped by the drop node |
|
|
N/A |
The absolute file path to the ONNX file |
|
|
N/A |
The mean for image normalization |
|
|
N/A |
The standard deviation for image normalization |
|
|
N/A |
The absolute path to the Grounding DINO engine plan |
|
|
N/A |
The minimum score for a bounding box to be published |
|
|
N/A |
The text prompt for Grounding DINO object detection |
|
|
N/A |
The input image width |
|
|
N/A |
The input image height |
|
|
N/A |
FPS for input message to the drop node |
|
|
N/A |
QOS setting used for Grounding DINO input |
|
|
N/A |
The network image width |
|
|
N/A |
The network image height |
|
|
N/A |
QOS setting used for Grounding DINO output |
segment_anything.launch.py#
This launch file launches the Segment Anything pipeline for generating segmentation masks from bounding boxes or points.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The input topic name for the image |
|
|
N/A |
The input topic name for the depth |
|
|
N/A |
The input topic name for the camera info |
|
|
N/A |
The width of the image |
|
|
N/A |
The height of the image |
|
|
N/A |
The width of the depth image |
|
|
N/A |
The height of the depth image |
|
|
N/A |
The mean for image normalization |
|
|
N/A |
The standard deviation for image normalization |
|
|
N/A |
The absolute path to the repository of models |
|
|
N/A |
The maximum allowed batch size of the model |
|
|
|
Whether object following is enabled or not |
|
|
|
Enables visualizing of segmentation mask for debugging |
|
|
N/A |
QOS setting used for input |
|
|
N/A |
QOS setting used for output |
|
|
N/A |
The input topic name for the points |
|
|
N/A |
The input topic name for the detections |
|
|
N/A |
The output topic name for the binary mask |
|
|
N/A |
The output topic name for the detections |
segment_anything2.launch.py#
This launch file launches the Segment Anything 2 pipeline, the next generation of Segment Anything for improved segmentation quality.
Launch Argument |
Default Value |
Choices |
Description |
|---|---|---|---|
|
|
N/A |
The input topic name for the image |
|
|
N/A |
The input topic name for the depth |
|
|
N/A |
The input topic name for the camera info |
|
|
N/A |
The width of the image |
|
|
N/A |
The height of the image |
|
|
N/A |
The mean for image normalization |
|
|
N/A |
The standard deviation for image normalization |
|
|
N/A |
The absolute path to the repository of models |
|
|
N/A |
The maximum allowed batch size of the model |
|
|
|
Whether object following is enabled or not |
|
|
N/A |
QOS setting used for input |
|
|
N/A |
QOS setting used for output |
|
|
N/A |
The input topic name for the points |
|
|
N/A |
The output topic name for the binary mask |
|
|
N/A |
The output topic name for the detections |
static_transforms.launch.py#
This file contains the calibration data of various camera setups. It does not have any configurable parameters, however the tutorials expects one to create their own setup, with any required transforms.