Skip to content

Revert "Krishna/feat/openarm damiao" - #3387

Merged
TomCC7 merged 1 commit into
cc/feat/openyam-driverfrom
revert-3351-krishna/feat/openarm-damiao
Aug 6, 2026
Merged

Revert "Krishna/feat/openarm damiao"#3387
TomCC7 merged 1 commit into
cc/feat/openyam-driverfrom
revert-3351-krishna/feat/openarm-damiao

Conversation

@TomCC7

@TomCC7 TomCC7 commented Aug 6, 2026

Copy link
Copy Markdown
Member

Reverts #3351

@TomCC7
TomCC7 merged commit f3ba80d into cc/feat/openyam-driver Aug 6, 2026
2 checks passed
@TomCC7
TomCC7 deleted the revert-3351-krishna/feat/openarm-damiao branch August 6, 2026 18:00
@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Reverts the bimanual OpenArm whole-body integration in favor of separate v10 manipulator adapters, CAN drivers, model configurations, and blueprints. It also changes generic planning, mesh conversion, visualization, and inactive Damiao feedback behavior.

  • Adds a SocketCAN Damiao MIT-mode driver and per-arm OpenArm manipulator adapter.
  • Splits OpenArm hardware and planning into separate left/right robot components.
  • Reworks OpenArm planner, teleoperation, registry, documentation, and LFS assets.
  • Removes same-robot planning-group composition and prior mesh/state-read safeguards.

Confidence Score: 2/5

This PR should not merge until mesh conversion preserves distinct geometry, same-robot planning groups remain composable, and inactive Damiao reads continue advancing feedback.

The changes can substitute incorrect collision geometry during model preparation, reject previously supported coordinated group plans, and return frozen hardware state in read-only sessions.

Files Needing Attention: dimos/manipulation/planning/utils/mesh_utils.py, dimos/manipulation/planning/world/roboplan_model.py, dimos/hardware/whole_body/damiao/adapter.py

Important Files Changed

Filename Overview
dimos/hardware/manipulators/openarm/driver.py Adds CAN frame encoding, state decoding, bus lifecycle, receive caching, and multi-motor command dispatch.
dimos/hardware/manipulators/openarm/adapter.py Adds a per-arm manipulator adapter with MIT-mode control, state freshness checks, and optional gravity compensation.
dimos/robot/manipulators/openarm/config.py Replaces the bimanual whole-body model with separate v10 arm hardware and planning configurations.
dimos/robot/manipulators/openarm/blueprints/planner.py Adds mock and physical dual-arm planner blueprints assembled from separate robot models.
dimos/manipulation/planning/utils/mesh_utils.py Removes output-name disambiguation, causing different same-stem meshes to overwrite one another.
dimos/manipulation/planning/world/roboplan_model.py Globally disables coordinated selection of disjoint planning groups belonging to one robot.
dimos/hardware/whole_body/damiao/adapter.py Removes inactive feedback pumping, leaving read-only state snapshots stale.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  BP[OpenArm blueprint] --> L[Left HardwareComponent]
  BP --> R[Right HardwareComponent]
  L --> LA[OpenArmAdapter]
  R --> RA[OpenArmAdapter]
  LA --> LCAN[SocketCAN bus]
  RA --> RCAN[SocketCAN bus]
  BP --> P[Manipulation planner]
  P --> LM[Left RobotModelConfig]
  P --> RM[Right RobotModelConfig]
  LM --> C[Coordinated planning]
  RM --> C
Loading

Reviews (1): Last reviewed commit: "Revert "Krishna/feat/openarm damiao (#33..." | Re-trigger Greptile

mesh_name = Path(original_path).stem
path_tag = hashlib.md5(original_path.encode()).hexdigest()[:8]
obj_path = mesh_dir / f"{mesh_name}_{path_tag}.obj"
obj_path = mesh_dir / f"{mesh_name}.obj"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Same-stem meshes overwrite geometry

When a URDF references distinct meshes with the same stem, _convert_meshes exports both to the same OBJ path, so the later export overwrites the earlier geometry and collision planning can load the wrong mesh.

Comment on lines +326 to +327
if len({group.robot_name for group in selected}) < 2:
continue

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Same-robot group composition is disabled

When a robot defines multiple disjoint planning groups and a caller selects them together, this branch skips their generated combination, causing a previously supported coordinated plan to return UNSUPPORTED with no generated group.

# active; without it feedback would stay frozen at the connect
# snapshot, so keep it flowing for read-only sessions.
self._refresh()
states: list[MotorState] = []

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Inactive feedback remains frozen

When a connected Damiao adapter is queried while inactive, read_motor_states no longer refreshes the bus and the active write loop is not running, causing read-only monitoring and initialization consumers to receive joint state frozen at the connection snapshot.

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