Collecte de données
Le SO-101 est l'un des bras de collecte de données les plus courants dans la communauté LeRobot. Ce guide couvre tout, des connexions matérielles à l'enregistrement d'épisodes et à la transmission de votre ensemble de données vers HuggingFace.
Configuration matérielle pour l'enregistrement
La configuration de la collecte de données SO-101 est plus simple que les bras à bus CAN : tout fonctionne via USB. Voici ce qu'il faut connecter.
Caméra de l'espace de travail
Webcam USB pointée vers l'espace de travail par le dessus ou par le côté. Montez-le à une position fixe – ne le déplacez pas entre les épisodes. Vérifier: ls /dev/video*
Caméra de poignet (en option)
Petite caméra USB montée sur l'effecteur final. Ajoute une vue à la première personne. Un deuxième port USB requis. LeRobot prend en charge la synchronisation multi-caméras.
Bras suiveur (série USB)
Le bras qui exécute les actions. Connectez-vous via un servocontrôleur USB. Vérifiez le port avec ls /dev/ttyUSB*
Leader Arm (série USB)
Un deuxième SO-101 en mode conformité — déplacez-le avec votre main pour conduire le suiveur. Connectez-vous sur un deuxième port USB. Donne des démonstrations de la plus haute qualité.
Pas de ROS, pas de pilotes de noyau : Contrairement aux configurations CAN-bus, la pile de collecte de données SO-101 fonctionne entièrement via USB série. Vous pouvez enregistrer sur un ordinateur portable MacBook ou Windows – aucun Ubuntu n’est requis.
Flux de travail d'enregistrement étape par étape
Vérifier que l'étalonnage est à jour
Exécutez l’étalonnage avant chaque nouvelle session si le bras a été démonté ou déplacé. Voir Logiciel → Calibrage.
python -m lerobot.scripts.control_robot \
--robot.type=so101 --robot.port=/dev/ttyUSB0 \
--control.type=calibrate
Vérifier les flux de la caméra
python -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
Déplacez le bras en position d'origine
Placez le bras suiveur en position d’origine (entièrement étendu, effecteur terminal pointant vers l’avant). Réinitialisez le bras du leader dans la même position avant de démarrer la téléopération.
Configurer la scène de tâches
Placez les objets dans leurs positions de départ cohérentes. Cochez le tableau si nécessaire : des conditions initiales cohérentes sont essentielles à la généralisation des politiques.
Démarrer l'enregistrement LeRobot
python -m lerobot.scripts.control_robot \
--robot.type=so101 \
--robot.port=/dev/ttyUSB1 \
--robot.leader_arms.main.type=so101 \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/so101-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick the red block and place it in the bin" \
--control.warmup_time_s=3 \
--control.reset_time_s=8
LeRobot vous invite avant chaque épisode. Pendant l'échauffement, vous pouvez ajuster votre prise sur le bras leader avant le début de l'enregistrement.
Revoir et rejouer les épisodes
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/so101-pick-place-v1 \
--episode_index=0
Supprimez immédiatement les épisodes de mauvaise qualité. Recherchez les images de caméra perdues, les vitesses articulaires irrégulières ou l'exécution de tâches incomplètes.
Pousser vers HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/so101-pick-place-v1
Format du jeu de données SO-101
Le SO-101 utilise le format d'ensemble de données standard LeRobot / HuggingFace - schéma identique à OpenArm, Koch et autres bras LeRobot. Cela signifie que vos ensembles de données sont directement compatibles avec l'écosystème complet de formation LeRobot.
Schéma de données d'épisode
Notes spécifiques au SO-101
L'espace d'action SO-101 utilise les positions des articulations en degrés (servomoteurs Feetech), et non en radians. Lorsque vous mélangez des ensembles de données SO-101 et OpenArm pour un entraînement multiplateforme, normalisez d'abord les deux en radians en utilisant les statistiques dans meta/stats.json.
Liste de contrôle de qualité pour les données collectées
Parcourez-le après chaque session d'enregistrement avant de passer au Hub.
-
1La durée des épisodes est cohérente Les épisodes d'une durée aberrante signifient généralement que l'opérateur a fait une pause, que la pince a glissé ou que l'enregistrement a été interrompu. Rester à ± 30 % de la longueur médiane.
-
2Pas de pics de vitesse du servo Les servos STS3215 ont une bande passante limitée : des pics de vitesse soudains
observation.stateindiquer une interruption du bus série. Supprimez ces épisodes. -
3Les images de la caméra sont alignées sur les données communes Vérifiez que les horodatages de la caméra et les horodatages communs sont espacés de 20 ms maximum. La latence série USB peut entraîner une dérive sur de longs enregistrements. Resynchronisez les caméras tous les 100 épisodes.
-
4Le suivi du bras de leader était fluide Si le suiveur est sensiblement en retard pendant l'enregistrement (en raison de la latence série USB), les étiquettes d'action seront décalées dans le temps par rapport aux observations. Rejouez pour vérifier.
-
5La scène de tâche était cohérente au début de chaque épisode Objets dans la même position et orientation. La faible répétabilité du SO-101 (par rapport aux bras CAN) rend cela particulièrement important : la variation des conditions initiales nuit à la formation politique.
-
6L'ouverture/fermeture de la pince est clairement enregistrée L'état de la pince SO-101 est articulaire 6. Vérifiez que les événements de préhension montrent une transition claire de la position de l'articulation (ouverte → fermée) dans les données, et non une dérive progressive.
Formation d'une politique à partir de votre ensemble de données
Une fois que votre ensemble de données a passé les contrôles de qualité, entraînez ACT ou Diffusion Policy avec LeRobot.
Ancien ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-so101-pick-place
Politique de diffusion des trains
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-so101-pick-place
Ensembles de données communautaires : Le SO-101 possède l’une des plus grandes collections d’ensembles de données communautaires de l’écosystème LeRobot. Avant de collecter vos propres données, vérifiez HuggingFace Hub pour les ensembles de données SO-101 existants - vous pourrez peut-être affiner à partir d'un ensemble de données de base existant et gagner du temps d'enregistrement.