BaseROS2Driver: the driver forwards joint feedback into Cyberwave over MQTT and accepts teleop/planning commands back from the cloud.
This page has two parts:
- First-time hardware setup — bring the physical arm up on its edge computer (mostly the official OpenArm docs).
- Connect to Cyberwave — register the driver on a twin and stream it into the platform.
If you only need the driver framework (lifecycle,
from_ros forwarding, hooks), read BaseROS2Driver first. This page is the hardware- and platform-specific wrapper around it.Part 1 — First-time OpenArm setup
Follow the official OpenArm Setup Guide as the source of truth. The steps below summarize the path validated on Cyberwave edge hardware.1. Edge computer
The reference edge computer is an NVIDIA Jetson Orin Nano on JetPack 6.x:- JetPack 6 is built on Ubuntu 22.04 LTS → use ROS 2 Humble (the native distro for 22.04).
- Flash the official JetPack SD card image with Etcher, then update the base system:
2. Wiring and power
Follow the OpenArm Power & CAN wiring guide. Each arm communicates over a CAN FD bus; a bimanual setup uses two CAN channels (one per arm), and leader–follower teleop uses up to four.3. CAN bus
Install CAN tooling from the OpenArm PPA:can1 (and can2/can3 for leader–follower). Verify traffic:
USB‑CAN adapters can enumerate in a different order across reboots or USB ports, which swaps
can0/can1. If the arms behave as if mirrored, re-seat the adapters in a known plug-in order and re-verify. Adapter driver setup on Jetson (e.g. PEAK) can require extra kernel steps — see the OpenArm CAN docs.4. Verify the motors
Confirm each joint answers on its CAN ID (response ID = command ID +0x10):
5. ROS 2 Humble + OpenArm packages
Install ROS 2 Humble (official instructions), then the OpenArm ROS 2 stack:Part 2 — Connect to Cyberwave
Cyberwave ships the OpenArm driver as a Docker image managed by Edge Core. The driver:- streams
/joint_statesand telemetry into Cyberwave MQTT (source_type: edge), - accepts controller assignments (teleop / planning) from the cloud,
- hot-switches between local operation (physical leader arm drives the follower) and remote operation (cloud/teleop drives the arm) without restarts.
Prerequisites
- A twin for the OpenArm in your Cyberwave environment (created from the OpenArm catalog asset).
- A Cyberwave API key for that workspace.
- Edge Core installed on the arm’s edge computer — see Cyberwave Edge.
Register the driver on the twin
Drivers are registered in a twin’smetadata.drivers (Environment view → Advanced editing). See Drivers → How to use drivers for the general pattern.
/dev, /sys, /lib/modules mounts let the container manage the host CAN interfaces. Edge Core auto-injects CYBERWAVE_API_KEY, CYBERWAVE_TWIN_UUID, MQTT connection settings, and child-twin UUIDs — you do not put secrets in metadata.
Environment variables
When running the container directly (for local debugging), supply the platform connection via env vars. Use placeholders — never commit real keys or UUIDs.Under Edge Core these are injected automatically from the edge credentials — the manual exports above are only for standalone
docker run debugging.Run the container (standalone debug)
Operation modes
The OpenArm driver bridges Cyberwave operation modes to the ROS 2 lifecycle:
A twin with no controller assigned streams telemetry but stays idle — assigning a controller in Cyberwave activates the matching mode. You can also switch modes by publishing a controller-change command to the twin’s command topic:
Troubleshooting
For lifecycle-level issues (hangs at Waiting for ROS lifecycle ACTIVE, missing
from_ros forwards), see the BaseROS2Driver troubleshooting table.
Related
BaseROS2Driver
The ROS 2 driver base this driver is built on.
Drivers
Registering drivers on a twin, platform keys, GPU.
Cyberwave Edge
Installing Edge Core on the arm’s edge computer.
OpenArm official docs
Hardware, wiring, CAN, and ROS 2 reference.