feat(manipulation): add OpenYAM Damiao adapter - #3129
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Codecov Report❌ Patch coverage is @@ Coverage Diff @@
## main #3129 +/- ##
==========================================
+ Coverage 75.46% 75.61% +0.15%
==========================================
Files 1157 1166 +9
Lines 111276 112068 +792
Branches 10073 10118 +45
==========================================
+ Hits 83971 84740 +769
- Misses 24417 24434 +17
- Partials 2888 2894 +6
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 2 files with indirect coverage changes 🚀 New features to boost your workflow:
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Select MIT mode and drain startup traffic before enabling Damiao motors. Send zero-torque OpenYAM frames for compliant encoder readback and expose Viser on all interfaces.
# Conflicts: # CONTEXT.md # dimos/cli/can.py # dimos/cli/dimos.py # dimos/cli/test_can.py # dimos/robot/manipulators/openyam/config.py # pyproject.toml
# Conflicts: # dimos/cli/test_dimos.py
Greptile SummaryThe PR adds a generic Damiao whole-body adapter and an OpenYAM topology with shared CAN lifecycle, normalized gripper control, gravity compensation, mock support, CLI CAN setup, and updated OpenYAM blueprints.
Confidence Score: 4/5The stale hardware-feedback path should be fixed before merging because an idle OpenYAM can publish frozen joint state and gravity compensation can use an older pose. The new adapter reads cached SDK arrays without refreshing the robot, while its periodic tick occurs only after a command write; therefore feedback stops updating whenever no task writes and command-time gravity uses the preceding snapshot. Files Needing Attention: dimos/hardware/whole_body/damiao/adapter.py Important Files Changed
|
Contribution path
closes DIM-1311
Problem
DimOS lacked a direct OpenYAM integration for its six Damiao arm motors and gripper. Modeling them as separate manipulator adapters did not match the shared upstream robot lifecycle, shared CAN topology, or normalized gripper interface. The driver also needed gravity compensation without hiding the robot topology in runtime configuration.
Solution
DamiaoWholeBodyAdapterthat uses the upstreamRobot,Arm, andGripperinterfaces directly. It supports named CAN buses, multiple arm/gripper groups, normalized gripper commands and feedback, one synchronized command tick, and URDF-based gravity compensation.OpenYamDamiaoAdapteras the concrete OpenYAM topology: six arm joints and one gripper on theopenyamlogical bus. The gravity URDF remains lazy until hardware connection.dimos can setupand move the Piper command out of the robot package.The generic
HardwareComponent.addressremains a single-address compatibility field. Damiao whole bodies configure one or more physical CAN interfaces throughDamiaoRuntimeConfig.bus_addressesinstead.How to Test
Configure the physical CAN interface, then start the default OpenYAM teleoperation stack:
Automated validation:
The implementation was validated with mock/in-memory CAN and unit tests. Physical OpenYAM motion was not tested by the AI assistant.
AI assistance
OpenAI Codex with GPT-5 assisted throughout design review, implementation, test development, debugging, and documentation. The author reviewed and approved the design decisions interactively.
Checklist