🧪 De nouveaux tutoriels arrivent — du bras robotique au capteur
Aller au contenu

Tutoriel du bras SO-ARM101 à 7 axes ​

SO-ARM101 7-DOF · Préparation avant exécution ​

Ce document s'adresse à ceux qui, après avoir transformé le SO-ARM101 de 6 servos en 7 servos, exécutent tout le flux avec LeRobot (calibration → enregistrement → entraînement → déploiement). Code correspondant : ce dépôt (lerobot-7dof), un fork du lerobot officiel qui ne modifie que la configuration des moteurs SO.


0. Vérifiez d'abord votre bras ​

7 servos (tous des STS3215), correspondance entre les ID de servo et les articulations :

ID de servoNom d'articulationRemarque
1shoulder_panRotation horizontale de l'épaule
2shoulder_liftLevée de l'épaule
3elbow_flexFlexion du coude
4wrist_flexInclinaison du poignet (flexion haut/bas)
5wrist_yawLacet du poignet (rotation gauche/droite d'environ 90°) · le servo ajouté cette fois (inséré entre les anciens n° 4 et 5)
6wrist_rollRoulis du poignet · ancien moteur de roulis n° 5, ID 5→6, pièce imprimée inchangée, nom inchangé
7gripperPince · ancien ID=6, décalé à 7 après la modification

Ordre des données articulaires (ordre des dimensions articulaires de action / observation.state dans le Parquet après l'enregistrement) : shoulder_pan → shoulder_lift → elbow_flex → wrist_flex → wrist_yaw → wrist_roll → gripper.

⚠️ Attention : les données, fichiers de calibration et modèles déjà entraînés de la version 6 servos sont incompatibles avec ce dépôt ; il faut tout refaire en suivant les étapes ci-dessous.


1. Quels fichiers remplacer/modifier si vous partez d'un clone du dépôt officiel ​

Option A : utiliser directement le code de ce dépôt (recommandé) ​

lerobot-7dof.zip

Option B : remplacer manuellement après un git clone officiel de lerobot ​

Écraser 3 fichiers du clone officiel avec ceux de ce dépôt :

Fichier de ce dépôt (source)À écraser (destination)
src/lerobot/robots/so_follower/so_follower.pyFichier du même nom dans le clone officiel
src/lerobot/teleoperators/so_leader/so_leader.pyFichier du même nom dans le clone officiel
src/lerobot/robots/so_follower/robot_kinematic_processor.pyFichier du même nom dans le clone officiel (correction de commentaire uniquement, sans impact fonctionnel, remplacement facultatif)
Bash
cp src/lerobot/robots/so_follower/so_follower.py          <clone officiel>/src/lerobot/robots/so_follower/so_follower.py
cp src/lerobot/teleoperators/so_leader/so_leader.py       <clone officiel>/src/lerobot/teleoperators/so_leader/so_leader.py

Condition préalable : votre clone officiel doit avoir la même structure que la base de ce dépôt (version lerobot 2026-08). Si l'écart de version est important, n'écrasez pas les fichiers entiers et appliquez plutôt les deux « modifications manuelles » ci-dessous.

Modifications manuelles en cas de version différente (deux emplacements seulement) ​

① Dictionnaire des moteurs (un exemplaire dans so_follower.py et un dans so_leader.py, contenu identique) — remplacer le code d'origine

Python
"wrist_flex": Motor(4, "sts3215", norm_mode_body),
"wrist_roll": Motor(5, "sts3215", norm_mode_body),
"gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100),

par

Python
"wrist_flex": Motor(4, "sts3215", norm_mode_body),
"wrist_yaw": Motor(5, "sts3215", norm_mode_body),   # Nouveau servo, rotation gauche/droite
"wrist_roll": Motor(6, "sts3215", norm_mode_body),  # Ancien moteur de roulis n° 5, ID 5→6
"gripper": Motor(7, "sts3215", MotorNormMode.RANGE_0_100),

② Logique de calibration (la fonction calibrate() de chacun des deux fichiers) — supprimer le cas particulier de l'« articulation à tour complet » : remplacer

Python
full_turn_motor = "wrist_roll"
unknown_range_motors = [motor for motor in self.bus.motors if motor != full_turn_motor]
range_mins, range_maxes = self.bus.record_ranges_of_motion(unknown_range_motors)
range_mins[full_turn_motor] = 0
range_maxes[full_turn_motor] = 4095

par une seule ligne, afin d'enregistrer la plage réelle de toutes les articulations :

Python
range_mins, range_maxes = self.bus.record_ranges_of_motion()

Pourquoi : la version d'origine codait en dur wrist_roll (roulis autour de l'axe de l'avant-bras) comme une articulation pouvant tourner sur un tour complet (0~4095) sur toute la plage. Après la modification 7-DOF, les articulations de poignet n° 5/6 (yaw / roll) sont toutes deux limitées mécaniquement et ne peuvent pas faire un tour complet ; imposer un tour complet ferait envoyer par le code des commandes vers des angles mécaniquement inatteignables, avec un risque de casse. Désormais, la calibration enregistre manuellement le min/max réel de chaque moteur.

Note sur le bi-bras ​

bi_so_follower / bi_so_leader (src/lerobot/robots/bi_so_follower/, src/lerobot/teleoperators/bi_so_leader/) ne font qu'envelopper le bras simple avec un préfixe left_/right_,sans définition de moteurs. Il suffit que les fichiers du bras simple ci-dessus soient correctement modifiés pour que les commandes bi-bras (--robot.type=bi_so_follower) passent automatiquement en 7-DOF.

1. Installer LeRobot ​

2. Remplacer les fichiers (adaptation 7DOF) ​

3. Port série ​

4. Calibration ​

5. Téléopération ​

6. Téléop. caméra ​

7. Collecte données ​

8. Entraînement ​

9. Inférence ​