Directorul public de seturi de date AY-Robots care arată seturi de date LeRobot înregistrate pe brațe din clasa SO-100
Seturi de dateOpen X-EmbodimentDROIDSO-100LeRobot

Utilizarea DROID, BridgeData V2 și Open X pe un SO-100

AY-Robots ResearchAugust 23, 202618 min de lectură

DROID, BridgeData V2 și Open X-Embodiment se convertesc în acțiuni de efector final 7-D pe brațe cu 6 și 7 grade de libertate. Un SO-100 preia 6 poziții de articulație. Ce se transferă, ce nu, ce să faci în schimb.

Pe scurt

  • Versiunile LeRobot ale tuturor celor trei partajează o convenție: o acțiune a efectorului final 7-D [x, y, z, roll, pitch, yaw, gripper] și o stare 8-D cu un slot de umplutură. Un SO-100 preia șase poziții absolute ale articulațiilor.
  • Acel vector 7-D este artefactul convertorului: propriul câmp de acțiune RLDS al DROID este de 6 viteze ale articulațiilor plus o poziție a prehensorului, cu vizualizarea carteziană în action_dict.
  • Patru frecvențe: DROID 15 fps, BridgeData V2 5 fps, secțiunea google_robot 3 fps, o înregistrare SO-100 la 30 fps.
  • Nu le puteți îmbina cu propriile date. validate_all_metadata generează o eroare la prima diferență de fps, robot_type sau caracteristici, iar toate trei diferă.
  • Ceea ce se transferă sunt ponderile pre-antrenate, nu episoadele. Datele open-source reprezintă 9.1 percent din amestecul de pre-antrenare al pi0.
  • Cea mai ieftină utilizare reală a lor este un dispozitiv de testare: o mostră DROID de 2 GB, 100 de episoade, cunoscută ca fiind bună, care vă validează pipeline-ul înainte de a înregistra un weekend întreg.

Există un set de date public cu un milion de traiectorii pe un bucket Google Cloud și un SO-100 pe birou care a costat 110 to 150 EUR în piese. De ce primul nu-l poate învăța pe al doilea? Parțial poate, dar aproape niciun transfer nu se întâmplă acolo unde se așteaptă oamenii, iar partea care pare cea mai ușoară nu funcționează deloc.

Ce urmează: ce se află în DROID, BridgeData V2 și Open X-Embodiment, unde fiecare se ciocnește cu un braț 5-DoF cu cost redus, și ce să faceți în schimb. Fiecare număr de mai jos provine din lucrarea, fișa setului de date sau fișierul sursă căruia îi aparține.

Ce conțin de fapt cele trei seturi de date

DROIDBridgeData V2Open X-Embodiment
RobotFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 embodiments, 60 datasets, 34 labs
Scală76k trajectories, 350 hours60,096 trajectories1M+ trajectories, 527 skills
Diversitate564 scenes, 84 tasks, 50 collectors24 environments, 13 skills160,266 tasks, 21 institutions
Compozițietoate teleoperate50.365 teleoperate, 9.731 scriptateper laborator sursă
Rată de control15 Hz5 Hzvariază, de la 3 fps în sus
Camere2 x ZED 2 exterior, 1 x ZED Mini la încheieturăpână la 4, majoritatea episoadelor doar cea fixăce a folosit laboratorul
Descărcare brută1.7 TB RLDS, 8.7 TB stereo brutArhive JPEGcontainere TFDS per set de date
Punctul de intrare este conversia LeRobot, nu containerul original

Puțini oameni mai descarcă 1.7 TB de TFRecords RLDS. Organizația comunitară IPEC-COMMUNITY a republicat majoritatea Open X-Embodiment sub formă de set de date LeRobot cu video AV1, unde DROID ajunge la 392 GB. Aceasta este versiunea cu care veți lucra, iar meta/info.json este ceea ce trebuie citit mai întâi.

DROID

Cel mai standardizat dintre cele trei. Un singur echipament peste tot: un Franka Panda cu un gripper Robotiq 2F-85, două camere stereo ZED 2 reglabile și un ZED Mini la încheietură, teleoperat cu controlere Meta Quest 2, înregistrat prin Polymetis la 15 Hz atât în spațiul articulațiilor, cât și în spațiul efector final . Etichetele lingvistice au venit mai târziu prin tasq.ai, până la trei per episod.

  • 76k traiectorii, 350 ore, 564 scene, 84 sarcini, 50 colectori pe trei continente.
  • Rezultatul principal este co-antrenarea, nu antrenarea independentă: loturile amestecate 50/50 cu demonstrații în domeniu au depășit următoarea cea mai bună metodă cu 22 procente succes absolut în distribuție, 17 procente în afara acesteia.
  • IPEC-COMMUNITY/droid_lerobot: 92,233 episoade, 27,044,326 cadre, franka, 15 fps, codebase_version v2.0, trei fluxuri AV1 la 180x320, 392 GB.
  • Un eșantion de depanare de 2 GB, 100 de episoade, se află la gs://gresearch/robotics/droid_100. Începeți de acolo.

BridgeData V2

Cel mai apropiat de o configurație de hobby: un braț WidowX 250 cu 6 grade de libertate, 60,096 traiectorii în 24 de medii și 13 abilități la 5 Hz. Rețineți compoziția: 50,365 demonstrații teleoperate de experți plus 9,731 dintr-o politică scriptată aleatorie de tip pick-and-place, deci aproximativ 16 procente nu reprezintă demonstrații umane, ceea ce contează pentru învățare prin imitație calitate. Descărcarea obișnuită, IPEC-COMMUNITY/bridge_orig_lerobot, raportează 53,192 episoade și 1,893,026 cadre la 5 fps, robot_type widowx: mai puține decât cele 60,096 din lucrare, așa că citiți numărul din meta/info.json în loc să citați oricare dintre ele.

Open X-Embodiment

Nu este un set de date în același sens: 60 de seturi de date robotice existente de la 34 de laboratoare, reunite într-o singură colecție RLDS, acoperind 22 de implementări și peste un milion de traiectorii. BridgeData V2 se află în interiorul acesteia ca bridge_orig; secțiunea google_robot, fractal20220817_data, se convertește în 87.212 episoade la 3 fps.

Reunirea seturilor de date implică o avertizare pe care lucrarea o menționează explicit. Pentru experimentele RT-X, autorii convertesc fiecare sursă într-o acțiune a efectorului final cu 7 grade de libertate (DoF), dar nu aliniază sistemele de coordonate între seturile de date și permit ca valorile acțiunilor să fie poziții sau viteze absolute sau relative, conform schemei de control originale a fiecărui robot. Concluzia lor: același vector de acțiune poate induce mișcări foarte diferite pentru roboți diferiți.

Listarea directorului de seturi de date AY-Robots cu seturi de date publice LeRobot, cu numărul de episoade și descrierile sarcinilor
Directorul public de seturi de date la /directory: seturi de date deja în format LeRobot, deja potrivite cu un braț suportat.

Nepotrivirea, în patru părți

Discrepanța de întruchipare este de obicei tratată ca o problemă vagă. Sunt patru, eșuează diferit, și două nu pot fi remediate prin scriptare.

1. Grade de libertate

Un SO-100 are cinci articulații ale brațului plus un gripper. Numărat ca motoare, este un braț cu 6-DoF, și lucrarea SmolVLA îl numește astfel; numărat ca mecanism de poziționare este un 5-DoF, și LeRobot îl numește astfel în docstring-ul său de cinematică inversă, care descrie IK cu orientare moale pe SO-101 cu 5-DOF unde încheietura urmărește orientarea doar parțial. O Franka are șapte articulații de poziționare. Acest decalaj decide ce poziții există: un braț cu 5-DoF nu poate atinge în general o poziție și orientare arbitrară simultan, așa că rezolvitorul returnează cea mai apropiată poziție pe care o poate atinge, o mișcare diferită de cea demonstrată. Context: grade de libertate.

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
Stânga: Urmăritorul SO al LeRobot, din src/lerobot/robots/so_follower/so_follower.py. Dreapta: Intrarea politicii DROID a openpi. Șase contra opt.

Așadar, un checkpoint DROID gata făcut nu este o scurtătură. Physical Intelligence livrează pi05_droid la gs://openpi-assets/checkpoints/pi05_droid, iar același README care îi laudă amploarea avertizează că aceste checkpoint-uri expert s-ar putea să nu se generalizeze la configurația dumneavoastră. Starea sa este formată din opt numere de articulație Franka, iar cheile sale de imagine sunt exterior_image_1_left și wrist_image_left. Niciun flag nu transformă asta într-o comandă SO-100 cu șase motoare.

2. Ce spune de fapt vectorul de acțiune

Mai profund decât dimensionalitatea. În conversiile LeRobot, toate cele trei spun unde ar trebui să meargă gripper-ul, în spațiul cartezian. Un SO-100 spune unde ar trebui să meargă șase servomotoare. Conversia necesită un model cinematic și un rezolvitor, nu o reconfigurare.

ProprietateOXE, DROID și Bridge în format LeRobotSO-100 în LeRobot
Vector de acțiune7-D: x, y, z, ruliu, tangaj, girație, gripper6-D: o poziție țintă per motor
Vector de stare8-D, cu un slot de umplutură (google_robot folosește un quaternion)6-D, unul per motor
CadruCartezian, nealiniat între seturile de datespațiu articular, calibrare per braț
Absolut sau relativoricare, decis de laboratorul sursăpoziții țintă absolute
Unităținormalizate per set de date, apoi discretizategrade implicit (use_degrees=True), altfel -100 la 100
Eșec silențioso delta citită ca o valoare absolutăun braț necalibrat
Vectorul cartezian 7D este convenția convertorului, nu a DROID.

Fișierul README al openx2lerobot documentează o stare unificată de 8 dimensiuni și o acțiune de 7 dimensiuni pentru fiecare set de date pe care îl convertește, de unde provine slotul pad. Schema RLDS proprie a DROID diferă: action-ul său de nivel superior este un 7-vector de 6 viteze articulare plus 1 poziție a prehensorului, cu cartesian_position, cartesian_velocity, joint_position și joint_velocity sub action_dict. openpi citește vizualizarea în spațiul articulațiilor, iar versiunea LeRobot vă oferă pe cea carteziană. Niciuna nu reprezintă șase unghiuri absolute de servo.

LeRobot livrează piesa lipsă: urmăritorul SO are un procesor de cinematică cu pași InverseKinematicsEEToJoints și ForwardKinematicsJointsToEE. Cheile sale sunt ee.x, ee.y, ee.z plus un vector de rotație ee.wx, ee.wy, ee.wz și ee.gripper_pos, astfel încât chiar și codificarea orientării diferă de roll-pitch-yaw din fișiere. Pasul IK preia un orientation_weight, implicit 0.01, al cărui docstring spune să setați 0.0 pentru IK doar pe poziție pe brațe sub-acționate. Puteți construi puntea, dar jumătatea de orientare a fiecărei acțiuni împrumutate rămâne aproximată.

3. Frecvența de control

DROID este de 15 Hz, BridgeData V2 de 5 Hz, secțiunea google_robot de 3 fps; autorii pi0 descriu partea open-source a amestecului lor ca fiind un control de joasă frecvență între 2 și 10 Hz. DatasetRecordConfig al LeRobot are ca valori implicite fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. O , antrenată pe date de 5 Hz a învățat că o acțiune acoperă 200 ms. Redați-o la 30 Hz și brațul se mișcă lent; reeșantionați naiv și veți estompa cadrul în care se închide prehensorul. De asemenea, interacționează prost cu : un fragment de 100 de pași este de 20 de secunde la 5 Hz, 3.3 la 30 Hz.

4. Camere

BridgeData V2 a randomizat două poziții de cameră la fiecare 50 de traiectorii, iar pagina sa de proiect menționează că majoritatea datelor conțin oricum doar vizualizarea fixă. DROID a folosit suporturi reglabile ZED 2 plus un ZED Mini la încheietura mâinii. Aveți două camere web USB poziționate la ochi. Poziția camerei nu este o variabilă deranjantă pentru un ; este o mare parte din ceea ce a folosit encoderul vizual, și nimic din formatul fișierului nu indică faptul că pozițiile diferă.

Capcana care îți mănâncă o zi

Piesele se potrivesc suficient de bine pentru a rula. Setul de date se încarcă, antrenamentul începe, pierderea scade, apar puncte de salvare, nimic nu dă erori. Apoi, politica nu face nimic recognoscibil pe braț și petreci o zi căutând o eroare în scriptul tău de antrenament. Nu există nicio eroare: modelul a învățat o distribuție carteziană a acțiunilor pentru un robot care nu există în camera ta. Începe de la pierderea scade, politica nu face nimic, nu de la hiperparametrii tăi.

Ce se întâmplă când încerci oricum să combini datele

Planul evident este să se concateneze: câteva mii de episoade DROID plus cele 50 ale tale. LeRobot refuză, iar refuzul menționează cele trei lucruri care diferă.

  1. 1
    Descarcă eșantionul de 100 de episoade, nu întregul 1.7 TB

    2 GB sunt suficiente pentru a vedea structura.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Convertește RLDS în format LeRobot

    openx2lerobot încapsulează transformările standard OXE și adnotează tipul robotului și frecvența de control. Fișierul README plasează acest lucru în 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
    Citește meta/info.json înainte de orice altceva

    Acest fișier decide dacă restul zilei tale va funcționa.

    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
    Încearcă îmbinarea și citește eroarea

    Operația de îmbinare încarcă fiecare set de date, apoi validate_all_metadata verifică fps, robot_type și caracteristicile în raport cu primul din listă, generând o eroare la prima nepotrivire.

    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.

Valorile de referință provin de la setul de date pe care l-ați listat primul, motiv pentru care mesajul se plânge de cei 30 fps ai dumneavoastră, mai degrabă decât de cei 15 ai DROID. Corectați fps-ul și veți întâlni verificarea robot_type; corectați-o și veți întâlni verificarea caracteristicilor, 7 față de 6 pentru acțiune. Nicio ordine nu trece, iar aceeași verificare rulează la momentul înregistrării prin sanity_check_dataset_robot_compatibility.

Nu codificați hardcoded robot_type pentru a ocoli verificarea

Pe ramura principală actuală a LeRobot, so100_follower și so101_follower sunt ambele înregistrate pe o singură SOFollowerRobotConfig partajată, astfel încât șirul de caractere dintr-o înregistrare reală nu este neapărat cel pe care îl așteptați. Citiți-l din propriul fișier meta/info.json și tratați o verificare pe care ați fost nevoit să o dezactivați ca pe o verificare care vă spunea ceva.

Deci ce se transferă de fapt?

Ponderi, nu episoade. Fiecare politică generalistă modernă a absorbit o parte din acestea în preantrenare, iar când de la un îl moșteniți deja reconciliat de oameni cu puterea de calcul necesară pentru a o face corect. Lucrarea lui pi0 este sinceră în privința proporției: 9.1 la sută din amestecul său de pre-antrenare, numărat în pași de timp, este reprezentat de date open-source, inclusiv OXE, Bridge v2 și DROID. Această cifră este a lui pi0; amestecul fiecărui furnizor diferă.

Date publice inter-corporale pentru un proiect SO-100
Avantaje
  • Prorități vizuale și lingvistice: codificatorul a văzut mii de bucătării și căni și știe la ce se referă „blocul roșu”.
  • O prioritate asupra structurii de manipulare: apropiere, închidere, ridicare, transport, eliberare, independentă de corp chiar și atunci când numerele nu sunt.
  • Un set de date cunoscut și bun pentru testare. Dacă sarcina dvs. nu poate supra-antrena 100 de episoade DROID, problema este configurația dvs.
  • Puncte de referință: în domeniile cu seturi de date la scară mică, RT-1-X a atins o rată medie de succes cu 50 la sută mai mare decât metoda originală sau RT-1, iar RT-2-X a depășit RT-2 de aproximativ 3 ori în ceea ce privește abilitățile emergente.
Compromisuri
  • Fără supervizare utilă a acțiunilor. O țintă carteziană 7D nu este o comandă de articulație 6D.
  • Fără transfer de poziție a camerei, și nimic din date nu indică diferențe de poziție.
  • Fără transfer de sincronizare: surse de 3, 5 și 15 fps față de un înregistrator de 30 fps.
  • Fără transfer de prehensor. Un Robotiq 2F-85 și o falcă imprimată pe un STS3215 diferă în forță, cursă și dinamică.
  • Scala singură nu a fost suficientă nici măcar pentru autorii săi: în domeniile cu seturi de date mari, RT-1-X nu a depășit un RT-1 antrenat doar pe acel set de date.
  • Fără reducere a numărului de episoade proprii necesare.
Stratul modeluluiSe transferă?De ce
Codificator vizualDa, puternicObiectele și scenele sunt independente de corp
Ancorare lingvisticăDaInstrucțiunile sunt text, nu geometrie
Fuziune inter-modalăÎn mare parteSe concentrează pe obiectul numit în prompt
Codificator de propriocepțieNuDimensiunea de intrare și semantica articulațiilor diferă
Cap de acțiuneNuAntrenat pe un spațiu cartezian 7D în care nu vă aflați
Statistici de normalizareNu, și periculosStatisticile externe modifică fiecare comandă

Acesta este motivul pentru care SmolVLA se comportă diferit pe un braț cu cost redus. Lucrarea sa selectează 481 de seturi de date din comunitate de la Hugging Face, filtrate după tipul de întruchipare, numărul de episoade, calitatea datelor și acoperirea cadrelor: 22.9K episoade, 10.6M cadre, evaluate pe brațe reale SO-100 și SO-101. Micul și potrivitul învinge marele și nepotrivit. Comparați ACT împotriva SmolVLA.

Trei căi demne de urmat

Calea A: ajustare fină dintr-un punct de control care a absorbit deja datele

Majoritatea oamenilor ar trebui să o aleagă pe aceasta. Nu atingeți niciodată DROID sau Open X-Embodiment: alegeți o politică a cărei pre-antrenare a absorbit deja date cross-embodiment, înregistrați-vă propriile episoade, ajustați fin.

PoliticăParametriEpisoade minimeFormat set de dateNivel GPUInferențăCheckpoint de bază
GR00T N1.7~3 B, ~40 M antrenat prin 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 msniciunul, de la zero

ACT este cazul limită onest: fără model de bază, deci niciuna dintre datele publice nu ajunge vreodată la el. Nu este automat un dezavantaj, deoarece la 20 ms per pas de acțiune este singurul dintre cele cinci care poate închide o buclă rapidă, așa cum pagina ACT se arată. Alegeți după sarcină folosind toate cele cinci comparate, GR00T N1.7 versus Pi0.5, și cele 332 de rezultate de benchmark pentru 85 de modele în arena.

Calea B: utilizați DROID ca dispozitiv de testare

Eșantionul de 100 de episoade este cei mai buni 2 GB pe care îi veți descărca luna aceasta, și nu pentru antrenament. Este un set de date despre care știți că este corect. Rulați convertorul, încărcătorul și o scurtă sarcină GPU pe el; orice eșec este o eroare de infrastructură găsită cât timp a fost ieftin. NVIDIA face același lucru la scară: placa GR00T N1.7 listează patru variante post-antrenate, pentru Bridge și Fractal în SimplerEnv, DROID și LIBERO.

Calea C: înregistrați-vă propriile date, în mod deliberat

Treizeci până la cincizeci sună puțin lângă 76.000 până când vă amintiți că ale dumneavoastră sunt singurele cu brațul, camerele și masa dumneavoastră. La setările implicite ale LeRobot, 50 de episoade înseamnă 100 de minute de timp real. Consultați , și .

Pagina tutorialului de înregistrare AY-Robots care arată pașii pentru a captura un set de date LeRobot dintr-o sesiune de teleoperație
Ghidul de înregistrare la /learn/record-your-first-dataset: pasul pe care datele publice nu-l pot înlocui.

Două moduri de a ajunge de la date publice la o politică funcțională

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.

Pagina de descărcare a clientului desktop AY-Robots, clientul care înregistrează seturi de date în format LeRobot dintr-o sesiune de teleoperare
Clientul desktop de la /download scrie seturi de date LeRobot direct dintr-o sesiune de teleoperare, ocolind conversia RLDS.

Cât costă fiecare cale

CaleStocareTimp umanCost GPUProbabilitatea de a mișca brațul
DROID convertit singur392 GBzile de conversie4 to 12 USDfoarte scăzută, spațiu de acțiune greșit
DROID fuzionat cu episoadele taleambeleblocked by validate_all_metadatan/aniciuna, nu rulează
SmolVLA, 30 până la 50 de episoade propriicâțiva GB100 min înregistrare1 to 3 USDridicată
GR00T N1.7, 50 de episoade propriicâțiva GB100 min înregistrare4 to 12 USDridicată
ACT de la zero, 50 de episoade propriicâțiva GB100 min înregistrare1 to 3 USDridicată, 20 ms inferență
Eșantion DROID ca dispozitiv de testare2 GBo după-amiazăo scurtă rulareridicată, ca validare

Asimetria este esențială: calea care împrumută cele mai multe date este cea mai costisitoare și cel mai puțin probabil să-ți miște brațul. Mai puțin de două ore de teleoperare proprie învinge un terabyte de date Franka ale altcuiva. Nu ai încă un braț? /live transmite în direct un SO-100 fizic fără înregistrare. Apoi antrenează-ți prima politică, și SmolVLA pe SO-100 pentru ghidul specific.

Un plan implicit rezonabil

Descarcă eșantionul DROID de 2 GB și folosește-l pentru a-ți valida pipeline-ul. Ignoră ceilalți 1.7 TB. Înregistrează 50 de episoade ale unei singure sarcini cu camere fixe. Ajustează fin SmolVLA mai întâi, deoarece la un minim de 30 de episoade pe o placă de 24 GB este cel mai ieftin de iterat, apoi încearcă GR00T N1.7 pe aceleași date. Compară pe sarcina ta, nu pe un benchmark.

Înregistrează seturi de date care se potrivesc deja brațului tău

Clientul desktop scrie seturi de date în format LeRobot direct dintr-o sesiune de teleoperare: brațul potrivit, rata de cadre potrivită, spațiul de acțiune potrivit. Fără conversie RLDS, fără remapping.

Obține clientul desktop
Pot antrena o politică pe DROID și să o rulez pe SO-100-ul meu?

Nu direct. În versiunea LeRobot, acțiunile DROID sunt comenzi de efector final 7-D pe un Franka Panda la 15 fps; în RLDS-ul brut, acestea sunt 6 viteze de articulație plus o poziție a gripper-ului. Un SO-100 preia 6 poziții absolute ale articulațiilor. Ai avea nevoie de un strat de cinematică inversă, și chiar și atunci o încheietură cu 5-DoF nu poate reproduce poziții arbitrare 6-DoF.

Pot amesteca episoade DROID sau Bridge cu propriile mele episoade SO-100?

Nu. validate_all_metadata necesită fps, robot_type și schema de caracteristici identice și generează ValueError la prima nepotrivire. Toate trei diferă: 15 sau 5 fps față de 30, franka sau widowx față de brațul tău, forme de acțiune de 7 față de 6. Rescrierea metadatelor pentru a trece verificarea nu rezolvă semantica.

Este Open X-Embodiment inutil pentru un braț cu cost redus atunci?

Nu, dar valoarea sa ajunge la tine prin ponderi pre-antrenate, nu prin episoade. Seturile de date open-source, inclusiv OXE, Bridge v2 și DROID, reprezintă 9.1 procente din amestecul de pre-antrenare al pi0, iar NVIDIA livrează variante GR00T N1.7 post-antrenate pe Bridge, Fractal, DROID și LIBERO. Ceea ce nu poți face este să adaugi acele episoade la propria înregistrare.

Ce politică beneficiază cel mai mult de datele publice cross-embodiment?

Pi0.5 și modelele GR00T au cel mai mult pre-antrenament cross-embodiment, dar SmolVLA se comportă adesea cel mai bine pe un braț cu cost redus: setul său de pre-antrenare este format din 481 de seturi de date comunitare, 22.9K episoade și 10.6M cadre, evaluate pe brațe reale SO-100 și SO-101. ACT este opusul: fără model de bază, 20 ms per pas de acțiune.

Câte episoade proprii am nevoie de fapt?

30 pentru SmolVLA, 50 pentru GR00T N1.7, GR00T N1.5, Pi0.5 și ACT. La setările implicite ale LeRobot de 60 s per episod și 60 s reset, 50 de episoade înseamnă 100 de minute de timp real. Datele împrumutate cross-embodiment nu reduc aceste numere.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started