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.

Avant l'enregistrement

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

Flux de travail d'enregistrement étape par étape

1

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
2

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()
"
3

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.

4

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.

5

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.

6

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.

7

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

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

Champs dans chaque épisode Fichier Parquet
observation.état flotteur32[6] Positions des articulations en degrés (6 DOF — 5 articulations + pince)
observations.images.* chemin vidéo Référence à l'image dans le fichier vidéo MP4 par caméra
action flotteur32[6] Cibler les positions articulaires à partir du bras leader
horodatage flotteur 64 Horodatage Unix en secondes
cadre_index int64 Numéro d'image dans l'épisode
épisode_index int64 Numéro d'épisode dans l'ensemble de données
suivant.fait bouffonne Vrai sur la dernière image de chaque épisode
index_tâche int64 Index dans la table de recherche de description de tâche

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.

Assurance qualité

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.

  • 1
    La 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.
  • 2
    Pas de pics de vitesse du servo Les servos STS3215 ont une bande passante limitée : des pics de vitesse soudains observation.state indiquer une interruption du bus série. Supprimez ces épisodes.
  • 3
    Les 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.
  • 4
    Le 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.
  • 5
    La 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.
  • 6
    L'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.
Étape suivante

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.

Ensemble de données prêt ? Commencez la formation.

Transférez votre ensemble de données vers HuggingFace et entraînez ACT ou Diffusion Policy.