LeRobot documentation
OpenArm
OpenArm
OpenArm est un bras humanoïde 7 DOF open source conçu pour la recherche et le déploiement en IA physique.
Pour obtenir votre OpenArm, assemblé ou en kit, et rejoindre la communauté mondiale, parcourez les fabricants vérifiés et certifiés à travers le monde sur openarm.dev.
Qu'est-ce qui est unique ?
Conception à l'échelle humaine : OpenArm est conçu avec des proportions anthropomorphes, dimensionné pour une personne d'environ 160 à 165 cm de taille. Cela offre un équilibre optimal entre une portée pratique et une inertie maîtrisable pour un fonctionnement sûr et réactif.
Architecture axée sur la sécurité : Conçu avec des moteurs rétroactionnables QDD et une haute compliance, OpenArm privilégie une interaction sûre entre l'humain et le robot tout en conservant des capacités de charge utiles (6,0 kg en pointe / 4,1 kg nominales) pour des tâches réelles.
Conçu pour durer : Les composants structurels critiques sont fabriqués en aluminium et en acier inoxydable, garantissant des performances robustes pour la collecte répétée de données et l'utilisation continue en recherche.
Entièrement accessible et réalisable : chaque composant, des pièces CNC et boîtiers imprimés en 3D au câblage électrique, est conçu pour être achetable et réalisable par des chercheurs individuels et des laboratoires, avec des données de fabrication complètes fournies.
Pratique et abordable : À 6 500 USD pour un système bimanuel complet, OpenArm offre des capacités de niveau recherche pour une fraction du coût des robots humanoïdes traditionnels.
Exigences de la plateforme
**Linux Only**: OpenArm currently only works on Linux. The CAN bus USB adapter does not have macOS drivers and has not been tested on Windows.
Guide de sécurité
Avant d'utiliser OpenArm, veuillez lire le guide de sécurité officiel. Points clés :
- Installation sécurisée : Fixez le bras à une surface plane et stable à l'aide de vis ou de pinces
- Distance de sécurité : Gardez les parties du corps et les objets hors de la portée de mouvement pendant le fonctionnement
- Équipement de protection : Portez toujours des lunettes de sécurité ; utilisez un EPI supplémentaire si nécessaire
- Limites de charge utile : Ne pas dépasser les limites de charge utile spécifiées (6,0 kg au pic / 4,1 kg nominaux par bras)
- Arrêt d'urgence : Connaître l'emplacement et le fonctionnement du dispositif d'arrêt d'urgence
- Inspection régulière : Vérifiez la présence de vis desserrées, de limites mécaniques endommagées, de bruits inhabituels et de dommages au câblage
Configuration matérielle
Suivez la documentation matérielle officielle d'OpenArm pour :
- Liste des matériaux et approvisionnement
- Instructions d’impression 3D
- Assemblage mécanique
- Câblage électrique
Les dépôts de matériel sont disponibles sur github.com/enactic/openarm.
Configuration du bus CAN
OpenArm utilise la communication par bus CAN avec des moteurs Damiao. Une fois l’adaptateur USB du bus CAN branché sur votre PC Linux, suivez le guide Damiao Motors et bus CAN pour configurer l’interface.
Installation rapide :
# Setup CAN interfaces
lerobot-setup-can --mode=setup --interfaces=can0,can1
# Test motor communication
lerobot-setup-can --mode=test --interfaces=can0,can1Installer LeRobot 🤗
Suivez notre Guide d’installation, puis installez le support du moteur Damiao :
pip install -e ".[damiao]"Utilisation
Bras suiveur (robot)
lerobot-calibrate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_followerfrom lerobot.robots.openarm_follower import OpenArmFollower, OpenArmFollowerConfig
config = OpenArmFollowerConfig(
port="can0",
side="right", # or "left" for left arm
id="my_openarm_follower",
)
follower = OpenArmFollower(config)
follower.connect()
# Read current state
obs = follower.get_observation()
print(obs)
# Send action (position in degrees)
action = {
"joint_1.pos": 0.0,
"joint_2.pos": 0.0,
"joint_3.pos": 0.0,
"joint_4.pos": 45.0,
"joint_5.pos": 0.0,
"joint_6.pos": 0.0,
"joint_7.pos": 0.0,
"gripper.pos": 0.0,
}
follower.send_action(action)
follower.disconnect()Bras leader (Téléopérateur)
Le bras leader est utilisé pour la téléopération, c'est-à-dire pour le déplacer manuellement afin de contrôler le bras suiveur.
lerobot-calibrate \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leaderfrom lerobot.teleoperators.openarm_leader import OpenArmLeader, OpenArmLeaderConfig
config = OpenArmLeaderConfig(
port="can1",
id="my_openarm_leader",
manual_control=True, # Disable torque for manual movement
)
leader = OpenArmLeader(config)
leader.connect()
# Read current position (as action to send to follower)
action = leader.get_action()
print(action)
leader.disconnect()Téléopération
Pour téléopérer OpenArm avec un contrôle maître-esclave :
lerobot-teleoperate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leaderUtilisez les mêmes --robot.id et --teleop.id que lors de l'étalonnage, afin que LeRobot trouve les fichiers d'étalonnage.
Téléopération bimanuelle
Pour téléopérer un setup OpenArm bimanuel avec deux bras leaders et deux bras followers :
lerobot-teleoperate \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can0 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can1 \
--robot.right_arm_config.side=right \
--robot.id=my_bimanual_follower \
--teleop.type=bi_openarm_leader \
--teleop.left_arm_config.port=can2 \
--teleop.right_arm_config.port=can3 \
--teleop.id=my_bimanual_leaderEnregistrement des données
Pour enregistrer un jeu de données lors d'une téléopération :
lerobot-record \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leader \
--dataset.repo_id=${HF_USER}/my_openarm_dataset \
--dataset.single_task="Describe your task here" \
--dataset.fps=30 \
--dataset.num_episodes=10lerobot-record ajoute la date et l’heure de la session au nom du jeu de données, qui est donc enregistré sous my_hf_username/my_openarm_dataset_YYYYMMDD_HHMMSS. Consultez le guide d’enregistrement pour les caméras, les contrôles clavier et le reste du flux de travail.
Options de configuration
Configuration du suiveur
| Paramètre | Par défaut | Description |
|---|---|---|
port | - | Interface CAN (par exemple, can0) |
side | None | Côté bras : "left", "right" ou None pour des limites personnalisées |
use_can_fd | True | Activer CAN FD pour des débits de données plus élevés |
can_bitrate | 1000000 | Débit nominal (1 Mbps) |
can_data_bitrate | 5000000 | Débit de données CAN FD (5 Mbps) |
max_relative_target | None | Limite de sécurité pour les positions cibles relatives |
position_kp | Par articulation | Gains proportionnels de contrôle de position |
position_kd | Par articulation | Gains dérivés de contrôle de position |
Configuration du leader
| Paramètre | Par défaut | Description |
|---|---|---|
port | - | Interface CAN (par exemple, can1) |
manual_control | True | Désactiver le couple pour le mouvement manuel |
use_can_fd | True | Activer CAN FD pour des débits de données plus élevés |
can_bitrate | 1000000 | Débit nominal (1 Mbps) |
can_data_bitrate | 5000000 | Débit de données CAN FD (5 Mbps) |
Configuration du moteur
OpenArm utilise des moteurs Damiao avec la configuration par défaut suivante :
| Joint | Type de moteur | Envoyer l'ID | ID de réception |
|---|---|---|---|
| joint_1 (Rotation de l'épaule) | DM8009 | 0x01 | 0x11 |
| joint_2 (Élévation de l'épaule) | DM8009 | 0x02 | 0x12 |
| joint_3 (Rotation de l'épaule) | DM4340 | 0x03 | 0x13 |
| joint_4 (Flexion du coude) | DM4340 | 0x04 | 0x14 |
| joint_5 (Rotation du poignet) | DM4310 | 0x05 | 0x15 |
| joint_6 (Inclinaison du poignet) | DM4310 | 0x06 | 0x16 |
| joint_7 (Rotation du poignet) | DM4310 | 0x07 | 0x17 |
| gripper | DM4310 | 0x08 | 0x18 |
Dépannage
Aucune réponse des moteurs
- Vérifier les connexions de l'alimentation
- Verify CAN wiring (CAN-H, CAN-L, GND)
- Lancer les diagnostics :
lerobot-setup-can --mode=test --interfaces=can0 - Consultez le guide de dépannage Damiao pour plus de détails
Interface CAN introuvable
Vérifiez que l'interface CAN est configurée :
ip link show can0