OpenYAM integration¶
OpenYAM uses the generic Damiao whole-body adapter backed by can-motor-control. The adapter owns one upstream robot containing the six-joint arm and its gripper; motor topology is independent of the host operating system.
CAN transport¶
The generic Damiao layer selects the native transport provided by can-motor-control>=0.0.8:
| Host | Default | --can-port override |
|---|---|---|
| Linux | SocketCanBus("can0") | SocketCAN interface, such as can1 |
| macOS | first 1d50:606f gs_usb adapter | USB serial number |
The macOS transport is implemented in Rust with native IOKit access. It does not require PyUSB, libusb, python-can, or the Python gs_usb package.
Logical buses are ordered. Without explicit selectors, a future two-bus Damiao robot maps to can0/can1 on Linux and gs_usb indices 0/1 on macOS. Production multi-arm deployments should configure USB serial numbers because enumeration order is not a stable device identity.
List the selectors accepted on the current host:
On Linux this prints SocketCAN network-interface names. Configure each physical interface before use:
On macOS, connect a gs_usb/candleLight-compatible adapter with USB ID 1d50:606f for each arm. No SocketCAN interface or extra USB library is needed. The motor buses still require CAN-H/CAN-L wiring, motor power, and correct bus termination. To assign sides reliably, connect one adapter at a time, run the list command, record and label its USB serial, then repeat for the other arm. Adapters used together must expose unique serial numbers.
Run¶
Use the default CAN device:
Select another Linux SocketCAN interface:
Select a macOS adapter by USB serial number:
The dual-arm Quest blueprint is identical on both operating systems; only the selector values differ:
# Linux
dimos run teleop-quest-dual-openyam --left-can-port can0 --right-can-port can1
# macOS
dimos run teleop-quest-dual-openyam \
--left-can-port <LEFT-USB-SERIAL> \
--right-can-port <RIGHT-USB-SERIAL>
Linux interfaces must already be configured for classical CAN at 1 Mbit/s. The native macOS transport configures the adapter bitrate directly.
Hardware topology¶
| Motor | Send ID | Reply ID | Type |
|---|---|---|---|
| joint1–3 | 0x01–0x03 | send ID + 0x10 | DM4340 |
| joint4–6 | 0x04–0x06 | send ID + 0x10 | DM4310 |
| gripper | 0x08 | 0x18 | DM4310 |
The bus uses classical CAN at 1 Mbit/s. Opening the gripper decreases motor position. The arm and gripper are exposed together as one whole-body hardware component.
Safety¶
- Keep the workspace clear and the emergency stop reachable during first activation.
- Verify motor IDs and types against the physical unit before commanding large motions; an incorrect type scales velocity and torque incorrectly.
- Deactivation removes motor torque, so support the arm before stopping it.