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.- Omitted
kinematicsselects the world-native IK backend when available and otherwise selects Pink. - Explicit
kinematics.backendoverrides the automatic selection. The legacykinematics_namefield remains an explicit 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. Likewise, kinematics.backend=roboplan requires a
RoboPlan world.
Install the manipulation dependencies:
manipulation extra includes RoboPlan via roboplan from PyPI. OInK is
bundled as roboplan.optimal_ik; it has no separate install or capability
probe.
The --inexact flag preserves other extras already installed in your current
environment.
Safety behavior for unsupported RoboPlan features:
- RoboPlan OInK accepts pose targets expressed in the
worldframe. Other target frames return an unsupported IK result. - OInK checks convergence against the requested position and orientation tolerances. When collision checking is enabled, the converged composite endpoint is checked in the RoboPlan world.
- The initial OInK integration does not add a self-collision barrier. Intermediate numerical iterations are search states, not a safe executable path; the motion planner remains responsible for generating a collision-free trajectory.
- 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.
