LeRobot documentation
Damiao Motors et Bus CAN
Damiao Motors et Bus CAN
Ce guide couvre la configuration et l'utilisation des moteurs Damiao avec LeRobot via la communication par bus CAN.
Actuellement, seul Linux est pris en charge, car l'adaptateur CAN OpenArms ne dispose de pilotes que pour Linux.
Configuration de CAN sur Linux
Avant d'utiliser les moteurs Damiao, vous devez configurer l'interface CAN sur votre système Linux.
Installer les utilitaires CAN
sudo apt-get install can-utilsConfigurer l’interface CAN (manuel)
Pour le CAN FD standard (recommandé pour 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 upPour le CAN standard (sans FD) :
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 upConfigurer l'interface CAN (en utilisant LeRobot)
LeRobot fournit un script utilitaire pour configurer et tester les interfaces CAN :
# Setup multiple interfaces (e.g., OpenArms Followers with 2 CAN buses)
lerobot-setup-can --mode=setup --interfaces=can0,can1Débogage de la communication CAN
Utilisez les outils de débogage intégrés pour tester la communication des moteurs :
# Test motors on all interfaces
lerobot-setup-can --mode=test --interfaces=can0,can1
# Run speed/latency test
lerobot-setup-can --mode=speed --interfaces=can0Le mode de test va rechercher les moteurs (identifiants 0x01-0x08) et indiquer lesquels répondent. Exemple de sortie :
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 foundUtilisation
Configuration de base
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()Lecture des états moteurs
# 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}, ...}Écriture de commandes moteur
# 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()Options de configuration
| Paramètre | Par défaut | Description |
|---|---|---|
port | - | Interface CAN (can0) ou port série (/dev/cu.usbmodem*) |
use_can_fd | True | Activer CAN FD pour des débits de données plus élevés |
bitrate | 1000000 | Débit nominal (1 Mbps) |
data_bitrate | 5000000 | Débit de données CAN FD (5 Mbps) |
Configuration du moteur
Chaque moteur nécessite :
id: ID CAN pour l'envoi de commandesmotor_type: L'un des types de moteurs pris en charge (par exemple,"dm8009","dm4340")recv_id: identifiant CAN pour la réception des réponses
Les identifiants par défaut d'OpenArms suivent le motif : identifiant d'envoi 0x0N, identifiant de réception 0x1N où N est le numéro de l'articulation.
Dépannage
Aucune réponse des moteurs
- Vérifier l'alimentation
- Verify CAN wiring: Check CAN-H, CAN-L, and GND connections
- Vérifier les identifiants des moteurs : utilisez les outils de débogage Damiao pour vérifier/configurer les identifiants
- Tester l'interface CAN : Exécutez
candump can0pour vérifier si des messages sont reçus - Exécuter les diagnostics :
lerobot-setup-can --mode=test --interfaces=can0
Paramètre de temporisation du moteur
Si les moteurs étaient configurés avec timeout=0, ils ne répondront pas aux commandes. Utilisez les outils de débogage Damiao pour définir une valeur de délai d’attente non nulle.
Vérifier l'état de CAN FD
ip -d link show can0 | grep fd