LeRobot documentation

Damiao Motors e CAN Bus

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 e CAN Bus

Este guia aborda a configuração e o uso dos motores Damiao com o LeRobot via comunicação por barramento CAN.

Atualmente, apenas o Linux é suportado, pois o adaptador CAN do OpenArms possui drivers apenas para Linux.

Configuração do CAN no Linux

Antes de usar os motores Damiao, você precisa configurar a interface CAN no seu sistema Linux.

Instalar CAN Utilities

sudo apt-get install can-utils

Configure a interface CAN (manual)

Para CAN FD padrão (recomendado para 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

Para CAN padrão (sem FD):

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

Configure a interface CAN (usando LeRobot)

LeRobot fornece um script de utilitário para configurar e testar interfaces CAN:

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

Depuração da comunicação CAN

Use as ferramentas de depuração integradas para testar a comunicação do motor:

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

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

O modo de teste irá procurar por motores (IDs 0x01-0x08) e relatar quais deles respondem. Exemplo de saída:

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

Uso

Configuração Básica

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

Lendo Estados do Motor

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

Escrevendo Comandos de Motor

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

Opções de Configuração

ParâmetroPadrãoDescrição
port-Interface CAN (can0) ou porta serial (/dev/cu.usbmodem*)
use_can_fdTrueAtive o CAN FD para taxas de dados mais altas
bitrate1000000Taxa de bits nominal (1 Mbps)
data_bitrate5000000Taxa de bits dos dados CAN FD (5 Mbps)

Configuração do Motor

Cada motor requer:

  • id: ID do CAN para envio de comandos
  • motor_type: Um dos tipos de motor suportados (por exemplo, "dm8009", "dm4340")
  • recv_id: ID CAN para receber respostas

Os IDs padrão do OpenArms seguem o padrão: ID de envio 0x0N, ID de recepção 0x1N, onde N é o número da junta.

Solução de problemas

Sem resposta dos motores

  1. Verificar energia
  2. Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
  3. Verificar IDs dos motores: Use as Ferramentas de Depuração Damiao para verificar/configurar IDs
  4. Testar a interface CAN: execute candump can0 para verificar se as mensagens estão sendo recebidas
  5. Executar diagnósticos: lerobot-setup-can --mode=test --interfaces=can0

Parâmetro de Tempo Limite do Motor

Se os motores foram configurados com timeout=0, eles não responderão aos comandos. Use as Ferramentas de Depuração do Damiao para definir um valor de timeout diferente de zero.

Verificar o status do CAN FD

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