The complete SDK installation reference is at hardware/dk1/software. This unit covers the bimanual-specific configuration steps that go beyond the single-arm SDK install you may have done for OpenArm.
Install the DK1 SDK
The DK1 SDK is separate from the OpenArm SDK. Do not attempt to run DK1 arms with the OpenArm package — the firmware protocol differs.
Configure the Leader/Follower Pairing
The SDK reads a YAML configuration file that tells it which serial device is the leader and which devices are the two follower arms. You must specify device paths in the correct order — the SDK does not auto-detect role assignment.
The key fields in dk1-config.yaml:
/dev/ttyUSBN depends on USB port order, which can change between reboots. To create stable aliases, use udev rules keyed on the device serial number. Run udevadm info /dev/ttyUSB0 to find the serial for each arm and create rules in /etc/udev/rules.d/99-dk1.rules. This is covered in detail at hardware/dk1/software.
Python Connection Test — Both Arms
After editing the config, run a connection test that exercises all three devices simultaneously:
A successful run prints 10 pairs of joint state arrays with consistent, stable values. If you see NaN values, a timeout error, or fewer than 6 joint values per arm, check the device path assignments in your config file.
Sync Verification
The most important check in this unit is verifying that leader motion produces synchronized follower response with no perceptible lag:
Move the leader arm slowly through a 30° arc on a single joint. Both follower arms should move in unison with no visible delay. If one follower lags behind the other by more than a half-second, check the latency_tolerance_ms setting and verify the slow arm's USB connection.
Common Errors and Fixes
| Error | Cause | Fix |
|---|---|---|
SerialException: device not found |
Wrong device path in config, or USB not connected | Run ls /dev/ttyUSB* and update config paths. Check physical USB connections. |
SyncTimeoutError: follower_right |
Right follower arm not responding within latency tolerance | Increase latency_tolerance_ms to 10, or try a different USB port. Check cable for damage. |
| Joint states all zeros after connect | Servos not enabled — arm is in standby mode | Call robot.enable_servos() before reading joint states, or enable via the web UI first. |
| One follower mirrors, other is stationary | Leader is paired only to one follower in config | Verify both follower_left and follower_right are set in the YAML config. |
Unit 2 Complete When...
The DK1 SDK is installed and dk1.__version__ returns 0.4.0 or higher. The connection test prints stable joint state values for both arms at 50Hz. When you start a leader/follower session and move the leader arm, both follower arms mirror the motion with no perceptible lag. You have verified this with at least 3 different joint motions on the leader arm.