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:http://localhost:7000) to see the robot.
Keyboard controls:
| Key | Action |
|---|---|
| W/S | +X/-X (forward/back) |
| A/D | +Y/-Y (left/right) |
| Q/E | +Z/-Z (up/down) |
| R/F | +Roll/-Roll |
| T/G | +Pitch/-Pitch |
| Y/H | +Yaw/-Yaw |
| ESC | Quit |
Motion Planning (two terminals)
PickAndPlaceModule, use the corresponding
module prefix:
skip
Planning backend selection
Manipulation planning separates the world backend from the planner algorithm:world_backendselects the robot/world/collision representation.planner_nameselects the path-planning algorithm.kinematics.backendselects the IK backend. The legacykinematics_namefield remains available as a compatibility shim.
world_backend | planner_name | kinematics.backend | Status |
|---|---|---|---|
drake | rrt_connect | pink | Default path |
drake | rrt_connect | jacobian | Legacy Jacobian IK |
drake | rrt_connect | drake_optimization | Drake-only IK |
roboplan | rrt_connect | pink or jacobian | Generic RRT over RoboPlan collision checks |
roboplan | roboplan | pink or jacobian | RoboPlan-native planner, using the RoboPlan world object |
planner_name=roboplan requires
world_backend=roboplan, and kinematics.backend=drake_optimization requires
world_backend=drake.
Install the manipulation dependencies:
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 ornonewith the RoboPlan backend.
Planning Visualization
Manipulation visualization is configured onManipulationModuleConfig.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.
skip
manipulation extra:
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
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
| Blueprint | Description |
|---|---|
keyboard-teleop-a750 | A750 6-DOF keyboard teleop with Drake viz |
keyboard-teleop-piper | Piper 6-DOF keyboard teleop with Drake viz |
keyboard-teleop-xarm6 | XArm6 6-DOF keyboard teleop with Drake viz |
keyboard-teleop-xarm7 | XArm7 7-DOF keyboard teleop with Drake viz |
xarm6-planner-only | XArm6 standalone planner (no coordinator) |
xarm7-planner-coordinator | XArm7 planner with coordinator integration |
dual-xarm6-planner | Dual XArm6 planning |
xarm-perception | XArm7 + RealSense camera for perception |
xarm-perception-agent | XArm7 perception + LLM agent |
xarm-perception-sim | XArm7 simulation perception stack |
Supported Robots
| Robot | DOF | Teleop | Planning | Perception |
|---|---|---|---|---|
| A-750 | 6 | Y | Y | — |
| Piper | 6 | Y | Y | — |
| XArm6 | 6 | Y | Y | — |
| XArm7 | 7 | Y | Y | Y |
Adding a Custom Arm
guide is hereKey Files
| File | Description |
|---|---|
manipulation_module.py | Main module (RPC interface, state machine) |
robot/manipulators/common/blueprints.py | Shared coordinator, planner, and task helpers |
robot/manipulators/a750/config.py | A-750 model and hardware config |
robot/manipulators/a750/blueprints/teleop.py | A-750 keyboard teleop blueprint |
robot/manipulators/piper/blueprints/basic.py | Piper coordinator blueprint |
robot/manipulators/piper/blueprints/teleop.py | Piper teleop blueprints |
robot/manipulators/xarm/blueprints/basic.py | XArm coordinator and planner blueprints |
robot/manipulators/xarm/blueprints/perception.py | XArm perception blueprint |
teleop/keyboard/keyboard_teleop_module.py | Keyboard teleop module |
planning/world/drake_world.py | Drake physics backend |
planning/planners/rrt_planner.py | RRT-Connect motion planner |
