Collecte de données
OpenArm est conçu comme une plateforme de données native. Ce guide couvre tout, du câblage des caméras à l'enregistrement des épisodes au format LeRobot, avec des contrôles de qualité à chaque étape.
Connexions matérielles pour l'enregistrement
La collecte de données nécessite plus de matériel que le contrôle de base des armements. Cette section explique quoi connecter et où avant de démarrer LeRobot.
Caméra de poignet
Montez une webcam USB ou un Intel RealSense D435i sur la bride de l'effecteur final. Connectez-vous via USB 3.0 pour plus de 30 ips. Vérifier: ls /dev/video*
Caméra aérienne/espace de travail
Caméra fixe au dessus de l'espace de travail pour une vue globale. Monter à ~60 cm au-dessus de la table, incliné vers le bas à 30°. Deuxième port USB 3.0.
Bus CAN (commande du bras)
Déjà connecté depuis la configuration. Vérifier: ip link show can0. L'interface CAN doit être opérationnelle avant de démarrer LeRobot.
Appareil téléop
3D SpaceMouse, un deuxième OpenArm comme bras de leader ou une manette de jeu. Leader-follower avec deux OpenArms donne des démonstrations de la plus haute qualité.
Remarque sur la synchronisation de la caméra : LeRobot horodatage tous les flux au niveau du PC hôte. Pour les configurations multi-caméras, utilisez des hubs USB 3.0 (et non des hubs USB 2.0) pour minimiser le décalage de latence entre les images de la caméra et les lectures d'état conjointes. Cible : décalage < 5 ms entre les flux.
Flux de travail d'enregistrement étape par étape
Suivez ces étapes pour chaque session d'enregistrement. Chaque étape s’appuie sur la précédente – ne sautez pas d’étapes.
Contrôle de sécurité avant la séance
Dégagez l'espace de travail (rayon de 1 m), vérifiez que le bras atteint librement la position d'origine, testez l'arrêt d'urgence avant d'enregistrer. Voir Page de sécurité.
Afficher l'interface CAN et ROS2
sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
Accueil le bras
Exécutez la routine de référencement pour définir la position de référence avant chaque session. Le bras doit atteindre sa position d'origine sans charge sur l'effecteur terminal.
python3 -m openarm_can.scripts.home --interface can0
Vérifier les flux de la caméra
Vérifiez que toutes les caméras diffusent avant de démarrer LeRobot. Une caméra manquante corrompt silencieusement votre ensemble de données si LeRobot ne le signale pas.
# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
Configurer la scène de tâches
Placez les objets dans des positions de départ cohérentes. Une initialisation cohérente de la scène est essentielle à la généralisation des politiques. Photographiez ou marquez la configuration de départ.
Démarrer l'enregistrement LeRobot
source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
--robot.type=openarm \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/openarm-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick up the red cube and place it in the bin" \
--control.warmup_time_s=5 \
--control.reset_time_s=10
LeRobot vous le demandera avant chaque épisode. Utilisez warmup_time_s pour préparer votre position téléop avant le début de l'enregistrement.
Revoir et rejouer les épisodes
Après l'enregistrement, rejouez les épisodes suspects avant de finaliser l'ensemble de données. Supprimez immédiatement les épisodes de mauvaise qualité.
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/openarm-pick-place-v1 \
--episode_index=0
Pousser vers HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/openarm-pick-place-v1
Format du jeu de données LeRobot
LeRobot stocke les ensembles de données au format d'ensemble de données HuggingFace à l'aide de fichiers Parquet pour les données tabulaires et de fichiers MP4/PNG pour les flux d'images. Chaque épisode est une séquence d’observations et d’actions horodatées.
Structure du répertoire
your-username/openarm-pick-place-v1/
├── meta/
│ ├── info.json # Dataset metadata, fps, shapes
│ ├── episodes.jsonl # Per-episode metadata (task, length, outcome)
│ └── stats.json # Min/max/mean/std for all fields
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet
│ ├── episode_000001.parquet
│ └── ...
└── videos/
└── chunk-000/
├── observation.images.wrist_cam/
│ ├── episode_000000.mp4
│ └── ...
└── observation.images.overhead_cam/
└── ...
Schéma de données d'épisode
Épisodes de défaillance sous forme de données
OpenArm est conçu pour enregistrer en toute sécurité les tentatives infructueuses, et pas seulement les réussites. Les trajectoires d’échec (dérapage, mauvaise saisie, collision, tentatives de récupération) sont des données de premier ordre essentielles à une généralisation solide des politiques. Ne supprimez pas automatiquement les épisodes de défaillance. Annotez-les plutôt avec le success champ dans les métadonnées de l'épisode et laissez le cadre de formation décider s'il doit les utiliser.
Liste de contrôle de qualité pour les données collectées
Parcourez cette liste de contrôle après chaque session d'enregistrement et avant de passer au Hub. Des données de mauvaise qualité nuisent davantage à la performance politique qu’un faible nombre d’épisodes.
-
1La durée de l'épisode est cohérente Tous les épisodes pour la même tâche doivent avoir une durée inférieure à ± 30 % de la durée médiane. Les valeurs aberrantes indiquent généralement que l'opérateur a fait une pause, a raté une prise ou que l'enregistrement a été interrompu.
-
2Aucun cadre de caméra manquant Vérifiez que chaque épisode contient le nombre attendu d'images par flux. Courir
lerobot.scripts.visualize_datasetsur 3 à 5 épisodes pour vérifier la qualité de la vidéo. -
3Les positions communes restent dans des limites sûres Vérifier
observation.statene dépasse jamais les limites communes dans spécifications. Les pics à grande vitesse indiquent une interruption du CAN ou un problème de contrôle : supprimez ces épisodes. -
4La scène de tâche a été réinitialisée entre les épisodes Chaque épisode doit commencer avec l'objet dans la même position initiale. Si vous avez ignoré une réinitialisation, la politique apprendra des conditions initiales incohérentes et se généralisera mal.
-
5La couverture des caméras est terminée La caméra-bracelet doit toujours montrer l'effecteur final et l'objet manipulé. La caméra aérienne doit montrer l’intégralité de l’espace de travail. Réajustez les supports si l'objet quitte l'image au milieu de l'épisode.
-
6Le style de démonstration est cohérent Tous les opérateurs doivent utiliser la même trajectoire d’approche et le même style de préhension. Les stratégies mixtes perturbent la formation politique. Utilisez un seul opérateur par version de tâche ou étiquetez les épisodes par opérateur.
-
7Les statistiques de l'ensemble de données semblent raisonnables Vérifier
meta/stats.jsonaprès l'enregistrement. Vérifiez que la moyenne de l'action est proche de zéro (non bloquée aux limites communes) et que la norme d'action est suffisamment grande pour montrer la variation entre les épisodes. -
8Le taux de réussite est documenté Enregistrez le taux de réussite humaine lors de la collecte. Un taux de réussite de 60 à 70 % est typique pour les tâches riches en contacts. Un succès moindre peut indiquer que la tâche est trop difficile ; un niveau plus élevé peut signifier que la tâche est trop facile pour fournir un signal d'entraînement utile.
Formation d'une politique à partir de votre ensemble de données
Une fois que votre ensemble de données passe la liste de contrôle qualité, vous pouvez entraîner ACT ou Diffusion Policy directement avec LeRobot.
Ancien ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-pick-place
Politique de diffusion des trains
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-pick-place
Allez plus loin : Lire l'intégralité Présentation du pipeline de collecte de données dans la bibliothèque robotique pour un traitement approfondi de la structure des épisodes, de la gestion des versions des ensembles de données, de l'alignement de la simulation sur le réel et de la composition des ensembles de données multitâches.