Tutoriálová stránka AY-Robots pre nahrávanie vášho prvého datasetu LeRobot s ramenom SO-100
LeRobotSO-100Nahrávanie datasetuTeleoperáciaImitačné učenie

Nahrajte svoj prvý dataset LeRobot s SO-100

AY-Robots ResearchAugust 23, 202616 min čítania

Nahrajte použiteľný dataset LeRobot s SO-100: kalibrácia, teleoperácia leader-follower, skutočné flagy a predvolené nastavenia lerobot-record, nastavenie kamery, počty epizód a chyby, ktoré zničia beh.

Sledovač SO-100, vedúce rameno rovnakého dizajnu a dve USB kamery dokážu doladiť politiku za jedno popoludnie. Rovnaká testovacia stolica dokáže rovnako ľahko vyprodukovať šesťdesiat epizód, ktoré vyzerajú zdravo v prehliadači súborov a premárniť šesťhodinový beh GPU. Rozdiel je zriedka v modeli; je to to, čo sa stalo medzi servami a súborom parquet.

Tu je manuálna cesta, potom tá kratšia. Každý príkaz je z lerobot 0.6.1, vydaného 3. augusta 2026 a aktuálneho na PyPI. Presunul sa na vstupné body konzoly, takže tutoriály, ktoré spúšťajú python lerobot/scripts/control_robot.py popisujú súbor, ktorý už neexistuje.

Stručná verzia

  • lerobot 0.6.1 zaznamenáva v3.0; GR00T N1.7 a N1.5 vyžadujú v2.1. Pred stlačením záznamu si ujasnite formát.
  • Štyri príkazy: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Preneste rovnaké --robot.id a --teleop.id z kalibrácie do nahrávacej relácie.
  • Skutočné predvolené hodnoty: 30 fps, 60 s na epizódu, 60 s reset, 50 epizód, približne 100 minút reálneho času.
  • Minimálny počet epizód tu: 30 pre SmolVLA, 50 pre zvyšok.
  • Rozmanitosť prekonáva objem. Dátové súbory umierajú na štyri veci: prehodené indexy kamier, vynechané alebo zamrznuté snímky, kĺb zaparkovaný na svojom limite, nečitateľný reťazec úlohy.

Čo zachytáva nahrávacia relácia

Dátový súbor LeRobot dataset nie je priečinok videí, ale časovo indexovaná tabuľka s priloženým videom: každý takt riadiacej slučky zapíše jeden riadok obsahujúci príkazovú akciu, stav, ktorý dosiahol sledovač, jeden snímok z každej kamery, časovú značku a indexy. Politika vidí iba tieto stĺpce. Schéma lerobot/svla_so100_pickplace, načítaná z jeho meta/info.json.

FunkciaDátový typTvarPopis
actionfloat32[6]cieľové polohy kĺbov z ramena lídra
observation.statefloat32[6]polohy kĺbov, ktoré dosiahol sledovač
observation.images.topvideo[480, 640, 3]scénická kamera, MP4 (tu av1)
observation.images.wristvideo[480, 640, 3]kamera na zápästí, rovnaká frekvencia
timestampfloat32[1]sekundy od začiatku epizódy
frame_index, episode_index, index, task_indexint64[1]automaticky vyplnené záznamy

Kĺby sú main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll a main_gripper: šesť stupňov voľnosti SO-100. Akcia a stav zdieľajú rovnaký tvar, pretože teleoperácia líder-sledovač zaznamenáva cieľ a polohu dosiahnutú o jeden krok neskôr. Táto medzera je informácia: kde rameno bojovalo s gravitáciou alebo zaseknutým objektom. Tieto reťazce patria k danému dátovému súboru. Relácia zaznamenaná dnes s verziou 0.6.1 zapisuje shoulder_pan.pos až po gripper.pos, ID 1 až 6 na zbernici: rovnakých šesť kĺbov, rôzne kľúče, čo je dôležité v momente, keď konfigurácia odkazuje na funkciu podľa názvu.

Mierka zo skutočného dátového súboru

Tento dátový súbor obsahuje 50 epizód a 19 631 snímok pri 30 fps: približne 393 snímok, alebo 13 sekúnd, na epizódu. Ak vaše v priemere trvajú minútu, robíte niečo ťažšie alebo nahrávate mŕtvy čas na oboch koncoch.

Záznam v slovníku AY-Robots pre formát dátovej sady LeRobot, zobrazujúci rozloženie adresárov a súbory metadát.
Čo sa nachádza v data/, videos/ a meta/ a ktoré politiky čítajú ktorú verziu.

Čo potrebujete na stole

PoložkaDetailPoznámka
Rameno nasledovníkaSO-100, šesť servomotorov Feetech STS3215približne 110 až 150 EUR v súčiastkach
Rameno lídradruhé SO-100, odstránené prevodyprevody odstránené zo všetkých šiestich motorov lídra: len enkóder, menšie trenie
Napájanieprispôsobené variantu STS3215 7.4 V v zozname materiálupozri upozornenie nižšie
Kamerydve USB kamery, 640x480 pri 30 fpsjeden pohľad na scénu, jeden na zápästí
HostiteľPython 3.12 alebo novší, ffmpegrequires-python >= 3.12
Účet HubHugging Face write tokenvoliteľné s --dataset.push_to_hub=false
7.4 V, nie 12 V

STS3215 sa dodáva v dvoch verziách: README SO-ARM100 hodnotí verziu 7.4 V s krútiacim momentom pri zablokovaní 16.5 kg.cm meraným pri 6 V a verziu 12 V s 30 kg.cm, a poznamenáva, že výber 12 V motorov tiež znamená kúpu 12 V 5 A+ napájacieho zdroja namiesto 5 V. Zoznam materiálu uvádza 7.4 V servomotory. Napájanie 12 V servomotorov určených pre 7.4 V ich zničí, preto si prečítajte štítok motora predtým, ako čokoľvek zapojíte. Servo nereaguje.

Ak rameno ešte nie je zostavené, to je samostatný večer: začnite na a . Ak ste si ešte nič nekúpili, prečítajte si najprv : SO-101 je novšia revízia s vylepšenou kabelážou a bez kroku odstraňovania prevodov, a pracovný postup nahrávania je identický.

Nainštalujte lerobot 0.6.1

bash
conda create -y -n lerobot python=3.12
conda activate lerobot

# TorchCodec is the default video decoder and needs ffmpeg
conda install ffmpeg -c conda-forge

# core_scripts = dataset + hardware + viz extras (record, replay, calibrate)
# feetech     = SDK for the STS3215 bus servos in the SO-100
pip install 'lerobot[core_scripts,feetech]'

lerobot-info
lerobot-info vypíše súhrn systému, vrátane verzie ffmpeg, ktorú nájde v PATH.

Doplnky najčastejšie spôsobujú problémy. pip install lerobot inštaluje iba základné ML závislosti, nič, čo komunikuje s robotom. Ramená Koch potrebujú dynamixel namiesto feetech. Ak váš shell nikdy nepočul o lerobot-record, toto je dôvod.

Porty, ID motorov a kalibrácia

Tri jednorazové kroky stoja medzi dielmi a funkčnou teleoperačnou slučkou. umožňuje, aby politika trénovaná na vašom ramene bežala na ramene niekoho iného, mapujúc surové počty enkodérov na zdieľanú konvenciu kĺbov.

  1. 1
    Nájdite USB port každého ramena

    Spustite ho s oboma ramenami zapojenými, odpojte to, ktoré identifikujete, keď budete vyzvaní, a poznačte si, ktorý port zmizne. Na Linuxe možno budete potrebovať sudo chmod 666 /dev/ttyACM0.

    bash
    lerobot-find-port
    # Finding all available ports for the MotorsBus.
    # Ports before disconnecting: ['/dev/ttyACM0', '/dev/ttyACM1']
    # Remove the USB cable from your MotorsBus and press Enter when done.
    # The port of this MotorsBus is '/dev/ttyACM1'
    # Reconnect the USB cable.
  2. 2
    Zapíšte ID motorov a prenosové rýchlosti

    ID sa zapisujú pre každý motor zvlášť a dokumentácia je prísna ohľadom postupu: pripojte presne jeden motor k riadiacej doske, ešte nie zapojený do reťazca s inými. Skript prechádza reťazec dozadu, najprv vyzve na uchopovač a pridelí mu ID 6, potom zápästie (wrist_roll) ako 5, až po ramenný kĺb (shoulder_pan) ako 1. Urobte to pred montážou.

    bash
    lerobot-setup-motors \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0
    
    lerobot-setup-motors \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1
  3. 3
    Kalibrujte obe ramená

    Posuňte každý kĺb do stredu jeho rozsahu, stlačte Enter a potom prejdite každý kĺb celým jeho rozsahom. id sa stane názvom súboru profilu.

    bash
    lerobot-calibrate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_so100_follower
    
    lerobot-calibrate \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_so100_leader
  4. 4
    Teleoperujte pred nahrávaním čohokoľvek

    Akceptačný test pre všetko vyššie uvedené. Ak je teleoperácia trhavá, zrkadlová alebo jeden kĺb nebude nasledovať, nahrávanie to zachová v 50 epizódach.

    bash
    lerobot-teleoperate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_so100_follower \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_so100_leader \
        --display_data=true
Kam sa ukladá kalibrácia a prečo je ID dôležité

Profily sa ukladajú do $HF_LEROBOT_CALIBRATION, predvolene ~/.cache/huggingface/lerobot/calibration, a ID je vyhľadávací kľúč. Ak dáte lerobot-record kalibrované ID, ponúkne Enter na opätovné použitie profilu alebo c na jeho prepracovanie. Ak mu dáte neznáme ID, súbor neexistuje, takže prejde do kalibrácie uprostred relácie.

Kamery rozhodujú o tom, čo vidí politika

bash
lerobot-find-cameras opencv   # or: lerobot-find-cameras realsense

# --- Detected Cameras ---
# Camera #0:
#   Name: OpenCV Camera @ 0
#   Type: OpenCV
#   Id: 0
#   Backend api: AVFOUNDATION
#   Default stream profile:
#     Format: 16.0
#     Width: 1920
#     Height: 1080
#     Fps: 15.0
Spustite toto v každej relácii: dokumentácia upozorňuje, že tieto identifikátory sa môžu zmeniť po reštarte alebo opätovnom pripojení, v závislosti od operačného systému.

Dva pohľady a ich umiestnenie sú dôležité: pevná scéna kamera pokrývajúca pracovný priestor a zápästná kamera blízko koncového efektora ukazujúca, čo sa chystá uchopovač dotknúť. Kontrolný zoznam komunitných dátových sád LeRobot vyžaduje prednostne dva pohľady s rozlíšením 480x640 / 720p alebo lepším, statické pozadie, neutrálne stabilné osvetlenie a rameno lídra a ľudské končatiny mimo záberu. Sprievodca nahrávaním dodáva pravidlo: mali by ste byť schopní vykonať úlohu sami len pohľadom na obrázky z kamery.

Index kamery nie je stabilná identita

Indexy OpenCV pochádzajú z poradia výpočtu, takže reštart alebo opätovné pripojenie môže spôsobiť, že si indexy 0 a 2 vymenia miesta a umiestnia pohľad zo zápästia do hornej pozície na celú reláciu. lerobot to sám hovorí: jeho trieda kamery prijíma cestu k zariadeniu aj celé číslo a varuje, že indexy sú nestabilné pri reštartoch alebo zmenách portov, najmä na Linuxe. Nasmerujte index_or_path na symlink udev pod /dev/v4l/by-id/, ktorý sleduje zariadenie namiesto poradia výpočtu. Toto je najčastejší spôsob, ako sa dátová sada stane vnútorne nekonzistentnou a tréning to nedokáže opraviť. Kamera nerozpoznaná.

Príkaz record a všetky príznaky

bash
HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')

lerobot-record \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_so100_follower \
    --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
    --teleop.type=so100_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_so100_leader \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/so100_pick_cube \
    --dataset.single_task="Pick the red cube and drop it in the box" \
    --dataset.num_episodes=50 \
    --dataset.fps=30 \
    --dataset.episode_time_s=25 \
    --dataset.reset_time_s=10 \
    --dataset.streaming_encoding=true \
    --dataset.encoder_threads=2
Slovník kamery je jeden reťazec v úvodzovkách shellu; vnorené zátvorky nie sú syntaxou shellu.

Predvolené hodnoty nižšie pochádzajú z src/lerobot/configs/dataset.py, z hlavnej vetvy, nie z tutoriálu. Niektoré nie sú také, aké si ľudia myslia.

PríznakPredvolenéČo robí
--dataset.repo_idprázdnenázov; časová pečiatka pridaná predvolene
--dataset.single_taskprázdnereťazec úlohy uložený s každou epizódou
--dataset.root$HF_LEROBOT_HOME/repo_idcesta na zápis, predvolené ~/.cache/huggingface/lerobot/
--dataset.fps30frekvencia riadiacej slučky a snímková frekvencia dátovej sady
--dataset.episode_time_s60sekundy pred automatickým posunom epizódy
--dataset.reset_time_s60reset scény; rameno sa pohybuje, nič sa neukladá
--dataset.num_episodes50epizódy zaznamenané v tejto relácii
--dataset.push_to_hubtruenahrať na konci relácie; false zostáva lokálne
--dataset.streaming_encodingfalse v dátovej triede, true v tabuľke dokumentáciekódovať počas snímania; nastavte to explicitne
--dataset.encoder_queue_maxsize30bufferované snímky na kameru, ~1 s pri 30 fps
--dataset.encoder_threadsnull (rozhoduje kodek)vlákna na kódovač; znížte, ak sa snímanie zadrháva
--dataset.no_stampfalseponechať repo_id presne tak, ako je zadané
--resumefalsepripojiť k existujúcej dátovej sade; vyžaduje --dataset.root
Dva príznaky, ktoré prekvapivo stoja hodinu

Váš dataset sa nevolá tak, ako ste zadali. lerobot pripojí časovú značku, takže so100_pick_cube sa stane so100_pick_cube_20260823_141530. Použite --dataset.no_stamp=true pre stabilný názov. Pokračovanie počíta prírastky, nie celkové súčty. S --resume=true, --dataset.num_episodes počíta ďalšie epizódy a --dataset.root sa stáva povinným. Ak požiadate o 50 na datasete s 30 epizódami, dostanete 80.

Ovládanie klávesnicou počas relácie

  • Pravá šípka alebo n: ukončenie epizódy alebo predčasné resetovanie fázy. Kláves, ktorý používate najčastejšie, pretože čisté uchopenie zriedka potrebuje 25 sekúnd.
  • Ľavá šípka alebo r: zahodenie epizódy a jej opakovanie. Zlý záber nestojí teraz nič a neskôr veľa.
  • Escape alebo q: zastavenie relácie, dokončenie kódovania, nahranie.
  • Tieto fungujú na X11, Wayland a bezhlavom SSH: bez globálneho backendu klávesov lerobot-record číta rovnaké klávesy z riadiaceho terminálu. Písmená prežijú pomalé SSH spojenia, kde sa sekvencie šípok rozdelia.
  • Klávesnicová teleoperácia je iná a vyžaduje globálny backend: X11, Windows alebo macOS s funkciami prístupnosti.

Koľko epizód a ako vyzerá dobrá epizóda

Sprievodca nahrávaním odporúča aspoň 50 epizód pre prvú úlohu, približne 10 na umiestnenie objektu. stránky s politikami uvádzajú minimum pre každý model, pod ktorým sa spustenie neoplatí z hľadiska času GPU.

PolitikaMin. epizódFormát datasetuÚroveň GPUCena za spustenie
SmolVLA30LeRobot v3.0RTX 4090 or any 24 GB cardabout 1 to 3 USD
ACT50LeRobot v3.0RTX 4090 or any 24 GB cardabout 1 to 3 USD
GR00T N1.750LeRobot v2.0 or v2.1A100 80 GB or H100 80 GBabout 4 to 12 USD
GR00T N1.550LeRobot v2.0 or v2.1A100 80 GB or H100 80 GBabout 4 to 12 USD
Pi0.550LeRobot v3.0A100 80 GB or H100 80 GBabout 4 to 12 USD

Lepšia otázka je, koľko čoho. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) zhromaždili viac ako 40 000 demonštrácií a vykonali viac ako 15 000 reálnych spustení. Generalizácia sledovala približne mocninový vzťah s počtom prostredí a objektov, a po prekročení prahu pre každé prostredie alebo objekt mali dodatočné demonštrácie minimálny účinok. Na jednom testovacom stole: presuňte objekt, zmeňte osvetlenie, vymeňte kocku, namiesto opakovania jedného záberu.

Teleoperácia líder-nasledovník ako zdroj dát
Výhody
  • Spojité trajektórie kĺbov, ktoré dokáže servo reprodukovať, na rozdiel od klávesnice alebo gamepadu
  • Akcia a stav zdieľajú konvenciu súradníc, takže politika sa učí cieľ, ktorý môže priamo ovládať
  • Epizóda trvajúca 25 sekúnd plus 10-sekundový reset je približne 100 epizód za hodinu
  • Operátor cíti, keď sa nasledovník zasekne alebo zviaže, takže chyby sa objavia skôr, ako sa dáta uložia
Kompromisy
  • Druhé rameno zhruba zdvojnásobuje náklady na diely
  • Demonštrácie dedia návyky operátora; Mandlekar et al. zistili, že kvalita politiky silne závisí od kvality demonštrácií
  • Líder je vzorkovaný s frekvenciou slučky, takže pauzy sa stávajú takmer identickými riadkami, ktoré učia politiku čakať
  • Nič nevynucuje konzistentnosť medzi reláciami: kamera posunutá o 5 cm je skrytý posun distribúcie

Dobrá epizóda je nudná: opakovateľná domáca pozícia, jedna vec hotová, ukončená, keď je objekt v koši, reťazec úlohy v rozsahu 25 až 50 znakov, ktoré odporúča kontrolný zoznam. Zoberte červenú kocku a vložte ju do krabice je reťazec úlohy; task1 je anti-vzor, ktorý kontrolný zoznam výslovne uvádza. Nejasné anotácie vedú zoznam problémov a sú najdôležitejšie pre , kde je reťazec vstupom modelu, nie názvom súboru.

Defekty, ktoré potichu ničia dátový súbor

Žiadny nevyvolá výnimku. Všetky prežijú do tréningu, objavia sa ako krivka straty, ktorá vyzerá dobre, a robot, ktorý nič nerobí. Skontrolujte, kým je scéna nastavená.

DefektAko to vyzeráOdkiaľ to pochádzaAko to odhaliť
Vymenené pohľady kamierobraz zápästia pod horným kľúčompriradenie indexu po opätovnom zapojenílerobot-find-cameras each session; by-id paths
Zmrazené snímkyrovnaký obraz pre desiatky riadkovkamera prestane dodávať; slučka opakuje poslednú snímkuprehliadnite to v lerobot-dataset-viz
Vynechané snímkypočet riadkov pod fps krát sekundyfronta pretečie, zahadzuje namiesto blokovania'Encoder queue full' v logu; riadky vs fps krát trvanie
Kĺb na svojom limitejeden kĺb naplocho na min alebo maxrozsah lídra presahuje rozsah nasledovníka, alebo zlá stredná pozíciamin/max pre každý kĺb v ds.meta.stats; lerobot-find-joint-limits vopred
Obraz a akcia mimo synchronizáciepolitika predvída alebo zaostávakamery s iným fps ako slučkaudržujte každú kameru na --dataset.fps
Mŕtvy časdlhé série identických riadkov akciíoperátor pozastavil nahrávaniepodiel po sebe idúcich identických riadkov akcií
Nepoužiteľný reťazec úlohytask1, demo2, testrýchle písaniemeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Zahodené snímky sa skrývajú

Enkodér udržiava ohraničený front pre každú kameru, štandardne 30 snímok. Keď nestíha, snímky sú zahodené namiesto zablokovania: snímanie pokračuje a nič nepadá. Dostanete Encoder queue full for {camera}, dropped N frame(s) a celkový počet za kameru na konci epizódy. Prah lerobot: približne 5 percent chýbajúcich znamená preťažený systém, 2 percentá sú očakávané zaťaženie pri štarte. Opravy v poradí: --display_data=false, znížiť --dataset.encoder_threads, vcodec=h264, vypnúť streamovanie.

Jedna výhrada: tabuľka sprievodcu streamovaním a kódovaním uvádza predvolenú hodnotu ako True, zatiaľ čo dátová trieda na main číta streaming_encoding: bool = False. Dokumentácia a kód sa nezhodujú, takže to nastavte explicitne; lerobot zaznamená nápovedu odporúčajúcu to vždy, keď sa spustí s vypnutým príznakom.

Skontrolujte dataset pred prenájmom GPU

Akceptačný test z dokumentácie: porovnajte dĺžku videa s dĺžkou epizódy, ktorú nahlásilo CLI, a potvrďte, že počet riadkov sa rovná fps krát dĺžka. Na epizódu, nie na celok.

python
from lerobot.datasets import LeRobotDataset

ds = LeRobotDataset("your-user/so100_pick_cube_20260823_141530")
print("fps:", ds.fps, "frames:", ds.num_frames)

# In v3.0 the per-episode records live in meta/episodes/ as chunked parquet:
# lengths, tasks and offsets into the shared parquet and mp4 shards.
# They load through the datasets stack, so this is a datasets.Dataset --
# use .column_names and integer indexing, not pandas .columns / .head().
eps = ds.meta.episodes
print(eps.column_names)
print(eps[0])

# Global feature statistics, including per-joint min and max.
# A joint whose min equals its max never moved. A joint sitting at a
# hard limit for most of the run is the one that will stall the policy.
print(ds.meta.stats["observation.state"])
Epizóda, ktorej fps krát trvanie sa výrazne líši, je kandidátom na vymazanie, nie na trénovanie.

Potom sa na to pozrite. lerobot-dataset-viz prehráva epizódu snímku po snímke so stopami kĺbov vedľa pohľadov kamery, v Rerun alebo Foxglove. Vymenené kamery a zamrznuté snímky sa objavia do desiatich sekúnd. Ľudia tento krok preskakujú.

bash
# Replay one episode with camera views and joint traces
lerobot-dataset-viz \
    --repo-id your-user/so100_pick_cube_20260823_141530 \
    --episode-index 0

# Foxglove instead, for a seekable, scrubbable timeline
lerobot-dataset-viz \
    --repo-id your-user/so100_pick_cube_20260823_141530 \
    --episode-index 0 \
    --display-mode foxglove

# Drop the episodes that did not survive review
lerobot-edit-dataset \
    --repo_id your-user/so100_pick_cube_20260823_141530 \
    --new_repo_id your-user/so100_pick_cube_clean \
    --operation.type delete_episodes \
    --operation.episode_indices "[3, 17, 41]"
lerobot-edit-dataset tiež vykonáva rozdelenie, zlúčenie, odstránenie_funkcie, úpravu_úloh a prepočítanie štatistík. Mažte štedro: zlá epizóda stojí jednu epizódu; jej ponechanie stojí každý beh, ktorý na nej bol trénovaný.
Zoznam verejných datasetov LeRobot v adresári datasetov AY-Robots s počtom epizód a formátmi
Ako sú porovnateľné datasety dimenzované a anotované.

v2.1 alebo v3.0: rozhodnite sa pred nahrávaním

v2.1 zapisoval jeden parquet a jeden MP4 na epizódu. v3.0 spája mnoho epizód do zdieľaných shardov a obnovuje hranice z metadát, takže info.json obsahuje šablóny ciest ako data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet namiesto čísla epizódy. Zdôvodnením je menej, väčších súborov: rýchlejšia inicializácia a menší tlak na súborový systém vo veľkom meradle.

LeRobot v2.1LeRobot v3.0
Rozloženiejeden parquet a jeden MP4 na epizódumnoho epizód na shard
Metadáta epizódyJSONL fileschunked parquet pod meta/episodes/, cez dátový zásobník
Streamovanie z Hubunieáno, cez StreamingLeRobotDataset
Napísané lerobot 0.6.1nieáno, to, čo získate dnes
Čítané GR00T N1.7 a N1.5ánonie, musí byť prevedené na nižšiu verziu
Nahrávanie dnes, trénovanie GR00T zajtra

lerobot 0.6.1 zapisuje v3.0, ale GR00T N1.7 a N1.5 čítajú v2.0 alebo v2.1 a zlyhajú na ňom. Všimnite si smer vývoja: src/lerobot/scripts/ obsahuje convert_dataset_v21_to_v30.py a nič, čo by išlo opačným smerom. Vyriešte to pred stretnutím. Oprava: dátová sada odmietnutá ako v3.

bash
# Upgrade an older v2.1 dataset to v3.0
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube

# By default it pushes the converted dataset back to the hub and tags it v3.0.
# To convert a local copy and keep it off the hub:
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube \
    --root=/path/to/dataset/directory \
    --push-to-hub=false
Rýchle pre 50 epizód. Mierka je iná práca: príručka prenosu lerobot, pre surový DROID do v3.0, počíta s 7+ dňami lokálneho spracovania a približne 400 GB.

Dve cesty k rovnakému datasetu

Všetko vyššie, na vašom vlastnom stroji: vy vlastníte výpočet USB, zostavenie ffmpeg, ladenie kodéra a kalibračné súbory. Správna cesta k pochopeniu pipeline, spusteniu neobvyklej kamerovej zostavy alebo udržaniu dát lokálne.

Čo táto cesta stojí

Čas: večer na rameno na zostavenie, náročná prvá kalibrácia a prvá relácia, ktorú zahodíte, pretože kamera bola v nesprávnom slote.

Nahrávajte datasety LeRobot bez vlastného zapájania pipeline

Desktopový klient AY-Robots zaznamenáva epizódy, streamy z kamier a stavy kĺbov vo formáte LeRobot z teleoperačnej relácie a potom odovzdá dataset trénerovi.

Získajte desktopového klienta

Od datasetu k politike

Päťdesiat čistých epizód napája každý beh tu. trénuje od nuly len na vašej úlohe, približne 80 M parametrov pri zhruba 20 ms na akčný krok, jediný z piatich, ktorému vyhovuje rýchly pohyb. má približne 450 M parametrov na 24 GB karte. je základný model s približne 3 B parametrami, kde ovplyvňuje asi 40 M parametrov, potrebuje A100 alebo H100 a vyžaduje dataset v2.1.

Ďalej, sprievodca pre vašu kombináciu: , alebo ; pre prvý beh je kratšie. Keď politika funguje na stole, ale zlyhá vo chvíli, keď pohnete stolom, je to problém s dátami: a idú hlbšie do rozmanitosti.

Koľko epizód skutočne potrebujem pre prvú funkčnú politiku?

Tridsať pre SmolVLA, päťdesiat pre ACT, Pi0.5, GR00T N1.5 a N1.7, čo sú minimá, ktoré vynucujú tréneri AY-Robots. Príručka LeRobot nezávisle odporúča aspoň 50 pre prvú úlohu, približne 10 na umiestnenie objektu. Práca so škálovaním dát zistila, že generalizácia sa škáluje s prostrediami a objektmi, nie s počtom demonštrácií, takže sto záberov jednej scény je horších ako päťdesiat naprieč piatimi umiestneniami.

Potrebujem riadiace rameno, alebo môžem teleoperovať pomocou klávesnice?

lerobot dodáva klávesnicové a gamepadové teleoperátory, takže riadiace rameno nie je striktne vyžadované, ale je silne preferované: režim leader-follower poskytuje spojité trajektórie kĺbov v súradnicovej konvencii zaznamenanej akcie, zatiaľ čo vstup z klávesnice produkuje krokový pohyb, ktorý si politika osvojí ako trhavý. Klávesnicová teleoperácia tiež potrebuje globálny kľúčový backend, takže zlyháva na Waylande a bezhlavých systémoch.

Môžem nahrávať na Raspberry Pi alebo malom mini PC?

Áno, s doladením. Príručka pre streamovacie kódovanie má kategóriu s nízkymi nárokmi pokrývajúcu moderné 4-jadrové stroje a Raspberry Pi 5 a umiestňuje dve kamery s rozlíšením 640x480 a 30 fps do stĺpca „vyžaduje určité doladenie“. Jej rada: zastavte, aby sa kodér nekonkuroval s cyklom snímania, pomocou --dataset.rgb_encoder.vcodec=h264 a --dataset.streaming_encoding=false. Hodnotí dve kamery s rozlíšením 640x480 ako približne 55 miliónov pixelov za sekundu a dve s rozlíšením 1920x1080 ako približne 373 miliónov.

Ako zistím, že práve zaznamenaný dataset je skutočne v poriadku?

Tri jednoduché kontroly. Porovnajte dĺžku videa každej epizódy s dĺžkou nahlásenou CLI a potvrďte, že počet riadkov sa rovná fps krát táto dĺžka, pre každú epizódu namiesto celkového súčtu; to je akceptačný test, ktorý poskytuje príručka kódovania lerobot. Prečítajte ds.meta.stats, kde kĺb, ktorého min sa rovná jeho max, sa nikdy nepohol. Potom prehrajte dve alebo tri epizódy v lerobot-dataset-viz, čo je jediný spôsob, ako sa prejavia prehodené pohľady a zamrznuté snímky. Pri vypadnutých snímkach príručka stanovuje hranicu približne 5 percent chýbajúcich; približne 2 percentá sú normálne prechodné zaťaženie, často len pri štarte.

Moja tréningová úloha odmietla dataset ako v3.0. Čo teraz?

GR00T N1.7 a N1.5 čítajú LeRobot v2.0 alebo v2.1 a zlyhávajú na v3.0, čo je to, čo zaznamenáva lerobot 0.6.1. Buď sa dohodnite na formáte pred tréningom, alebo použite politiku, ktorá natívne číta v3.0: Pi0.5, SmolVLA alebo ACT. lerobot dodáva konvertor z v2.1 na v3.0 a nič opačne.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started