Skip to content

WIP: feat(manipulation): add VAMP planner backend#2522

Draft
TomCC7 wants to merge 8 commits into
mainfrom
cc/feat/vamp
Draft

WIP: feat(manipulation): add VAMP planner backend#2522
TomCC7 wants to merge 8 commits into
mainfrom
cc/feat/vamp

Conversation

@TomCC7

@TomCC7 TomCC7 commented Jun 17, 2026

Copy link
Copy Markdown
Member

Problem

DimOS manipulation planning is currently centered on the Drake world plus RRT-Connect stack. We need an optional VAMP backend for fast joint-space planning, plus a mock-control Franka Panda target for testing and future benchmarking against an official VAMP robot.

Closes N/A

Solution

  • Add typed nested world/planner config variants for Drake/RRT-Connect and VAMP.
  • Add strict stack validation so VAMP world and VAMP planner are paired explicitly, while preserving Drake defaults.
  • Add lazy optional VAMP integration:
    • VampWorld loads official or user-prepared artifacts, handles native validity/FK/environment conversion, and reports unsupported capabilities clearly.
    • VampPlanner handles VAMP algorithm selection, joint-space planning, optional simplification, and path validation.
  • Add a mock-control Franka Panda catalog, LFS-backed robot description asset, and panda-coordinator blueprint for planning tests/benchmarks.
  • Add manipulation planning docs, OpenSpec artifacts, and tests covering config parsing, pairing validation, fake VAMP modules, Panda catalog conversion, and blueprint registration.

Design notes:

  • VAMP is intentionally world + planner only, not a kinematics backend.
  • VAMP Jacobian support is not faked; unsupported capabilities raise clear errors.
  • vamp-planner is optional and lazy-imported behind the new vamp extra.
  • This PR also includes the OpenSpec schema/init files used to capture the change plan.

How to Test

uv run pytest dimos/robot/manipulators/franka/test_blueprints.py dimos/robot/catalog/test_franka.py dimos/manipulation/test_manipulation_unit.py dimos/manipulation/planning/vamp/test_vamp_backend.py -q
CI=1 uv run pytest dimos/robot/test_all_blueprints_generation.py -q
uv run doclinks --root . --check docs/usage/manipulation_planning.md docs/usage/README.md
openspec validate add-vamp-planning-backend

Manual mock Panda/VAMP smoke path:

uv run --extra manipulation --extra vamp dimos run panda-coordinator --daemon \
  -o manipulationmodule.world.backend=vamp \
  -o manipulationmodule.world.artifact.mode=official \
  -o manipulationmodule.world.artifact.robot=panda \
  -o manipulationmodule.planner.backend=vamp \
  -o manipulationmodule.planner.algorithm=rrtc

Contributor License Agreement

  • I have read and approved the CLA.

@TomCC7 TomCC7 changed the title feat(manipulation): add VAMP planner backend WIP: feat(manipulation): add VAMP planner backend Jun 17, 2026
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
1902 1 1901 155
View the top 1 failed test(s) by shortest run time
dimos.project.test_no_init_files::test_no_init_files
Stack Traces | 0.017s run time
def test_no_init_files():
        dimos_dir = DIMOS_PROJECT_ROOT / "dimos"
        init_files = sorted(dimos_dir.rglob("__init__.py"))
        # The root dimos/__init__.py is allowed for the porcelain lazy import.
        init_files = [f for f in init_files if f != dimos_dir / "__init__.py"]
        if init_files:
            listing = "\n".join(f"  - {f.relative_to(dimos_dir)}" for f in init_files)
>           raise AssertionError(
                f"Found __init__.py files in dimos/:\n{listing}\n\n"
                "__init__.py files are not allowed because they lead to unnecessary "
                "extraneous imports. Everything should be imported straight from the "
                "source module."
            )
E           AssertionError: Found __init__.py files in dimos/:
E             - .../planning/vamp/__init__.py
E           
E           __init__.py files are not allowed because they lead to unnecessary extraneous imports. Everything should be imported straight from the source module.

dimos_dir  = PosixPath('.../dimos/dimos/dimos')
init_files = [PosixPath('.../dimos/dimos/dimos/.../planning/vamp/__init__.py')]
listing    = '  - .../planning/vamp/__init__.py'

dimos/project/test_no_init_files.py:25: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant