LeRobot documentation
Damiao Motors và CAN Bus
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-utilsCấ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 upCấ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,can1Gỡ 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=can0Chế độ 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 foundCá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 định | Mô tả |
|---|---|---|
port | - | Giao diện CAN (can0) hoặc cổng nối tiếp (/dev/cu.usbmodem*) |
use_can_fd | True | Bật CAN FD để đạt tốc độ truyền dữ liệu cao hơn |
bitrate | 1000000 | Tốc độ bit danh định (1 Mbps) |
data_bitrate | 5000000 | Tố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ệnhmotor_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ơ
- Kiểm tra nguồn điện
- Kiểm tra dây CAN: Kiểm tra các kết nối CAN-H, CAN-L và GND
- Kiểm tra ID động cơ: Sử dụng Damiao Debugging Tools để xác minh/cấu hình ID
- 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 - 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