AY-Robots viešųjų duomenų rinkinių katalogas, rodantis LeRobot duomenų rinkinius, įrašytus su SO-100 klasės robotų rankomis
Duomenų rinkiniaiOpen X-EmbodimentDROIDSO-100LeRobot

Naudojant DROID, BridgeData V2 ir Open X su SO-100

AY-Robots ResearchAugust 23, 202618 min skaitymo

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

DROIDBridgeData V2Open X-Embodiment
RobotasFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 įrenginiai, 60 duomenų rinkinių, 34 laboratorijos
Mastelis76 tūkst. trajektorijų, 350 valandų60 096 trajektorijos1M+ 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
Kompozicijavisi valdomi nuotoliniu būdu50 365 valdomi nuotoliniu būdu, 9 731 suprogramuotipagal šaltinio laboratoriją
Valdymo dažnis15 Hz5 Hzskiriasi, nuo 3 kadrų per sekundę
Kameros2 x ZED 2 išorinės, 1 x ZED Mini riešoiki 4, daugumoje epizodų tik fiksuotaką naudojo laboratorija
Neapdorotas atsisiuntimas1.7 TB RLDS, 8.7 TB neapdoroto stereoJPEG archyvaiTFDS talpyklos pagal duomenų rinkinį
Pradinis taškas yra LeRobot konversija, o ne originali talpykla

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.

AY-Robots duomenų rinkinių katalogas, kuriame pateikiami vieši LeRobot duomenų rinkiniai su epizodų skaičiumi ir užduočių aprašymais
Viešasis duomenų rinkinių katalogas adresu /directory: duomenų rinkiniai jau LeRobot formatu, jau atitinkantys palaikomą ranką.

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: .

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
Kairėje: LeRobot SO sekiklis, iš src/lerobot/robots/so_follower/so_follower.py. Dešinėje: openpi DROID politikos įvestis. Šeši prieš aštuonis.

Taigi, 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 formatuSO-100 LeRobot formatu
Veiksmo vektorius7-D: x, y, z, sukimas, posvyris, pasukimas, griebtuvas6-D: viena tikslinė pozicija varikliui
Būsenos vektorius8-D, su užpildymo lizdu (google_robot naudoja kvaternioną)6-D, po vieną varikliui
RėmasDekarto, nesuderintas tarp duomenų rinkiniųjungčių erdvė, kalibravimas kiekvienai rankai
Absoliutus ar santykinisbet kuris, nusprendžia šaltinio laboratorijaabsoliučios tikslinės pozicijos
Vienetainormalizuoti pagal duomenų rinkinį, tada diskretizuotilaipsniai pagal numatytuosius nustatymus (use_degrees=True), kitaip nuo -100 iki 100
Tylus gedimasdelta, perskaityta kaip absoliutasnekalibruota ranka
7-D Dekarto vektorius yra konverterio, o ne DROID, konvencija

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.

Spąstai, kurie suvalgo dieną

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.

  1. 1
    Atsisiųskite 100 epizodų pavyzdį, o ne visą 1,7 TB.

    2 GB pakanka struktūrai pamatyti.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Konvertuoti RLDS į LeRobot formatą.

    openx2lerobot apjungia OXE standartines transformacijas ir anotuoja roboto tipą bei valdymo dažnį. README faile tai pateikiama 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
    Prieš ką nors kita perskaitykite meta/info.json.

    Šis failas lemia, ar likusi dienos dalis veiks.

    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
    Iš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.

    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.

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.

Nekoduokite robot_type, kad apeitumėte patikrą.

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.

Viešieji tarpkūniniai duomenys SO-100 projekte
Privalumai
  • 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.
Kompromisai
  • 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 sluoksnisPersikelia?Kodėl
Vaizdo koduotuvasTaip, stipriaiObjektai ir scenos nepriklauso nuo įkūnijimo
Kalbos įžeminimasTaipInstrukcijos yra tekstas, o ne geometrija
Kryžminis modalinis suliejimasDaugiausiaAtkreipia dėmesį į objekte nurodytą objektą
Propriocepcijos koduotuvasNeĮvesties matmuo ir jungties semantika skiriasi
Veiksmų galvutėNeApmokyta 7-D Dekarto erdvėje, kurioje jūs nesate
Normalizavimo statistikaNe, ir pavojingaSvetima 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.

PolitikaParametraiMin. epizodųDuomenų rinkinio formatasGPU lygisInferencijaBazinis kontrolinis taškas
GR00T N1.7~3 B, ~40 M apmokyta tikslinant50LeRobot 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 pagrindas50LeRobot 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 msnė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 .

AY-Robots įrašymo pamokos puslapis, rodantis veiksmus, kaip užfiksuoti LeRobot duomenų rinkinį iš teleoperacijos sesijos
Įrašymo instrukcija adresu /learn/record-your-first-dataset: žingsnis, kurio viešieji duomenys negali pakeisti.

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.

  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.

AY-Robots darbalaukio kliento atsisiuntimo puslapis, klientas, įrašantis LeRobot formato duomenų rinkinius iš teleoperacijos sesijos
Darbalaukio klientas adresu /download rašo LeRobot duomenų rinkinius tiesiogiai iš teleoperacijos sesijos, apeidamas RLDS konversiją.

Kiekvieno kelio kaina

KeliasSaugyklaŽmogaus laikasGPU kainaTikimybė, kad pajudins jūsų ranką
Konvertuotas DROID vienas392 GBkonvertavimo dienos4 to 12 USDlabai maža, neteisinga veiksmų erdvė
DROID sujungtas su jūsų epizodaisabuužblokuota dėl validate_all_metadatan/ajokios, jis neveikia
SmolVLA, 30–50 nuosavų epizodųkeli GB100 min įrašymo1 to 3 USDdidelė
GR00T N1.7, 50 nuosavų epizodųkeli GB100 min įrašymo4 to 12 USDdidelė
ACT nuo nulio, 50 nuosavų epizodųkeli GB100 min įrašymo1 to 3 USDdidelė, 20 ms išvada
DROID pavyzdys kaip bandymo įrenginys2 GBpopietėvienas trumpas paleidimasdidelė, 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.

Protingas numatytasis planas

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ų.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started