La directory dei dataset pubblici di AY-Robots che mostra i dataset LeRobot registrati su bracci di classe SO-100
DatasetOpen X-EmbodimentDROIDSO-100LeRobot

Utilizzo di DROID, BridgeData V2 e Open X su un SO-100

AY-Robots ResearchAugust 23, 202618 min di lettura

DROID, BridgeData V2 e Open X-Embodiment si convertono in azioni dell'end-effector 7-D su bracci a 6 e 7 DoF. Un SO-100 accetta 6 posizioni articolari. Cosa si trasferisce, cosa no, e cosa fare invece.

La versione breve

  • Le build LeRobot di tutti e tre condividono una convenzione: un'azione dell'end-effector 7-D [x, y, z, roll, pitch, yaw, gripper] e uno stato 8-D con uno slot pad. Un SO-100 acquisisce sei posizioni assolute delle giunture.
  • Quel vettore 7-D è l'artefatto del convertitore: il campo d'azione RLDS di DROID è di 6 velocità delle giunture più una posizione del gripper, con la vista cartesiana in action_dict.
  • Quattro clock: DROID 15 fps, BridgeData V2 5 fps, lo slice google_robot 3 fps, una registrazione SO-100 a 30 fps.
  • Non puoi unirli con i tuoi dati. validate_all_metadata solleva un errore al primo tra fps, robot_type o features che differisce, e tutti e tre differiscono.
  • Ciò che viene trasferito sono i pesi pre-addestrati, non gli episodi. I dati open-source rappresentano il 9.1 percento della miscela di pre-addestramento di pi0.
  • Il loro uso reale più economico è un banco di prova: un campione DROID da 2 GB, 100 episodi, noto per essere buono, che dimostra la tua pipeline prima di registrare per un fine settimana.

C'è un dataset pubblico di un milione di traiettorie su un Google Cloud bucket e un SO-100 sulla scrivania che è costato da 110 a 150 EUR in parti. Perché il primo non può insegnare al secondo? In parte può, ma quasi nessuno del trasferimento avviene dove le persone si aspettano, e la parte che sembra più facile non funziona affatto.

Cosa segue: cosa c'è dentro DROID, BridgeData V2 e Open X-Embodiment, dove ciascuno si scontra con un braccio 5-DoF a basso costo, e cosa fare invece. Ogni numero riportato di seguito proviene dal documento, dalla scheda del dataset o dal file sorgente a cui appartiene.

Cosa contengono realmente i tre dataset

DROIDBridgeData V2Open X-Embodiment
RobotFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 embodiments, 60 datasets, 34 labs
Scala76k trajectories, 350 hours60,096 trajectories1M+ trajectories, 527 skills
Diversità564 scenes, 84 tasks, 50 collectors24 environments, 13 skills160,266 tasks, 21 institutions
Composizionetutto teleoperato50.365 teleoperati, 9.731 scriptatiper laboratorio di origine
Frequenza di controllo15 Hz5 Hzvaria, da 3 fps in su
Telecamere2 x ZED 2 esterne, 1 x ZED Mini da polsofino a 4, la maggior parte degli episodi solo quella fissaqualsiasi cosa usasse il laboratorio
Download grezzo1.7 TB RLDS, 8.7 TB stereo grezzoarchivi JPEGbucket TFDS per dataset
Il punto di ingresso è la conversione LeRobot, non il bucket originale

Poche persone scaricano ancora 1.7 TB di TFRecords RLDS. L'organizzazione della comunità IPEC-COMMUNITY ha ripubblicato la maggior parte di Open X-Embodiment in formato dataset LeRobot con video AV1, dove DROID si attesta a 392 GB. Questa è la versione con cui lavorerai, e il suo meta/info.json è ciò che devi leggere per primo.

DROID

Il più standardizzato dei tre. Un unico setup ovunque: un Franka Panda con una pinza Robotiq 2F-85, due telecamere stereo ZED 2 regolabili e una ZED Mini da polso, teleoperato con controller Meta Quest 2, registrato tramite Polymetis a 15 Hz sia nello spazio articolare che in quello dell'end-effector . Le etichette linguistiche sono arrivate in seguito tramite tasq.ai, fino a tre per episodio.

  • 76k traiettorie, 350 ore, 564 scene, 84 compiti, 50 raccoglitori su tre continenti.
  • Il risultato principale è il co-training, non l'addestramento autonomo: i batch miscelati 50/50 con dimostrazioni in-domain superano il metodo successivo migliore del 22 percento di successo assoluto nella distribuzione, e del 17 percento fuori di essa.
  • IPEC-COMMUNITY/droid_lerobot: 92,233 episodes, 27,044,326 frames, franka, 15 fps, codebase_version v2.0, three AV1 streams at 180x320, 392 GB.
  • Un campione di debug di 2 GB e 100 episodi si trova su gs://gresearch/robotics/droid_100. Inizia da lì.

BridgeData V2

Il più vicino a una configurazione amatoriale: un braccio WidowX 250 a 6 DoF, 60,096 traiettorie attraverso 24 ambienti e 13 abilità a 5 Hz. Si noti la composizione: 50,365 dimostrazioni esperte teleoperate più 9,731 da una politica di pick-and-place scriptata randomizzata, quindi circa il 16 percento non è una dimostrazione umana, il che è importante per la apprendimento per imitazione qualità. Il download usuale, IPEC-COMMUNITY/bridge_orig_lerobot, riporta 53,192 episodes e 1,893,026 frames a 5 fps, robot_type widowx: meno dei 60,096 del paper, quindi leggere il conteggio da meta/info.json piuttosto che citare l'uno o l'altro.

Open X-Embodiment

Non un dataset nello stesso senso: 60 dataset di robot esistenti da 34 laboratori raggruppati in un'unica collezione RLDS che copre 22 implementazioni e oltre un milione di traiettorie. BridgeData V2 si trova al suo interno come bridge_orig; la sezione google_robot, fractal20220817_data, si converte in 87.212 episodi a 3 fps.

Il raggruppamento comporta un'avvertenza che il documento dichiara apertamente. Per gli esperimenti RT-X, gli autori convertono ogni sorgente in un'azione dell'end-effector a 7-DoF, ma non allineano i sistemi di coordinate tra i dataset e consentono che i valori di azione siano posizioni o velocità assolute o relative, secondo lo schema di controllo originale di ciascun robot. La loro conclusione: lo stesso vettore di azione può indurre movimenti molto diversi per robot diversi.

La directory dei dataset AY-Robots che elenca i dataset pubblici LeRobot con il numero di episodi e le descrizioni dei compiti
La directory pubblica dei dataset in /directory: dataset già nel formato LeRobot, già corrispondenti a un braccio supportato.

La discrepanza, in quattro parti

La discrepanza di incarnazione è solitamente trattata come un unico problema vago. Sono quattro, falliscono in modi diversi, e due non sono risolvibili tramite scripting.

1. Gradi di libertà

Un SO-100 ha cinque giunti del braccio più una pinza. Contato come motori, è un braccio a 6-DoF, e il paper SmolVLA lo definisce così; contato come meccanismo di posizionamento è a 5-DoF, e LeRobot lo definisce così nella sua docstring di cinematica inversa, che descrive l'IK a orientamento morbido sul SO-101 a 5-DOF dove il polso traccia l'orientamento solo parzialmente. Un Franka ha sette giunti di posizionamento. Questo divario decide quali pose esistono: un braccio a 5-DoF non può generalmente raggiungere una posizione e un orientamento arbitrari contemporaneamente, quindi il risolutore restituisce il più vicino possibile, un movimento diverso da quello dimostrato. Contesto: gradi di libertà.

python
# 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-D
Sinistra: il follower SO di LeRobot, da src/lerobot/robots/so_follower/so_follower.py. Destra: input della policy DROID di openpi. Sei contro otto.

Quindi un checkpoint DROID già pronto non è una scorciatoia. Physical Intelligence distribuisce pi05_droid all'indirizzo gs://openpi-assets/checkpoints/pi05_droid, e lo stesso README che ne loda l'ampiezza avverte che questi checkpoint esperti potrebbero non generalizzare alla tua configurazione. Il suo stato è composto da otto numeri di giunto Franka e le sue chiavi immagine sono exterior_image_1_left e wrist_image_left. Nessun flag lo trasforma in un comando SO-100 a sei motori.

2. Cosa dice realmente il vettore di azione

Più profondo della dimensionalità. Nelle conversioni LeRobot, tutti e tre indicano dove dovrebbe andare la pinza, nello spazio cartesiano. Un SO-100 indica dove dovrebbero andare sei servomotori. La conversione richiede un modello cinematico e un risolutore, non un semplice rimodellamento.

ProprietàOXE, DROID e Bridge in formato LeRobotSO-100 in LeRobot
Vettore di azione7-D: x, y, z, roll, pitch, yaw, pinza6-D: una posizione obiettivo per motore
Vettore di stato8-D, con uno slot di riempimento (google_robot usa un quaternione)6-D, uno per motore
Sistema di riferimentoCartesiano, non allineato tra i datasetspazio articolare, calibrazione per braccio
Assoluto o relativoentrambi, deciso dal laboratorio di origineposizioni obiettivo assolute
Unitànormalizzato per dataset, poi discretizzatogradi per impostazione predefinita (use_degrees=True), altrimenti da -100 a 100
Guasto silenziosoun delta letto come assolutoun braccio non calibrato
Il vettore cartesiano 7D è la convenzione del convertitore, non di DROID

Il README di openx2lerobot documenta uno stato unificato a 8 dimensioni e un'azione a 7 dimensioni per ogni dataset che converte, da cui deriva lo slot pad. Lo schema RLDS di DROID differisce: la sua action di livello superiore è un 7-vettore di 6 velocità articolari più 1 posizione del gripper, con cartesian_position, cartesian_velocity, joint_position e joint_velocity sotto action_dict. openpi legge la vista nello spazio articolare, la build di LeRobot ti fornisce quella cartesiana. Nessuna delle due è sei angoli assoluti del servo.

LeRobot fornisce il pezzo mancante: il follower SO ha un processore cinematico con i passaggi InverseKinematicsEEToJoints e ForwardKinematicsJointsToEE. Le sue chiavi sono ee.x, ee.y, ee.z più un vettore di rotazione ee.wx, ee.wy, ee.wz e ee.gripper_pos, quindi anche la codifica dell'orientamento differisce dal rollio-beccheggio-imbardata nei file. Il passaggio IK accetta un orientation_weight, predefinito 0.01, il cui docstring indica di impostare 0.0 per IK solo di posizione su bracci sotto-attuati. Puoi costruire il ponte, ma la metà dell'orientamento di ogni azione presa in prestito rimane approssimata.

3. Frequenza di controllo

DROID è a 15 Hz, BridgeData V2 a 5 Hz, la slice google_robot a 3 fps; gli autori di pi0 descrivono la parte open-source della loro miscela come controllo a bassa frequenza tra 2 e 10 Hz. DatasetRecordConfig di LeRobot ha come valori predefiniti fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Una addestrata su dati a 5 Hz ha imparato che un'azione copre 200 ms. Riproducendola a 30 Hz il braccio si muove lentamente; ricampionando ingenuamente si sfoca il frame in cui il gripper si chiude. Interagisce anche male con : un chunk di 100 passi è di 20 secondi a 5 Hz, 3.3 a 30 Hz.

4. Telecamere

BridgeData V2 ha randomizzato due pose della telecamera ogni 50 traiettorie, e la sua pagina di progetto nota che la maggior parte dei dati contiene comunque solo la vista fissa. DROID ha utilizzato supporti ZED 2 regolabili più una ZED Mini da polso. Hai due webcam USB posizionate a occhio. La posa della telecamera non è una variabile di disturbo per un ; è gran parte di ciò su cui l'encoder visivo si è basato, e nulla nel formato del file indica che le pose differiscono.

La trappola che ti costa una giornata

I pezzi si incastrano abbastanza bene da funzionare. Il dataset si carica, l'addestramento inizia, la perdita diminuisce, i checkpoint appaiono, nessun errore. Poi la policy non fa nulla di riconoscibile sul braccio e si passa una giornata a caccia di un bug nello script di addestramento. Non c'è nessun bug: il modello ha imparato una distribuzione di azioni cartesiane per un robot che non esiste nella tua stanza. Inizia da la perdita diminuisce, la policy non fa nulla, non dai tuoi iperparametri.

Cosa succede quando provi comunque a unire i dati

Il piano ovvio è concatenare: qualche migliaio di episodi DROID più i tuoi 50. LeRobot si rifiuta, e il rifiuto elenca le tre cose che differiscono.

  1. 1
    Scarica il campione di 100 episodi, non l'intero 1.7 TB

    2 GB sono sufficienti per vedere la struttura.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Converti RLDS nel formato LeRobot

    openx2lerobot incapsula le trasformazioni standard OXE e annota il tipo di robot e la frequenza di controllo. Il README lo inserisce in convert.sh.

    bash
    git 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
  3. 3
    Leggi meta/info.json prima di ogni altra cosa

    Questo file decide se il resto della tua giornata funzionerà.

    bash
    python -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'])"
  4. 4
    Prova l'unione e leggi l'errore

    merge carica ogni dataset, quindi validate_all_metadata controlla fps, robot_type e features rispetto al primo nell'elenco, sollevando un errore al primo disallineamento.

    bash
    lerobot-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.

I valori di riferimento provengono da qualsiasi dataset tu abbia elencato per primo, motivo per cui il messaggio si lamenta dei tuoi 30 fps anziché dei 15 di DROID. Correggi gli fps e incontrerai il controllo robot_type; correggi quello e incontrerai il controllo delle feature, 7 contro 6 per l'azione. Nessun ordinamento funziona, e la stessa protezione viene eseguita al momento della registrazione tramite sanity_check_dataset_robot_compatibility.

Non codificare rigidamente robot_type per aggirare il controllo

Sulla versione principale attuale di LeRobot, so100_follower e so101_follower sono entrambi registrati su un'unica SOFollowerRobotConfig condivisa, quindi la stringa di una registrazione reale non è necessariamente quella che ti aspetti. Leggila dal tuo meta/info.json e considera un controllo che hai dovuto disabilitare come un controllo che ti stava dicendo qualcosa.

Quindi cosa si trasferisce effettivamente?

Pesi, non episodi. Ogni moderna policy generalista ne ha assorbito una parte nel pre-addestramento, e quando si da un rilasciato, lo si eredita già riconciliato da persone con la potenza di calcolo necessaria per farlo correttamente. Il paper di pi0 è esplicito sulla proporzione: il 9,1 percento della sua miscela di pre-addestramento, contata in passi temporali, è costituito da dati open-source inclusi OXE, Bridge v2 e DROID. Questa cifra è di pi0; la miscela di ogni fornitore differisce.

Dati pubblici cross-embodiment su un progetto SO-100
Vantaggi
  • Prior visivi e linguistici: l'encoder ha visto migliaia di cucine e tazze e sa a cosa si riferisce "il blocco rosso".
  • Un prior sulla struttura di manipolazione: avvicinamento, chiusura, sollevamento, trasporto, rilascio, indipendente dall'embodiment anche quando i numeri non lo sono.
  • Un dataset noto e valido per i test. Se il tuo lavoro non riesce a sovradattare 100 episodi DROID, il problema è la tua configurazione.
  • Punti di riferimento: nei domini con dataset su piccola scala, RT-1-X ha raggiunto un tasso di successo medio superiore del 50 percento rispetto al metodo originale o a RT-1, e RT-2-X ha superato RT-2 di circa 3 volte sulle abilità emergenti.
Compromessi
  • Nessuna supervisione dell'azione utilizzabile. Un target cartesiano 7D non è un comando di giunto 6D.
  • Nessun trasferimento della posa della telecamera, e nulla nei dati indica che le pose differiscono.
  • Nessun trasferimento della temporizzazione: sorgenti a 3, 5 e 15 fps contro un registratore a 30 fps.
  • Nessun trasferimento del gripper. Un Robotiq 2F-85 e una ganascia stampata su un STS3215 differiscono per forza, corsa e dinamica.
  • La sola scala non è stata sufficiente nemmeno per i suoi autori: nei domini con grandi dataset, RT-1-X non ha superato un RT-1 addestrato solo su quel dataset.
  • Nessuna riduzione del numero di episodi propri necessari.
Strato del modelloSi trasferisce?Perché
Encoder visivoSì, fortementeOggetti e scene sono indipendenti dall'embodiment
Ancoraggio linguisticoLe istruzioni sono testo, non geometria
Fusione cross-modalePer lo piùSi concentra sull'oggetto nominato nel prompt
Encoder di propriocezioneNoLa dimensione dell'input e la semantica dei giunti differiscono
Testa d'azioneNoAddestrato su uno spazio cartesiano 7D in cui non ti trovi
Statistiche di normalizzazioneNo, e pericolosoStatistiche esterne alterano ogni comando

Questo è il motivo per cui SmolVLA si comporta in modo diverso su un braccio a basso costo. Il suo articolo seleziona 481 dataset della community da Hugging Face, filtrati per tipo di embodiment, numero di episodi, qualità dei dati e copertura dei frame: 22.9K episodi, 10.6M frame, valutati su bracci reali SO-100 e SO-101. Piccolo e corrispondente batte grande e non corrispondente. Confronta ACT contro SmolVLA.

Tre percorsi che vale la pena intraprendere

Percorso A: fine-tuning da un checkpoint che ha già assimilato i dati

La maggior parte delle persone dovrebbe scegliere questo. Non si toccano mai DROID o Open X-Embodiment: scegli una policy il cui pre-training ha già assorbito dati cross-embodiment, registra i tuoi episodi, esegui il fine-tuning.

PolicyParametriEpisodi minimiFormato del datasetLivello GPUInferenzaCheckpoint di base
GR00T N1.7~3 B, ~40 M trained in fine-tuning50LeRobot v2.0 or v2.1A100 or H100 80 GB152 ms per stepnvidia/GR00T-N1.7-3B
GR00T N1.5~3 B50LeRobot v2.0 or v2.1A100 or H100 80 GB165 msnvidia/GR00T-N1.5-3B
Pi0.5~3 B, PaliGemma backbone50LeRobot v3.0A100 or H100 80 GB485 mslerobot/pi05_base
SmolVLA~450 M30LeRobot v3.0RTX 4090 or any 24 GB245 mslerobot/smolvla_base
ACT~80 M50LeRobot v3.0RTX 4090 or any 24 GB20 msnone, from scratch

ACT è il caso limite onesto: nessun modello di base, quindi nessuno dei dati pubblici lo raggiunge mai. Non è automaticamente uno svantaggio, poiché a 20 ms per passo d'azione è l'unico dei cinque che può chiudere un ciclo veloce, come la pagina di ACT illustra. Scegli in base al compito usando tutti e cinque confrontati, GR00T N1.7 contro Pi0.5, e i 332 risultati di benchmark su 85 modelli in l'arena.

Percorso B: usa DROID come banco di prova

Il campione di 100 episodi è il miglior 2 GB che scaricherai questo mese, e non per l'addestramento. È un dataset che sai essere corretto. Esegui il tuo convertitore, loader e un breve lavoro GPU su di esso; qualsiasi cosa fallisca è un bug dell'infrastruttura trovato quando era economico. NVIDIA fa lo stesso su larga scala: la scheda GR00T N1.7 elenca quattro varianti post-addestrate, per Bridge e Fractal in SimplerEnv, DROID e LIBERO.

Percorso C: registra il tuo, deliberatamente

Da trenta a cinquanta sembra poco rispetto a 76.000 finché non ricordi che i tuoi sono gli unici con il tuo braccio, le tue telecamere e il tuo tavolo. Con le impostazioni predefinite di LeRobot, 50 episodi equivalgono a 100 minuti di tempo effettivo. Vedi , e .

La pagina del tutorial di registrazione di AY-Robots che mostra i passaggi per acquisire un dataset LeRobot da una sessione di teleoperazione
La procedura guidata di registrazione su /learn/record-your-first-dataset: il passaggio che i dati pubblici non possono sostituire.

Due modi per passare dai dati pubblici a una policy funzionante

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.

  1. 1
    Install LeRobot with the extras the scripts need

    The record and train entry points each declare their own extra.

    bash
    pip install 'lerobot[core_scripts]'   # lerobot-record
    pip install 'lerobot[training]'      # lerobot-train
    pip install gsutil tensorflow tensorflow-datasets
  2. 2
    Get a small, known-good slice

    100 DROID episodes, 2 GB.

    bash
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  3. 3
    Convert to LeRobot form

    Writes the unified 8-D state and 7-D action, annotating robot type and control frequency.

    bash
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  4. 4
    Check 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.

    bash
    python src/lerobot/scripts/convert_dataset_v21_to_v30.py \
        --repo-id=you/droid100_lerobot
  5. 5
    Record your own episodes

    Defaults: 30 fps, 60 s per episode, 60 s reset, 50 episodes. The teleoperator type is so100_leader.

    bash
    lerobot-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"
  6. 6
    Fine-tune on your data only

    Weights from public data, actions from your own. Do not mix the datasets.

    bash
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=you/so100_pick_block \
      --policy.device=cuda \
      --batch_size=4 \
      --steps=20000
Where the time actually goes

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.

La pagina di download del client desktop AY-Robots, il client che registra dataset in formato LeRobot da una sessione di teleoperazione
Il client desktop su /download scrive i dataset LeRobot direttamente da una sessione di teleoperazione, evitando la conversione RLDS.

Costo di ogni percorso

PercorsoArchiviazioneTempo umanoCosto GPUProbabilità che muova il braccio
DROID convertito da solo392 GBgiorni di conversione4 to 12 USDmolto bassa, spazio di azione errato
DROID unito ai tuoi episodientrambiblocked by validate_all_metadatan/anessuna, non viene eseguito
SmolVLA, da 30 a 50 episodi propripochi GB100 min di registrazione1 to 3 USDalta
GR00T N1.7, 50 episodi propripochi GB100 min di registrazione4 to 12 USDalta
ACT da zero, 50 episodi propripochi GB100 min di registrazione1 to 3 USDalta, 20 ms di inferenza
Esempio DROID come fixture di test2 GBun pomeriggiouna breve esecuzionealta, come convalida

L'asimmetria è il punto: il percorso che prende in prestito più dati è il più costoso e meno propenso a muovere il tuo braccio. Meno di due ore della tua stessa teleoperazione battono un terabyte della Franka di qualcun altro. Nessun braccio ancora? /live trasmette in streaming un SO-100 fisico senza registrazione. Poi addestra la tua prima policy, e SmolVLA su SO-100 per la guida specifica.

Un piano predefinito ragionevole

Scarica il campione DROID da 2 GB e usalo per testare la tua pipeline. Ignora gli altri 1.7 TB. Registra 50 episodi di un singolo compito con telecamere fisse. Ottimizza SmolVLA per primo, perché con un minimo di 30 episodi su una scheda da 24 GB è il più economico su cui iterare, poi prova GR00T N1.7 sugli stessi dati. Confronta sul tuo compito, non su un benchmark.

Registra dataset che corrispondono già al tuo braccio

Il client desktop scrive dataset in formato LeRobot direttamente da una sessione di teleoperazione: braccio giusto, frame rate giusto, spazio di azione giusto. Nessuna conversione RLDS, nessuna rimappatura.

Ottieni il client desktop
Posso addestrare una policy su DROID ed eseguirla sul mio SO-100?

Non direttamente. Nella build LeRobot, le azioni DROID sono comandi dell'end-effector a 7 gradi di libertà su un Franka Panda a 15 fps; nel RLDS grezzo sono 6 velocità articolari più una posizione del gripper. Un SO-100 richiede 6 posizioni articolari assolute. Avresti bisogno di un livello di cinematica inversa, e anche in quel caso un polso a 5 DoF non può riprodurre pose arbitrarie a 6 DoF.

Posso mescolare episodi DROID o Bridge con i miei episodi SO-100?

No. validate_all_metadata richiede fps, robot_type e schema delle feature identici e solleva un ValueError al primo disallineamento. Tutti e tre differiscono: 15 o 5 fps contro 30, franka o widowx contro il tuo braccio, forme di azione di 7 contro 6. Riscrivere i metadati per superare il controllo non risolve la semantica.

Open X-Embodiment è quindi inutile per un braccio a basso costo?

No, ma il suo valore ti arriva tramite pesi pre-addestrati, non episodi. I dataset open-source, inclusi OXE, Bridge v2 e DROID, costituiscono il 9.1 percento della miscela di pre-addestramento di pi0, e NVIDIA distribuisce varianti di GR00T N1.7 post-addestrate su Bridge, Fractal, DROID e LIBERO. Ciò che non puoi fare è aggiungere quegli episodi alla tua registrazione.

Quale policy beneficia maggiormente dei dati pubblici cross-embodiment?

Pi0.5 e i modelli GR00T presentano il maggior pre-addestramento cross-embodiment, ma SmolVLA spesso si comporta meglio su un braccio a basso costo: il suo set di pre-addestramento è composto da 481 dataset della community, 22.9K episodi e 10.6M frame, valutati su bracci reali SO-100 e SO-101. ACT è l'opposto: nessun modello base, 20 ms per passo di azione.

Di quanti dei miei episodi ho effettivamente bisogno?

30 per SmolVLA, 50 per GR00T N1.7, GR00T N1.5, Pi0.5 e ACT. Con le impostazioni predefinite di LeRobot di 60 s per episodio e 60 s di reset, 50 episodi equivalgono a 100 minuti di tempo effettivo. I dati cross-embodiment presi in prestito non riducono questi numeri.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started