
DROID, BridgeData V2 et Open X-Embodiment se convertissent en actions d'effecteur final 7D sur des bras à 6 et 7 degrés de liberté. Un SO-100 prend 6 positions articulaires. Ce qui est transférable, ce qui ne l'est pas, et que faire à la place.
En bref
- •Les versions LeRobot des trois partagent une convention : une action d'effecteur final 7-D [x, y, z, roll, pitch, yaw, gripper] et un état 8-D avec un emplacement de remplissage. Un SO-100 prend six positions articulaires absolues.
- •Ce vecteur 7-D est l'artefact du convertisseur : le champ d'action RLDS propre à DROID est composé de 6 vitesses articulaires plus une position de préhension, avec la vue cartésienne dans action_dict.
- •Quatre horloges : DROID 15 fps, BridgeData V2 5 fps, la tranche google_robot 3 fps, un enregistrement SO-100 à 30 fps.
- •Vous ne pouvez pas les fusionner avec vos propres données. validate_all_metadata lève une exception dès la première différence de fps, robot_type ou features, et les trois diffèrent.
- •Ce qui est transféré, ce sont les poids pré-entraînés, pas les épisodes. Les données open-source représentent 9.1 percent du mélange de pré-entraînement de pi0.
- •Leur utilisation réelle la moins chère est un banc d'essai : un échantillon DROID de 2 GB et 100 épisodes, dont la qualité est avérée, qui valide votre pipeline avant d'enregistrer pendant un week-end.
Il existe un ensemble de données publiques d'un million de trajectoires sur un bucket Google Cloud et un sur le bureau qui a coûté 110 à 150 EUR en pièces. Pourquoi le premier ne peut-il pas enseigner au second ? Il le peut en partie, mais presque aucun transfert ne se produit là où les gens s'y attendent, et la partie qui semble la plus facile ne fonctionne pas du tout.
Ce qui suit : ce qui se trouve dans , et , où chacun entre en collision avec un bras 5-DoF à faible coût, et ce qu'il faut faire à la place. Chaque chiffre ci-dessous provient du document, de la fiche de données ou du fichier source auquel il appartient.
Ce que contiennent réellement les trois ensembles de données
| DROID | BridgeData V2 | Open X-Embodiment | |
|---|---|---|---|
| Robot | Franka Panda, 7 DoF, Robotiq 2F-85 | WidowX 250, 6 DoF, rig d'environ 4 000 USD | 22 implémentations, 60 jeux de données, 34 laboratoires |
| Échelle | 76k trajectoires, 350 heures | 60 096 trajectoires | Plus d'1M de trajectoires, 527 compétences |
| Diversité | 564 scènes, 84 tâches, 50 collecteurs | 24 environnements, 13 compétences | 160 266 tâches, 21 institutions |
| Composition | tout téléopéré | 50 365 téléopérés, 9 731 scriptés | par laboratoire source |
| Taux de contrôle | 15 Hz | 5 Hz | varie, 3 fps et plus |
| Caméras | 2 x ZED 2 extérieures, 1 x ZED Mini au poignet | jusqu'à 4, la plupart des épisodes n'utilisent que la fixe | selon l'équipement du laboratoire |
| Téléchargement brut | 1.7 TB RLDS, 8.7 TB stéréo brut | Archives JPEG | buckets TFDS par jeu de données |
Peu de gens téléchargent encore 1.7 TB de TFRecords RLDS. L'organisation communautaire IPEC-COMMUNITY a republié la majeure partie d'Open X-Embodiment sous forme de jeu de données LeRobot avec vidéo AV1, où DROID représente 392 GB. C'est la version avec laquelle vous travaillerez, et son meta/info.json est ce qu'il faut lire en premier.
DROID
Le plus standardisé des trois. Un seul équipement partout : un Franka Panda avec une pince Robotiq 2F-85, deux caméras stéréo ZED 2 réglables et une ZED Mini au poignet, téléopéré avec des contrôleurs Meta Quest 2, enregistré via Polymetis à 15 Hz à la fois dans l'espace articulaire et de l'effecteur final. Les étiquettes linguistiques sont venues plus tard via tasq.ai, jusqu'à trois par épisode.
- 76k trajectoires, 350 heures, 564 scènes, 84 tâches, 50 collecteurs sur trois continents.
- Le résultat principal est le co-apprentissage, et non l'apprentissage autonome : des lots mélangés à 50/50 avec des démonstrations intra-domaine ont surpassé la meilleure méthode suivante de 22 % de succès absolu en distribution, et de 17 % hors distribution.
- IPEC-COMMUNITY/droid_lerobot : 92 233 épisodes, 27 044 326 images, franka, 15 ips, codebase_version v2.0, trois flux AV1 à 180x320, 392 Go.
- Un échantillon de débogage de 2 Go et 100 épisodes se trouve à l'adresse gs://gresearch/robotics/droid_100. Commencez par là.
BridgeData V2
Le plus proche d'une configuration de loisir : un bras WidowX 250 à 6 degrés de liberté, 60 096 trajectoires à travers 24 environnements et 13 compétences à 5 Hz. Notez la composition : 50 365 démonstrations téléopérées par des experts plus 9 731 provenant d'une politique de prise et de placement scriptée et randomisée, donc environ 16 % ne sont pas des démonstrations humaines, ce qui est important pour l'apprentissage par imitation la qualité. Le téléchargement habituel, IPEC-COMMUNITY/bridge_orig_lerobot, rapporte 53 192 épisodes et 1 893 026 images à 5 ips, robot_type widowx : moins que les 60 096 du document, il faut donc lire le compte à partir de meta/info.json plutôt que de citer l'un ou l'autre.
Open X-Embodiment
Pas un jeu de données au sens habituel : 60 jeux de données de robots existants provenant de 34 laboratoires regroupés dans une collection RLDS couvrant 22 implémentations et plus d'un million de trajectoires. BridgeData V2 s'y trouve sous le nom de bridge_orig ; la tranche google_robot, fractal20220817_data, se convertit en 87 212 épisodes à 3 ips.
Le regroupement comporte une mise en garde que l'article énonce clairement. Pour les expériences RT-X, les auteurs convertissent chaque source en une action d'effecteur final à 7 DDL, mais n'alignent pas les systèmes de coordonnées entre les jeux de données, et permettent que les valeurs d'action soient des positions ou des vitesses absolues ou relatives, selon le schéma de contrôle original de chaque robot. Leur conclusion : le même vecteur d'action peut induire des mouvements très différents pour différents robots.

Le décalage, en quatre parties
Le désalignement d'incarnation est généralement traité comme un problème vague. Il y en a quatre, ils échouent différemment, et deux ne peuvent pas être corrigés par script.
1. Degrés de liberté
Un SO-100 possède cinq articulations de bras plus une pince. Compté comme des moteurs, c'est un bras à 6 DDL, et le document SmolVLA l'appelle ainsi ; compté comme un mécanisme de positionnement, c'est un bras à 5 DDL, et LeRobot l'appelle ainsi dans sa docstring de cinématique inverse, qui décrit la CI à orientation douce sur le SO-101 à 5 DDL où le poignet ne suit l'orientation que partiellement. Un Franka possède sept articulations de positionnement. Cet écart détermine les poses possibles : un bras à 5 DDL ne peut généralement pas atteindre une position et une orientation arbitraires simultanément, de sorte que le solveur renvoie la position la plus proche qu'il peut, un mouvement différent de celui démontré. Contexte : degrés de liberté.
# src/lerobot/robots/so_follower/so_follower.py
motors = {
"shoulder_pan": Motor(1, "sts3215", norm_mode_body),
"shoulder_lift": Motor(2, "sts3215", norm_mode_body),
"elbow_flex": Motor(3, "sts3215", norm_mode_body),
"wrist_flex": Motor(4, "sts3215", norm_mode_body),
"wrist_roll": Motor(5, "sts3215", norm_mode_body),
"gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}
# action keys are "<motor>.pos"; send_action sync_writes them to
# "Goal_Position" -> a 6-D ABSOLUTE JOINT POSITION command
# openpi/src/openpi/policies/droid_policy.py
def make_droid_example() -> dict:
return {
"observation/exterior_image_1_left": np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
"observation/wrist_image_left": np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
"observation/joint_position": np.random.rand(7), # seven Franka joints
"observation/gripper_position": np.random.rand(1),
"prompt": "do something",
}
# state = concat(joint_position, gripper_pos) -> 8-DAinsi, un point de contrôle DROID prêt à l'emploi n'est pas un raccourci. Physical Intelligence livre pi05_droid à gs://openpi-assets/checkpoints/pi05_droid, et le même README qui vante son étendue avertit que ces points de contrôle experts pourraient ne pas se généraliser à votre configuration. Son état est composé de huit nombres d'articulations Franka et ses clés d'image sont exterior_image_1_left et wrist_image_left. Aucun drapeau ne transforme cela en une commande SO-100 à six moteurs.
2. Ce que le vecteur d'action dit réellement
Plus profond que la dimensionnalité. Dans les conversions LeRobot, les trois indiquent où le préhenseur doit aller, dans l'espace cartésien. Un SO-100 indique où six servomoteurs doivent aller. La conversion nécessite un modèle cinématique et un solveur, pas un remodelage.
| Propriété | OXE, DROID et Bridge sous forme LeRobot | SO-100 dans LeRobot |
|---|---|---|
| Vecteur d'action | 7-D: x, y, z, roll, pitch, yaw, gripper | 6-D : une position cible par moteur |
| Vecteur d'état | 8-D, avec un emplacement de remplissage (google_robot utilise un quaternion) | 6-D, un par moteur |
| Référentiel | Cartésien, non aligné entre les jeux de données | espace articulaire, calibration par bras |
| Absolu ou relatif | l'un ou l'autre, décidé par le laboratoire source | positions cibles absolues |
| Unités | normalisées par jeu de données, puis discrétisées | degrés par défaut (use_degrees=True), sinon -100 à 100 |
| Échec silencieux | un delta lu comme un absolu | un bras non calibré |
Le README d'openx2lerobot documente un état unifié à 8 dimensions et une action à 7 dimensions pour chaque jeu de données qu'il convertit, d'où provient l'emplacement pad. Le propre schéma RLDS de DROID diffère : son action de niveau supérieur est un vecteur à 7 éléments composé de 6 vitesses articulaires plus 1 position de préhension, avec cartesian_position, cartesian_velocity, joint_position et joint_velocity sous action_dict. openpi lit la vue de l'espace articulaire, la version LeRobot vous donne la vue cartésienne. Aucun des deux n'est six angles absolus de servo.
LeRobot fournit bien la pièce manquante : le suiveur SO dispose d'un processeur cinématique avec les étapes InverseKinematicsEEToJoints et ForwardKinematicsJointsToEE. Ses clés sont ee.x, ee.y, ee.z plus un vecteur de rotation ee.wx, ee.wy, ee.wz et ee.gripper_pos, de sorte que même l'encodage de l'orientation diffère du roulis-tangage-lacet (roll-pitch-yaw) dans les fichiers. L'étape IK prend un orientation_weight, par défaut 0.01, dont la docstring indique de le régler à 0.0 pour une IK basée uniquement sur la position pour les bras sous-actionnés. Vous pouvez construire le pont, mais la moitié de l'orientation de chaque action empruntée reste approximée.
3. Fréquence de contrôle
DROID est à 15 Hz, BridgeData V2 à 5 Hz, la tranche google_robot à 3 ips ; les auteurs de pi0 décrivent la partie open-source de leur mélange comme un contrôle à basse fréquence entre 2 et 10 Hz. Le DatasetRecordConfig de LeRobot utilise par défaut fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Une entraînée sur des données à 5 Hz a appris qu'une action couvre 200 ms. Rejouez-la à 30 Hz et le bras rampe ; rééchantillonnez naïvement et vous étalez l'image où le préhenseur se ferme. Cela interagit également mal avec le : un bloc de 100 étapes représente 20 secondes à 5 Hz, 3,3 secondes à 30 Hz.
4. Caméras
BridgeData V2 a randomisé deux poses de caméra toutes les 50 trajectoires, et sa page de projet note que la plupart des données ne contiennent de toute façon que la vue fixe. DROID a utilisé des supports ZED 2 réglables ainsi qu'une ZED Mini au poignet. Vous avez deux webcams USB positionnées à l'œil. La pose de la caméra n'est pas une variable parasite pour un ; c'est en grande partie ce sur quoi l'encodeur visuel s'est basé, et rien dans le format de fichier ne vous indique que les poses diffèrent.
Les pièces s'assemblent suffisamment bien pour fonctionner. Le jeu de données se charge, l'entraînement commence, la perte diminue, les points de contrôle apparaissent, aucune erreur. Ensuite, la politique ne fait rien de reconnaissable sur le bras et vous passez une journée à chasser un bug dans votre script d'entraînement. Il n'y a pas de bug : le modèle a appris une distribution d'actions cartésiennes pour un robot qui n'existe pas dans votre pièce. Commencez par la perte diminue, la politique ne fait rien, pas par vos hyperparamètres.
Ce qui se passe lorsque vous essayez de fusionner les données malgré tout
Le plan évident est de concaténer : quelques milliers d'épisodes DROID plus vos 50. LeRobot refuse, et le refus nomme les trois choses qui diffèrent.
- 1Télécharger l'échantillon de 100 épisodes, pas les 1,7 To complets
2 Go suffisent pour voir la structure.
bashpip install gsutil tensorflow tensorflow-datasets gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/ - 2Convertir RLDS au format LeRobot
openx2lerobot encapsule les transformations standard OXE et annote le type de robot ainsi que la fréquence de contrôle. Le README place ceci dans convert.sh.
bashgit clone https://github.com/Tavish9/any4lerobot.git cd any4lerobot/openx2lerobot python openx_rlds.py \ --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \ --local-dir ~/lerobot_droid100 \ --repo-id you/droid100_lerobot \ --use-videos - 3Lire meta/info.json avant toute autre chose
Ce fichier détermine si le reste de votre journée se déroulera sans accroc.
bashpython -c "import json;d=json.load(open('meta/info.json'));\ print(d['codebase_version'], d['robot_type'], d['fps']);\ print(d['features']['action']['shape'], d['features']['observation.state']['shape'])" - 4Tenter la fusion et lire l'erreur
merge charge chaque jeu de données, puis validate_all_metadata vérifie les fps, le robot_type et les features par rapport au premier de la liste, levant une erreur à la première incompatibilité.
bashlerobot-edit-dataset \ --new_repo_id you/mixed \ --operation.type merge \ --operation.repo_ids "['you/droid100_lerobot', 'you/my_so100_task']" # ValueError: Same fps is expected, but got fps=30 instead of 15.
Les valeurs de référence proviennent du jeu de données que vous avez listé en premier, c'est pourquoi le message se plaint de vos 30 fps plutôt que des 15 de DROID. Corrigez les fps et vous rencontrerez la vérification du robot_type ; corrigez cela et vous rencontrerez la vérification des features, 7 contre 6 pour l'action. Aucun ordre ne permet de passer, et la même protection s'exécute au moment de l'enregistrement via sanity_check_dataset_robot_compatibility.
Sur la branche principale actuelle de LeRobot, so100_follower et so101_follower sont tous deux enregistrés sur une seule SOFollowerRobotConfig partagée, donc la chaîne de caractères d'un enregistrement réel n'est pas nécessairement celle que vous attendez. Lisez-la depuis votre propre meta/info.json, et considérez une vérification que vous avez dû désactiver comme une vérification qui vous signalait quelque chose.
Alors, qu'est-ce qui est réellement transféré ?
Les poids, pas les épisodes. Chaque politique généraliste moderne en a absorbé une partie lors du pré-entraînement, et lorsque vous à partir d'un publié, vous l'héritez déjà réconcilié par des personnes disposant de la puissance de calcul nécessaire pour le faire correctement. L'article de pi0 est franc sur la proportion : 9,1 % de son mélange de pré-entraînement, compté en pas de temps, est constitué de données open-source incluant OXE, Bridge v2 et DROID. Ce chiffre est celui de pi0 ; le mélange de chaque fournisseur diffère.
- Priors visuels et linguistiques : l'encodeur a vu des milliers de cuisines et de tasses et sait à quoi "le bloc rouge" fait référence.
- Un prior sur la structure de manipulation : approche, fermeture, levage, transport, relâchement, indépendant de l'incarnation même lorsque les chiffres ne le sont pas.
- Un ensemble de données éprouvé pour les tests. Si votre tâche ne peut pas sur-apprendre 100 épisodes DROID, le problème vient de votre configuration.
- Points de référence : sur les domaines d'ensembles de données à petite échelle, RT-1-X a atteint un taux de succès moyen 50 % plus élevé que la méthode originale ou RT-1, et RT-2-X a battu RT-2 d'environ 3x sur les compétences émergentes.
- Pas de supervision d'action utilisable. Une cible cartésienne 7D n'est pas une commande articulaire 6D.
- Pas de transfert de pose de caméra, et rien dans les données n'indique que les poses diffèrent.
- Pas de transfert de synchronisation : sources à 3, 5 et 15 ips contre un enregistreur à 30 ips.
- Pas de transfert de préhenseur. Un Robotiq 2F-85 et une mâchoire imprimée sur un STS3215 diffèrent en termes de force, de course et de dynamique.
- L'échelle seule n'a pas suffi, même pour ses auteurs : dans les domaines de grands ensembles de données, RT-1-X n'a pas surpassé un RT-1 entraîné uniquement sur cet ensemble de données.
- Pas de réduction du nombre d'épisodes dont vous avez besoin.
| Couche du modèle | Transfert ? | Pourquoi |
|---|---|---|
| Encodeur de vision | Oui, fortement | Les objets et les scènes sont indépendants de l'incarnation |
| Ancrage linguistique | Oui | Les instructions sont du texte, pas de la géométrie |
| Fusion intermodale | Principalement | Se concentre sur l'objet nommé dans l'invite |
| Encodeur de proprioception | Non | La dimension d'entrée et la sémantique articulaire diffèrent |
| Tête d'action | Non | Entraîné sur un espace cartésien 7D dans lequel vous ne vous trouvez pas |
| Statistiques de normalisation | Non, et dangereux | Les statistiques étrangères décalent chaque commande |
C'est pourquoi SmolVLA se comporte différemment sur un bras à faible coût. Son article sélectionne 481 ensembles de données communautaires de Hugging Face, filtrés par type d'incarnation, nombre d'épisodes, qualité des données et couverture d'images : 22.9K épisodes, 10.6M images, évalués sur de vrais bras SO-100 et SO-101. Petit et adapté l'emporte sur grand et inadapté. Comparez sur ACT against SmolVLA.
Trois voies à suivre
Voie A : affiner à partir d'un point de contrôle qui a déjà absorbé les données
La plupart des gens devraient choisir celle-ci. Vous ne touchez jamais à DROID ou Open X-Embodiment : choisissez une politique dont le pré-entraînement a déjà absorbé les données inter-incarnations, enregistrez vos propres épisodes, affinez.
| Politique | Paramètres | Épisodes min. | Format du jeu de données | Niveau de GPU | Inférence | Point de contrôle de base |
|---|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, ~40 M entraînés en fine-tuning | 50 | LeRobot v2.0 or v2.1 | A100 or H100 80 GB | 152 ms par étape | nvidia/GR00T-N1.7-3B |
| GR00T N1.5 | ~3 B | 50 | LeRobot v2.0 or v2.1 | A100 or H100 80 GB | 165 ms | nvidia/GR00T-N1.5-3B |
| Pi0.5 | ~3 B, architecture PaliGemma | 50 | LeRobot v3.0 | A100 or H100 80 GB | 485 ms | lerobot/pi05_base |
| SmolVLA | ~450 M | 30 | LeRobot v3.0 | RTX 4090 ou toute carte 24 Go | 245 ms | lerobot/smolvla_base |
| ACT | ~80 M | 50 | LeRobot v3.0 | RTX 4090 ou toute carte 24 Go | 20 ms | aucun, à partir de zéro |
ACT est le cas limite honnête : pas de modèle de base, donc aucune des données publiques ne l'atteint. Ce n'est pas automatiquement un désavantage, car à 20 ms par étape d'action, c'est le seul des cinq qui peut boucler une boucle rapide, comme la page ACT l'explique. Choisissez par tâche en utilisant les cinq comparés, GR00T N1.7 contre Pi0.5, et les 332 résultats de benchmark sur 85 modèles dans l'arène.
Chemin B : utiliser DROID comme banc d'essai
L'échantillon de 100 épisodes est le meilleur 2 Go que vous téléchargerez ce mois-ci, et non pour l'entraînement. C'est un jeu de données dont vous savez qu'il est correct. Exécutez votre convertisseur, votre chargeur et une courte tâche GPU dessus ; tout ce qui échoue est un bug d'infrastructure trouvé alors que c'était bon marché. NVIDIA fait de même à grande échelle : la carte GR00T N1.7 répertorie quatre variantes post-entraînées, pour Bridge et Fractal dans SimplerEnv, DROID et LIBERO.
Chemin C : enregistrez les vôtres, délibérément
Trente à cinquante semble peu à côté de 76 000 jusqu'à ce que vous vous souveniez que les vôtres sont les seuls avec votre bras, vos caméras et votre table. Avec les paramètres par défaut de LeRobot, 50 épisodes représentent 100 minutes de temps réel. Voir , et .

Deux façons de passer des données publiques à une politique fonctionnelle
All of this runs on your own machine plus a rented GPU. Knowing the manual path matters because when something breaks you will know which layer broke.
- 1Install LeRobot with the extras the scripts need
The record and train entry points each declare their own extra.
bashpip install 'lerobot[core_scripts]' # lerobot-record pip install 'lerobot[training]' # lerobot-train pip install gsutil tensorflow tensorflow-datasets - 2Get a small, known-good slice
100 DROID episodes, 2 GB.
bashgsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/ - 3Convert to LeRobot form
Writes the unified 8-D state and 7-D action, annotating robot type and control frequency.
bashpython openx_rlds.py \ --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \ --local-dir ~/lerobot_droid100 \ --repo-id you/droid100_lerobot \ --use-videos - 4Check the version against your trainer
The converter README documents v3.0 output; the published IPEC-COMMUNITY datasets report v2.0. GR00T wants v2.0 or v2.1 and crashes on v3.0; Pi0.5, SmolVLA and ACT want v3.0. Mind the gap: the only conversion script on LeRobot main goes 2.1 to 3.0.
bashpython src/lerobot/scripts/convert_dataset_v21_to_v30.py \ --repo-id=you/droid100_lerobot - 5Record your own episodes
Defaults: 30 fps, 60 s per episode, 60 s reset, 50 episodes. The teleoperator type is so100_leader.
bashlerobot-record \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --dataset.repo_id=you/so100_pick_block \ --dataset.num_episodes=50 \ --dataset.single_task="Pick up the red block and put it in the bowl" - 6Fine-tune on your data only
Weights from public data, actions from your own. Do not mix the datasets.
bashlerobot-train \ --policy.path=lerobot/smolvla_base \ --dataset.repo_id=you/so100_pick_block \ --policy.device=cuda \ --batch_size=4 \ --steps=20000
Not in training; the GPU job is hours. The conversion, the version mismatch and the moment you find your dataset is v2.0 and your trainer wants v3.0 are days. Read dataset rejected as v3 first.
The platform removes the GPU and pipeline plumbing. It does not remove the embodiment mismatch: point the trainer at a converted DROID dataset and you get a policy trained on Franka actions, exactly as you would locally.
- 1Pick a policy, not a dataset
The five trainable policies, with parameter counts, GPU tiers and latencies, are at /policies.
- 2Record with the desktop client
It writes LeRobot-format datasets, episodes, camera streams and joint states, straight out of a teleop session. No conversion step to get wrong.
- 3Or bring a dataset you already have
The training form accepts one from /directory, a Hugging Face repo id, or your own machine. A repo id means a converted OXE dataset will load, and the mismatch loads with it.
- 4Train on a rented GPU
The backend rents a card on a spot market by required VRAM. SmolVLA or ACT on 24 GB: 2 to 5 hours, about 1 to 3 USD. GR00T or Pi0.5 on A100 or H100: 3 to 6 hours, about 4 to 12 USD. See /pricing.
- 5Serve it back to the arm
/api/inference/pod auto-provisions a GPU pod serving the policy; the local client talks to that endpoint. Pods carry an idle watchdog and destroy themselves, so nothing keeps billing silently.
Inference has to sit next to the servos for fast tasks. The control loop is 20 to 485 ms per action step depending on the model, and public-internet round trips turn a working policy into a hesitant one. Remote inference is fine for slow pick-and-place, not fast reactive motion.
The platform helps with the boring parts: the right format for the right arm at the right frame rate, and no babysitting a spot instance. It helps with nothing else in this article.

Ce que coûte chaque chemin
| Chemin | Stockage | Temps humain | Coût GPU | Probabilité qu'il bouge votre bras |
|---|---|---|---|---|
| DROID converti seul | 392 GB | jours de conversion | 4 to 12 USD | très faible, espace d'action incorrect |
| DROID fusionné avec vos épisodes | les deux | bloqué par validate_all_metadata | n/a | aucun, il ne s'exécute pas |
| SmolVLA, 30 à 50 épisodes propres | quelques Go | 100 min d'enregistrement | 1 to 3 USD | élevée |
| GR00T N1.7, 50 épisodes propres | quelques Go | 100 min d'enregistrement | 4 to 12 USD | élevée |
| ACT à partir de zéro, 50 épisodes propres | quelques Go | 100 min d'enregistrement | 1 to 3 USD | élevée, 20 ms d'inférence |
| Échantillon DROID comme banc d'essai | 2 GB | un après-midi | une courte exécution | élevée, comme validation |
L'asymétrie est le point clé : le chemin qui emprunte le plus de données est le plus coûteux et le moins susceptible de faire bouger votre bras. Moins de deux heures de votre propre téléopération valent mieux qu'un téraoctet de données Franka de quelqu'un d'autre. Pas de bras encore ? /live diffuse un SO-100 physique sans inscription. Ensuite, entraînez votre première politique, et SmolVLA sur SO-100 pour le guide spécifique.
Téléchargez l'échantillon DROID de 2 Go et utilisez-le pour valider votre pipeline. Ignorez les 1,7 To restants. Enregistrez 50 épisodes d'une tâche avec des caméras fixes. Affinez SmolVLA d'abord, car avec un minimum de 30 épisodes sur une carte de 24 Go, c'est le moins cher pour itérer, puis essayez GR00T N1.7 sur les mêmes données. Comparez sur votre tâche, pas sur un benchmark.
Enregistrez des ensembles de données qui correspondent déjà à votre bras
Le client de bureau écrit des ensembles de données au format LeRobot directement à partir d'une session de téléopération : bon bras, bonne fréquence d'images, bon espace d'action. Pas de conversion RLDS, pas de remappage.
Obtenez le client de bureauPuis-je entraîner une politique sur DROID et l'exécuter sur mon SO-100 ?▾
Pas directement. Dans la version LeRobot, les actions DROID sont des commandes d'effecteur final 7D sur un Franka Panda à 15 ips ; dans le RLDS brut, ce sont 6 vitesses articulaires plus une position de préhension. Un SO-100 prend 6 positions articulaires absolues. Vous auriez besoin d'une couche de cinématique inverse, et même alors, un poignet à 5 DDL ne peut pas reproduire des poses 6 DDL arbitraires.
Puis-je mélanger des épisodes DROID ou Bridge avec mes propres épisodes SO-100 ?▾
Non. validate_all_metadata nécessite des fps, robot_type et feature schema identiques et lève une ValueError à la première non-concordance. Les trois diffèrent : 15 ou 5 ips contre 30, franka ou widowx contre votre bras, formes d'action de 7 contre 6. Réécrire les métadonnées pour passer la vérification ne corrige pas la sémantique.
L'Open X-Embodiment est-il alors inutile pour un bras à faible coût ?▾
Non, mais sa valeur vous parvient via des poids pré-entraînés, pas des épisodes. Les ensembles de données open-source, y compris OXE, Bridge v2 et DROID, représentent 9,1 % du mélange de pré-entraînement de pi0, et NVIDIA livre des variantes de GR00T N1.7 post-entraînées sur Bridge, Fractal, DROID et LIBERO. Ce que vous ne pouvez pas faire, c'est ajouter ces épisodes à votre propre enregistrement.
Quelle politique bénéficie le plus des données publiques inter-corps ?▾
Pi0.5 et les modèles GR00T bénéficient du plus grand pré-entraînement inter-corps, mais SmolVLA se comporte souvent le mieux sur un bras à faible coût : son ensemble de pré-entraînement comprend 481 ensembles de données communautaires, 22,9K épisodes et 10,6M images, évalués sur de vrais bras SO-100 et SO-101. ACT est l'opposé : pas de modèle de base, 20 ms par étape d'action.
De combien de mes propres épisodes ai-je réellement besoin ?▾
30 pour SmolVLA, 50 pour GR00T N1.7, GR00T N1.5, Pi0.5 et ACT. Avec les paramètres par défaut de LeRobot de 60 s par épisode et 60 s de réinitialisation, 50 épisodes représentent 100 minutes de temps réel. Les données inter-corps empruntées ne réduisent pas ces chiffres.
Sources
- DROID: Un ensemble de données de manipulation de robots à grande échelle en milieu réel
- Documentation DROID: tailles de téléchargement et le schéma d'épisode RLDS
- BridgeData V2: Un ensemble de données pour l'apprentissage robotique à l'échelle
- Page du projet BridgeData V2: composition et couverture des caméras
- Open X-Embodiment: Ensembles de données d'apprentissage robotique et modèles RT-X
- Page du projet Open X-Embodiment
- google-deepmind/open_x_embodiment: liste des ensembles de données et points de contrôle RT-1-X
- any4lerobot: le convertisseur openx2lerobot et son état unifié 8-D, action 7-D
- IPEC-COMMUNITY/droid_lerobot: meta/info.json et taille du dépôt
- IPEC-COMMUNITY/bridge_orig_lerobot: meta/info.json
- IPEC-COMMUNITY/fractal20220817_data_lerobot: la tranche google_robot à 3 ips
- huggingface/lerobot: suiveur SO, processeur cinématique, configurations d'agrégation et d'enregistrement
- openpi: entrées de politique DROID et le point de contrôle pi05_droid
- pi0: Un modèle de flux Vision-Langage-Action pour le contrôle général des robots
- SmolVLA: Un modèle Vision-Langage-Action pour une robotique abordable et efficace
Sources
- DROID: A Large-Scale In-The-Wild Robot Manipulation Dataset
- DROID docs: download sizes and the RLDS episode schema
- BridgeData V2: A Dataset for Robot Learning at Scale
- BridgeData V2 project page: composition and camera coverage
- Open X-Embodiment: Robotic Learning Datasets and RT-X Models
- Open X-Embodiment project page
- google-deepmind/open_x_embodiment: dataset list and RT-1-X checkpoints
- any4lerobot: the openx2lerobot converter and its unified 8-D state, 7-D action
- IPEC-COMMUNITY/droid_lerobot: meta/info.json and repo size
- IPEC-COMMUNITY/bridge_orig_lerobot: meta/info.json
- IPEC-COMMUNITY/fractal20220817_data_lerobot: the google_robot slice at 3 fps
- huggingface/lerobot: SO follower, kinematics processor, aggregate and record configs
- openpi: DROID policy inputs and the pi05_droid checkpoint
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started