Skip to content

feat(sensors): Add v2 bimanual model for OpenArm 2.0 #17

Open
shubhambaid wants to merge 2 commits intoenactic:masterfrom
shubhambaid:feat/align-sim-sensors
Open

feat(sensors): Add v2 bimanual model for OpenArm 2.0 #17
shubhambaid wants to merge 2 commits intoenactic:masterfrom
shubhambaid:feat/align-sim-sensors

Conversation

@shubhambaid
Copy link

@shubhambaid shubhambaid commented Feb 25, 2026

This PR adds the v2/openarm_bimanual.xml MJCF model by adding the camera sensors required by the downstream inference dataflow for OpenArm 2.0. This aligns the simulation's sensor outputs with the expected hardware topics.

  • Added 'camera-wrist-right' to 'openarm_right_link7'
  • Added 'camera-wrist-left' to 'openarm_left_link7'
  • Added 'camera-head' to 'openarm_body_link0'
  • Added 'camera-ceiling' to 'worldbody'
  • Note: Used baseline pos/euler approximations. Exact physical offsets will be updated once OpenArm 2.0 measurements are provided.

- Added 'camera-wrist-right' to 'openarm_right_link7'
- Added 'camera-wrist-left' to 'openarm_left_link7'
- Added 'camera-head' to 'openarm_body_link0'
- Added 'camera-ceiling' to 'worldbody'
- Note: Used baseline pos/euler approximations. Exact physical offsets will be updated once OpenArm 2.0 measurements are provided.
@kou
Copy link
Contributor

kou commented Feb 26, 2026

Ah, sorry. Could you create v2/ instead of changing v1/?

We don't add cameras to v1/.

@shubhambaid shubhambaid marked this pull request as ready for review February 26, 2026 09:20
@kou
Copy link
Contributor

kou commented Feb 27, 2026

Could you update the PR title and description for the current change?

@shubhambaid shubhambaid changed the title feat(sensors): add hardware-aligned cameras to v1 bimanual model feat(sensors): add hardware-aligned cameras to v2 bimanual model Feb 27, 2026
@shubhambaid shubhambaid changed the title feat(sensors): add hardware-aligned cameras to v2 bimanual model feat(sensors): Add v2 bimanual model for OpenArm 2.0 Feb 27, 2026
@tokirobot
Copy link

Hi @shubhambaid,

Thanks for the PR! This is extremely helpful as we are currently developing OpenArm 2.0.

Regarding the camera setup, we've reviewed the requirements and concluded that the 'front' and 'side' cameras will not be necessary for our current inference dataflow. We'll focus on the four cameras you added (head, ceiling, and both wrists).

On our end, we are heavily focused on minimizing the "sim-to-real gap" and are actively working on System Identification (SysID). Because we expect to iteratively update physical parameters (friction, mass, inertia) and camera offsets based on our SysID results, I'd like to refactor the MJCF structure into a more modular format. This will allow us to push updates to specific parameters without touching the core robot structure.

Here is my proposed organization:

openarm_mujoco/
├── openarm_bimanual.xml      # Main file (integrates everything)
└── params/
    ├── assets.xml            # Meshes, materials, and textures
    ├── physics_defaults.xml  # Classes for friction, damping, contact, etc.
    ├── cameras.xml           # Camera positions, orientations, and FOV
    ├── actuators.xml         # Gear ratios, gains, and control limits
    ├── inertials.xml         # Mass, CoM, and inertia for each link

This is just my initial proposal—if you have a better idea for the structure or any other suggestions to facilitate better SysID workflows, I’m very much open to them!

I will let you know as soon as the v2 hardware is finalized so we can update the baseline approximations with exact measurements.

Looking forward to your thoughts!

@shubhambaid
Copy link
Author

Hi @shubhambaid,

Thanks for the PR! This is extremely helpful as we are currently developing OpenArm 2.0.

Regarding the camera setup, we've reviewed the requirements and concluded that the 'front' and 'side' cameras will not be necessary for our current inference dataflow. We'll focus on the four cameras you added (head, ceiling, and both wrists).

On our end, we are heavily focused on minimizing the "sim-to-real gap" and are actively working on System Identification (SysID). Because we expect to iteratively update physical parameters (friction, mass, inertia) and camera offsets based on our SysID results, I'd like to refactor the MJCF structure into a more modular format. This will allow us to push updates to specific parameters without touching the core robot structure.

Here is my proposed organization:

openarm_mujoco/
├── openarm_bimanual.xml      # Main file (integrates everything)
└── params/
    ├── assets.xml            # Meshes, materials, and textures
    ├── physics_defaults.xml  # Classes for friction, damping, contact, etc.
    ├── cameras.xml           # Camera positions, orientations, and FOV
    ├── actuators.xml         # Gear ratios, gains, and control limits
    ├── inertials.xml         # Mass, CoM, and inertia for each link

This is just my initial proposal—if you have a better idea for the structure or any other suggestions to facilitate better SysID workflows, I’m very much open to them!

I will let you know as soon as the v2 hardware is finalized so we can update the baseline approximations with exact measurements.

Looking forward to your thoughts!

Thanks for the detailed context! I completely agree with dropping the front and side cameras to keep the inference dataflow lean.

Your proposed modular structure is spot on for a SysID workflow. One quick suggestion: we can heavily leverage MuJoCo's classes inside physics_defaults.xml so you can globally tune parameters for specific component types (like all arm joints or gripper pads) with a single edit.

How would you like to handle the rollout? I can either update this PR to implement the new modular directory structure right now, or we can merge these camera additions as a baseline and tackle the refactor in a follow-up PR.

Let me know what works best for your roadmap!

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.

3 participants