curobo.batch_motion_planner module¶
Batch motion planning module.
This module provides batch motion planning for solving multiple independent planning problems in parallel with a single IK + trajectory optimization pass.
Example
```python from curobo import BatchMotionPlanner, MotionPlannerCfg
- config = MotionPlannerCfg.create(
robot=”franka.yml”, max_batch_size=16,
) planner = BatchMotionPlanner(config) result = planner.plan_pose(goal_tool_poses, current_states) ```
- class BatchMotionPlanner(config)¶
Bases:
objectBatch motion planner: solves
batch_sizeproblems in parallel.Single IK → (optional graph seed) → TrajOpt pass with no retries. When
multi_env=False, the PRM graph planner provides trajectory seeds. Whenmulti_env=True, graph seeding is unavailable.- Parameters:
config (
MotionPlannerCfg) – Planner configuration.max_batch_sizeandmulti_envare read fromconfig.ik_solver_config.
- __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.
- property attachment_manager¶
Attachment manager for attaching/detaching obstacles to robot links.
- warmup(
- enable_graph=True,
- num_warmup_iterations=5,
JIT-warmup the solvers and (optionally) the graph planner.
- plan_pose(
- goal_tool_poses,
- current_state,
- use_implicit_goal=True,
- max_attempts=1,
- success_ratio=1.0,
- enable_graph_attempt=0,
Plan trajectories for a batch of pose targets.
Runs up to
max_attemptsIK -> TrajOpt passes. On each attempt the full batch is re-solved; per-problem results are locked in on first success (first-success-wins). The loop exits early when the fraction of solved problems reachessuccess_ratio.- Parameters:
goal_tool_poses (
GoalToolPose) – Target poses asGoalToolPose[B, H, L, G, 3/4].current_state (
JointState) – Initial joint states(batch_size, dof).use_implicit_goal (
bool) – Use IK solution as implicit trajectory goal.max_attempts (
int) – Maximum number of IK + TrajOpt passes.success_ratio (
float) – Exit early when this fraction of the batch has succeeded (0.0-1.0). Default 1.0 means wait for all.enable_graph_attempt (
int) – Attempt index at which to start graph seeding (when graph planner is available).
- Return type:
Optional[TrajOptSolverResult]- Returns:
TrajOptSolverResult with per-problem success, or None if IK never found any solution across all attempts.
- plan_cspace(
- goal_states,
- current_state,
- max_attempts=1,
- success_ratio=1.0,
- enable_graph_attempt=0,
Plan trajectories for a batch of joint-space targets.
Same retry / first-success-wins logic as
plan_pose.- Parameters:
goal_states (
JointState) – Target joint configurations(batch_size, dof).current_state (
JointState) – Initial joint states(batch_size, dof).max_attempts (
int) – Maximum number of TrajOpt passes.success_ratio (
float) – Exit early when this fraction of the batch has succeeded.enable_graph_attempt (
int) – Attempt index to start graph seeding.
- Return type:
Optional[TrajOptSolverResult]- Returns:
TrajOptSolverResult with per-problem success.
- 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 grasp motions for a batch: goalset -> approach -> grasp -> lift.
All B problems are planned at every stage (CUDA graph stability). Problems that fail a stage get their current state substituted as the goal for subsequent stages so the optimizer doesn’t diverge.
- Return type:
- Parameters:
grasp_poses (curobo._src.types.tool_pose.GoalToolPose)
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)
- property default_joint_state: curobo._src.state.state_joint.JointState¶
- property kinematics: curobo._src.robot.kinematics.kinematics.Kinematics¶
- compute_kinematics(
- state,
- Return type:
- Parameters:
- update_world(
- scene_cfg,
- Parameters:
scene_cfg (curobo._src.geom.types.SceneCfg)
- clear_scene_cache()¶
- reset_seed()¶
- update_tool_pose_criteria(
- tool_pose_criteria,
- Parameters:
tool_pose_criteria (Dict[str, curobo._src.cost.tool_pose_criteria.ToolPoseCriteria])
- 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)
- 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 MotionPlannerCfg from flexible inputs.
Each config parameter accepts either a file path (str), a dictionary, or an already-constructed config object.
- Parameters:
robot (
Union[str,Dict[str,Any],RobotCfg]) – Robot configuration - path to YAML, dict, or RobotCfg object.ik_optimizer_configs (
List[Union[str,Dict[str,Any]]]) – IK optimizer configs - paths or dicts.ik_transition_model (
Union[str,Dict[str,Any]]) – IK transition model config - path or dict.metrics_rollout (
Union[str,Dict[str,Any]]) – Metrics rollout config - path or dict.trajopt_optimizer_configs (
List[Union[str,Dict[str,Any]]]) – Trajectory optimization optimizer configs.trajopt_transition_model (
Union[str,Dict[str,Any]]) – Trajectory optimization transition model.graph_planner_config (
Union[str,Dict[str,Any]]) – Graph planner config - path or dict.graph_planner_rollout (
Union[str,Dict[str,Any]]) – Graph planner rollout config - path or dict.graph_planner_transition_model (
Union[str,Dict[str,Any]]) – Graph planner transition model.scene_model (
Union[str,Dict[str,Any],None]) – Optional scene model config - path or dict.collision_cache (
Optional[Dict[str,int]]) – Cache configuration for collision checking.self_collision_check (
bool) – Whether to check self-collision.device_cfg (
DeviceCfg) – Device configuration.num_ik_seeds (
int) – Number of IK optimization seeds.num_trajopt_seeds (
int) – Number of trajectory optimization seeds.position_tolerance (
float) – Position tolerance for success.orientation_tolerance (
float) – Orientation tolerance for success.use_cuda_graph (
bool) – Whether to use CUDA graphs.random_seed (
int) – Random seed for reproducibility.optimizer_collision_activation_distance (
float) – Collision activation distance.store_debug (
bool) – Whether to store debug information.transition_model_config_instance_type (
Type[RobotStateTransitionCfg]) – Transition model config class.cost_manager_config_instance_type (
Type[RobotCostManagerCfg]) – Cost manager config class.max_batch_size (
int) – Maximum number of problems solved in parallel; fewer may be provided (padded internally).multi_env (
bool) – When True, each batched problem uses its own collision environment; when False, all share one environment.max_goalset (
int) – Maximum goalset size per problem; fewer goals may be provided (padded internally).
- Return type:
- Returns:
Configured MotionPlannerCfg instance.
- __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