LeRobot documentation

Damiao MotorsとCANバス

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
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