LeRobot documentation
Damiao Motors dan CAN Bus
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-utilsKonfigurasi 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 upUntuk CAN standar (tanpa FD):
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 upKonfigurasi 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,can1Debugging 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=can0Mode 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 foundPenggunaan
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
| Parameter | Default | Deskripsi |
|---|---|---|
port | - | Antarmuka CAN (can0) atau port serial (/dev/cu.usbmodem*) |
use_can_fd | True | Aktifkan CAN FD untuk laju data yang lebih tinggi |
bitrate | 1000000 | Bitrate nominal (1 Mbps) |
data_bitrate | 5000000 | Laju bit data CAN FD (5 Mbps) |
Konfigurasi Motor
Setiap motor membutuhkan:
id: CAN ID untuk mengirim perintahmotor_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
- Periksa daya
- Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
- Periksa ID motor: Gunakan Damiao Debugging Tools untuk memverifikasi/mengonfigurasi ID
- Uji antarmuka CAN: Jalankan
candump can0untuk melihat apakah pesan diterima - 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