Construisez, téléopérez, entraînez et déployez un robot capable d’apprendre un geste par démonstration.
Parcours des scripts principaux • Phases du projet • Structure • Ressources
🇫🇷 Français | 🇬🇧 English
SO-ARM 101 - Projet Robotique Éducative est une chaîne complète, reproductible et pédagogique pour explorer la robotique moderne avec l’IA.
Le projet permet de former un bras robotique à réaliser une tâche de manipulation d’objet par apprentissage par démonstration (Imitation Learning) : un humain guide un bras Leader, un bras Follower reproduit le geste, les démonstrations sont enregistrées avec deux caméras, puis un modèle ACT (Action Chunking Transformers) apprend à exécuter la tâche de manière autonome.
Développé par le Service Écoles-Médias (SEM) du Département de l’Instruction Publique (DIP) de Genève, ce projet vise à rendre l’IA robotique concrète, observable et expérimentable dans un cadre éducatif.
- 🎓 Pensé pour l’éducation : une progression claire, phase par phase, adaptée à l’enseignement.
- 🛠️ DIY et clé en main : du montage logiciel au déploiement autonome.
- 🤖 IA concrète : imitation learning, dataset, entraînement et inférence sur un vrai robot.
- 📷 Deux caméras : vision globale + vision embarquée sur la pince.
- 🔁 Reproductible : scripts, guides, calibration, masques, réglage caméra (exposition auto puis figée) + contrôle image et checkpoints.
- 🚀 Moderne : basé sur LeRobot, PyTorch, Dynamixel SDK et ACT.
| Public | Ce que le projet apporte |
|---|---|
| Enseignants | Une séquence complète pour enseigner robotique, programmation, IA et démarche expérimentale. |
| Étudiants / élèves avancés | Un projet concret pour comprendre la chaîne complète : capteurs → données → modèle → action. |
| Institutions éducatives | Une base structurée pour créer des ateliers, démonstrateurs, formations ou projets interdisciplinaires. |
| Makers / développeurs | Un pipeline robotique open source à adapter, améliorer ou étendre. |
À la fin du parcours, vous disposez d’un système capable de :
- configurer et tester les servomoteurs ;
- calibrer les limites mécaniques des deux bras ;
- téléopérer un bras Follower avec un bras Leader ;
- filmer la scène avec deux caméras ;
- enregistrer un dataset de démonstrations ;
- consolider et vérifier les données ;
- entraîner un modèle ACT ;
- déployer le modèle pour que le robot agisse seul.
La tâche de référence est volontairement simple et pédagogique : prendre un prisme hexagonal (désigné « cube » dans le dataset) à l’une de cinq positions et le déposer dans une boîte.
- Phase 1 : Installation complète de l'environnement LeRobot
- Phase 2 : Configuration des servos (IDs, test, centrage et montage)
- Phase 3 : Calibration des limites de mouvement
- Phase 4 : Tests et contrôle manuel
- Phase 5 : Téléopération Leader → Follower (configuration + téléopération temps réel)
- Phase 6 : Téléopération avec caméras et définition du masque de zone utile
- Phase 7 : Enregistrement de dataset pour l'apprentissage par imitation (2 caméras)
- Phase 8 : Consolidation et vérification du dataset (statistiques, conversion vidéo, visualisation)
- Phase 9 : Entraînement du modèle ACT (Action Chunking Transformers)
- Phase 10 : Déploiement autonome du modèle entraîné
- scénarios pédagogiques en classe ;
- nouvelles tâches de manipulation ;
- amélioration du dataset ;
- comparaison de modèles ;
- interface web de pilotage ou de visualisation ;
- version anglaise du projet.
- 2× Bras SO-ARM 101 (Leader + Follower)
- 2× Adaptateurs USB Feetech ou Waveshare
- 2× Alimentations selon le kit utilisé
- 12× Servos Feetech STS3215
- 2× Caméras USB (
cam_top+cam_follower) - 1× PC avec Ubuntu 22.04 ou 24.04
- GPU NVIDIA fortement recommandé pour l'entraînement (≥ 8 Go VRAM) — CPU possible mais beaucoup plus lent
Leader — bras de contrôle humain
- Servos 1,3 : Ratio 1:191 (C044)
- Servo 2 : Ratio 1:345 (C001)
- Servos 4,5,6 : Ratio 1:147 (C046)
Follower — bras qui apprend et agit
- Tous les servos : Ratio 1:345 (identiques)
Cette section donne une vue synthétique de l'ordre général des scripts. Elle ne remplace pas les guides détaillés : chaque phase demande des vérifications matérielles, des choix opérateur et des étapes de sécurité.
# Activer l'environnement
conda activate lerobot
# Aller dans les scripts SEM
cd ~/lerobot/Scripts_SEM/scripts
# Configurer les servos
python SEM_so101_1_configure.py
# Calibrer les bras
python SEM_so101_2_calibrate.py
# Téléopération avec caméras
python SEM_so101_7_teleoperation_camera.py
# Enregistrer le dataset
python SEM_so101_8_record_dataset.py
# Consolider, vérifier, entraîner, déployer
python SEM_so101_9_dataset.py
python SEM_so101_10_train.py
python SEM_so101_11_deploy.pyPour une installation complète et sûre, suivez les guides détaillés dans le dossier Guides/.
Note : les phases pédagogiques regroupent parfois plusieurs scripts. Les numéros de phase ne correspondent donc pas toujours aux numéros des fichiers Python (par exemple, la Phase 5 utilise les scripts 5 et 6).
# Suivre le guide complet : Guides/SEM_SO101_Phase1.md
# Points clés : Python 3.10, PyTorch, Dynamixel SDK, ffmpeg
# Permissions USB : sudo usermod -a -G dialout $USER
# Permissions caméras : sudo usermod -a -G video $USER
# Outils caméra : v4l-utils (v4l2-ctl) ; guvcview optionnelcd ~/lerobot/Scripts_SEM/scripts
python SEM_so101_1_configure.py
# Configure chaque servo avec son ID (1-6)
# Un servo à la fois, test de mouvement inclus
# Options : T = configurer les 6 servos, B = bloquer, L = libérer, D = détecter le portpython SEM_so101_2_calibrate.py
# Définit les limites min/max de chaque servo
# Sauvegarde automatique dans ~/lerobot/calibration/# Monitoring temps réel
python SEM_so101_3_monitor.py
# Contrôle manuel (script unifié Leader/Follower)
python SEM_so101_4_control.py# Configuration COPIE/MIROIR par servo
python SEM_so101_5_config_teleoperation.py
# Contrôle simultané Leader → Follower
python SEM_so101_6_teleoperation.py# Téléopération avec retour vidéo et création du masque de zone utile
python SEM_so101_7_teleoperation_camera.py
# Le masque est partagé avec les phases 7 et 10
# Fichier : ~/lerobot/calibration/camera_mask.json# Enregistrement avec 2 caméras (cam_top + cam_follower)
python SEM_so101_8_record_dataset.py
# Tâche : Prendre un prisme hexagonal (désigné « cube » dans le dataset) et le déposer dans une boîte
# 5 positions × 10 épisodes = 50 démonstrations
# Format de sortie : LeRobotDataset v2.1
# Contrôle image des deux caméras : exposition (et balance des blancs) auto puis
# figée au démarrage (globale puis pince), puis contrôle de l'image avant chaque
# bloc, pour garantir des images exploitables# Script 9 — fusionner les 5 positions en un dataset unifié,
# vérifier le dataset, générer les statistiques,
# convertir les vidéos en H.264 et visualiser dans le navigateur
python SEM_so101_9_dataset.py
# Dataset consolidé et vérifié, prêt pour l'entraînement# Lancer l'entraînement
python SEM_so101_10_train.py
# Le script utilise le dataset consolidé
# Reprise d'entraînement possible depuis un checkpoint existant
# GPU NVIDIA fortement recommandé (≥ 8 Go VRAM) ; CPU possible mais beaucoup plus lent# Déployer le modèle ACT entraîné
python SEM_so101_11_deploy.py
# Le Follower agit de manière autonome à partir des deux caméras
# Masque réappliqué + contrôle image des deux caméras (exposition auto puis
# figée, adaptée à la lumière de la salle, puis contrôle de l'image)
# Contrôles : P = pause, R = retour repos + arrêt modèle, Entrée = relance, Q = quitter/home/prof/lerobot/Scripts_SEM
├── Guides
│ ├── README.md
│ ├── SEM_SO101_Phase1.md
│ ├── SEM_SO101_Phase2.md
│ ├── SEM_SO101_Phase3.md
│ ├── SEM_SO101_Phase4.md
│ ├── SEM_SO101_Phase5.md
│ ├── SEM_SO101_Phase6.md
│ ├── SEM_SO101_Phase7.md
│ ├── SEM_SO101_Phase8.md
│ ├── SEM_SO101_Phase9.md
│ └── SEM_SO101_Phase10.md
├── Hardware
│ └── Modèles 3D (STL) et fichiers matériels
├── README.md
└── scripts
├── __pycache__
├── SEM_so101_camera_auto.py
├── SEM_so101_10_train.py
├── SEM_so101_11_deploy.py
├── SEM_so101_1_configure.py
├── SEM_so101_2_calibrate.py
├── SEM_so101_3_monitor.py
├── SEM_so101_4_control.py
├── SEM_so101_5_config_teleoperation.py
├── SEM_so101_6_teleoperation.py
├── SEM_so101_7_teleoperation_camera.py
├── SEM_so101_8_record_dataset.py
├── SEM_so101_9_dataset.py
└── Version_26_05_26
Note : Le dossier ~/lerobot/calibration/ est créé automatiquement par les scripts. Il contient notamment leader_calibration.json, follower_calibration.json, repos_position.json et camera_mask.json.
Ce projet ne se limite pas à “faire bouger un robot”. Il met l’accent sur la qualité du dataset, car un modèle d’imitation apprend directement à partir des démonstrations.
Les scripts SEM intègrent plusieurs garde-fous :
- cohérence stricte entre enregistrement et déploiement ;
- masque partagé pour la caméra globale ;
- contrôle image des deux caméras : exposition (et balance des blancs) auto puis figée, puis contrôle de l'image (lumière) avant chaque bloc d'enregistrement et au déploiement ;
- vérification des deux flux caméra ;
- contrôle des lectures et écritures série pendant l’enregistrement ;
- retour repos sécurisé ;
- arrêt d’urgence sans mouvement de retour automatique.
| Problème | Solution |
|---|---|
| Port USB non détecté | Vérifier le groupe dialout (voir Phase 1) |
| Servo ne répond pas | Vérifier alimentation et câbles 3-pins |
| Calibration perdue | Relancer script 2 |
| Mouvement brusque | Vérifier calibration, repos et mode de téléopération |
| Import error | conda activate lerobot |
| Script ne démarre pas | Vérifier environnement Python 3.10 |
| Caméra non détectée | Vérifier le groupe video et tester avec v4l2-ctl --list-devices |
| Réglages caméra impossibles | Vérifier v4l2-ctl --version (paquet v4l-utils) |
| Vidéos vides | Vérifier ffmpeg -version et la connexion des deux caméras |
| Dataset incohérent | Vérifier masque, exposition/contrôle image, résolution 640×360 et synchronisation des deux caméras |
| Messages “instant ignoré” fréquents | Vérifier câbles, alimentation et stabilité du bus série |
- Protocole : Dynamixel v1.0
- Baudrate : 1,000,000 bps
- Plage : 0-4095 (0°-360°)
- Centre : 2048
- Couple : 15 kg.cm
- Fréquence contrôle : 30-50 Hz
- Mouvements fluides : 100 steps
- Latence téléopération : < 50ms
- Déploiement autonome : environ 30 Hz
- Résolution : 640 × 360 pixels (16:9)
- FPS : 30 images/seconde
- Format vidéo : MP4 puis conversion H.264 si nécessaire
- Caméra globale :
cam_top - Caméra pince :
cam_follower - Exposition (et balance des blancs) auto puis figée par session
- Masque de zone utile appliqué à la caméra globale
- Contrôle image des deux caméras (lumière exploitable, module
SEM_so101_camera_auto.py)
SO-ARM 101 · LeRobot · Imitation Learning · Action Chunking Transformers · ACT · Robotique éducative · Dataset robotique · PyTorch · Dynamixel SDK · Feetech STS3215
Les contributions sont les bienvenues :
- amélioration des guides ;
- correction de bugs ;
- nouveaux scénarios pédagogiques ;
- amélioration des scripts ;
- traduction anglaise ;
- ajout de visuels, schémas ou vidéos ;
- adaptation à d’autres tâches robotiques.
- Yanko Michel — Service Écoles-Médias (SEM), Genève
- Claude AI — Assistant développement
- ChatGPT — Assistance à l’audit, à la documentation et à la structuration
Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
Vous êtes autorisé à :
- Partager — copier, distribuer et communiquer le matériel
- Adapter — remixer, transformer et créer à partir du matériel
Selon les conditions suivantes :
- Attribution — Créditer l'œuvre et indiquer les modifications
- Pas d'Utilisation Commerciale
- Partage dans les Mêmes Conditions
Un projet pour rendre la robotique intelligente visible, manipulable et enseignable.
Service Écoles-Médias (SEM) — Département de l’Instruction Publique (DIP), Genève
Dernière mise à jour : voir CHANGELOG.md
