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: object

Batch motion planner: solves batch_size problems in parallel.

Single IK → (optional graph seed) → TrajOpt pass with no retries. When multi_env=False, the PRM graph planner provides trajectory seeds. When multi_env=True, graph seeding is unavailable.

Parameters:

config (MotionPlannerCfg) – Planner configuration. max_batch_size and multi_env are read from config.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 cudaMallocAsync warnings about captured allocations freed outside graph replay.

property attachment_manager

Attachment manager for attaching/detaching obstacles to robot links.

property batch_size: int
warmup(
enable_graph=True,
num_warmup_iterations=5,
)

JIT-warmup the solvers and (optionally) the graph planner.

Parameters:
  • enable_graph (bool) – Warmup graph planner if available (multi_env=False).

  • num_warmup_iterations (int) – Number of dummy solves.

Return type:

bool

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_attempts IK -> 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 reaches success_ratio.

Parameters:
  • goal_tool_poses (GoalToolPose) – Target poses as GoalToolPose [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:

GraspPlanResult

Parameters:
property joint_names: List[str]
property action_dim: int
property tool_frames: List[str]
property default_joint_state: curobo._src.state.state_joint.JointState
property kinematics: curobo._src.robot.kinematics.kinematics.Kinematics
compute_kinematics(
state,
)
Return type:

KinematicsState

Parameters:

state (curobo._src.state.state_joint.JointState)

update_world(
scene_cfg,
)
Parameters:

scene_cfg (curobo._src.geom.types.SceneCfg)

clear_scene_cache()
reset_seed()
Parameters:

enable_collision_links (List[str])

Parameters:

disable_collision_links (List[str])

update_tool_pose_criteria(
tool_pose_criteria,
)
Parameters:

tool_pose_criteria (Dict[str, curobo._src.cost.tool_pose_criteria.ToolPoseCriteria])

Return type:

None

Parameters:
Return type:

None

Parameters:

link_properties (dict[str, dict[str, float | torch.Tensor]])

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: object

Configuration 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
scene_collision_cfg: curobo._src.geom.collision.collision_scene.SceneCollisionCfg | None = 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:

MotionPlannerCfg

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