LeRobot documentation

Damiao MotorsとCANバス

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Damiao MotorsとCANバス

このガイドでは、CANバス通信を介してLeRobotでDamiaoモーターを設定し、使用する手順について説明します。

現在、OpenArms CANアダプターにはLinux用のドライバのみが用意されているため、Linuxのみがサポートされています。

Linux CAN セットアップ

Damiaoモーターを使用する前に、Linuxシステム上でCANインターフェースを設定する必要があります。

CAN Utilitiesのインストール

sudo apt-get install can-utils

CANインターフェースの構成(手動)

標準的なCAN FDの場合(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

標準CAN(FDなし)の場合:

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

CANインターフェースの構成(LeRobotを使用)

LeRobotには、CANインターフェースのセットアップとテストを行うユーティリティスクリプトが提供されています:

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

CAN通信のデバッグ

組み込みのデバッグツールを使用して、モーター通信をテストします:

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

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

テストモードでは、モーター(ID 0x01-0x08)をスキャンし、応答するモーターを報告します。出力例:

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

使用方法

基本的なセットアップ

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

モーター状態の読み取り

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

モーターコマンドの作成

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

設定オプション

パラメータデフォルト説明
port-CANインターフェース(can0)またはシリアルポート(/dev/cu.usbmodem*)
use_can_fdTrue高速なデータレートを実現するためにCAN FDを有効にする
bitrate1000000公称ビットレート (1 Mbps)
data_bitrate5000000CAN FD データビットレート (5 Mbps)

モーター設定

各モーターには以下が必要です:

  • id: コマンド送信用の CAN ID
  • motor_type: 対応するモータータイプのいずれか(例: "dm8009"、"dm4340")
  • recv_id: 応答の受信に使用する CAN ID

OpenArmsのデフォルトIDは、送信IDが0x0N、受信IDが0x1Nというパターンに従います。ここでNは関節番号です。

トラブルシューティング

モーターからの応答なし

  1. 電力を確認する
  2. Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
  3. モーターIDの確認: Damiao Debugging Toolsを使用してIDを確認/設定します
  4. CANインターフェースのテスト: candump can0を実行して、メッセージが受信されているか確認します
  5. 診断を実行する: lerobot-setup-can --mode=test --interfaces=can0

モーターのタイムアウトパラメータ

モーターがtimeout=0で設定されている場合、コマンドに応答しません。Damiao Debugging Toolsを使用して、ゼロ以外のタイムアウト値を設定してください。

CAN FDステータスの確認

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