feat(manipulation): support unbounded planar-base motion - #3844
Conversation
Codecov Report❌ Patch coverage is @@ Coverage Diff @@
## feat/r1pro-mobile-manip #3844 +/- ##
===========================================================
+ Coverage 77.93% 78.01% +0.08%
===========================================================
Files 1332 1334 +2
Lines 127227 127828 +601
Branches 11050 11106 +56
===========================================================
+ Hits 99151 99724 +573
+ Misses 24980 24920 -60
- Partials 3096 3184 +88
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 3 files with indirect coverage changes 🚀 New features to boost your workflow:
|
c73b412 to
cf1fd29
Compare
Greptile SummaryThis change extends joint-space planning and related adapters to support unbounded planar translation and continuous yaw. Validation reproduced an RRT accounting error in which LINE-coordinate connection expansions are omitted from the shared iteration count, allowing failed searches to perform substantially more collision checking than requested. This should be corrected before merge. Confidence Score: 4/5Not safe to merge until LINE-coordinate connection expansions are charged to the planner's shared iteration accounting. A deterministic runtime reproduction exercised the affected retry path, observed the excess planning work, and confirmed that accounting for connection expansions constrains the same scenario. Files Needing Attention: dimos/manipulation/planning/planners/rrt_planner.py
What T-Rex did
|
c11007f to
2f8b373
Compare
Represent mobile-base x/y as unbounded coordinates and yaw as periodic throughout model validation, Pink IK, world backends, selected-joint RRT, path lifting, and trajectory parameterization. Use request-local expanding sampling domains for obstacle detours, wire the behavior into the R1 Pro blueprint and Viser controls, and serialize Viser joint-control rebuilds to prevent concurrent handle removal failures. Tests: .venv/bin/pytest -q -p no:rerunfailures dimos/manipulation/planning/kinematics/test_pink_ik.py dimos/manipulation/planning/planners/test_rrt_planner_selection.py dimos/manipulation/planning/spec/test_model_validation.py dimos/manipulation/planning/world/test_drake_world_planning_groups.py dimos/manipulation/test_plan_execution.py dimos/manipulation/visualization/viser/test_gui.py dimos/robot/assets/test_model.py dimos/robot/manipulators/r1pro/test_config.py
Count connect-phase node expansions alongside extend attempts so LINE-domain retries cannot exceed max_iterations. Update RoboPlan integration tests to prepare models before loading them.
2f8b373 to
26c7cdd
Compare
Contribution path
Problem
R1 Pro planning previously treated planar-base coordinates as bounded scalar joints. That imposed an artificial workspace, made yaw discontinuous at ±π, and spread joint-type policy across backend adapters.
Viser could also rebuild joint controls concurrently when planning groups were toggled quickly, causing duplicate handle removal and
dictionary changed size during iteration.Design
Canonical joint space
prepare_robot_model()now compiles the final materialized URDF once into aPreparedRobotModel. Its orderedJointSpaceassigns one topology to every controlled coordinate:INTERVALLINECIRCLEWorlds, IK, planners, trajectory generation, and Viser consume this prepared model.
RobotModelConfigno longer duplicates joint-limit arrays or fallback velocity and acceleration values. Robot assets must supply positive finite velocity and acceleration limits before preparation.JointCoordinateis a frozen Pydantic dataclass that validates its mechanism, topology, bounds, and motion limits once during model preparation. Planner-hot-path configurations and tangents remain lightweight standard dataclasses.Planning and backend adaptation
LINEandCIRCLEcoordinates to Pinocchio's native representation and preserves locked joints.LINEorCIRCLEcoordinates use the shared dimOS RRT against RoboPlan collision and kinematics queries.Whole-body IK chooses the endpoint across the selected arm, torso, and base joints. Path simplification only removes collision-free intermediate waypoints; it does not redistribute endpoint motion between the arm and base. Selecting only an arm locks the unselected torso, other arm, and base.
R1 Pro and Viser
base/xandbase/yas unbounded translations andbase/yawas a continuous angle.Base execution remains disabled until R1 Pro has a feedback-controlled base trajectory executor. Preview and planning work, but execution rejects trajectories that require the missing base-controller capability. Cartesian waypoint planning remains interval-only.
Verification
.venv/bin/pytest dimos/manipulation -m 'not (self_hosted or mujoco or self_hosted_large)'Result: 465 passed, 25 deselected.
Additional checks completed:
(0, 0, 3.04)to(6, -6, 3.24)across the short yaw boundary.Manual R1 Pro/Viser validation has not been run in this environment.
Manual R1 Pro test
In the Viser URL printed by the blueprint:
moving_base; plan tobase/x = 6.0andbase/y = -6.0.3.04to-3.04; confirm the preview takes the short crossing.left_arm,torso, andmoving_base; move the left TCP target and plan a whole-body path.left_arm; confirm the torso, right arm, and base remain fixed.The detailed design and manual procedure are in
docs/capabilities/manipulation/unbounded-planar-base.md.AI assistance
OpenAI Codex implemented and tested the change under human direction.
Checklist