Skip to main content
OpenArm is a 7-DOF robotic arm that uses high-performance Damiao motors with CAN-FD communication. It’s designed for research and development with precise control and modular design.

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

  1. Connect CAN interface to your computer
    • Linux: Use USB-to-CAN adapter (e.g., PEAK, Kvaser)
    • Set up SocketCAN interface
  2. Configure CAN interface:
  1. Install CAN utilities:

Software Installation

Python-CAN library is installed automatically for CAN communication.

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

Note that joint_2 has different limits for left and right arms. Always specify side or provide custom limits.

MIT Control Mode

OpenArm uses MIT (torque-based) control mode:
Gain Guidelines:
  • 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

Robot Overview

See all supported robots

Damiao Motors

Damiao motor bus API

CAN Communication

CAN-FD setup and configuration

Recording Data

Record manipulation data

External Resources