LeRobot documentation

Damiao Motors và CAN Bus

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Damiao Motors và CAN Bus

Hướng dẫn này bao gồm việc thiết lập và sử dụng động cơ Damiao với LeRobot thông qua giao tiếp bus CAN.

Hiện tại, chỉ có Linux được hỗ trợ, vì bộ điều hợp CAN của OpenArms chỉ có trình điều khiển cho Linux.

Cài đặt CAN trên Linux

Trước khi sử dụng động cơ Damiao, bạn cần thiết lập giao diện CAN trên hệ thống Linux của mình.

Cài đặt Tiện ích CAN

sudo apt-get install can-utils

Cấu hình giao diện CAN (Thủ công)

Đối với CAN FD tiêu chuẩn (khuyến nghị cho 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

Đối với CAN tiêu chuẩn (không có FD):

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

Cấu hình giao diện CAN (Sử dụng LeRobot)

LeRobot cung cấp một script tiện ích để thiết lập và kiểm tra các giao diện CAN:

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

Gỡ lỗi giao tiếp CAN

Sử dụng các công cụ gỡ lỗi tích hợp để kiểm tra liên lạc động cơ:

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

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

Chế độ kiểm tra sẽ quét các động cơ (ID 0x01-0x08) và báo cáo những động cơ nào phản hồi. Ví dụ về đầu ra:

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

Cách sử dụng

Cài đặt cơ bản

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()

Đọc Trạng Thái Động Cơ

# 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}, ...}

Viết Lệnh Điều Khiển Động Cơ

# 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()

Tùy chọn cấu hình

Tham sốMặc địnhMô tả
port-Giao diện CAN (can0) hoặc cổng nối tiếp (/dev/cu.usbmodem*)
use_can_fdTrueBật CAN FD để đạt tốc độ truyền dữ liệu cao hơn
bitrate1000000Tốc độ bit danh định (1 Mbps)
data_bitrate5000000Tốc độ bit dữ liệu CAN FD (5 Mbps)

Cấu hình động cơ

Mỗi động cơ yêu cầu:

  • id: ID CAN để gửi lệnh
  • motor_type: Một trong các loại động cơ được hỗ trợ (ví dụ: "dm8009", "dm4340")
  • recv_id: ID CAN để nhận phản hồi

ID mặc định của OpenArms tuân theo mẫu: ID gửi 0x0N, ID nhận 0x1N trong đó N là số khớp.

Xử lý sự cố

Không có phản hồi từ động cơ

  1. Kiểm tra nguồn điện
  2. Kiểm tra dây CAN: Kiểm tra các kết nối CAN-H, CAN-L và GND
  3. Kiểm tra ID động cơ: Sử dụng Damiao Debugging Tools để xác minh/cấu hình ID
  4. Thử nghiệm giao diện CAN: Chạy candump can0 để xem liệu các thông điệp có được nhận hay không
  5. Chạy chẩn đoán: lerobot-setup-can --mode=test --interfaces=can0

Tham số Hết thời gian của Motor

Nếu các động cơ được cấu hình với timeout=0, chúng sẽ không phản hồi với các lệnh. Hãy sử dụng Damiao Debugging Tools để đặt một giá trị timeout khác 0.

Xác minh trạng thái CAN FD

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