# Banc de machine learning avec SO-ARM101

### Assemblage et démarrage du SO-ARM101

#### Configurer les servomoteurs

La carte `FE-URT-1` fournie par Feetech n'est pas détectée sous Ubuntu à cause d'un conflit avec un paquet de brail. On le désinstalle :

```
sudo apt-get autoremove brltty
```

[https://askubuntu.com/questions/1321442/how-to-look-for-ch340-usb-drivers/1472246#1472246](https://askubuntu.com/questions/1321442/how-to-look-for-ch340-usb-drivers/1472246#1472246)

[https://github.com/huggingface/lerobot/blob/main/examples/10\_use\_so100.md#c-configure-the-motors](https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md#c-configure-the-motors)

- Brancher la carte
- Trouver l'interface USB sur laquelle est branchée la carte

```
python lerobot/scripts/find_motors_bus_port.py
```

- - Sous Linux, par ex. `/dev/ttyACM0` ou `/dev/ttyUSB0`
    - Sous Windows, par ex. `COM13` ou `COM14`
- Sous Linux, Changer les droits sur les interfaces USB

```bash
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1
```

- Ouvrir Codium &gt; File &gt; Open Folder &gt; `admin_ros/lerobot`
- Modifier le fichier de config

`gedit ~/lerobot/lerobot/common/robot_devices/robots/configs.py`

- Chercher la config du So100 en ligne 436 `class So100RobotConfig(ManipulatorRobotConfig):`
- Remplacer `port="/dev/tty.usbmodem58760431091",` pour le `leader_arms` (L446) et le `follower_arms` (L463) par le port découvert
- Brancher les servos un à un à la carte puis lancer le script d'initialisation, en incrémentant l'ID à chaque fois :

```bash
python lerobot/scripts/configure_motor.py \
  --port /dev/tty.usbmodem58760432961 \
  --brand feetech \
  --model sts3215 \
  --baudrate 1000000 \
  --ID 1
```

- Au fur et à mesure les brancher en série et/ou noter l'ID sur le moteur
- Les servos sont bougés à leur position centrale et l'offset mis à 0

<p class="callout warning">Ne plus bouger les servos jusqu'à l'assemblage</p>

#### Construction et assemblage mécanique

Une version 101 est sortie en 05/2025. Le Leader est plus simple à assembler, et plus besoin de[ démonter les servos pour enlever un engrenage et les rendre passifs](https://huggingface.co/docs/lerobot/so100#remove-the-gears-of-the-6-leader-motors). Il suffit d'acheter le kit de 6 servos avec 3 rapports de transmission différents :

- [https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#getting-your-own-so101](https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#getting-your-own-so101)
- [https://www.alibaba.com/product-detail/6PCS-7-4V-STS3215-Servos-for\_1601428584027.html?spm=a2747.product\_manager.0.0.757c2c3clU7uH3](https://www.alibaba.com/product-detail/6PCS-7-4V-STS3215-Servos-for_1601428584027.html?spm=a2747.product_manager.0.0.757c2c3clU7uH3)
- Imprimer la mâchoire statique intégrant le support de caméra : [https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Wrist\_Cam\_Mount\_32x32\_UVC\_Module/README.md](https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Wrist_Cam_Mount_32x32_UVC_Module/README.md)
- Suivre le guide d'assemblage pour le SO101 : [https://huggingface.co/docs/lerobot/so101#step-by-step-assembly-instructions](https://huggingface.co/docs/lerobot/so101#step-by-step-assembly-instructions)
- Pour le SO100 : [https://huggingface.co/docs/lerobot/so100#step-by-step-assembly-instructions](https://huggingface.co/docs/lerobot/so100#step-by-step-assembly-instructions)

#### Astuces pour l'assemblage

- Mettre une vis sur l'arbre moteur et l'axe passif (à l'opposée de l'arbre moteur) quand il y a la place d'en mettre une (vérifier qu'il y aura la place après assemblage des éléments autour du moteur)
- Ne plus bouger les servos après leur initialisation qui les met à l'angle 0. Dans l'idéal, assembler les éléments de manière à ce que le robot soit en configuration initiale avec tous les moteurs à 0
- En pratique, on monte le robot dans la configuration ci-dessous. C'est l'étape de calibration qui permettra de définir un offset pour que le zéro des moteurs corresponde au modèle cinématique du SO-ARM10X

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/scaled-1680-/A0gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/A0gimage.png)

- Il est possible d'ajouter un offset dans la configuration des servomoteurs, par exemple via les scripts du projet LeRobot
- Attention si vous démarrez le robot sous ROS avant d'avoir lancer la calibration LeRobot qui fixe l'Offset dans les servomoteurs, vous risquez de casser le robot

### Banc de Machine Learning LeRobot

#### Agencement des caméras et robots

Le nombre, le positionnement et la qualité des caméras sont importants pour la qualité du DataSet :

- Plusieurs setup sont proposés : 
    - Caméras d'environnement : [https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#2-overhead-camera-mount](https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#2-overhead-camera-mount)
    - Caméras de poignet : [https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#5-wristmount-cameras](https://github.com/TheRobotStudio/SO-ARM100?tab=readme-ov-file#5-wristmount-cameras)
- Attention au champ de vision des caméras si vous prenez une de vos webcams 
    - Il risque de ne pas être assez "fish eye"
    - Par exemple, la WebCam Logitech C270 (720p) a un champ trop étroit pour être intégrée au [module Overhead](https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Overhead_Cam_Mount_Webcam/README.md)

##### Au FabLab de IUT Haguenau

[![PXL_20250613_142740983_crop.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/pxl-20250613-142740983-crop.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/pxl-20250613-142740983-crop.jpg)

- On choisit de prendre deux caméras au format 32 x 32 , la version 1080p permet d'augmenter la qualité du DataSet 
    - [https://www.amazon.com/innomaker-Computer-Raspberry-Support-Windows/dp/B0CNCSFQC1/132-7372155-9780230](https://www.amazon.com/innomaker-Computer-Raspberry-Support-Windows/dp/B0CNCSFQC1/132-7372155-9780230)
- Imprimer et assembler la mâchoire statique intégrant le support de caméra : [https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Wrist\_Cam\_Mount\_32x32\_UVC\_Module/README.md](https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Wrist_Cam_Mount_32x32_UVC_Module/README.md)
- Imprimer et assembler le support de robot et de caméra Overhead : [https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Overhead\_Cam\_Mount\_32x32\_UVC\_Module/README.md](https://github.com/TheRobotStudio/SO-ARM100/blob/main/Optional/Overhead_Cam_Mount_32x32_UVC_Module/README.md)

#### Calibration des caméras

[https://huggingface.co/docs/lerobot/cameras](https://huggingface.co/docs/lerobot/cameras)