Skip to content

feat: roboplan integration#2478

Open
TomCC7 wants to merge 16 commits into
mainfrom
cc/feat/roboplan-integration
Open

feat: roboplan integration#2478
TomCC7 wants to merge 16 commits into
mainfrom
cc/feat/roboplan-integration

Conversation

@TomCC7

@TomCC7 TomCC7 commented Jun 12, 2026

Copy link
Copy Markdown
Member

Integrate roboplan into manipulation module. One class implements roboplan's worldspec+plannerspec, achieving composition of roboplan world+roboplan planner/generic planner.

Better merge after #2413 since we resurfaced creation of world/planner specs.

Design choices:

  1. roboplan python binding installed through custom fork, which is uv-installable (https://github.com/TomCC7/roboplan).
  2. Single class implements both world/planner specs to make planner impl more compact.
  3. A default srdf are generated for roboplan. Can formalize in later movegroup concept introduction.

How to Test

launch coordinator and pass argument for roboplan world/planner.

# roboplan planner
uv run dimos run xarm7-planner-coordinator \
  -o manipulationmodule.world_backend=roboplan \
  -o manipulationmodule.planner_name=roboplan
# generic planner
uv run dimos run xarm7-planner-coordinator \
  -o manipulationmodule.world_backend=roboplan \
  -o manipulationmodule.planner_name=rrt_connect
# and client in a different terminal...
uv run python -i -m dimos.manipulation.planning.examples.manipulation_client

Contributor License Agreement

  • I have read and approved the CLA.

@codecov

codecov Bot commented Jun 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 77.01934% with 202 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...imos/manipulation/planning/world/roboplan_world.py 63.47% 129 Missing and 54 partials ⚠️
dimos/manipulation/planning/factory.py 53.57% 7 Missing and 6 partials ⚠️
dimos/manipulation/test_roboplan_world.py 98.41% 4 Missing ⚠️
dimos/manipulation/test_planning_factory.py 97.82% 1 Missing and 1 partial ⚠️
Flag Coverage Δ
OS-ubuntu-24.04-arm 63.85% <77.01%> (-0.01%) ⬇️
OS-ubuntu-latest 64.67% <77.01%> (-0.03%) ⬇️
Py-3.10 64.67% <77.01%> (-0.03%) ⬇️
Py-3.11 64.67% <77.01%> (-0.03%) ⬇️
Py-3.12 64.67% <77.01%> (-0.03%) ⬇️
Py-3.13 64.67% <77.01%> (-0.03%) ⬇️
Py-3.14 64.68% <77.01%> (-0.03%) ⬇️
Py-3.14t 64.67% <77.01%> (-0.03%) ⬇️
SelfHosted-Large 30.32% <23.80%> (?)
SelfHosted-Linux 38.21% <24.60%> (-0.08%) ⬇️
SelfHosted-macOS 36.94% <24.60%> (-0.11%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
dimos/manipulation/manipulation_module.py 47.62% <100.00%> (+0.62%) ⬆️
dimos/manipulation/test_planning_factory.py 97.82% <97.82%> (ø)
dimos/manipulation/test_roboplan_world.py 98.41% <98.41%> (ø)
dimos/manipulation/planning/factory.py 64.70% <53.57%> (+20.26%) ⬆️
...imos/manipulation/planning/world/roboplan_world.py 63.47% <63.47%> (ø)

... and 19 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@TomCC7 TomCC7 changed the title WIP: roboplan integration feat: roboplan integration Jun 12, 2026
@TomCC7 TomCC7 marked this pull request as ready for review June 12, 2026 23:08
@greptile-apps

greptile-apps Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR integrates RoboPlan as an optional world and planner backend alongside the existing Drake backend. A new RoboPlanWorld class (840 lines) simultaneously implements WorldSpec and PlannerSpec, allowing both Drake's RRT-Connect and RoboPlan's native planner to run over the same scene.

  • New RoboPlanWorld adapter handles scene construction (URDF + auto-generated SRDF), collision queries with multi-signature fallback, FK/Jacobian, and native RRT planning; previous review findings (SRDF temp-dir accumulation, empty-path mis-reported as SUCCESS, unnamed path waypoints, TypeError swallowed in collision fallback) are all addressed in this version.
  • factory.py gains validate_backend_combination() for early startup validation, and a new world_backend parameter that threads through create_world, create_planner, and create_planning_stack.
  • pyproject.toml adds a manipulation-roboplan extra using an unpinned HTTPS git source; the committed uv.lock pins to a specific commit hash, preserving reproducibility for uv sync.

Confidence Score: 5/5

Safe to merge; the RoboPlan backend is opt-in and the default Drake path is unchanged.

All concerns flagged in previous review rounds are resolved in this version: SRDF temp dirs now use tempfile.TemporaryDirectory scoped to the world object, empty planner results are caught and returned as NO_SOLUTION, path waypoints always carry names from robot.config.joint_names, and every TypeError fallback attempt in _has_collisions is individually wrapped. The dependency URL is HTTPS (not SSH), so CI without SSH keys will work. The lock file pins to a specific commit, preserving reproducibility. The only remaining finding is a P2: obstacle.color is silently replaced with a hardcoded value.

dimos/manipulation/planning/world/roboplan_world.py — the _call_first_obstacle_method ignores obstacle.color

Important Files Changed

Filename Overview
dimos/manipulation/planning/world/roboplan_world.py New 840-line RoboPlan world/planner adapter. Previous reviewer concerns (SRDF temp accumulation, empty-path SUCCESS, unnamed path waypoints, TypeError fallback loop) are all addressed. Minor: obstacle.color is silently replaced with a hardcoded orange value.
dimos/manipulation/planning/factory.py Adds validate_backend_combination(), roboplan branch in create_world/create_planner, and world_backend threading through create_planning_stack. Backend validation is clean and double-checked (both at module entry and inside factory functions).
dimos/manipulation/manipulation_module.py Adds world_backend config field and threads it through WorldMonitor and create_planner; validate_backend_combination is called eagerly at startup. Change is minimal and correct.
dimos/manipulation/test_planning_factory.py New factory-level unit tests covering backend validation, planner routing, and module wiring. Good coverage of invalid combinations and no-robot early-exit path.
dimos/manipulation/test_roboplan_world.py Comprehensive fake-roboplan test suite covering robot registration, collision checks, edge checks, FK/Jacobian, native planning, SRDF generation, and fallback behaviors including empty-path and TypeError-on-collision-context.
pyproject.toml Adds manipulation-roboplan extra with an unpinned git HTTPS dependency; the lockfile pins to a specific commit hash so reproducibility is maintained through uv.lock. Commit pinning in pyproject.toml is explicitly deferred per the PR description.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[ManipulationModuleConfig\nworld_backend / planner_name] --> B[validate_backend_combination]
    B --> C{world_backend?}
    C -->|drake| D[DrakeWorld]
    C -->|roboplan| E[RoboPlanWorld]
    E --> F{planner_name?}
    D --> G{planner_name?}
    F -->|rrt_connect| H[RRTConnectPlanner\nuses RoboPlanWorld collision checks]
    F -->|roboplan| I[RoboPlanWorld\nacts as its own PlannerSpec]
    G -->|rrt_connect| J[RRTConnectPlanner\nuses DrakeWorld]
    I --> K[roboplan.rrt.RRT\nnative planner]
    H --> L[PlanningResult]
    J --> L
    K --> L
Loading

Reviews (6): Last reviewed commit: "fix: continue RoboPlan collision fallbac..." | Re-trigger Greptile

Comment thread dimos/manipulation/planning/world/roboplan_world.py Outdated
Comment thread dimos/manipulation/planning/world/roboplan_world.py
Comment thread dimos/manipulation/planning/world/roboplan_world.py
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Jun 12, 2026
@github-actions github-actions Bot added ready-to-merge Required CI checks have passed on this PR and removed ready-to-merge Required CI checks have passed on this PR labels Jun 12, 2026
Comment thread dimos/manipulation/planning/world/roboplan_world.py Outdated
@github-actions github-actions Bot removed the ready-to-merge Required CI checks have passed on this PR label Jun 13, 2026
Comment thread dimos/manipulation/planning/world/roboplan_world.py
Comment thread dimos/manipulation/planning/world/roboplan_world.py
@github-actions github-actions Bot added the ready-to-merge Required CI checks have passed on this PR label Jun 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Required CI checks have passed on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants