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:
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.
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:
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 pushed current robot state, target controls, transient preview ghosts, synchronized trajectory previews, and optional panel controls.none: no manipulation planning visualization.
skip
manipulation extra:
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
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.
