LeRobot documentation

Damiao Motors dan CAN Bus

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Damiao Motors dan CAN Bus

Panduan ini membahas pengaturan dan penggunaan motor Damiao dengan LeRobot melalui komunikasi bus CAN.

Saat ini, hanya Linux yang didukung, karena adapter CAN OpenArms hanya memiliki driver untuk Linux.

Pengaturan CAN Linux

Sebelum menggunakan motor Damiao, Anda perlu mengatur antarmuka CAN pada sistem Linux Anda.

Install Utilitas CAN

sudo apt-get install can-utils

Konfigurasi Antarmuka CAN (Manual)

Untuk CAN FD standar (disarankan untuk OpenArms):

sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up

Untuk CAN standar (tanpa FD):

sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up

Konfigurasi Antarmuka CAN (Menggunakan LeRobot)

LeRobot menyediakan skrip utilitas untuk mengatur dan menguji antarmuka CAN:

# Setup multiple interfaces (e.g., OpenArms Followers with 2 CAN buses)
lerobot-setup-can --mode=setup --interfaces=can0,can1

Debugging Komunikasi CAN

Gunakan alat debug bawaan untuk menguji komunikasi motor:

# Test motors on all interfaces
lerobot-setup-can --mode=test --interfaces=can0,can1

# Run speed/latency test
lerobot-setup-can --mode=speed --interfaces=can0

Mode pengujian akan memindai motor (ID 0x01-0x08) dan melaporkan mana yang merespons. Contoh output:

can0: UP (CAN FD)
  Motor 0x01 (joint_1): ✓ FOUND
    → Response 0x11 [FD]: 00112233...
  Motor 0x02 (joint_2): ✓ FOUND
  Motor 0x03 (joint_3): ✗ No response
  ...
  Summary: 2/8 motors found

Penggunaan

Pengaturan Dasar

from lerobot.motors import Motor
from lerobot.motors.damiao import DamiaoMotorsBus

# Define your motors with send/receive CAN IDs
motors = {
    "joint_1": Motor(id=0x01, motor_type_str="dm8009", recv_id=0x11),
    "joint_2": Motor(id=0x02, motor_type_str="dm4340", recv_id=0x12),
    "joint_3": Motor(id=0x03, motor_type_str="dm4310", recv_id=0x13),
}

# Create the bus
bus = DamiaoMotorsBus(
    port="can0",  # Linux socketcan interface
    motors=motors,
)

# Connect
bus.connect()

Membaca Status Motor

# Read single motor position (degrees)
position = bus.read("Present_Position", "joint_1")

# Read from multiple motors
positions = bus.sync_read("Present_Position")  # All motors
positions = bus.sync_read("Present_Position", ["joint_1", "joint_2"])

# Read all states at once (position, velocity, torque)
states = bus.sync_read_all_states()
# Returns: {'joint_1': {'position': 45.2, 'velocity': 1.3, 'torque': 0.5}, ...}

Menulis Perintah Motor

# Enable torque
bus.enable_torque()

# Set goal position (degrees)
bus.write("Goal_Position", "joint_1", 45.0)

# Set positions for multiple motors
bus.sync_write("Goal_Position", {
    "joint_1": 45.0,
    "joint_2": -30.0,
    "joint_3": 90.0,
})

# Disable torque
bus.disable_torque()

Opsi Konfigurasi

ParameterDefaultDeskripsi
port-Antarmuka CAN (can0) atau port serial (/dev/cu.usbmodem*)
use_can_fdTrueAktifkan CAN FD untuk laju data yang lebih tinggi
bitrate1000000Bitrate nominal (1 Mbps)
data_bitrate5000000Laju bit data CAN FD (5 Mbps)

Konfigurasi Motor

Setiap motor membutuhkan:

  • id: CAN ID untuk mengirim perintah
  • motor_type: Salah satu jenis motor yang didukung (misalnya, "dm8009", "dm4340")
  • recv_id: CAN ID untuk menerima respons

ID default OpenArms mengikuti pola: ID kirim 0x0N, ID terima 0x1N di mana N adalah nomor sendi.

Pemecahan Masalah

Tidak Ada Respons dari Motor

  1. Periksa daya
  2. Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
  3. Periksa ID motor: Gunakan Damiao Debugging Tools untuk memverifikasi/mengonfigurasi ID
  4. Uji antarmuka CAN: Jalankan candump can0 untuk melihat apakah pesan diterima
  5. Jalankan diagnostik: lerobot-setup-can --mode=test --interfaces=can0

Parameter Timeout Motor

Jika motor dikonfigurasi dengan timeout=0, mereka tidak akan merespons perintah. Gunakan Damiao Debugging Tools untuk mengatur nilai timeout yang tidak nol.

Verifikasi Status CAN FD

ip -d link show can0 | grep fd
Update on GitHub