Skip to main content

PhysicalAI OpenArm Plugin

Direct SocketCAN/Damiao control for OpenArm followers and hand-guided leaders in PhysicalAI. The plugin also registers single-arm and bimanual OpenArm entries in Physical AI Studio.

Safety and support

OpenArm moves powerful physical hardware. Secure each arm, provide clearance, keep an emergency stop accessible, and follow OpenArm's official safety guide. Only Linux SocketCAN is supported. Exactly one process may control a CAN interface at a time: do not concurrently run this plugin with LeRobot, ROS 2, or other CAN clients on the same bus.

This first release assumes hardware setup has already been completed. It does not set motor IDs, write persistent parameters, calibrate, or zero encoders. Before connecting, configure the documented motor IDs, provision CAN/CAN-FD, and complete OpenArm's homing and closed-gripper initialization procedure.

Installation

uv add physicalai-openarm-plugin

The package requires python-can and Linux SocketCAN. OpenArm's default configuration uses CAN-FD at 1 Mbps arbitration and 5 Mbps data rate.

CAN adapters

can_adapter: socketcan is the default and supported route. Use a Linux SocketCAN channel such as can0; a USB-CAN adapter is supported when the host exposes it as a SocketCAN interface. This includes adapters configured through slcand, which usually appear as slcan0 rather than /dev/ttyUSB0.

An experimental can_adapter: damiao proof of concept uses motorbridge to open a Damiao USB-CAN serial adapter directly. Set port to its device path and optionally set dm_serial_baud (default 921600):

port: /dev/ttyACM0
can_adapter: damiao
dm_serial_baud: 921600

This serial path has not been tested with OpenArm's eight-motor topology or CAN-FD timing. Do not use it for unattended motion, and retain SocketCAN as the recommended path until an adapter-specific hardware acceptance test succeeds.

Runtime contract

Positions are degrees, in this fixed order:

joint_1, joint_2, joint_3, joint_4, joint_5, joint_6, joint_7, gripper

Followers require side: left or side: right; the plugin applies the side-specific conservative limits used by LeRobot's OpenArm support. Leaders are read-only and default to torque-disabled manual control. Native bilateral force feedback is not implemented.

Run

Update the can0 and can1 placeholders, then run unilateral teleoperation:

uv run physicalai run --config packages/physicalai-openarm-plugin/examples/runtime/teleop.yaml

For two leaders and two followers on independent CAN interfaces:

uv run physicalai run --config packages/physicalai-openarm-plugin/examples/runtime/bimanual-teleop.yaml

To read and print a leader's joint positions without sending CAN position targets:

uv run physicalai run --config packages/physicalai-openarm-plugin/examples/runtime/read-joints.yaml

Studio assets

The plugin includes lightweight parallel-link gripper URDF visualization models for Studio. They are plugin-authored kinematic visualizations, not redistributed OpenArm CAD or mesh assets. OpenArm software is Apache-2.0; hardware design data has separate CERN-OHL-S-2.0 licensing.

Development

uv sync
uv run pytest packages/physicalai-openarm-plugin/tests/

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

physicalai_openarm_plugin-0.1.0.tar.gz (6.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

physicalai_openarm_plugin-0.1.0-py3-none-any.whl (6.3 MB view details)

Uploaded Python 3

File details

Details for the file physicalai_openarm_plugin-0.1.0.tar.gz.

File metadata

File hashes

Hashes for physicalai_openarm_plugin-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1871529e3de509aa5546a2e349bd8cb0f6402f2fafa32e2e90989fbd39750ea8
MD5 66e7a116b8bfe360d2ee62dfe334ddc3
BLAKE2b-256 9da424cf1f8bfd3807f75a0cc28c0fa3e7a7e77feb8c1b080609bf2da078393a

See more details on using hashes here.

File details

Details for the file physicalai_openarm_plugin-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for physicalai_openarm_plugin-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7d79ef1d34265f8603a4343c4b6017f5eced080b628a3c6160a27da73b12b211
MD5 b19f5dbb069cd4fab06256abdffcc6f6
BLAKE2b-256 aa82da4cdea2a717fb044bed00447b93d32ff8d771303cd08c088dd69a961af3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page