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 current robot state, target controls, transient preview ghosts, planned path 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 uses existing manipulation planning, preview, execute, cancel, and clear-plan RPC methods through a small in-process adapter. GUI callbacks enqueue operations instead of touching WorldSpec, IK, planner objects, or live Drake contexts directly. Rendering copies mutable joint state/path containers at the read boundary, then updates the Viser scene after manipulation/world accessors have returned. External manipulation visualizers are initialized from a backend-neutral planning-scene snapshot after the planning world has added its robots. This snapshot maps world robot IDs to RobotModelConfig metadata so Viser can prepare current, target, and transient preview robot visuals without WorldMonitor depending on Viser-specific hooks. Embedded Meshcat visualization does not need extra setup because it observes the Drake world directly. When the Viser panel is enabled, it can call the existing manipulation execution path after a fresh feasible plan is available and the current robot joints still match the plan start.

Perception + Agent

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