Repository navigation
Conversation
There was a problem hiding this comment.
go2 replay realtime (arm64)
Details
| Benchmark suite | Current: 7df037f | Previous: ebe17bd | Ratio |
|---|---|---|---|
peak memory |
1783.844 MB |
1730.012 MB |
1.03 |
peak threads |
365 threads |
370 threads |
0.99 |
network (transport) |
2730.983 MB |
2730.98 MB |
1.00 |
disk write |
1.691 MB |
1.785 MB |
0.95 |
instructions |
137.633 G |
137.843 G |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## codex/feat/robot-model-composition #4881 +/- ##
======================================================================
+ Coverage 83.10% 83.12% +0.01%
======================================================================
Files 1743 1748 +5
Lines 166808 166952 +144
Branches 13799 13805 +6
======================================================================
+ Hits 138629 138774 +145
- Misses 24411 24415 +4
+ Partials 3768 3763 -5
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 8 files with indirect coverage changes 🚀 New features to boost your workflow:
|
d6485cd to
03d9308
Compare
03d9308 to
1cc5ef1
Compare
1cc5ef1 to
83f3d67
Compare
83f3d67 to
725c1a6
Compare
06816f7 to
0c14ad8
Compare
0c14ad8 to
8743e55
Compare
8719fe4 to
c5fe19a
Compare
c5fe19a to
7df037f
Compare
[Medium impact] No merge-blocking issues were identified. Real-asset planning and mock control execution support merging the reviewed changes; physical commissioning still requires measured geometry and hardware checks. SummaryAdds two Metal arms to one shared planning world while keeping their CAN connections separate.
Runtime checks successfully loaded the real arm assets, verified default and configured mount transforms, and exercised both arms in the same collision scene. Synchronized two-arm planning succeeded, with every generated trajectory sample passing collision checks. Mock coordinator execution confirmed correct twelve-joint routing and independent gripper task and stream commands. Invalid CAN selector combinations were rejected before adapter connection. Acknowledged scope:
No actionable issues were found in the reviewed changes. No physical hardware was controlled. Reviews (1) · Last reviewed commit: "test: wait for asynchronous peek subscri..." · Reviewed by Greptile |
Two Metal arms need a shared collision world and one synchronized 12-joint planner while retaining separate CAN buses. Add the dual Metal coordinator, declarative model configuration, ManipulationModule/Viser blueprint, and gateway catalog entry.
Stack
Parent: #4919 (RobotModel fixed-attachment API), which builds on single-arm #4865. B601-DM #4858 remains independent. Review this diff against
codex/feat/robot-model-composition.Model and control
Create dual_metal_base in memory with
RobotModel.from_root_link("dual_metal_base", name="dual_makermods_metal"), then callwith_attached_model()twice to weld the pinned official single-arm Metal tree onto it. Each fixed joint has a left/right prefix and configurable mount transform. The RobotModel load pipeline owns attachment and resource resolution; source_path is None for the in-memory base. No base.urdf file is needed; each child resolves its own assets. No generated URDF, independent cache, public composition helper, or PathLike class is used. The model has left_arm/right_arm planning groups and a shared collision scene. One trajectory task controls all 12 angular joints; per-arm gripper tasks and streams remain independent.Do not modify ManipulationModule or RobotModelConfig to add gripper bindings. That interface belongs to #4747. Until it lands, the gripper tasks are available on the coordinator but are unbound in ManipulationModule/Viser. Future bindings are left_arm -> left_arm_gripper and right_arm -> right_arm_gripper.
Without CAN selectors both arms use mocks. Physical startup requires both distinct left/right selectors; it enables both arms and calibrates their grippers. Reuse the released can-motor-control>=0.0.11 driver, fixed increasing_position direction, and 0.1 current ratio.
Geometry provenance
The official ROS and Lab descriptions reviewed provide single-arm URDFs. The official two-arm controller configuration starts two controllers but supplies no shared mounting transform. The vendor's 90 x 90 mm four-M5 pattern is one arm's mounting pattern, not dual-arm spacing.
Default bases at (0, 0.3, 0) and (0, -0.3, 0) meters with the same orientation are an example layout only. Physical planning requires actual measured mount positions/orientations. Both planning tips remain gripper mount frames, not calibrated fingertip TCPs.
Validation
CI follow-up: guard Alfred's file-backed URDF invariant after source_path became optional. The unrelated peek timeout test now waits for Rx subscription disposal before asserting cleanup, avoiding a race between timeout notification and asynchronous disposal. All 13 stream-peek tests pass locally. Full mypy with CI version 1.19.0 and Linux platform passes across 1,268 source files.
161 focused regression tests passed, covering source-less roots, real Viser mesh loading, planning-group discovery, the fixed-attachment API, existing model/source behavior, configuration round trips, single/dual hardware setup, gateway annotations, and blueprint registry. Targeted mypy and changed-file pre-commit passed.
Actual RoboPlan/Viser mock runtime: 12-joint model loaded, initial state collision-valid, both planning groups discovered, synchronized two-group trajectory succeeded (two waypoints, 0.632 s), HTTP 200, and independent coordinator gripper tasks accepted commands. The excluded existing Viser cleanup KeyError still occurs on shutdown; this PR does not fix it. No physical dual-arm hardware was controlled.
Run
Open http://127.0.0.1:8095. Physical selectors remain
--left-can-portand--right-can-port; configure measured mounts with--left-base-xyz,--right-base-xyz,--left-base-rpy, and--right-base-rpy(JSON triples, meters/radians). See docs/capabilities/manipulation/makermods_metal_integration.md#dual-arm-setup.