LeRobot documentation
SO-100
SO-100
Dans les étapes ci-dessous, nous expliquons comment assembler le robot SO-100.
Sourcer les pièces
Suivez ce README. Il contient la liste des pièces, avec un lien pour les commander, ainsi que les instructions pour les imprimer en 3D. Il donne également des conseils si c’est votre première impression ou si vous ne possédez pas d’imprimante 3D.
Installer LeRobot 🤗
Pour installer LeRobot, suivez notre Guide d'installation
En plus de ces instructions, vous devez installer le SDK Feetech (si vous avez installé LeRobot depuis PyPI, exécutez pip install 'lerobot[feetech]' à la place) :
pip install -e ".[feetech]"Configurer les moteurs
Remarque : Contrairement au SO-101, les connecteurs des moteurs ne sont pas facilement accessibles une fois le bras assemblé, il faut donc effectuer l'étape de configuration au préalable.
1. Trouver les ports USB associés à chaque bras
Pour trouver le port de chaque adaptateur de servomoteur de bus, exécutez ce script :
lerobot-find-port
Exemple de sortie :
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.L’emplacement du port trouvé est : /dev/tty.usbmodem575E0032081, correspondant à votre bras leader ou suiveur.
Sur Linux, vous devrez peut-être accorder l'accès aux ports USB en exécutant :
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1Exemple de sortie :
Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.L’emplacement du port trouvé est : /dev/ttyACM1, correspondant à votre bras leader ou suiveur.
2. Définir les identifiants des moteurs et les débits
Chaque moteur est identifié par un id unique sur le bus. Neufs, les moteurs sont généralement livrés avec un id par défaut de 1. Pour que la communication fonctionne correctement entre les moteurs et le contrôleur, il faut d'abord attribuer à chaque moteur un id unique et différent. De plus, la vitesse à laquelle les données sont transmises sur le bus est déterminée par le baudrate. Pour pouvoir communiquer entre eux, le contrôleur et tous les moteurs doivent être configurés avec le même baudrate.
À cette fin, nous devons d'abord nous connecter à chaque moteur individuellement via le contrôleur afin de définir ces paramètres. Comme nous écrivons ces paramètres dans la section non volatile de la mémoire interne des moteurs (EEPROM), nous n'aurons besoin de le faire qu'une seule fois.
Si vous réutilisez des moteurs d’un autre robot, vous devrez probablement également effectuer cette étape, car les identifiants et le taux de bauds ne correspondront probablement pas.
Suiveur
Branchez le câble usb de votre ordinateur et de l’alimentation sur la carte contrôleur du bras suiveur. Ensuite, exécutez la commande suivante ou l’exemple d’API avec le port obtenu à l’étape précédente. Vous devrez également donner un nom à votre bras suiveur à l’aide du paramètre id.
Pour une référence visuelle sur la manière de définir les identifiants des moteurs, veuillez consulter cette vidéo où nous suivons le processus pour le bras SO101.
lerobot-setup-motors \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO100Follower, SO100FollowerConfig
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.setup_motors()Vous devriez voir l’instruction suivante
Connect the controller board to the 'gripper' motor only and press enter.Conformément aux instructions, branchez le moteur de la pince. Assurez-vous qu’il s’agit du seul moteur connecté à la carte et que le moteur lui-même n’est pas encore chaîné en série avec un autre moteur. Lorsque vous appuyez sur [Enter], le script définit automatiquement l’id et le baudrate de ce moteur.
Troubleshooting
Si vous obtenez une erreur à ce stade, vérifiez vos câbles et assurez-vous qu'ils sont correctement branchés :
- Alimentation
- Câble USB entre votre ordinateur et la carte de contrôle
- Le câble à 3 broches reliant la carte de contrôle au moteur
Si vous utilisez une carte contrôleur Waveshare, assurez-vous que les deux cavaliers sont positionnés sur le canal B (USB).
Vous devriez alors voir le message suivant :
'gripper' motor id set to 6Suivi de la prochaine instruction :
Connect the controller board to the 'wrist_roll' motor only and press enter.Vous pouvez débrancher le câble à 3 broches de la carte de contrôle, mais vous pouvez le laisser branché sur le moteur de la pince à l’autre extrémité, car il sera déjà à la bonne place. Maintenant, branchez un autre câble à 3 broches sur le moteur de rotation du poignet et connectez-le à la carte de contrôle. Comme pour le moteur précédent, assurez-vous qu’il est le seul moteur connecté à la carte et que le moteur lui-même n’est connecté à aucun autre.
Répétez l'opération pour chaque moteur comme indiqué.
Vérifiez le câblage à chaque étape avant d’appuyer sur Entrée. Par exemple, le câble d’alimentation peut se débrancher lorsque vous manipulez la carte.
Une fois terminé, le script se termine simplement, et les moteurs sont alors prêts à être utilisés. Vous pouvez maintenant brancher le câble à 3 broches de chaque moteur sur le suivant, ainsi que le câble du premier moteur (le « shoulder pan » avec id=1) sur la carte de contrôle, qui peut désormais être fixée à la base du bras.
Leader
Effectuez les mêmes étapes pour le bras leader.
lerobot-setup-motors \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO100Leader, SO100LeaderConfig
config = SO100LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.setup_motors()Instructions d'assemblage étape par étape
Retirez les engrenages des 6 moteurs de tête
Video removing gears
Suivez la vidéo pour retirer les engrenages. Vous devez retirer l’engrenage des moteurs du bras leader. En conséquence, vous n’utiliserez que l’encodage de position du moteur et réduirez le frottement pour manipuler plus facilement le bras leader.
Nettoyer les parties
Retirez tout le matériau de support des pièces imprimées en 3D. La méthode la plus simple consiste à utiliser un petit tournevis pour passer sous le matériau de support.
Guides supplémentaires
Video assembling arms
Remarque : Cette vidéo fournit un guide visuel pour l'assemblage des bras, mais elle ne précise pas quand ni comment effectuer le câblage. Il est beaucoup plus facile d'insérer les câbles à l'avance que de le faire a posteriori. Le premier bras peut prendre un peu plus d'une heure à assembler, mais une fois que vous y êtes habitué, vous pouvez assembler le second bras en moins d'une heure.
Premier moteur
Étape 2 : Insérer les fils
- Insérez deux fils dans le premier moteur.
Étape 3 : Installation dans Base
- Placez le premier moteur dans la base.
Étape 4 : Fixer le moteur
- Fixez le moteur avec 4 vis. Deux par le bas et deux par le haut.
Étape 5 : Fixer le support de moteur
- Faites glisser le premier support de moteur et fixez-le à l'aide de deux vis (une de chaque côté).
Étape 6 : Fixer les cornes de moteur
- Installez les deux cornes de moteur, en fixant la corne supérieure avec une vis. Essayez de ne pas déplacer la position du moteur lors de la fixation de la corne de moteur, en particulier pour les bras de tête, où nous avons retiré les engrenages.
Video adding motor horn
Étape 7 : Fixer la pièce de l'épaule
- Branchez un fil à l'arrière du robot et l'autre à gauche ou vers vous (voir la photo).
- Fixez la partie épaule.
Étape 8 : Épaule sécurisée
- Serrez la partie épaule avec 4 vis en haut et 4 en bas (accédez aux trous inférieurs en tournant l'épaule).
Deuxième assemblage moteur
Étape 9 : Installer Motor 2
- Faites glisser le deuxième moteur depuis le haut et reliez le fil du moteur 1 au moteur 2.
Étape 10 : Fixer le support d'épaule
- Ajoutez le support du moteur de l'épaule.
- Assurez-vous que le câble reliant le moteur 1 au moteur 2 passe derrière le support, tandis que l'autre câble est acheminé vers le haut (voir la photo).
- Cette partie peut être difficile à assembler. Vous pouvez utiliser un établi comme sur l'image ou un montage similaire pour pousser la pièce autour du moteur.

Étape 11 : Fixer le moteur 2
- Fixez le second moteur avec 4 vis.
Étape 12 : Fixer la sirène du moteur
- Fixez les deux cornes moteur au moteur 2, en utilisant à nouveau la vis de corne.
Étape 13 : Fixer la base
- Installez la fixation de base à l'aide de 2 vis.
Étape 14 : Attacher le bras supérieur
- Fixez le bras supérieur à l'aide de 4 vis de chaque côté.
Troisième assemblage de moteur
Étape 15 : Installer Motor 3
- Faites passer le câble du moteur depuis le moteur 2 à travers le support de câble jusqu'au moteur 3, puis fixez le moteur 3 à l'aide de 4 vis.
Étape 16 : Fixer le klaxon du moteur
- Fixez les deux cornes de moteur au moteur 3 et serrez à nouveau l'une d'elles avec une vis de corne.
Étape 17 : Fixer l'avant-bras
- Connectez l'avant-bras au moteur 3 à l'aide de 4 vis de chaque côté.
Quatrième assemblage moteur
Étape 18 : Installer Motor 4
- Insérez le moteur 4, branchez le câble du moteur 3 et fixez le câble dans son support à l'aide d'une vis.

Étape 19 : Fixer le support de moteur 4
- Installez le quatrième support de moteur (ajustement serré). Assurez-vous qu'un fil est acheminé vers le haut et que le fil du moteur 3 est acheminé vers le bas (voir la photo).
Étape 20 : Fixer le moteur 4 et attacher la sirène
- Fixez le moteur 4 avec 4 vis et attachez ses cornes de moteur, utilisez une vis de corne pour l'une d'elles.
Assemblage du poignet
Étape 21 : Installer Motor 5
- Insérez le moteur 5 dans le support de poignet et fixez-le à l'aide de 2 vis avant.
Étape 22 : Attacher le poignet
- Connectez le fil du moteur 4 au moteur 5. Et insérez déjà l'autre fil pour la pince.
- Fixez le poignet au moteur 4 à l'aide de 4 vis de chaque côté.
Étape 23 : Fixer le cornet de poignet
- Installez uniquement une corne de moteur sur le moteur du poignet et fixez-la avec une vis de corne.
Configuration du suiveur
Étape 24 : Fixer la pince
- Fixez la pince au moteur 5.
Étape 25 : Installer le moteur de pince
- Insérez le moteur de la pince, connectez le câble du moteur 5 au moteur 6 et fixez-le à l'aide de 3 vis de chaque côté.
Étape 26 : Fixer le corne de pince et la griffe
- Fixez les cornes du moteur et utilisez à nouveau une vis de corne.
- Installez la pince et fixez-la à l'aide de 4 vis de chaque côté.
Étape 27 : Montage du contrôleur
- Fixez le contrôleur de moteur à l'arrière du robot.

Assemblage terminé – passez à l’assemblage du bras du leader.
Configuration du leader
Pour la configuration du leader, effectuez les étapes 1 à 23. Assurez-vous d'avoir retiré les engrenages des moteurs.
Étape 24 : Fixer le support de chef
- Fixez le porte-leader au poignet et serrez-le avec une vis.
Étape 25 : Attacher le poignée
- Fixez la poignée au moteur 5 à l'aide de 4 vis.
Étape 26 : Installer le moteur de pince
- Insérez le moteur de la pince, fixez-le à l'aide de 3 vis de chaque côté, attachez un pignon de moteur à l'aide d'une vis de pignon et connectez le câble du moteur.
Étape 27 : Attacher le déclencheur
- Fixez le déclencheur suiveur à l'aide de 4 vis.
Étape 28 : Montage du contrôleur
- Fixez le contrôleur de moteur à l'arrière du robot.

Calibrer
Ensuite, vous devrez calibrer votre robot afin de vous assurer que les bras leader et suiveur ont les mêmes valeurs de position lorsqu'ils se trouvent dans la même position physique. Le processus de calibration est très important car il permet à un réseau de neurones entraîné sur un robot de fonctionner sur un autre.
Suiveur
Exécutez la commande ou l'exemple d'API suivant pour calibrer le bras suiveur :
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO100FollowerConfig, SO100Follower
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()Nous avons unifié la méthode de calibration pour la plupart des robots. Ainsi, les étapes de calibration pour ce bras SO100 sont identiques à celles des Koch et SO101. D'abord, il faut déplacer le robot à la position où chaque articulation est au milieu de sa plage de mouvement, puis appuyer sur Enter. Ensuite, nous déplaçons toutes les articulations sur leur pleine amplitude de mouvement. Une vidéo de ce même processus pour le SO101, à titre de référence, peut être trouvée ici
Leader
Effectuez les mêmes étapes pour calibrer le bras leader, exécutez la commande suivante ou l'exemple d'API :
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO100LeaderConfig, SO100Leader
config = SO100LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()Félicitations 🎉, votre robot est prêt à apprendre une tâche de manière autonome. Commencez son entraînement en suivant ce tutoriel : Démarrer avec des robots réels
Update on GitHubSi vous avez des questions ou besoin d'aide, n'hésitez pas à nous contacter sur Discord.