Skip to content
View as markdown

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:

dimos hardware can list

On Linux this prints SocketCAN network-interface names. Configure each physical interface before use:

dimos hardware can setup can0
dimos hardware can setup can1

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:

dimos run coordinator-openyam

Select another Linux SocketCAN interface:

dimos --can-port can1 run coordinator-openyam

Select a macOS adapter by USB serial number:

dimos --can-port <USB-SERIAL> run coordinator-openyam

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 0x010x03 send ID + 0x10 DM4340
joint4–6 0x040x06 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.