
DROID, BridgeData V2 ir Open X-Embodiment konvertuojami į 7-D galinio efektoriaus veiksmus su 6 ir 7 laisvės laipsnių robotų rankomis. SO-100 naudoja 6 jungčių pozicijas. Kas persikelia, kas ne, ir ką daryti vietoj to.
Trumpoji versija
- •Visų trijų LeRobot versijos turi vieną konvenciją: 7D galinio efektoriaus veiksmą [x, y, z, roll, pitch, yaw, gripper] ir 8D būseną su užpildo lizdu. SO-100 naudoja šešias absoliučias jungčių pozicijas.
- •Tas 7D vektorius yra konverterio artefaktas: paties DROID RLDS veiksmo laukas yra 6 jungčių greičiai plius griebtuvo pozicija, su Dekarto vaizdu action_dict.
- •Keturi laikrodžiai: DROID 15 kadrų per sekundę, BridgeData V2 5 kadrų per sekundę, google_robot iškarpa 3 kadrų per sekundę, SO-100 įrašymas 30 kadrų per sekundę.
- •Jų negalima sujungti su savo duomenimis. validate_all_metadata išmeta klaidą, jei skiriasi pirmasis iš fps, robot_type arba features, o visi trys skiriasi.
- •Perkeliami yra iš anksto apmokyti svoriai, o ne epizodai. Atvirojo kodo duomenys sudaro 9,1 procento pi0 išankstinio apmokymo mišinio.
- •Pigiausias realus jų panaudojimas yra bandymų įrenginys: žinomas geras 2 GB, 100 epizodų DROID pavyzdys, kuris patvirtina jūsų konvejerį prieš įrašinėjant visą savaitgalį.
Yra milijono trajektorijų viešas duomenų rinkinys „Google Cloud“ kibire ir SO-100 ant stalo, kuris dalimis kainavo nuo 110 iki 150 EUR. Kodėl pirmasis negali išmokyti antrojo? Iš dalies gali, bet beveik joks perkėlimas nevyksta ten, kur žmonės tikisi, o lengviausiai atrodanti dalis visai neveikia.
Toliau: kas yra viduje DROID, BridgeData V2 ir Open X-Embodiment, kur kiekvienas susiduria su pigia 5 laisvės laipsnių ranka, ir ką daryti vietoj to. Kiekvienas žemiau pateiktas skaičius paimtas iš atitinkamo straipsnio, duomenų rinkinio kortelės ar šaltinio failo.
Ką iš tikrųjų sudaro trys duomenų rinkiniai
| DROID | BridgeData V2 | Open X-Embodiment | |
|---|---|---|---|
| Robotas | Franka Panda, 7 DoF, Robotiq 2F-85 | WidowX 250, 6 DoF, ~4,000 USD rig | 22 įrenginiai, 60 duomenų rinkinių, 34 laboratorijos |
| Mastelis | 76 tūkst. trajektorijų, 350 valandų | 60 096 trajektorijos | 1M+ trajektorijų, 527 įgūdžiai |
| Įvairovė | 564 scenos, 84 užduotys, 50 rinkėjų | 24 aplinkos, 13 įgūdžių | 160 266 užduotys, 21 institucija |
| Kompozicija | visi valdomi nuotoliniu būdu | 50 365 valdomi nuotoliniu būdu, 9 731 suprogramuoti | pagal šaltinio laboratoriją |
| Valdymo dažnis | 15 Hz | 5 Hz | skiriasi, nuo 3 kadrų per sekundę |
| Kameros | 2 x ZED 2 išorinės, 1 x ZED Mini riešo | iki 4, daugumoje epizodų tik fiksuota | ką naudojo laboratorija |
| Neapdorotas atsisiuntimas | 1.7 TB RLDS, 8.7 TB neapdoroto stereo | JPEG archyvai | TFDS talpyklos pagal duomenų rinkinį |
Mažai kas vis dar atsisiunčia 1,7 TB RLDS TFRecords. Bendruomenės organizacija IPEC-COMMUNITY didžiąją dalį Open X-Embodiment perpublikavo LeRobot duomenų rinkinio formatu su AV1 vaizdo įrašu, kur DROID užima 392 GB. Tai yra versija, su kuria dirbsite, ir jos meta/info.json yra tai, ką reikia perskaityti pirmiausia.
DROID
Standartizuotiausias iš trijų. Vienas įrenginys visur: Franka Panda su Robotiq 2F-85 griebtuvu, dvi reguliuojamos ZED 2 stereo kameros ir riešo ZED Mini, valdomas nuotoliniu būdu su Meta Quest 2 valdikliais, įrašytas per Polymetis 15 Hz dažniu tiek jungčių, tiek galinio efektoriaus erdvėje. Kalbos žymės atsirado vėliau per tasq.ai, iki trijų vienam epizodui.
- 76 tūkst. trajektorijų, 350 valandų, 564 scenos, 84 užduotys, 50 rinkėjų trijuose žemynuose.
- Pagrindinis rezultatas yra bendrasis mokymas, o ne savarankiškas mokymas: partijos, sumaišytos 50/50 su srities demonstracijomis, aplenkė kitą geriausią metodą 22 procentais absoliučios sėkmės pasiskirstyme ir 17 procentų už jo ribų.
- 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.
- 2 GB, 100 epizodų derinimo pavyzdys yra adresu gs://gresearch/robotics/droid_100. Pradėkite nuo jo.
BridgeData V2
Arčiausiai hobio sąrankos: WidowX 250 6-DoF ranka, 60 096 trajektorijos per 24 aplinkas ir 13 įgūdžių 5 Hz dažniu. Atkreipkite dėmesį į sudėtį: 50 365 ekspertų nuotoliniu būdu valdomos demonstracijos plius 9 731 iš atsitiktinai sugeneruotos „paimk ir padėk“ politikos, taigi apie 16 procentų nėra žmogaus demonstracijos, o tai svarbu imitaciniam mokymuisi kokybei. Įprastas atsisiuntimas, IPEC-COMMUNITY/bridge_orig_lerobot, praneša apie 53 192 epizodus ir 1 893 026 kadrus 5 kadrų per sekundę greičiu, robot_type widowx: mažiau nei straipsnyje nurodyti 60 096, todėl skaitykite skaičių iš meta/info.json, o ne cituokite nė vieno.
Open X-Embodiment
Ne duomenų rinkinys ta pačia prasme: 60 esamų robotų duomenų rinkinių iš 34 laboratorijų, sujungtų į vieną RLDS kolekciją, apimančią 22 įgyvendinimus ir daugiau nei milijoną trajektorijų. BridgeData V2 yra joje kaip bridge_orig; google_robot dalis, fractal20220817_data, konvertuojama į 87 212 epizodų 3 kadrų per sekundę greičiu.
Sujungimas turi įspėjimą, kurį straipsnis aiškiai nurodo. RT-X eksperimentams autoriai kiekvieną šaltinį konvertuoja į 7 laisvės laipsnių galinio efektoriaus veiksmą, tačiau nesuderina koordinačių sistemų tarp duomenų rinkinių ir leidžia veiksmų reikšmėms būti absoliučiomis arba santykinėmis padėtimis ar greičiais, pagal kiekvieno roboto originalią valdymo schemą. Jų išvada: tas pats veiksmų vektorius gali sukelti labai skirtingus judesius skirtingiems robotams.

Nesutapimas, keturiomis dalimis
Įkūnijimo neatitikimas dažniausiai traktuojamas kaip viena neaiški problema. Jų yra keturios, jos skiriasi gedimais, o dvi iš jų negalima ištaisyti scenarijais.
1. Laisvės laipsniai
SO-100 turi penkis rankos sąnarius ir griebtuvą. Skaičiuojant kaip variklius, tai yra 6 laisvės laipsnių (DoF) ranka, ir SmolVLA straipsnis ją taip vadina; skaičiuojant kaip pozicionavimo mechanizmą, tai yra 5 laisvės laipsnių (DoF), ir LeRobot ją taip vadina savo atvirkštinės kinematikos dokumentacijos eilutėje, kuri aprašo minkštos orientacijos IK 5 laisvės laipsnių (DoF) SO-101, kur riešas seka orientaciją tik iš dalies. Franka turi septynis pozicionavimo sąnarius. Šis skirtumas lemia, kokios pozos egzistuoja: 5 laisvės laipsnių (DoF) ranka paprastai negali vienu metu pasiekti savavališkos padėties ir orientacijos, todėl sprendėjas grąžina artimiausią įmanomą, judesį, kuris skiriasi nuo demonstruoto. Pagrindinė informacija: .
# 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-DTaigi, paruoštas DROID kontrolinis taškas nėra trumpesnis kelias. Physical Intelligence pristato pi05_droid adresu gs://openpi-assets/checkpoints/pi05_droid, o tas pats README, kuris giria jo platumą, įspėja, kad šie ekspertiniai kontroliniai taškai gali netikti jūsų sąrankai. Jo būsena yra aštuoni Franka jungčių numeriai, o jo vaizdo raktai yra exterior_image_1_left ir wrist_image_left. Joks žymeklis to nepaverčia šešių variklių SO-100 komanda.
2. Ką iš tikrųjų sako veiksmo vektorius
Giliau nei matmenys. LeRobot konversijose visi trys nurodo, kur turėtų eiti griebtuvas, Dekarto erdvėje. SO-100 nurodo, kur turėtų eiti šeši servovarikliai. Konvertavimui reikia kinematinio modelio ir sprendiklio, o ne pertvarkymo.
| Savybė | OXE, DROID ir Bridge LeRobot formatu | SO-100 LeRobot formatu |
|---|---|---|
| Veiksmo vektorius | 7-D: x, y, z, sukimas, posvyris, pasukimas, griebtuvas | 6-D: viena tikslinė pozicija varikliui |
| Būsenos vektorius | 8-D, su užpildymo lizdu (google_robot naudoja kvaternioną) | 6-D, po vieną varikliui |
| Rėmas | Dekarto, nesuderintas tarp duomenų rinkinių | jungčių erdvė, kalibravimas kiekvienai rankai |
| Absoliutus ar santykinis | bet kuris, nusprendžia šaltinio laboratorija | absoliučios tikslinės pozicijos |
| Vienetai | normalizuoti pagal duomenų rinkinį, tada diskretizuoti | laipsniai pagal numatytuosius nustatymus (use_degrees=True), kitaip nuo -100 iki 100 |
| Tylus gedimas | delta, perskaityta kaip absoliutas | nekalibruota ranka |
openx2lerobot README dokumentuoja vieningą 8-dim būseną ir 7-dim veiksmą kiekvienam konvertuojamam duomenų rinkiniui, iš kurio atsiranda pad lizdas. Paties DROID RLDS schema skiriasi: jos aukščiausio lygio action yra 7-vektorius, sudarytas iš 6 jungčių greičių plius 1 griebtuvo padėties, su cartesian_position, cartesian_velocity, joint_position ir joint_velocity po action_dict. openpi nuskaito jungčių erdvės vaizdą, o LeRobot versija pateikia jums Dekarto koordinačių vaizdą. Nei vienas nėra šeši absoliutūs servo kampai.
LeRobot pateikia trūkstamą dalį: SO sekiklis turi kinematikos procesorių su InverseKinematicsEEToJoints ir ForwardKinematicsJointsToEE žingsniais. Jo raktai yra ee.x, ee.y, ee.z plius sukimosi vektorius ee.wx, ee.wy, ee.wz ir ee.gripper_pos, todėl net orientacijos kodavimas skiriasi nuo failuose esančio roll-pitch-yaw. IK žingsnis naudoja orientation_weight, numatytasis 0.01, kurio docstring nurodo nustatyti 0.0 tik padėties IK nepakankamai valdomoms rankoms. Galite sukurti tiltą, tačiau kiekvieno pasiskolinto veiksmo orientacijos pusė lieka apytikslė.
3. Valdymo dažnis
DROID yra 15 Hz, BridgeData V2 5 Hz, google_robot iškarpa 3 kadrų per sekundę; pi0 autoriai apibūdina atvirojo kodo savo mišinio dalį kaip žemo dažnio valdymą tarp 2 ir 10 Hz. LeRobot DatasetRecordConfig numatytieji nustatymai yra 30 kadrų per sekundę, episode_time_s 60, reset_time_s 60, num_episodes 50. A apmokyta su 5 Hz duomenimis išmoko, kad vienas veiksmas apima 200 ms. Atkūrus jį 30 Hz dažniu, ranka šliaužia; naiviai perrinkus, išplaukiate kadrą, kuriame griebtuvas užsidaro. Tai taip pat blogai sąveikauja su : 100 žingsnių gabalas yra 20 sekundžių esant 5 Hz, 3.3 esant 30 Hz.
4. Kameros
BridgeData V2 atsitiktinai parinko dvi kamerų pozas kas 50 trajektorijų, o jo projekto puslapyje pažymima, kad dauguma duomenų vis tiek turi tik fiksuotą vaizdą. DROID naudojo reguliuojamus ZED 2 laikiklius ir riešo ZED Mini. Jūs turite dvi USB internetines kameras, pastatytas apytiksliai. Kameros poza nėra trukdanti kintamoji ; tai yra didelė dalis to, į ką vizualinis kodavimo įrenginys atsižvelgė, ir niekas failo formate nenurodo, kad pozos skiriasi.
Dalys pakankamai gerai dera, kad veiktų. Duomenų rinkinys įkeliamas, mokymas prasideda, nuostolis mažėja, atsiranda kontroliniai taškai, jokių klaidų. Tada politika neatlieka nieko atpažįstamo ant rankos ir jūs praleidžiate dieną ieškodami klaidos savo mokymo scenarijuje. Klaidos nėra: modelis išmoko Dekarto veiksmų pasiskirstymą robotui, kurio nėra jūsų kambaryje. Pradėkite nuo nuostolis mažėja, politika nieko nedaro, o ne nuo savo hiperparametrų.
Kas nutinka, kai vis tiek bandote sujungti duomenis
Akivaizdus planas yra sujungti: kelis tūkstančius DROID epizodų plius jūsų 50. LeRobot atsisako, o atsisakyme nurodomi trys besiskiriantys dalykai.
- 1Atsisiųskite 100 epizodų pavyzdį, o ne visą 1,7 TB.
2 GB pakanka struktūrai pamatyti.
bashpip install gsutil tensorflow tensorflow-datasets gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/ - 2Konvertuoti RLDS į LeRobot formatą.
openx2lerobot apjungia OXE standartines transformacijas ir anotuoja roboto tipą bei valdymo dažnį. README faile tai pateikiama 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 - 3Prieš ką nors kita perskaitykite meta/info.json.
Šis failas lemia, ar likusi dienos dalis veiks.
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'])" - 4Išbandykite sujungimą ir perskaitykite klaidą.
merge įkelia kiekvieną duomenų rinkinį, tada validate_all_metadata patikrina fps, robot_type ir features pagal pirmąjį sąraše, iškeldamas klaidą esant pirmajam neatitikimui.
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.
Etaloninės vertės gaunamos iš to duomenų rinkinio, kurį nurodėte pirmąjį, todėl pranešime skundžiamasi dėl jūsų 30 fps, o ne DROID 15. Pataisykite fps ir susidursite su robot_type patikra; pataisykite tai ir susidursite su funkcijų patikra, 7 prieš 6 veiksmui. Joks eiliškumas neleidžiamas, ir tas pats apsaugos mechanizmas veikia įrašymo metu per sanity_check_dataset_robot_compatibility.
Dabartinėje LeRobot pagrindinėje versijoje so100_follower ir so101_follower yra užregistruoti vienoje bendroje SOFollowerRobotConfig, todėl eilutė iš realaus įrašo nebūtinai yra ta, kurios tikitės. Perskaitykite ją iš savo meta/info.json ir traktuokite patikrą, kurią turėjote išjungti, kaip patikrą, kuri jums kažką sakė.
Taigi, kas iš tikrųjų persikelia?
Svorio koeficientai, ne epizodai. Kiekviena moderni bendroji politika dalį to absorbavo išankstinio apmokymo metu, o kai jūs iš išleisto jūs paveldite jį jau suderintą žmonių, turinčių pakankamai skaičiavimo galios tai atlikti tinkamai. pi0 straipsnis atvirai kalba apie proporciją: 9,1 procento jo išankstinio apmokymo mišinio, skaičiuojant laiko žingsniais, yra atvirojo kodo duomenys, įskaitant OXE, Bridge v2 ir DROID. Šis skaičius yra pi0; kiekvieno tiekėjo mišinys skiriasi.
- Vaizdiniai ir kalbos pirminiai duomenys: koduotuvas matė tūkstančius virtuvių ir puodelių ir žino, ką reiškia „raudonas blokas“.
- Manipuliacijos struktūros pirminiai duomenys: priartėjimas, uždarymas, pakėlimas, transportavimas, paleidimas, nepriklausomi nuo įkūnijimo, net kai skaičiai nėra.
- Žinomas geras duomenų rinkinys testavimui. Jei jūsų užduotis negali per daug prisitaikyti prie 100 DROID epizodų, problema yra jūsų nustatymuose.
- Atraminiai taškai: mažo mastelio duomenų rinkinių srityse RT-1-X pasiekė 50 procentų didesnį vidutinį sėkmės rodiklį nei originalus metodas ar RT-1, o RT-2-X pranoko RT-2 maždaug 3 kartus naujai atsirandančių įgūdžių srityje.
- Nėra tinkamos veiksmų priežiūros. 7-D Dekarto tikslas nėra 6-D jungties komanda.
- Nėra kameros pozos perkėlimo, ir duomenys nieko nesako apie pozų skirtumus.
- Nėra laiko sinchronizavimo perkėlimo: 3, 5 ir 15 kadrų per sekundę šaltiniai prieš 30 kadrų per sekundę įrašymo įrenginį.
- Nėra griebtuvo perkėlimo. Robotiq 2F-85 ir atspausdintas žandikaulis ant STS3215 skiriasi jėga, eiga ir dinamika.
- Vien mastelio nepakako net jo autoriams: didelių duomenų rinkinių srityse RT-1-X nepranoko RT-1, apmokyto tik su tuo duomenų rinkiniu.
- Nėra sumažinimo, kiek jūsų pačių epizodų jums reikia.
| Modelio sluoksnis | Persikelia? | Kodėl |
|---|---|---|
| Vaizdo koduotuvas | Taip, stipriai | Objektai ir scenos nepriklauso nuo įkūnijimo |
| Kalbos įžeminimas | Taip | Instrukcijos yra tekstas, o ne geometrija |
| Kryžminis modalinis suliejimas | Daugiausia | Atkreipia dėmesį į objekte nurodytą objektą |
| Propriocepcijos koduotuvas | Ne | Įvesties matmuo ir jungties semantika skiriasi |
| Veiksmų galvutė | Ne | Apmokyta 7-D Dekarto erdvėje, kurioje jūs nesate |
| Normalizavimo statistika | Ne, ir pavojinga | Svetima statistika keičia kiekvieną komandą |
Štai kodėl SmolVLA elgiasi skirtingai su nebrangia ranka. Jo straipsnyje atrinkti 481 bendruomenės duomenų rinkiniai iš Hugging Face, filtruoti pagal įkūnijimo tipą, epizodų skaičių, duomenų kokybę ir kadrų aprėptį: 22.9K epizodų, 10.6M kadrų, įvertinti ant tikrų SO-100 ir SO-101 rankų. Mažas ir suderintas pranašesnis už didelį ir nesuderintą. Palyginkite ACT prieš SmolVLA.
Trys verti dėmesio keliai
A kelias: tikslinti iš kontrolinio taško, kuris jau apdorojo duomenis
Dauguma žmonių turėtų rinktis šį. Niekada nelieskite DROID ar Open X-Embodiment: pasirinkite politiką, kurios išankstinis apmokymas jau absorbavo kryžminio įkūnijimo duomenis, įrašykite savo epizodus, tikslinkite.
| Politika | Parametrai | Min. epizodų | Duomenų rinkinio formatas | GPU lygis | Inferencija | Bazinis kontrolinis taškas |
|---|---|---|---|---|---|---|
| GR00T N1.7 | ~3 B, ~40 M apmokyta tikslinant | 50 | LeRobot v2.0 or v2.1 | A100 or H100 80 GB | 152 ms per step | 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, PaliGemma pagrindas | 50 | LeRobot v3.0 | A100 or H100 80 GB | 485 ms | lerobot/pi05_base |
| SmolVLA | ~450 M | 30 | LeRobot v3.0 | RTX 4090 or any 24 GB | 245 ms | lerobot/smolvla_base |
| ACT | ~80 M | 50 | LeRobot v3.0 | RTX 4090 or any 24 GB | 20 ms | nėra, nuo nulio |
ACT yra sąžiningas kraštutinis atvejis: nėra bazinio modelio, todėl jokie vieši duomenys jo niekada nepasiekia. Tai nėra automatiškai trūkumas, nes esant 20 ms vienam veiksmo žingsniui, tai yra vienintelis iš penkių, galintis uždaryti greitą ciklą, kaip ACT puslapis nurodo. Pasirinkite pagal užduotį naudodami visi penki palyginti, GR00T N1.7 prieš Pi0.5, ir 332 etaloninius rezultatus iš 85 modelių arena.
Kelias B: naudokite DROID kaip bandymo įrenginį
100 epizodų pavyzdys yra geriausi 2 GB, kuriuos atsisiųsite šį mėnesį, ir ne mokymui. Tai duomenų rinkinys, apie kurį žinote, kad jis yra teisingas. Paleiskite savo konverterį, įkroviklį ir trumpą GPU užduotį; bet kas, kas nepavyksta, yra infrastruktūros klaida, rasta pigiai. NVIDIA daro tą patį dideliu mastu: GR00T N1.7 kortelėje yra keturi po apmokymo variantai, skirti Bridge ir Fractal SimplerEnv, DROID ir LIBERO.
Kelias C: įrašykite savo, apgalvotai
Trisdešimt iki penkiasdešimt atrodo nedaug, palyginti su 76 000, kol neprisiminsite, kad jūsų yra vieninteliai su jūsų ranka, jūsų kameromis ir jūsų stalu. Pagal LeRobot numatytuosius nustatymus, 50 epizodų yra 100 minučių realaus laiko. Žr. , ir .

Du būdai, kaip pereiti nuo viešųjų duomenų prie veikiančios politikos
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.

Kiekvieno kelio kaina
| Kelias | Saugykla | Žmogaus laikas | GPU kaina | Tikimybė, kad pajudins jūsų ranką |
|---|---|---|---|---|
| Konvertuotas DROID vienas | 392 GB | konvertavimo dienos | 4 to 12 USD | labai maža, neteisinga veiksmų erdvė |
| DROID sujungtas su jūsų epizodais | abu | užblokuota dėl validate_all_metadata | n/a | jokios, jis neveikia |
| SmolVLA, 30–50 nuosavų epizodų | keli GB | 100 min įrašymo | 1 to 3 USD | didelė |
| GR00T N1.7, 50 nuosavų epizodų | keli GB | 100 min įrašymo | 4 to 12 USD | didelė |
| ACT nuo nulio, 50 nuosavų epizodų | keli GB | 100 min įrašymo | 1 to 3 USD | didelė, 20 ms išvada |
| DROID pavyzdys kaip bandymo įrenginys | 2 GB | popietė | vienas trumpas paleidimas | didelė, kaip patvirtinimas |
Asimetrija yra esmė: kelias, kuris pasiskolina daugiausiai duomenų, yra brangiausias ir mažiausiai tikėtina, kad pajudins jūsų ranką. Mažiau nei dvi valandos jūsų pačių teleoperacijos pranoksta terabaitą kito Franka duomenų. Dar neturite roboto rankos? /live transliuoja fizinį SO-100 be registracijos. Tada apmokykite savo pirmąją politiką, ir SmolVLA ant SO-100 konkrečiam vadovui.
Atsisiųskite 2 GB DROID pavyzdį ir naudokite jį savo konvejerio patikrinimui. Ignoruokite likusius 1.7 TB. Įrašykite 50 vienos užduoties epizodų su fiksuotomis kameromis. Pirmiausia tiksliai sureguliuokite SmolVLA, nes su mažiausiai 30 epizodų 24 GB kortelėje tai yra pigiausia iteruoti, tada išbandykite GR00T N1.7 su tais pačiais duomenimis. Palyginkite pagal savo užduotį, o ne pagal etaloną.
Įrašykite duomenų rinkinius, kurie jau atitinka jūsų roboto ranką
Darbalaukio klientas rašo LeRobot formato duomenų rinkinius tiesiai iš teleoperacijos sesijos: tinkama ranka, tinkamas kadrų dažnis, tinkama veiksmų erdvė. Jokio RLDS konvertavimo, jokio peradresavimo.
Gauti darbalaukio klientąAr galiu apmokyti politiką su DROID ir paleisti ją ant savo SO-100?▾
Ne tiesiogiai. LeRobot versijoje DROID veiksmai yra 7-D galinio efektoriaus komandos Franka Panda robotui 15 kadrų per sekundę greičiu; neapdorotuose RLDS duomenyse tai yra 6 jungčių greičiai plius griebtuvo padėtis. SO-100 naudoja 6 absoliučias jungčių pozicijas. Jums reikėtų atvirkštinės kinematikos sluoksnio, ir net tada 5 laisvės laipsnių riešas negali atkurti savavališkų 6 laisvės laipsnių pozų.
Ar galiu maišyti DROID ar Bridge epizodus su savo SO-100 epizodais?▾
Ne. validate_all_metadata reikalauja identiško kadrų dažnio (fps), roboto tipo (robot_type) ir funkcijų schemos (feature schema) ir iškelia ValueError esant pirmajam neatitikimui. Visi trys skiriasi: 15 arba 5 kadrų per sekundę prieš 30, franka arba widowx prieš jūsų ranką, veiksmų formos 7 prieš 6. Metaduomenų perrašymas, kad praeitų patikrinimą, neištaiso semantikos.
Ar tada Open X-Embodiment yra nenaudingas pigiai roboto rankai?▾
Ne, bet jo vertė pasiekia jus per iš anksto apmokytus svorius, o ne per epizodus. Atvirojo kodo duomenų rinkiniai, įskaitant OXE, Bridge v2 ir DROID, sudaro 9.1 procento pi0 išankstinio apmokymo mišinio, o NVIDIA tiekia GR00T N1.7 variantus, apmokytus po to su Bridge, Fractal, DROID ir LIBERO. Ko negalite padaryti, tai pridėti tų epizodų prie savo įrašo.
Kuri politika labiausiai pasinaudoja viešais tarpkūniniais duomenimis?▾
Pi0.5 ir GR00T modeliai turi daugiausiai tarpkūninio išankstinio apmokymo, tačiau SmolVLA dažnai veikia geriausiai su pigia roboto ranka: jos išankstinio apmokymo rinkinį sudaro 481 bendruomenės duomenų rinkinys, 22.9K epizodų ir 10.6M kadrų, įvertintų su tikromis SO-100 ir SO-101 rankomis. ACT yra priešingai: jokio bazinio modelio, 20 ms vienam veiksmo žingsniui.
Kiek savo epizodų man iš tikrųjų reikia?▾
30 SmolVLA, 50 GR00T N1.7, GR00T N1.5, Pi0.5 ir ACT. Pagal numatytuosius LeRobot nustatymus, kai 60 s skiriama vienam epizodui ir 60 s atstatymui, 50 epizodų sudaro 100 minučių realaus laiko. Pasiskolinti tarpkūniniai duomenys nesumažina šių skaičių.
Sources
- DROID: Didelio mastelio robotų manipuliavimo duomenų rinkinys realaus pasaulio sąlygomis
- DROID dokumentacija: atsisiuntimo dydžiai ir RLDS epizodų schema
- BridgeData V2: Didelio mastelio robotų mokymosi duomenų rinkinys
- BridgeData V2 projekto puslapis: sudėtis ir kamerų aprėptis
- Open X-Embodiment: Robotų mokymosi duomenų rinkiniai ir RT-X modeliai
- Open X-Embodiment projekto puslapis
- google-deepmind/open_x_embodiment: duomenų rinkinių sąrašas ir RT-1-X kontroliniai taškai
- any4lerobot: openx2lerobot konverteris ir jo unifikuota 8-D būsena, 7-D veiksmas
- IPEC-COMMUNITY/droid_lerobot: meta/info.json ir saugyklos dydis
- IPEC-COMMUNITY/bridge_orig_lerobot: meta/info.json
- IPEC-COMMUNITY/fractal20220817_data_lerobot: google_robot iškarpa 3 kadrų per sekundę greičiu
- huggingface/lerobot: SO sekiklis, kinematikos procesorius, agregavimo ir įrašymo konfigūracijos
- openpi: DROID politikos įvestys ir pi05_droid kontrolinis taškas
- pi0: Vizijos-kalbos-veiksmo srauto modelis bendram robotų valdymui
- SmolVLA: Vizijos-kalbos-veiksmo modelis prieinamai ir efektyviai robotikai
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