Motion Planners#
SkillGen plans collision-free transit motions with a pluggable motion-planner backend. The
shipped backend is cuRobo — GPU-accelerated, collision-aware
trajectory optimization. Planners live in autodata_interfaces/motion_planners/.
The Planner Interface#
A backend implements MotionPlannerBase, whose surface is deliberately small:
Method |
Purpose |
|---|---|
|
Sync the collision world to the current scene and plan to a target end-effector pose (including any expected attached object). Returns success. |
|
Iterate the planned trajectory as end-effector poses. |
|
The full planned pose sequence. |
|
Discard the current plan. |
|
Diagnostics for logging. |
Planners read all world state — collision geometry, object poses, the robot’s joint
configuration — through the shared Datastream; they
never touch the env or robot handles directly. During SkillGen generation, one planner is
constructed per environment (--num_envs planners total).
cuRobo Backend#
CuroboPlanner is configured by CuroboPlannerCfg. Configurations are resolved from
the task id:
from autodata_interfaces.motion_planners.curobo.curobo_planner_cfg import CuroboPlannerCfg
config = CuroboPlannerCfg.from_task_name("Isaac-Stack-Cube-Franka-IK-Rel-v0")
from_task_name() pattern-matches the task id to a named preset (e.g.
franka_config(), franka_stack_cube_bin_config()); unknown robots fall back to the
Franka preset with a printed warning. The generate_dataset.py entry point calls this
automatically when --alg skillgen is selected — no CLI flags needed.
Key configuration fields:
Field |
Meaning |
|---|---|
|
cuRobo robot model (kinematics, collision spheres). |
|
The link planned to the target pose. |
|
Gripper state applied during planning. |
|
Where grasped objects attach on the kinematic chain, and which links to ignore for attached-object collision. |
|
The collision world: base description, scene objects treated as static, and prims to exclude. |
|
Collision representation (mesh by default). |
|
Planning effort: more seeds cost time but escape more local minima. |
|
Time step of the returned trajectory. |
|
Buffer distance at which collision costs activate. |
|
Straight-line approach segment length before the target. |
Attached Objects#
When a subtask’s skill segment ends with the gripper holding an object, the next transit must treat that object as part of the robot. The generator tells the planner which object it expects attached (from the task descriptor’s reference objects); the planner snapshots the object’s pose relative to the attach link and collision-checks the combined body throughout the plan. On release, the attachment is dropped and the object returns to the world model.
Visualization and Debugging#
The cuRobo backend can visualize its collision-sphere model and planned trajectories via
rerun (visualize_spheres / visualize_plan config flags).
During multi-env generation these are enabled only for env 0 to keep the simulation
responsive. Planner diagnostics (success rates, timing) are available through
get_planner_info().
Adding a New Backend#
Subclass
MotionPlannerBaseand implement the methods above, reading world state through the Datastream passed at construction.Construct your planners where SkillGen expects them — one per env id, exposing
update_world_and_plan_motion(...)andget_planned_poses()(this is allSkillGenrequires of a planner).Wire construction into your entry point the way
generate_dataset.pybuilds its cuRobo planners (_build_motion_planners).