Parameters Guide¶
Every parameter of the unified_planner node, with its real default, what it does, and when a change takes effect. Defaults below are taken directly from the code (declare_parameter calls); if this page and the code ever disagree, the code wins.
How parameters take effect¶
There are three kinds of knobs, and they differ in when a change is applied:
Kind |
How to change |
When it takes effect |
|---|---|---|
Plan-time parameters |
|
Next planning request — no rebuild needed |
Build-time parameters |
|
After the solver rebuild (blocking, ~20 s) |
Robot YAML configuration |
Edit the cuRobo robot config file |
Restart, or |
update_motion_gen_config (std_srvs/srv/Trigger) rebuilds the motion-planning solver from the current parameters. Exception: set_collision_cache rebuilds the solvers by itself — no extra call needed (see ROS Interfaces).
Launch arguments (gen_traj.launch.py)¶
These are the launch arguments that actually configure the system:
Argument |
Default |
Description |
|---|---|---|
|
|
Robot descriptor name — loads |
|
|
cuRobo robot YAML; empty = resolved from the robot descriptor |
|
|
URDF for |
|
|
Camera configuration YAML (see Tutorial 7); empty = no cameras |
|
|
Static world YAML (e.g. |
|
|
Start RViz |
|
|
Perception/collision voxel size (m) |
|
|
Perception volume extent (m), centred on the robot base |
|
|
Planning retries per request |
|
|
Feedback publish period (s) during open-loop execution |
|
|
Distance (m) at which the collision cost activates |
The last four are forwarded straight to the node, so their defaults above are also the node’s defaults — see the tables below for what each one does.
There is no world floor added automatically at startup: if you want a ground plane, pass a world_file that contains one (the shipped config/floor_world.yml does).
Node parameters — planning¶
Parameter |
Default |
Effect |
Kind |
|---|---|---|---|
|
|
Planner selected at startup ( |
Startup |
|
|
Planning retries per request |
Plan-time |
|
|
Time step (s) of the interpolated output trajectory |
Build-time |
|
|
Voxel size (m) shared by the perception ESDF, the collision cache, and |
Build-time |
|
|
Distance (m) at which collision cost activates |
Build-time |
|
|
Capture/replay CUDA graphs in the solvers (faster). Env var |
Startup |
|
|
Feedback publish cadence (s) during open-loop execution. Not a speed control: set robot speed in the robot YAML cspace (velocity/acceleration/jerk limits), then rebuild |
Plan-time |
|
|
Lifetime (s) of a trajectory cached by |
Plan-time |
|
|
Publish rate (Hz) of |
Startup |
|
|
Diagnostic toggle — |
Runtime |
Node parameters — perception (Mapper)¶
Declared by the obstacle manager; all are startup/build-time.
Parameter |
Default |
Effect |
|---|---|---|
|
|
Enable the cuRobo v2 |
|
|
Perception volume (m) around |
|
|
Centre of the perception volume (robot base frame) |
|
|
Internal TSDF voxel size (m) |
|
|
Depth-projection resolution; every depth frame is resized to this before integration |
|
|
Depth clipping range (m) |
|
|
Half-life (s) of stale voxels. Replaces the removed |
Node parameters — MPC (reactive control)¶
Read by the MPC controller when it is built (first switch to mpc); change them before switching, or switch away and back. See MPC Implementation.
Parameter |
Default |
Effect |
|---|---|---|
|
|
Solver recipe: |
|
|
Optimization time step (s) |
|
|
Receding horizon length |
|
|
Iterations per solve after the first (L-BFGS values must be multiples of 25) |
|
|
Iterations on the first solve |
|
|
MPPI particle count ( |
|
|
Velocity feedback blend when reading robot state |
|
|
Fixed command pacing (s): each command window executes fully before re-solving. |
|
|
End-effector error (m) considered “on target” |
|
|
Safety cap on servo steps per goal |
|
|
Write per-step diagnostic CSVs to the ROS log directory |
Node parameters — retargeting (teleoperation)¶
Parameter |
Default |
Effect |
|---|---|---|
|
|
Position tracking weight |
|
|
Orientation tracking weight |
|
|
Route retarget commands through the MPC solver instead of direct IK |
Node parameters — robot selection¶
Parameter |
Default |
Effect |
|---|---|---|
|
|
Robot descriptor ( |
|
from descriptor |
How commands reach the robot: |
|
from descriptor ( |
Robot base frame |
|
|
Static world YAML |
|
from descriptor |
Resolved cuRobo robot YAML |
|
|
Camera configuration YAML |
|
|
Read-only status: flips to |
robot_segmentation node parameters¶
Parameter |
Default |
Effect |
|---|---|---|
|
|
Input depth image |
|
|
Camera intrinsics |
|
|
TF frame of the robot base |
|
|
Extra margin (m) around the robot mask |
|
|
Distance (m) to a collision sphere below which a pixel is masked |
Robot YAML configuration¶
The cuRobo robot configuration (for the Doosan M1013: curobo_doosan/src/m1013/m1013.yml) defines kinematics (urdf_path, base_link, ee_link), the cspace with joint limits (position/velocity/acceleration/jerk), and the collision spheres. This is also where the robot’s speed is set — scale the cspace velocity/acceleration/jerk limits and rebuild with update_motion_gen_config.
See Tutorial 2: Adding Your Robot for the full anatomy.
Tuning guidance¶
voxel_size is the main precision/VRAM trade-off. 0.05 is a good default; 0.02–0.03 for cluttered scenes on GPUs with headroom; 0.1 for large sparse environments. Smaller voxels cube the memory cost. To measure the cost on your own GPU before committing, run the shipped benchmark against a live planner:
ros2 run curobo_ros benchmark_voxel_grid --ros-args -p voxel_size:=0.02 -p n_runs:=10
collision_activation_distance adds safety margin at the cost of a smaller reachable workspace in clutter. 0.025 default; raise toward 0.05–0.1 around humans, lower toward 0.01 for tight picking.
Collision caches (set_collision_cache service, fields obb/mesh/blox) bound how many obstacles of each kind the solvers can hold. Raise obb if adding objects fails with a cache error; set blox: 0 only if you deliberately want to disable camera perception. Every change triggers an automatic ~20 s solver rebuild and is refused while an execution goal is active.
MPC: keep the mppi_acceleration recipe unless you have a reason not to — the mpc_warm_start_iters/mpc_cold_start_iters defaults (5/10) are tuned for it. If you switch to lbfgs_bspline, use multiples of 25 (e.g. 25/100).
Worked example¶
# Tighten the voxel grid, then rebuild the solver
ros2 param set /unified_planner voxel_size 0.03
ros2 service call /unified_planner/update_motion_gen_config std_srvs/srv/Trigger
# Give planning more retries (no rebuild needed)
ros2 param set /unified_planner max_attempts 3
# Grow the OBB cache (rebuilds by itself, ~20 s)
ros2 service call /unified_planner/set_collision_cache curobo_msgs/srv/SetCollisionCache \
"{obb: 300, mesh: -1, blox: -1}"