LeRobot documentation
Damiao Motors ve CAN Bus
Damiao Motors ve CAN Bus
Bu kılavuz, CAN bus iletişimi üzerinden LeRobot ile Damiao motorlarının kurulumunu ve kullanımını kapsar.
Şu anda yalnızca Linux desteklenmektedir, çünkü OpenArms CAN adaptörünün sürücüleri yalnızca Linux için mevcuttur.
Linux CAN Kurulumu
Damiao motorlarını kullanmadan önce, Linux sisteminizde CAN arayüzünü yapılandırmalısınız.
CAN Yardımcılarını Yükle
sudo apt-get install can-utilsCAN Arayüzünü Yapılandır (Manuel)
Standart CAN FD için (OpenArms için önerilir):
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 upStandart CAN (FD olmadan) için:
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 upCAN Arayüzünü Yapılandır (LeRobot Kullanarak)
LeRobot, CAN arayüzlerini yapılandırmak ve test etmek için bir yardımcı betik sağlar:
# Setup multiple interfaces (e.g., OpenArms Followers with 2 CAN buses)
lerobot-setup-can --mode=setup --interfaces=can0,can1CAN İletişimini Hata Ayıklama
Motor iletişimini test etmek için yerleşik hata ayıklama araçlarını kullanın:
# Test motors on all interfaces
lerobot-setup-can --mode=test --interfaces=can0,can1
# Run speed/latency test
lerobot-setup-can --mode=speed --interfaces=can0Test modu, motorları (ID'ler 0x01-0x08) tarar ve hangilerinin yanıt verdiğini raporlar. Örnek çıktı:
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 foundKullanım
Temel Kurulum
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()Motor Durumlarını Okuma
# 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}, ...}Motor Komutları Yazma
# 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()Yapılandırma Seçenekleri
| Parametre | Varsayılan | Açıklama |
|---|---|---|
port | - | CAN arayüzü (can0) veya seri port (/dev/cu.usbmodem*) |
use_can_fd | True | Daha yüksek veri hızları için CAN FD'yi etkinleştirin |
bitrate | 1000000 | Nominal bit hızı (1 Mbps) |
data_bitrate | 5000000 | CAN FD veri bant genişliği (5 Mbps) |
Motor Yapılandırması
Her motor için şunlar gereklidir:
id: Komut göndermek için CAN kimliğimotor_type: Desteklenen motor türlerinden biri (ör."dm8009","dm4340")recv_id: Yanıtları almak için CAN ID
OpenArms varsayılan kimlikleri şu deseni izler: gönderim kimliği 0x0N, alma kimliği 0x1N burada N ek numarasıdır.
Sorun Giderme
Motorlardan Yanıt Alınamadı
- Güç kontrolü
- Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
- Motor kimliklerini kontrol edin: Damiao Hata Ayıklama Araçlarını kullanarak kimlikleri doğrulayın/yapılandırın
- CAN arayüzünü test edin:
candump can0komutunu çalıştırarak mesajların alınıp alınmadığını kontrol edin - Tanılama çalıştır:
lerobot-setup-can --mode=test --interfaces=can0
Motor Zaman Aşımı Parametresi
Motorlar timeout=0 ile yapılandırıldıysa, komutlara yanıt vermezler. Sıfır olmayan bir zaman aşımı değeri ayarlamak için Damiao Debugging Tools kullanın.
CAN FD Durumunu Doğrula
ip -d link show can0 | grep fd