curobo.motion_planner module¶
Motion planning module.
This module provides high-level motion planning combining trajectory optimization and graph planning.
Example
```python from curobo import MotionPlanner, MotionPlannerCfg
config = MotionPlannerCfg.create(robot=”franka.yml”) planner = MotionPlanner(config) result = planner.plan_pose(goal_tool_poses, current_state) ```
- class MotionPlanner(config)¶
Bases:
objectSingle-problem motion planner with retry logic and graph-planner seeding.
Solves one planning problem at a time (
batch_size=1). For batched planning seeBatchMotionPlanner.- Parameters:
config (MotionPlannerCfg)
- __init__(config)¶
- Parameters:
config (curobo._src.motion.motion_planner_cfg.MotionPlannerCfg)
- destroy()¶
Release all CUDA graph resources.
Call before dropping the last reference to avoid
cudaMallocAsyncwarnings about captured allocations freed outside graph replay.Does not synchronize, the
gc.collect()+synchronize()fence inGraphExecutor._initialize_cuda_graphensures stalecuGraphExecDestroycalls complete before any new capture begins.
- property attachment_manager¶
Attachment manager for attaching/detaching obstacles to robot links.
- property default_joint_state: curobo._src.state.state_joint.JointState¶
- property kinematics: curobo._src.robot.kinematics.kinematics.Kinematics¶
- compute_kinematics(state)¶
- Return type:
- Parameters:
- warmup(
- enable_graph=True,
- warmup_joint_index=0,
- warmup_joint_delta=0.2,
- num_warmup_iterations=10,
- plan_pose(
- goal_tool_poses,
- current_state,
- use_implicit_goal=True,
- max_attempts=5,
- enable_graph_attempt=1,
Plan a trajectory to reach target tool poses.
Goalset is auto-detected from
goal_tool_poses.num_goalset. Whennum_goalset > 1the planner uses a simpler IK+TrajOpt loop without graph seeding.- Return type:
Optional[TrajOptSolverResult]- Parameters:
goal_tool_poses (curobo._src.types.tool_pose.GoalToolPose)
current_state (curobo._src.state.state_joint.JointState)
use_implicit_goal (bool)
max_attempts (int)
enable_graph_attempt (int)
- plan_cspace(
- goal_state,
- current_state,
- max_attempts=5,
- enable_graph_attempt=1,
Plan a collision-free trajectory to a joint configuration.
- Parameters:
goal_state (
JointState) – Target joint configuration.current_state (
JointState) – Initial joint state.max_attempts (
int) – Maximum planning attempts.enable_graph_attempt (
int) – Attempt at which to start graph seeding.
- Return type:
Optional[TrajOptSolverResult]- Returns:
TrajOptSolverResult, or None if planning failed.
- plan_grasp(
- grasp_poses,
- current_state,
- grasp_approach_axis='z',
- grasp_approach_offset=-0.15,
- grasp_approach_in_tool_frame=True,
- grasp_lift_axis='z',
- grasp_lift_offset=-0.15,
- grasp_lift_in_tool_frame=True,
- plan_approach_to_grasp=True,
- plan_grasp_to_lift=True,
- disable_collision_links=None,
Plan a grasp motion: goalset -> approach -> grasp -> lift.
- Parameters:
grasp_poses (
GoalToolPose) – Candidate grasp poses withnum_goalsetentries per link. Construct viaGoalToolPosewith the desired goalset size.current_state (curobo._src.state.state_joint.JointState)
grasp_approach_axis (str)
grasp_approach_offset (float)
grasp_approach_in_tool_frame (bool)
grasp_lift_axis (str)
grasp_lift_offset (float)
grasp_lift_in_tool_frame (bool)
plan_approach_to_grasp (bool)
plan_grasp_to_lift (bool)
- Return type:
- update_world(scene_cfg)¶
- Parameters:
scene_cfg (curobo._src.geom.types.SceneCfg)
- clear_scene_cache()¶
- reset_seed()¶
- update_link_inertial(
- link_name,
- mass=None,
- com=None,
- inertia=None,
- Return type:
- Parameters:
link_name (str)
mass (float | None)
com (torch.Tensor | None)
inertia (torch.Tensor | None)
- update_links_inertial(
- link_properties,
- update_tool_pose_criteria(
- tool_pose_criteria,
- Parameters:
tool_pose_criteria (Dict[str, curobo._src.cost.tool_pose_criteria.ToolPoseCriteria])
- class MotionPlannerCfg(
- ik_solver_config,
- trajopt_solver_config,
- graph_planner_config=None,
- scene_collision_cfg=None,
- device_cfg=DeviceCfg(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32),
Bases:
objectConfiguration for the motion planner.
- Parameters:
ik_solver_config (curobo._src.solver.solver_ik_cfg.IKSolverCfg)
trajopt_solver_config (curobo._src.solver.solver_trajopt_cfg.TrajOptSolverCfg)
graph_planner_config (curobo._src.graph_planner.graph_planner_prm_cfg.PRMGraphPlannerCfg)
scene_collision_cfg (curobo._src.geom.collision.collision_scene.SceneCollisionCfg | None)
device_cfg (curobo._src.types.device_cfg.DeviceCfg)
- ik_solver_config: curobo._src.solver.solver_ik_cfg.IKSolverCfg¶
- trajopt_solver_config: curobo._src.solver.solver_trajopt_cfg.TrajOptSolverCfg¶
- graph_planner_config: curobo._src.graph_planner.graph_planner_prm_cfg.PRMGraphPlannerCfg = None¶
- device_cfg: curobo._src.types.device_cfg.DeviceCfg = DeviceCfg(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32)¶
- static create(robot, ik_optimizer_configs=['ik/lbfgs_ik.yml'], ik_transition_model='ik/transition_ik.yml', metrics_rollout='metrics_base.yml', trajopt_optimizer_configs=['trajopt/lbfgs_bspline_trajopt.yml'], trajopt_transition_model='trajopt/transition_bspline_trajopt.yml', graph_planner_config='graph_planner/exact_graph_planner.yml', graph_planner_rollout='metrics_base.yml', graph_planner_transition_model='graph_planner/transition_graph_planner.yml', scene_model=None, collision_cache=None, self_collision_check=True, device_cfg=DeviceCfg(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32), num_ik_seeds=32, num_trajopt_seeds=4, position_tolerance=0.005, orientation_tolerance=0.05, use_cuda_graph=True, random_seed=123, optimizer_collision_activation_distance=0.01, store_debug=False, transition_model_config_instance_type=<class 'curobo._src.transition.robot_state_transition_cfg.RobotStateTransitionCfg'>, cost_manager_config_instance_type=<class 'curobo._src.rollout.cost_manager.cost_manager_robot_cfg.RobotCostManagerCfg'>, max_batch_size=1, multi_env=False, max_goalset=1)¶
Create a MotionPlannerCfg from robot, task, and scene configs.
This factory builds the three components used by MotionPlanner: IK, trajectory optimization, and PRM graph planning. Most integration code should pass a robot, optional scene/collision cache, sizing bounds, and leave the task YAMLs at their defaults.
Config path arguments may be relative YAML names under cuRobo’s content folders, absolute YAML paths, parsed dictionaries, or typed config objects where supported.
- Parameters:
robot (
Union[str,Dict[str,Any],RobotCfg]) – Robot config. String paths are resolved relative to cuRobo robot configs unless absolute. Dicts and RobotCfg objects are accepted.ik_optimizer_configs (
List[Union[str,Dict[str,Any]]]) – IK optimizer task configs. Defaults to["ik/lbfgs_ik.yml"]. Add"ik/particle_ik.yml"when broader IK search is needed.ik_transition_model (
Union[str,Dict[str,Any]]) – IK transition model task config.metrics_rollout (
Union[str,Dict[str,Any]]) – Metrics rollout task config shared by IK, TrajOpt, and graph planner validation.trajopt_optimizer_configs (
List[Union[str,Dict[str,Any]]]) – Trajectory optimization task configs.trajopt_transition_model (
Union[str,Dict[str,Any]]) – Trajectory optimization transition model config.graph_planner_config (
Union[str,Dict[str,Any]]) – PRM graph planner config. The default enables graph seeding for single-environment planning. This factory currently expects a graph planner config.graph_planner_rollout (
Union[str,Dict[str,Any]]) – Rollout config used by the graph planner for collision/feasibility checks.graph_planner_transition_model (
Union[str,Dict[str,Any]]) – Transition model used by graph planner rollout validation.scene_model (
Union[str,Dict[str,Any],None]) – Optional scene config. String paths are resolved relative to cuRobo scene configs. When None, no world obstacles are loaded initially.collision_cache (
Optional[Dict[str,int]]) – Optional obstacle cache sizes, for example{"mesh": 2, "cuboid": 8}. Whenscene_modelis None, this still preallocates a scene collision checker for laterupdate_worldcalls.self_collision_check (
bool) – Enable robot self-collision costs/checks in IK, TrajOpt, and graph planner validation.device_cfg (
DeviceCfg) – Tensor device and dtype configuration.num_ik_seeds (
int) – Number of IK seeds evaluated per problem. A value of 16 is good for most single-tool planning problems; increase to 32 when more IK diversity is needed. Increasing beyond 32 usually does not help unless solving multi-tool IK/planning problems.num_trajopt_seeds (
int) – Number of trajectory optimization seeds. MotionPlanner asks IK to return this many solutions to seed TrajOpt. The default of 4 is recommended; using more than 4 typically does not improve solution quality and can significantly increase planning time.position_tolerance (
float) – Cartesian position tolerance in meters used for IK and TrajOpt success.orientation_tolerance (
float) – Cartesian orientation tolerance in radians used for IK and TrajOpt success.use_cuda_graph (
bool) – Enable CUDA graph capture for solver rollouts and optimizers. Defaults to True and should be left enabled for normal integration/runtime code. The value is forwarded to IK, TrajOpt, and graph-planner rollout components. cuRobo manages graph caches internally and pads smaller batches/ goalsets up tomax_batch_sizeandmax_goalset. Set to False only for debugging graph-capture issues; steady-state solve calls can be about 5x slower without CUDA graph replay. Also disabled automatically whenstore_debug=True.random_seed (
int) – Random seed forwarded to IK and TrajOpt seed generation. Graph planner path finding uses its own seed in PRMGraphPlannerCfg.optimizer_collision_activation_distance (
float) – Collision-cost activation distance forwarded to IK and TrajOpt optimizer rollouts. The default is 0.01 m (10 mm). Increasing this distance makes the optimizer react to obstacles earlier and keep more clearance, but can make narrow passages harder or infeasible. Decreasing it allows closer motion near obstacles, but can reduce clearance margin and make collision avoidance less robust.store_debug (
bool) – Whether to store debug information. When True, CUDA graphs are disabled automatically.transition_model_config_instance_type (
Type[RobotStateTransitionCfg]) – Advanced extension hook for custom transition model config classes.cost_manager_config_instance_type (
Type[RobotCostManagerCfg]) – Advanced extension hook for custom cost manager config classes.max_batch_size (
int) – Maximum batch size captured/allocated by IK and TrajOpt. Single MotionPlanner calls use one problem; BatchMotionPlanner uses up to this value. Smaller batches are padded internally.multi_env (
bool) – Use one collision environment per batch item. This is for BatchMotionPlanner with per-problem worlds; graph seeding is skipped in this mode.max_goalset (
int) – Maximum number of alternative goal poses per problem. Smaller goalsets are padded internally.
- Return type:
- Returns:
MotionPlannerCfg containing IK, TrajOpt, graph planner, and optional scene collision configuration.
- __init__(
- ik_solver_config,
- trajopt_solver_config,
- graph_planner_config=None,
- scene_collision_cfg=None,
- device_cfg=DeviceCfg(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32),
- Parameters:
ik_solver_config (curobo._src.solver.solver_ik_cfg.IKSolverCfg)
trajopt_solver_config (curobo._src.solver.solver_trajopt_cfg.TrajOptSolverCfg)
graph_planner_config (curobo._src.graph_planner.graph_planner_prm_cfg.PRMGraphPlannerCfg)
scene_collision_cfg (curobo._src.geom.collision.collision_scene.SceneCollisionCfg | None)
device_cfg (curobo._src.types.device_cfg.DeviceCfg)
- Return type:
None
- class GraspPlanResult(
- success=None,
- approach_success=None,
- grasp_success=None,
- lift_success=None,
- approach_trajectory=None,
- approach_trajectory_dt=None,
- approach_interpolated_trajectory=None,
- grasp_trajectory=None,
- grasp_trajectory_dt=None,
- grasp_interpolated_trajectory=None,
- lift_trajectory=None,
- lift_trajectory_dt=None,
- lift_interpolated_trajectory=None,
- approach_interpolated_last_tstep=None,
- grasp_interpolated_last_tstep=None,
- lift_interpolated_last_tstep=None,
- status=None,
- planning_time=0.0,
- goalset_index=None,
Bases:
objectResult of a grasp planning operation.
- Parameters:
success (torch.Tensor | None)
approach_success (torch.Tensor | None)
grasp_success (torch.Tensor | None)
lift_success (torch.Tensor | None)
approach_trajectory (curobo._src.state.state_joint.JointState | None)
approach_trajectory_dt (torch.Tensor | None)
approach_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
grasp_trajectory (curobo._src.state.state_joint.JointState | None)
grasp_trajectory_dt (torch.Tensor | None)
grasp_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
lift_trajectory (curobo._src.state.state_joint.JointState | None)
lift_trajectory_dt (torch.Tensor | None)
lift_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
approach_interpolated_last_tstep (torch.Tensor | None)
grasp_interpolated_last_tstep (torch.Tensor | None)
lift_interpolated_last_tstep (torch.Tensor | None)
status (str | None)
planning_time (float)
goalset_index (torch.Tensor | None)
- success: torch.Tensor | None = None¶
- approach_success: torch.Tensor | None = None¶
- grasp_success: torch.Tensor | None = None¶
- lift_success: torch.Tensor | None = None¶
- approach_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- approach_trajectory_dt: torch.Tensor | None = None¶
- approach_interpolated_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- grasp_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- grasp_trajectory_dt: torch.Tensor | None = None¶
- grasp_interpolated_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- lift_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- lift_trajectory_dt: torch.Tensor | None = None¶
- lift_interpolated_trajectory: curobo._src.state.state_joint.JointState | None = None¶
- approach_interpolated_last_tstep: torch.Tensor | None = None¶
- grasp_interpolated_last_tstep: torch.Tensor | None = None¶
- lift_interpolated_last_tstep: torch.Tensor | None = None¶
- goalset_index: torch.Tensor | None = None¶
- __init__(
- success=None,
- approach_success=None,
- grasp_success=None,
- lift_success=None,
- approach_trajectory=None,
- approach_trajectory_dt=None,
- approach_interpolated_trajectory=None,
- grasp_trajectory=None,
- grasp_trajectory_dt=None,
- grasp_interpolated_trajectory=None,
- lift_trajectory=None,
- lift_trajectory_dt=None,
- lift_interpolated_trajectory=None,
- approach_interpolated_last_tstep=None,
- grasp_interpolated_last_tstep=None,
- lift_interpolated_last_tstep=None,
- status=None,
- planning_time=0.0,
- goalset_index=None,
- Parameters:
success (torch.Tensor | None)
approach_success (torch.Tensor | None)
grasp_success (torch.Tensor | None)
lift_success (torch.Tensor | None)
approach_trajectory (curobo._src.state.state_joint.JointState | None)
approach_trajectory_dt (torch.Tensor | None)
approach_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
grasp_trajectory (curobo._src.state.state_joint.JointState | None)
grasp_trajectory_dt (torch.Tensor | None)
grasp_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
lift_trajectory (curobo._src.state.state_joint.JointState | None)
lift_trajectory_dt (torch.Tensor | None)
lift_interpolated_trajectory (curobo._src.state.state_joint.JointState | None)
approach_interpolated_last_tstep (torch.Tensor | None)
grasp_interpolated_last_tstep (torch.Tensor | None)
lift_interpolated_last_tstep (torch.Tensor | None)
status (str | None)
planning_time (float)
goalset_index (torch.Tensor | None)
- Return type:
None