Skip to content

Add OneRobotics A1 asset and Isaac Teleop example #1291

Open

Description

@WangXuechun-woan

Summary

We would like to add OneRobotics A1 assets and a joint-space Isaac Teleop
example to Isaac Capture.

The initial integration targets the OneRobotics A1 7-DoF right arm and provides:

  • URDF and MJCF assets
  • STL meshes
  • License and provenance records
  • SHA256 asset manifest
  • Isaac Teleop joint-state mapping
  • A runnable MuJoCo demonstration example

Motivation

The A1 asset is needed for validating joint-space teleoperation and simulation
integration with a 7-DoF OneRobotics arm.

The proposed example uses the existing Isaac Teleop retargeting pipeline:

JointStateSource -> JointStateRetargeter -> OutputCombiner("action")

Proposed Scope

  • Add the OneRobotics A1 asset package under the Teleop examples.
  • Add a right-arm joint-space mapping for the seven A1 joints.
  • Add a MuJoCo demo that exercises the packaged right-arm MJCF.
  • Add a live mode that consumes A1 joint states from a DeviceIO source.
  • Install the asset package with the Teleop examples.
  • Preserve asset license, attribution, and provenance information.

Joint Mapping

The right-arm joint order is:

  1. joint1-a1_r
  2. joint2-a1_r
  3. joint3-a1_r
  4. joint4-a1_r
  5. joint5-a1_r
  6. joint6-a1_r
  7. joint7-a1_r

The proposed collection id is:

onerobotics_a1_right

Asset Provenance

  • Source repository: https://github.com/katazen/onerobot_h1
  • Source revision: ecf530911284ba0e559f7a24dc222fd8e60d31ed
  • Asset license: CC BY 4.0
  • Attribution: OneRobotics A1 robot assets © 2026 OneRobotics

The package includes the license text, third-party notices, and SHA256
verification manifest.

Validation

The following validations have been completed locally:

  • A1 right-arm MJCF compiles successfully in MuJoCo.
  • The model contains seven joints.
  • MJCF joint names match the Isaac Teleop mapping.
  • A1_2026 SHA256 manifest passes.
  • STL files are managed with Git LFS.
  • Ruff, REUSE, Git LFS, and documentation checks pass.

Open Questions

  1. Is examples/teleop/assets/ an acceptable location for this asset?
  2. Should the A1 assets be moved to a separate asset repository?
  3. Should the live example remain a generic JointState consumer, or should an
    A1-specific DeviceIO plugin also be added?
  4. Is the included MuJoCo MJCF acceptable for the initial integration?
  5. Should the example target only the right arm, or also expose the bimanual
    A1 configuration?

Checklist

  • Asset provenance documented
  • License documented
  • SHA256 manifest included
  • MJCF load validation completed
  • Isaac Teleop joint mapping implemented
  • Runnable demo added
  • Maintainer feedback received
  • Final PR opened

Activity

  1. ivany-nv commented on Oct 21, 2026

    @ivany-nv
    Contributor

    Hi @WangXuechun-woan,
    I'd like to agree on the integration shape with you, because it decides most of what that PR should contain.

    Where the A1 fits in Isaac Teleop

    Isaac Teleop's extension points are on the operator side: an input device (XR hands or controllers, a leader arm, a glove) streams data through DeviceIO, and retargeters turn that data into commands for a robot. JointStateSource with JointStateRetargeter(mode="joint") is the path for joint-space input devices. The SO-101 and reBot DevArm leaders are the reference instances, and each ships a plugin with a synthetic backend so the path also runs without hardware.

    In #1292 the A1 is wired as the input device and mapped onto itself. That only works if an A1 leader streams its own joint states, so the key question for you is:

    Is there an A1 leader device, now or planned?

    • If yes, the integration is a device plugin under src/plugins/ with a synthetic backend (like so101_leader or rebot_devarm_leader), plus a small config. The robot meshes are not needed for that.
    • If no, the A1 is the robot being teleoperated, as in feat: add OneRobotics A1 assets and Reach environments isaac-sim/IsaacLab#7446. Isaac Teleop then provides the operator side, for example XR controller poses through the SE3 retargeter or an existing leader arm through JointStateRetargeter(mode="ee_pose"), and the A1 follows those end-effector targets in your Isaac Lab environments or your own controller.

    Your open questions

    1. Is examples/teleop/assets/ acceptable? We'd prefer not to store robot meshes in this repository. Other third-party arms are fetched from a pinned commit and checksum-verified at runtime (see src/python/isaaccapture/viz/robot/assets.py), and the A1 assets are already going through NVIDIA hosting and legal review in feat: add OneRobotics A1 assets and Reach environments isaac-sim/IsaacLab#7446. Ideally Isaac Teleop uses that same copy, so there is one A1 model and one review.
    2. A separate asset repository? Not needed if we use the hosted copy.
    3. Generic consumer or an A1 plugin? That depends on the leader question above.
    4. Is the MJCF acceptable? We'd rather not maintain robot models in this repository. If a Teleop feature ends up rendering the A1, we'd commit a thin wrapper and fetch your MJCF from its upstream home, the way we fetch the reBot model from mujoco_menagerie. Please base it on the A1_2026 revision that Isaac Lab uses.
    5. Right arm or bimanual? The right arm is a good start.

    Once we know which side the A1 is on, I'm happy to review it deeper.

  2. WangXuechun-woan commented on Oct 21, 2026

    @WangXuechun-woan
    Author

    Hi, thank you for clarifying the intended integration shape.

    There is currently no A1 leader device, and we do not have one planned. The A1 is the robot being teleoperated, rather than an operator-side input device.

    Based on your guidance, I will revise the integration as follows:

    • Remove the A1 meshes, URDF, and MJCF files currently packaged under
      examples/teleop/assets/.
    • Remove the A1-to-A1 joint-space mapping based on
      JointStateSource and JointStateRetargeter(mode="joint").
    • Use existing operator-side inputs, such as XR controller poses through an
      SE3 retargeter or an existing leader arm through
      JointStateRetargeter(mode="ee_pose").
    • Treat the resulting end-effector target as the command consumed by the
      OneRobotics A1 Isaac Lab environment or controller.
    • Reuse the hosted A1 asset associated with IsaacLab#7446 when it becomes
      available, rather than maintaining another copy in Isaac Teleop.
    • Start with the A1_2026 right arm.

    Therefore, an A1-specific DeviceIO plugin is not needed. The revised PR will
    focus on a thin integration/configuration example connecting Isaac Teleop
    operator inputs to the A1 right-arm end-effector target.

    Would you prefer that I revise #1292 after the hosted Isaac Lab asset is
    available, or should I first submit the operator-to-A1 target configuration
    without visualization and robot assets?

    Thanks again for the detailed direction.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions