Overview
OpenArm features:- 7 degrees of freedom + gripper
- Damiao motors (DM8009, DM4340, DM4310)
- CAN-FD communication
- MIT control mode (position, velocity, torque)
- Left and right arm configurations
- High-performance manipulation
Features
- Motors: 4 different Damiao motor types for optimal joint performance
- Communication: CAN-FD (up to 5 Mbps data rate)
- Control: MIT mode with configurable KP/KD gains
- Side-specific: Pre-configured joint limits for left/right arms
- Modular: Expandable hardware design
- High-bandwidth: Fast control loops enabled by CAN-FD
Hardware Specifications
Motor Configuration
OpenArm uses different Damiao motor models optimized for each joint:Motor Models
- DM8009 (DM-J8009P-2EC): High-torque motors for shoulders
- DM4340 / DM4340P: Mid-torque for shoulder rotation and elbow
- DM4310 (DM-J4310-2EC V1.1): Precise control for wrist and gripper
CAN-FD Configuration
- Interface: SocketCAN (Linux), SLCAN (serial), or auto-detect
- Nominal bitrate: 1 Mbps
- Data bitrate: 5 Mbps (CAN-FD)
- Protocol: CAN-FD enabled by default
Installation
Hardware Setup
-
Connect CAN interface to your computer
- Linux: Use USB-to-CAN adapter (e.g., PEAK, Kvaser)
- Set up SocketCAN interface
- Configure CAN interface:
- Install CAN utilities:
Software Installation
Configuration
Left Arm Configuration
Right Arm Configuration
Custom Configuration
Configuration Parameters
str
required
CAN interface name (e.g.,
"can0", "can1" on Linux)str | None
Arm side:
"left", "right", or None for custom limits. When set, uses pre-configured joint limits.str
default:"socketcan"
CAN interface type:
"socketcan" (Linux), "slcan" (serial), or "auto"bool
default:"true"
Enable CAN-FD (required for OpenArm)
int
default:"1000000"
Nominal CAN bitrate (1 Mbps)
int
default:"5000000"
CAN-FD data bitrate (5 Mbps)
list[float]
Position gains for 8 motors [j1-j7, gripper]. Defaults:
[240, 240, 240, 240, 24, 31, 25, 25]list[float]
Velocity gains for 8 motors. Defaults:
[5, 5, 3, 5, 0.3, 0.3, 0.3, 0.3]dict[str, tuple[float, float]]
Joint limits in degrees. Auto-set when
side is specified. Defaults to small safe values if side=None.float | dict[str, float]
Safety limit for maximum position change per action
bool
default:"true"
Disable motor torque on disconnect
Usage
Basic Connection
Observation Format
OpenArm provides comprehensive motor feedback:Action Format
Joint Limits
Left Arm Limits
Right Arm Limits
MIT Control Mode
OpenArm uses MIT (torque-based) control mode:- Higher Kp: Stiffer position control (shoulders: 240)
- Lower Kp: Compliant control (wrists: 24-31)
- Higher Kd: More damping (shoulders: 5.0)
- Lower Kd: Less damping (wrists: 0.3)
Calibration
OpenArm requires calibration on first use:Dual Arm Setup
Troubleshooting
CAN Interface Not Found
CAN-FD Not Enabled
Motors Not Responding
Permission Denied
Wrong Side Configuration
Implementation Details
- Motor bus:
DamiaoMotorsBus - Protocol: CAN-FD with MIT control
- Normalization: Always uses degrees
- Control mode: Position with KP/KD gains
- Source: /home/daytona/workspace/source/src/lerobot/robots/openarm_follower/openarm_follower.py
- Config: /home/daytona/workspace/source/src/lerobot/robots/openarm_follower/config_openarm_follower.py
Related Documentation
Robot Overview
See all supported robots
Damiao Motors
Damiao motor bus API
CAN Communication
CAN-FD setup and configuration
Recording Data
Record manipulation data