OpenArm is an open-source 7DOF humanoid arm designed for physical AI research and deployment in contact-rich environments. With high backdrivability and compliance, it is built with safe human-robot interaction in mind while delivering practical payload capabilities for real-world applications.
OpenArm Cell (on the right) is a standardized environment with unified background, lighting, and camera placement. Research performed using OpenArm can be reproduced around the world in consistent evaluation conditions, facilitating the global discussion on state of the art physical AI research.
OpenArm features human-scale proportions, safety and compliance, and practical payloads. At $6,500 USD for a complete bimanual system, it provides a flexible platform for teleoperation, imitation learning, simulation, and real-world data collection in contact-rich tasks.
We're in continuous development and actively seeking contributors, research partners, and company collaborators to shape the next generation of practical humanoid systems. Ready to join the future of open-source robotics?
Get your OpenArm, assembled or DIY, and join the global community!
Browse verified and certified manufacturers worldwide.
| Platform | Description | Link |
|---|---|---|
| Website | Project homepage and media | openarm.dev |
| Documentation | Complete technical guides | docs.openarm.dev |
| Discord | Community discussions | Join Discord |
| Contact | Direct communication | openarm@enactic.ai |
| Repository | Documentation | License | Description |
|---|---|---|---|
| openarm_hardware | Hardware Docs | CERN-OHL-S-2.0 | Complete CAD data: STL files, STEP files, Fusion 360 assemblies |
| openarm_description | Description Docs | Apache-2.0 | Robot description files with URDF/xacro for simulation |
| openarm_can | CAN Docs | Apache-2.0 | CAN control library for low-level motor communication |
| openarm_ros2 | ROS2 Docs | Apache-2.0 | ROS2 integration packages and nodes |
| openarm_teleop | Teleop Docs | Apache-2.0 | Teleoperation packages with unilateral and bilateral control |
| openarm_isaac_lab | Isaac Docs | Apache-2.0 | Isaac Lab simulation environment and training tasks |
| openarm_mujoco | MuJoCo Docs | Apache-2.0 | MuJoCo specification files and assets for OpenArm |
| openarm_dataset | Dataset Docs | Apache-2.0 | Dataset format, recording tools, and Python API |
| dora-openarm | Dora Docs | Apache-2.0 | Dora dataflow nodes for data collection, inference, and teleop |
The simulation/ package adds an intent-controlled model of the complete
OpenArm 2.0 bimanual assembly. It imports the collision geometry and
kinematics from a pinned OpenArm Description revision without modifying or
redistributing those files.
With Python 3.11 or later and solid-node with its viewer extra installed, run:
python simulation/tools/fetch_sources.py
solid build
solid developThe fetch helper checks out OpenArm Description commit
1fba2cbc05001f05b4514120b70130b4ac06f409 under the ignored .vendor/
directory and verifies its licence and generated OpenArm 2.0 URDF. solid build publishes _build/viewer.json; solid develop opens the complete
interactive assembly. The untouched timeline starts in Rest geometry and
waves the left wrist. Trigger the Rest instruction to settle that motion.
The root control surface describes intent rather than exposing 18 physical joint ports:
| Driver | Effect |
|---|---|
reach |
Couples both elbows from bent to extended |
elevation |
Raises both arms |
spread |
Opens the arms away from the centreline |
arm_twist |
Counter-rotates the upper arms |
wrist_pitch |
Pitches both wrists |
wrist_roll |
Counter-rotates the two wrists |
grip |
Closes both two-finger pinch grippers |
wave |
Sets the time-dependent left-wrist wave amplitude |
Six two-second instructions demonstrate the machine: Rest, Ready,
Present, Reach, Wave, and Grasp. The intermediate models provide a
ground-up inspection sequence:
solid build simulation/parts.py:Body
solid build simulation/gripper.py:GrippersAtThirtyDegrees
solid build simulation/arm.py:ArmsAtRest
solid buildRun the exact contract suite one node file at a time:
solid test simulation/test_parts.py --exact
solid test simulation/test_arm.py --exact
solid test simulation/test_gripper.py --exact
solid test simulation/test_openarm.py --exactReproduce the reviewed WebGL evidence with:
solid snapshot --renderer web --time 0 --autocenter --viewall --imgsize 1400x1000 -o snapshot-rest.png
solid snapshot --renderer web --time 0.25 --autocenter --viewall --imgsize 1400x1000 -o snapshot-wave.png
solid snapshot --renderer web --time 0 --camera 3000,0,400,0,0,400 --imgsize 1400x1000 -o snapshot-front.pngThis is an assembly simulation, not manufacturing output. The source body
mesh is authored in millimetres but scaled to metres by the URDF; the arm and
gripper meshes are authored in metres. The model normalizes both to
solid-node millimetres, applies the URDF's selected left-hand reflections,
and models joint 7 as the gripper's wrist transform because it has no separate
link mesh. A named 0.05 mm finger seat gap removes coincident-face Boolean
noise. The upstream link 5/link 6 and gripper-base/finger intersections are
measured and bounded rather than hidden; see
docs/measurements.md for the readings and mutation
evidence. The separate openarm_hardware manufacturing CAD is not consumed.
All participation in the OpenArm project is governed by our Code of Conduct.
