Skip to main content
Motion planning and teleoperation for robotic manipulators. Drake remains the default world backend, RoboPlan is available as an optional planning backend, and manipulation visualization supports Meshcat or Viser.

Quick Start

Recent addition: the A-750 keyboard teleop blueprint is now available via:

Keyboard Teleop (single command)

Each blueprint launches the full stack — keyboard UI, mock controller, IK solver, and Drake visualization:
Open the Meshcat URL printed in the terminal (default http://localhost:7000) to see the robot. Keyboard controls:

Motion Planning (two terminals)

Pink IK is the default solver. Tune it with nested module config overrides:
For blueprints that instantiate PickAndPlaceModule, use the corresponding module prefix:
Then use the IPython client:
skip

Planning backend selection

Manipulation planning separates the world backend from the planner algorithm:
  • world_backend selects the robot/world/collision representation.
  • planner_name selects the path-planning algorithm.
  • kinematics.backend selects the IK backend. The legacy kinematics_name field remains available as a compatibility shim.
Drake remains the default:
RoboPlan is available as an optional backend for evaluating a non-Drake world implementation. Select it explicitly with module options:
Valid combinations: Invalid combinations fail during startup instead of waiting for the first plan request. For example, planner_name=roboplan requires world_backend=roboplan, and kinematics.backend=drake_optimization requires world_backend=drake. Install the manipulation dependencies:
The manipulation extra includes RoboPlan via roboplan from PyPI. The --inexact flag preserves other extras already installed in your current environment. Safety behavior for unsupported RoboPlan features:
  • Planning-critical unsupported inputs fail loudly before planning. Examples include unsupported obstacle geometry, unavailable robot loading APIs, or unavailable collision query APIs. RoboPlan worlds generate a minimal SRDF from the DimOS robot config, including configured collision-exclusion pairs.
  • Unverified non-critical query methods raise explicit NotImplementedError. In particular, signed minimum-distance semantics are not implemented for RoboPlan until a safe equivalent is verified.
  • Embedded Meshcat visualization requires a world implementing VisualizationSpec; use Viser or none with the RoboPlan backend.

Planning Visualization

Manipulation visualization is configured on ManipulationModuleConfig.visualization. It is independent from the global Rerun stream viewer in docs/usage/visualization.md. Backend choices:
  • meshcat: embedded Drake/Meshcat visualizer. The planning world must be created with embedded visualization enabled, so this is selected through the visualization config.
  • viser: in-process Viser visualizer. It renders pushed current robot state, target controls, transient preview ghosts, synchronized trajectory previews, and optional panel controls.
  • none: no manipulation planning visualization.
CLI example:
Blueprint example:
skip
Viser support is included in the manipulation extra:
The Viser panel talks to the concrete ManipulationOperator bound into its VisualizationSession. GUI callbacks enqueue operations through that operator for target evaluation, planning, preview, execution, cancellation, reset, and clear-plan actions. The panel owns only target drafts, selection state, and callback generations; it does not touch WorldSpec, IK, planner objects, ManipulationModule, WorldMonitor, or live Drake contexts directly. External manipulation visualizers are initialized from a backend-neutral VisualizationSession after the planning world has added its robots. The session contains static PlanningSceneInfo metadata: world robot IDs, RobotModelConfig values, and resolved planning groups. Runtime joint state is then pushed through VisualizationStateFrame updates so renderers do not poll world/module state or own freshness policy. Embedded Meshcat visualization does not need extra setup because it observes the Drake world directly. Previews use the stored synchronized JointTrajectory from the generated plan. Viser projects the globally named trajectory into robot-local preview ghosts and plays the stored timestamped points directly; optional preview duration only scales the stored delays. Execute freshness is enforced by the manipulation module/operator immediately before dispatch, not by Viser-side telemetry snapshots.

Perception + Agent

For a simulation walkthrough, see Agentic xArm simulation.

Architecture

  • KeyboardTeleopModule — Pygame UI publishing routed spatial EEF twist intent
  • ControlCoordinator — 100Hz control loop with mock or real hardware adapters
  • ManipulationModule — world backend, optional visualization, RRT motion planning, obstacle management
Internally, planning code depends on WorldSpec for world, collision, and kinematics behavior. Meshcat preview and publishing are exposed separately through VisualizationSpec, so non-visual planning paths do not require a visualization backend.

Blueprints

Supported Robots

Adding a Custom Arm

guide is here

Key Files