Robot Configuration Tutorial#
This tutorial covers configuring robots for use with the cuMotion integration — from generating the required XRDF file to loading it into your application.
By the end of this tutorial, you’ll understand:
How to load pre-configured or custom robot configurations using
load_cumotion_supported_robot()andload_cumotion_robot()How to use robot configurations with cuMotion components
Prerequisites
Basic understanding of URDF and XRDF file formats
Overview#
An XRDF file is the main configuration file required by cuMotion for a specific robot. It supplements the robot’s URDF with cuMotion-specific data: collision-sphere geometries, self-collision settings, joint properties, tool frames, and modifiers.
Active and Fixed Joints
A key aspect of the XRDF is defining the robot’s configuration space. Joints are classified as either active or fixed. Active joints are directly controlled by cuMotion; fixed joints are held at a specified default position. For example, on a seven-DOF arm with an attached gripper, the arm joints are active and the gripper joints are fixed. The fixed-joint positions define the robot’s default configuration, which is used for null-space behavior in reactive control.
Collision Spheres
cuMotion uses a set of spheres attached to each robot link for collision avoidance. These spheres must roughly cover the robot’s surface. The cuMotion/Lula Robot Description Editor provides tools to generate and tune this sphere set for any robot. For a full tutorial on XRDF and URDF file generation, see Generate Robot Description Files and Collision Spheres.
Robot Configuration Files#
cuMotion expects the following files for each robot, organized in a single directory:
robot_config/
├── robot.urdf
├── robot.xrdf
├── rmp_flow.yaml (optional)
├── graph_based_motion_planner_config.yaml (optional)
└── meshes/
├── link_0.stl
├── link_1.stl
└── ...
robot.urdf— The URDF file describing the robot’s kinematic structure, joint limits, and link geometries.robot.xrdf— The XRDF file containing cuMotion-specific configuration: collision-sphere geometries, active/fixed joint assignments, default joint positions, tool frames, and self-collision rules.meshes/— Directory containing the mesh files referenced by the URDF.rmp_flow.yaml(optional) — RMPflow configuration for reactive control.graph_based_motion_planner_config.yaml(optional) — Graph-based motion planner configuration.
Both the URDF and XRDF files can be generated directly from a robot USD asset using extensions provided with Isaac Sim:
The Isaac Sim USD to URDF Exporter exports a URDF file from a USD asset.
The Robot Description Editor (extension:
isaacsim.robot_setup.xrdf_editor) generates the XRDF file, including collision spheres, joint properties, tool frames, and self-collision rules.
Note
For a complete step-by-step walkthrough generating XRDF and URDF files for a UR10e with a Robotiq 2F-140 gripper, see Generate Robot Description Files and Collision Spheres.
Loading Robot Configurations#
Once you have URDF and XRDF files, load them into a CumotionRobot object, which encapsulates all data needed to work with cuMotion:
robot_description: The cuMotion robot description loaded from URDF/XRDF files, including default joint positions and tool frame nameskinematics: The cuMotion kinematics solver for forward kinematics and Jacobian computationcontrolled_joint_names: List of joint names controlled by cuMotiondirectory: Path to the robot configuration directory (useful for loading related config files)
The provided functions for loading a CumotionRobot object are:
load_cumotion_supported_robot()- Load a pre-configured robot from the extension’s robot_configurations directory.load_cumotion_robot()- Load a custom robot from a given directory.
Loading Supported Robots#
The easiest way to get started is to use a pre-configured robot that comes with the extension. Currently supported robots include:
franka - Franka Emika Panda robot
ur10 - Universal Robots UR10 robot
import isaacsim.robot_motion.cumotion as cu_mg
# Load a supported robot
robot = cu_mg.load_cumotion_supported_robot("franka")
The function automatically locates the robot configuration directory within the extension and loads the URDF and XRDF files. If the robot name is not supported, a FileNotFoundError will be raised.
Creating Custom Robot Configurations#
If you have your own robot with URDF and XRDF files, load it using load_cumotion_robot():
import isaacsim.robot_motion.cumotion as cu_mg
# Generate configuration with default filenames (robot.urdf, robot.xrdf)
robot = cu_mg.load_cumotion_robot(directory=robot_directory)
If your URDF or XRDF files have different names, specify them explicitly:
import isaacsim.robot_motion.cumotion as cu_mg
robot = cu_mg.load_cumotion_robot(
directory=absolute_path_to_robot_directory,
urdf_filename="robot.urdf", # if your URDF has a different name, use it.
xrdf_filename="robot.xrdf", # if your XRDF has a different name, use it.
)
The function will raise a FileNotFoundError if the specified files cannot be found.
Accessing Robot Description and Kinematics#
The robot configuration provides direct access to the underlying cuMotion objects:
robot = load_cumotion_supported_robot("franka")
# Access the robot description
robot_description = robot.robot_description
# Get tool frame names
tool_frames = robot_description.tool_frame_names()
# Get number of configuration space coordinates
num_dofs = robot_description.num_cspace_coords()
# Access the kinematics solver
# (See cuMotion documentation for kinematics API)
kinematics = robot.kinematics
The controlled joint names are automatically extracted from the robot description and represent all joints in the configuration space:
robot = load_cumotion_supported_robot("franka")
# Controlled joints match the configuration space coordinates
controlled_joints = robot.controlled_joint_names
# This is equivalent to:
controlled_joints = [
robot.robot_description.cspace_coord_name(i) for i in range(robot.robot_description.num_cspace_coords())
]
Loading Configuration Files for Reactive Control and Path Planning#
The directory attribute of the CumotionRobot object is useful for loading related configuration files.
For RMPflow controllers:
robot = load_cumotion_supported_robot("franka")
# The RmpFlowController automatically resolves relative paths relative to robot.directory
controller = RmpFlowController(
cumotion_robot=robot,
cumotion_world_interface=world_interface,
robot_joint_space=robot_joint_space,
robot_site_space=robot_site_space,
rmp_flow_configuration_filename="rmp_flow.yaml", # Relative to robot.directory
)
Or specify an absolute path:
robot = load_cumotion_supported_robot("franka")
# Or specify an absolute path
controller = RmpFlowController(
cumotion_robot=robot,
cumotion_world_interface=world_interface,
robot_joint_space=robot_joint_space,
robot_site_space=robot_site_space,
rmp_flow_configuration_filename=absolute_path_to_config,
)
For graph-based motion planners:
robot = load_cumotion_supported_robot("franka")
# Relative paths are automatically resolved relative to robot.directory
planner = GraphBasedMotionPlanner(
cumotion_robot=robot,
cumotion_world_interface=world_interface,
graph_planner_config_filename="graph_based_motion_planner_config.yaml",
)
Or specify an absolute path:
robot = load_cumotion_supported_robot("franka")
# Or specify an absolute path
planner = GraphBasedMotionPlanner(
cumotion_robot=robot,
cumotion_world_interface=world_interface,
graph_planner_config_filename=absolute_path_to_config,
)
The configuration files are subsequently used by all of the integrated cuMotion planners and controllers:
RmpFlowControllerGraphBasedMotionPlannerTrajectoryGeneratorTrajectoryOptimizer
See the relevant tutorials under Next Steps at the end of this tutorial for more information on each of the cuMotion components.
Summary#
This tutorial covered:
XRDF Overview: The structure of XRDF files and the concepts of active/fixed joints and collision spheres
Robot Configuration Files: The URDF, XRDF, and optional configuration files required by cuMotion, and the Isaac Sim tools used to generate them from a USD asset
Loading Supported Robots: Using
load_cumotion_supported_robot()for pre-configured robotsCustom Robots: Using
load_cumotion_robot()for your own URDF/XRDF filesAccessing Robot Data: Using the robot description and kinematics objects directly
Robot configurations are foundational for all cuMotion motion planning and control. Once you have a configuration, you can use it with any cuMotion component to generate motions for your robot.
Next Steps#
World Interface tutorial - Setting up world state for motion planning
RMPflow tutorial - Using robot configurations with reactive control
Graph Planner tutorial - Using robot configurations with path planning
Trajectory Generator tutorial - Using robot configurations for trajectory generation
Trajectory Optimizer tutorial - Using robot configurations for trajectory optimization
cuMotion library documentation - Understanding URDF/XRDF requirements and kinematics API