LeRobot documentation

Damiao Motors ve CAN Bus

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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-utils

CAN 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 up

Standart 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 up

CAN 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,can1

CAN İ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=can0

Test 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 found

Kullanı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

ParametreVarsayılanAçıklama
port-CAN arayüzü (can0) veya seri port (/dev/cu.usbmodem*)
use_can_fdTrueDaha yüksek veri hızları için CAN FD'yi etkinleştirin
bitrate1000000Nominal bit hızı (1 Mbps)
data_bitrate5000000CAN 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ği
  • motor_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ı

  1. Güç kontrolü
  2. Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
  3. Motor kimliklerini kontrol edin: Damiao Hata Ayıklama Araçlarını kullanarak kimlikleri doğrulayın/yapılandırın
  4. CAN arayüzünü test edin: candump can0 komutunu çalıştırarak mesajların alınıp alınmadığını kontrol edin
  5. 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
Update on GitHub