Collecte de données bimanuelle

Le DK1 est conçu dès le départ pour la collecte de données de téléopération bimanuelle. Ce guide couvre le câblage des bras et des caméras, l'exécution de la procédure d'enregistrement leader/suiveur, la compréhension du schéma de l'ensemble de données bimanuel et la préparation de vos données pour la formation ACT.

Avant l'enregistrement

Connexions matérielles pour l'enregistrement bimanuel

L'enregistrement bimanuel nécessite plus de connexions qu'une configuration à un seul bras. Vérifiez chaque connexion avant de démarrer LeRobot : manquer une connexion en cours de session corrompt l'épisode.

🥇

Bas de soutien-gorge (Dynamixel XL330)

USB-C du bras leader au PC hôte. Ce bras est déplacé par la main de l'opérateur. Utilisez un câble court (1 m) pour éviter les déconnexions accidentelles pendant la téléopération. Vérifier: ls /dev/ttyACM0

🥈

Bras suiveur (DM4340 + alimentation)

USB-C du bras suiveur au PC hôte plus alimentation CC. Le bras suiveur nécessite une alimentation externe – ne fonctionne jamais uniquement avec l’alimentation USB. Vérifier: ls /dev/ttyACM1

📷

Caméra de poignet (bras suiveur)

Montez une webcam USB sur l’effecteur final du bras suiveur. Il s’agit de la principale caméra de manipulation. Connectez-vous via USB 3.0. Vérifier: ls /dev/video0

📖

Caméra aérienne/espace de travail

Caméra fixe au dessus de l'espace de travail bimanuel à ~70 cm de hauteur, inclinée à 30° vers le bas. Capture les deux bras simultanément. Deuxième port USB 3.0. Vérifier: ls /dev/video2

Critique : synchronisation bimanuelle. Avec deux bras et deux caméras, la synchronisation est le facteur de qualité des données le plus important pour le DK1. LeRobot horodatage tous les flux provenant de l'horloge du PC hôte. Pour minimiser le décalage d'horodatage : (1) utilisez des contrôleurs de bus USB séparés pour les caméras et les bras, (2) utilisez des hubs USB 3.0 avec des horloges stables, (3) réglez le gouverneur du processeur en mode performance. Cible : décalage < 5 ms entre les quatre flux. Une désynchronisation de 10 ms entre les états des bras gauche et droit peut entraîner des échecs de formation ACT sur des tâches riches en contacts.

Flux de travail d'enregistrement

Procédure d'enregistrement de la téléopération leader/suiveur

Suivez ces étapes pour chaque session d'enregistrement DK1. La procédure bimanuelle comporte quelques étapes supplémentaires par rapport au prélèvement à un seul bras.

1

Contrôle de sécurité avant la séance

Dégagez l'espace de travail partagé entre les deux bras (1,5 m × 1 m). Vérifiez que les deux bras atteignent l'espace de travail partagé sans collision. Testez l’arrêt d’urgence avant d’enregistrer. Voir Page de sécurité.

2

Connectez et vérifiez les deux bras

# Verify serial ports are available
ls /dev/ttyACM*
# Expected: /dev/ttyACM0 (leader) and /dev/ttyACM1 (follower)

# Quick connection test
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=none
3

Vérifier les flux de la caméra

Les deux caméras doivent diffuser avant de démarrer LeRobot. Une caméra manquante produira silencieusement des épisodes avec des images nulles.

python3 -c "
import cv2
for i in [0, 2]:
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        ret, frame = cap.read()
        print(f'Camera {i}: OK ({frame.shape[1]}x{frame.shape[0]})')
    else:
        print(f'Camera {i}: FAILED')
    cap.release()
"
4

Déplacez les bras vers la position de départ

Déplacez manuellement le bras leader vers la position téléop de départ. Le bras suiveur le reflétera. Maintenez le bras leader stable pendant 2 à 3 secondes pour confirmer la synchronisation avant le début de la période d'échauffement.

5

Configurer la scène de tâches

Placez les objets dans des positions de départ cohérentes pour les deux bras. Photographiez la configuration de départ. Pour les tâches bimanuelles, marquez les positions exactes avec du ruban adhésif : la cohérence de la scène est encore plus critique car les deux trajectoires des bras doivent être compatibles.

6

Démarrer l'enregistrement bimanuel LeRobot

source ~/.venvs/dk1/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up block with left arm, place in bin with right arm" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=15

Utilisez un plus long reset_time_s pour les tâches bimanuelles : la réinitialisation de deux bras et la scène prennent plus de temps que les configurations à un seul bras.

7

Revoir et rejouer les épisodes

Après chaque lot de 10 épisodes, rejouez et révisez avant de continuer. Faites attention à la coordination des bras : le décalage entre les bras gauche et droit apparaîtra comme une instabilité dans les mouvements du suiveur.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --episode_index=0
8

Pousser vers HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/dk1-bimanual-pick-place-v1
Format du jeu de données

Format de jeu de données LeRobot pour bimanuel (DK1)

Le schéma de l'ensemble de données bimanuel DK1 double les champs d'état conjoints par rapport à un enregistrement à un seul bras. Chaque épisode contient des observations synchronisées des bras leader et suiveur ainsi que de toutes les caméras.

Structure du répertoire

your-username/dk1-bimanual-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes, robot_type
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

Schéma de données d'épisode (bimanuel)

Champs dans chaque épisode Fichier Parquet — DK1 bimanuel (bi_dk1_follower)
observation.état flotteur32[16] Positions d'articulation des bras suiveurs : 7 DOF + pince × 2 bras = 16 valeurs
observation.state_left flotteur32[8] Bras suiveur gauche : 7 positions d'articulation + 1 pince (rad)
observation.state_right flotteur32[8] Bras suiveur droit : 7 positions d'articulation + 1 pince (rad)
action flotteur32[16] Positions cibles pour les deux bras suiveurs (depuis le téléop du bras leader)
action_gauche flotteur32[8] Positions cibles pour le bras gauche du leader
action_right flotteur32[8] Positions cibles pour le bras droit du leader
observation.images.wrist_cam chemin vidéo Caméra montée au poignet sur l'effecteur du bras suiveur
observation.images.overhead_cam chemin vidéo Caméra aérienne fixe affichant un espace de travail bimanuel complet
horodatage flotteur 64 Horodatage Unix du PC hôte. Les deux bras sont échantillonnés à cet horodatage.
arm_sync_delta_ms flotteur32 Spécifique au DK1 : écart de temps entre les lectures d’état des bras gauche et droit. Signaler les épisodes dont la durée dépasse 10 ms.
suivant.fait bouffonne Vrai sur la dernière image d'un épisode
Assurance qualité

Liste de contrôle qualité pour les démos bimanuelles

Les ensembles de données bimanuels ont des exigences de qualité plus strictes que les données à un seul bras. La mauvaise coordination entre les armes est la principale cause de l’échec de la formation politique DK1.

  • 1
    Le delta de synchronisation du bras est inférieur à 10 ms Vérifiez le arm_sync_delta_ms champ dans chaque épisode. Les pics supérieurs à 10 ms indiquent une contention du bus USB ou un paquet série abandonné. Supprimez les épisodes présentant des deltas élevés et soutenus.
  • 2
    Aucune oscillation du bras suiveur lors du contact Examinez les trajectoires des bras suiveurs aux points de contact (saisie, transfert, placement). L'oscillation apparaît comme un bruit haute fréquence dans observation.state. Réduisez les gains de PD s’ils sont présents. Voir dépannage logiciel.
  • 3
    Les deux bras accomplissent la tâche dans le même épisode Pour les tâches bimanuelles, un épisode n'est valable que si les deux bras terminent les sous-tâches qui leur sont assignées. Si le bras gauche a réussi mais que le bras droit a laissé tomber l'objet, marquez l'épisode comme ayant échoué et supprimez-le ou annotez-le.
  • 4
    Aucun cadre de caméra manquant Les deux flux de caméra doivent avoir le nombre d’images attendu. Les images manquantes de l'une ou l'autre des caméras corrompent l'entrée de la politique visuomotrice. Vérifiez auprès de lerobot.scripts.visualize_dataset.
  • 5
    La scène de tâche a été réinitialisée de manière identique entre les épisodes L'espace de travail des deux bras doit être réinitialisé pour chaque épisode. La position de l'objet, la configuration de départ du bras et les angles de la caméra doivent tous correspondre. Utilisez la configuration de départ photographiée comme référence.
  • 6
    La durée de l'épisode est cohérente Tous les épisodes réussis doivent avoir une durée inférieure à ± 25 % de la durée médiane. Les tâches bimanuelles présentent souvent une variance plus élevée que les tâches à un seul bras, mais les valeurs aberrantes extrêmes (3 × médiane) doivent être écartées.
  • 7
    Les statistiques de l'ensemble de données sont symétriques pour les deux bras Dans meta/stats.json, vérifie ça action_left et action_right les statistiques sont plausibles pour la géométrie de votre tâche. Si un bras présente une variance nulle, ce bras ne bougeait pas – vérifiez les affectations de ports.
  • 8
    Le style de démonstration Teleop est cohérent Toutes les démonstrations doivent utiliser la même trajectoire d'approche, la même stratégie de préhension et la même technique de transfert. Les stratégies mixtes produisent des distributions d'actions multimodales qui confondent la formation ACT. Utilisez un seul opérateur par version de tâche.
Étape suivante

Formation ACT sur votre ensemble de données bimanuel

Une fois que votre ensemble de données passe la liste de contrôle qualité, entraînez ACT ou Diffusion Policy directement avec LeRobot. ACT est recommandé pour les tâches bimanuelles DK1 : sa prédiction d'action fragmentée gère mieux la coordination entre les bras que les politiques en une seule étape.

Entraîner ACT (recommandé pour les bimanuels)

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --policy.chunk_size=100 \
  --policy.n_action_steps=100 \
  --training.num_epochs=5000 \
  --training.batch_size=8 \
  --output_dir=outputs/dk1-act-bimanual

Politique de diffusion des trains (pour les tâches riches en contacts)

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/dk1-diffusion-bimanual

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, des stratégies de synchronisation et de la composition des ensembles de données bimanuels multitâches.

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

Transférez votre ensemble de données bimanuel vers HuggingFace et commencez à entraîner ACT.