Stranica tutorijala AY-Robots za snimanje vašeg prvog LeRobot skupa podataka sa SO-100 rukom
LeRobotSO-100Snimanje skupa podatakaTeleoperacijaUčenje imitacijom

Snimite svoj prvi LeRobot skup podataka sa SO-100

AY-Robots ResearchAugust 23, 202616 min čitanja

Snimite upotrebljiv LeRobot skup podataka sa SO-100: kalibracija, teleoperacija vođa-pratilac, stvarne lerobot-record zastavice i podrazumevane vrednosti, postavka kamere, broj epizoda i defekti koji kvare izvođenje.

SO-100 pratilac, SO-100 pratilac, vodeća ruka istog dizajna i dvije USB kamere mogu fino podesiti politiku za jedno popodne. Ista radna stanica može jednako lako proizvesti šezdeset epizoda koje izgledaju zdravo u pregledniku datoteka i protraćiti šestosatno GPU pokretanje. Razlika je rijetko u modelu; ona je u onome što se dogodilo između servoa i parquet datoteke.

Evo ručne rute, a zatim kraće. Svaka komanda je iz lerobot 0.6.1, objavljenog 3. avgusta 2026. i aktuelnog na PyPI-ju. Prešao je na konzolne ulazne tačke, tako da tutorijali koji pokreću python lerobot/scripts/control_robot.py opisuju datoteku koja više ne postoji.

Kratka verzija

  • lerobot 0.6.1 snima v3.0; GR00T N1.7 i N1.5 žele v2.1. Dogovorite format prije nego što pritisnete snimanje.
  • Četiri komande: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Prenesite iste --robot.id i --teleop.id iz kalibracije u sesiju snimanja.
  • Stvarne podrazumijevane vrijednosti: 30 fps, 60 s po epizodi, 60 s reset, 50 epizoda, oko 100 minuta stvarnog vremena.
  • Minimalan broj epizoda ovdje: 30 za SmolVLA, 50 za ostale.
  • Raznolikost pobjeđuje volumen. Skupovi podataka propadaju zbog četiri stvari: zamijenjeni indeksi kamere, ispušteni ili zamrznuti okviri, zglob parkiran na svojoj granici, nečitljiv niz zadataka.

Šta sesija snimanja bilježi

LeRobot skup podataka LeRobot skup podataka nije fascikla video zapisa, već vremenski indeksirana tabela sa priloženim videom: svaki takt kontrolne petlje piše jedan red koji sadrži komandovanu akciju, stanje koje je pratilac dostigao, jedan kadar po kameri, vremensku oznaku i indekse. Politika vidi samo te kolone. Šema lerobot/svla_so100_pickplace, pročitana iz meta/info.json.

FunkcijadtypeOblikŠta je to
actionfloat32[6]ciljevi zglobova sa vodeće ruke
observation.statefloat32[6]pozicije zglobova koje je pratilac dostigao
observation.images.topvideo[480, 640, 3]kamera scene, MP4 (av1 ovde)
observation.images.wristvideo[480, 640, 3]kamera zgloba, ista brzina
timestampfloat32[1]sekunde od početka epizode
frame_index, episode_index, index, task_indexint64[1]automatski popunjeno vođenje evidencije

Zglobovi su main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll i main_gripper: šest stepeni slobode SO-100. Akcija i stanje dele oblik jer teleoperacija vođa-pratilac beleži cilj i poziciju dostignutu jedan korak kasnije. Taj jaz je informacija: gde se ruka borila protiv gravitacije ili zaglavljenog objekta. Ti stringovi pripadaju tom skupu podataka. Sesija snimljena sa 0.6.1 danas piše shoulder_pan.pos do gripper.pos, ID-jevi 1 do 6 na magistrali: istih šest zglobova, različiti ključevi, što je važno u trenutku kada konfiguracija adresira funkciju po imenu.

Mera iz stvarnog skupa podataka

Taj skup podataka sadrži 50 epizoda i 19.631 kadar pri 30 fps: oko 393 kadra, ili 13 sekundi, po epizodi. Ako vaše u proseku traju minut, radite nešto teže ili snimate prazan hod na oba kraja.

Unos u AY-Robots glosar za format LeRobot skupa podataka, prikazujući raspored direktorijuma i datoteke metapodataka
Šta se nalazi u data/, videos/ i meta/, i koje politike čitaju koju verziju.

Šta vam je potrebno na radnom stolu

StavkaDetaljiNapomena
Ruka pratiocaSO-100, six Feetech STS3215 servosoko 110 do 150 EUR u dijelovima
Ruka vođea second SO-100, uklonjeni zupčanicizupčanici uklonjeni sa svih šest motora vođe: samo enkoder, manje trenja
Napajanjeusklađeno sa varijantom STS3215 od 7.4 V u specifikaciji materijalapogledajte upozorenje ispod
Kameretwo USB cameras, 640x480 at 30 fpsjedan pogled na scenu, jedan na zglobu
HostPython 3.12 or newer, ffmpegrequires-python >= 3.12
Hub nalogHugging Face write tokenoptional with --dataset.push_to_hub=false
7.4 V, ne 12 V

STS3215 dolazi u dvije verzije: SO-ARM100 README ocjenjuje verziju od 7.4 V sa obrtnim momentom zastoja od 16.5 kg.cm mjerenim na 6 V, a verziju od 12 V sa 30 kg.cm, te napominje da uzimanje motora od 12 V također znači kupovinu napajanja od 12 V 5 A+ umjesto onog od 5 V. Specifikacija materijala navodi servo motore od 7.4 V. Napajanje servo motora od 7.4 V sa 12 V ih uništava, stoga pročitajte oznaku motora prije nego što bilo šta povežete. Servo ne reaguje.

Ako ruka još nije sastavljena, to je zasebna večer: počnite sa SO-100 početak rada i kompletan vodič za postavljanje SO-100. Ako još ništa niste kupili, prvo pročitajte poređenje SO-100 i SO-101 prvo: SO-101 je novija revizija sa poboljšanim ožičenjem i bez koraka uklanjanja zupčanika, a radni tok snimanja je identičan.

Instalirajte 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 ispisuje sažetak sistema, uključujući verziju ffmpeg-a koju može pronaći na PATH-u.

Dodaci najviše zbunjuju ljude. pip install lerobot instalira samo osnovne ML zavisnosti, ništa što komunicira sa robotom. Koch ruke trebaju dynamixel umjesto feetech. Ako vaša ljuska nikada nije čula za lerobot-record, to je razlog.

Portovi, ID-ovi motora i kalibracija

Tri jednokratna koraka stoje između dijelova i funkcionalne teleop petlje. omogućava da se politika obučena na vašoj ruci pokreće na tuđoj, mapirajući sirove brojeve enkodera na zajedničku konvenciju zglobova.

  1. 1
    Pronađite USB port svake ruke

    Pokrenite ga sa obje ruke priključene, isključite onu koju identifikujete kada se to zatraži, i zabilježite koji port nestaje. Na Linuxu ćete možda trebati 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
    Napišite ID-ove motora i brzine prijenosa

    ID-ovi se pišu jedan po jedan motor, a dokumentacija je stroga o tome kako: povežite tačno jedan motor na kontrolnu ploču, još ne serijski povezan sa bilo kojim drugim. Skripta prolazi kroz lanac unazad, prvo tražeći hvataljku i dajući joj ID 6, zatim zglob zgloba (wrist_roll) kao 5, pa sve do zgloba ramena (shoulder_pan) kao 1. Uradite to prije montaže.

    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
    Kalibrirajte obje ruke

    Pomjerite svaki zglob u sredinu njegovog opsega, pritisnite Enter, a zatim svaki provucite kroz cijeli opseg. id postaje naziv datoteke profila.

    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
    Teleoperirajte prije bilo kakvog snimanja

    Test prihvatanja za sve navedeno. Ako je teleoperacija trzava, zrcaljena, ili jedan zglob neće pratiti, snimanje to čuva u 50 epizoda.

    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
Gdje se kalibracija pohranjuje i zašto je ID važan

Profili idu u $HF_LEROBOT_CALIBRATION, podrazumijevano ~/.cache/huggingface/lerobot/calibration, a ID je ključ za pretragu. Dajte lerobot-record kalibrirani ID i ponudit će Enter za ponovnu upotrebu profila ili c za ponovno kalibriranje. Dajte mu nepoznati ID i neće biti datoteke, pa će se prebaciti u kalibraciju usred sesije.

Kamere odlučuju šta politika vidi

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
Pokrenite ovo svaku sesiju: dokumentacija upozorava da se ovi identifikatori mogu promijeniti nakon ponovnog pokretanja ili ponovnog priključivanja, ovisno o operativnom sistemu.

Dva pogleda, i gdje se nalaze je važno: fiksna kamera scene koja pokriva radni prostor, i kamera na zglobu blizu krajnjeg efektora pokazujući šta će hvataljka dodirnuti. Kontrolna lista LeRobot zajedničkih skupova podataka traži po mogućnosti dva pogleda na 480x640 / 720p ili bolje, statičnu pozadinu, neutralno stabilno osvjetljenje, te da su vodeća ruka i ljudski udovi izvan kadra. Vodič za snimanje dodaje pravilo: trebali biste biti u mogućnosti sami obaviti zadatak samo gledajući slike kamere.

Indeks kamere nije stabilan identitet

OpenCV indeksi dolaze iz redoslijeda nabrajanja, tako da ponovno pokretanje ili ponovno priključivanje može uzrokovati zamjenu mjesta indeksa 0 i 2 i postaviti pogled zgloba u gornji slot za cijelu sesiju. lerobot to sam kaže: njegova klasa kamere prihvata putanju uređaja kao i cijeli broj, i upozorava da su indeksi nestabilni pri ponovnom pokretanju ili promjenama portova, posebno na Linuxu. Usmjerite index_or_path na udev simboličku vezu pod /dev/v4l/by-id/, koja prati uređaj umjesto redoslijeda nabrajanja. Ovo je najčešći način na koji skup podataka postaje interno nedosljedan, i obuka to ne može popraviti. Kamera nije detektovana.

Naredba za snimanje i svaka zastavica

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
Rječnik kamere je jedan string naveden u shell-u; ugniježđene zagrade nisu shell sintaksa.

Podrazumijevane vrijednosti ispod dolaze iz src/lerobot/configs/dataset.py na glavnoj grani, a ne iz tutorijala. Nekoliko njih nije ono što ljudi pretpostavljaju.

ZastavicaPodrazumijevanoŠta radi
--dataset.repo_idpraznoime; vremenska oznaka se dodaje podrazumijevano
--dataset.single_taskpraznostring zadatka pohranjen sa svakom epizodom
--dataset.root$HF_LEROBOT_HOME/repo_idputanja za pisanje, podrazumijevano ~/.cache/huggingface/lerobot/
--dataset.fps30brzina kontrolne petlje i brzina kadrova skupa podataka
--dataset.episode_time_s60sekundi prije nego što se epizoda automatski nastavi
--dataset.reset_time_s60reset scene; ruka se pomjera, ništa se ne pohranjuje
--dataset.num_episodes50epizode snimljene u ovoj sesiji
--dataset.push_to_hubtrueotpremanje na kraju sesije; false ostaje lokalno
--dataset.streaming_encodingfalse in the dataclass, true in the docs tablekodiranje tokom snimanja; postavite eksplicitno
--dataset.encoder_queue_maxsize30baferovani kadrovi po kameri, ~1 s pri 30 fps
--dataset.encoder_threadsnull (codec decides)niti po enkoderu; smanjite ako snimanje zastajkuje
--dataset.no_stampfalsezadržite repo_id tačno onako kako je upisan
--resumefalsedodajte postojećem skupu podataka; zahtijeva --dataset.root
Dvije zastavice koje iznenada koštaju sat vremena

Vaš skup podataka se ne zove onako kako ste ukucali. lerobot dodaje oznaku datuma i vremena, tako da so100_pick_cube postaje so100_pick_cube_20260823_141530. Koristite --dataset.no_stamp=true za stabilno ime. Nastavak broji dodatke, ne ukupne iznose. Sa --resume=true, --dataset.num_episodes broji dodatne epizode i --dataset.root postaje obavezan. Zatražite 50 na skupu podataka od 30 epizoda i dobićete 80.

Kontrola tastaturom tokom sesije

  • Desna strelica ili n: završite epizodu ili resetujte fazu ranije. Ovo je taster koji najviše koristite, jer čisto hvatanje rijetko zahtijeva 25 sekundi.
  • Lijeva strelica ili r: odbacite epizodu i ponovite je. Loš snimak sada ne košta ništa, a kasnije mnogo.
  • Escape ili q: zaustavite sesiju, završite kodiranje, otpremite.
  • Ovo radi na X11, Waylandu i SSH-u bez glave: bez globalnog pozadinskog sistema za tastere, lerobot-record čita iste tastere sa kontrolnog terminala. Slova preživljavaju spore SSH veze, gdje se sekvence strelica razdvajaju.
  • Tastaturna teleoperacija je drugačija i zahtijeva globalni pozadinski sistem: X11, Windows ili macOS sa pristupačnošću.

Koliko epizoda, i kako izgleda dobra

Vodič za snimanje predlaže najmanje 50 epizoda za prvi zadatak, oko 10 po lokaciji objekta. stranice sa politikama navode minimum po modelu, ispod kojeg pokretanje nije vrijedno GPU vremena.

PolitikaMin. epizodaFormat skupa podatakaGPU nivoCijena po pokretanju
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

Bolje pitanje je koliko čega. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) prikupili su preko 40.000 demonstracija i izvršili više od 15.000 simulacija u stvarnom svijetu. Generalizacija je pratila približno odnos zakona snage sa brojem okruženja i objekata, a nakon praga po okruženju ili objektu, dodatne demonstracije imale su minimalan učinak. Na jednoj radnoj stanici: pomjerite objekat, promijenite osvjetljenje, zamijenite kocku, umjesto da ponavljate jedan snimak.

Teleoperacija vođa-pratilac kao izvor podataka
Prednosti
  • Kontinuirane putanje zglobova koje servo može reproducirati, za razliku od tastature ili gamepada
  • Akcija i stanje dijele koordinatnu konvenciju, tako da politika uči cilj kojim može direktno upravljati
  • Epizoda od 25 sekundi plus reset od 10 sekundi je otprilike 100 epizoda na sat
  • Operater osjeća zastoj ili vezivanje pratioca, tako da se greške pojavljuju prije nego što se podaci obavežu
Kompromisi
  • Druga ruka otprilike udvostručuje cijenu dijelova
  • Demonstracije nasljeđuju navike operatera; Mandlekar et al. su otkrili da kvalitet politike uvelike ovisi o kvalitetu demonstracija
  • Vođa se uzorkuje brzinom petlje, tako da pauze postaju gotovo identični redovi koji uče politiku da čeka
  • Ništa ne osigurava dosljednost između sesija: kamera pomjerena za 5 cm je skrivena promjena distribucije

Dobra epizoda je dosadna: ponovljiva početna poza, jedna stvar urađena, završena kada je objekat u kanti, niz zadataka od 25 do 50 znakova koje preporučuje kontrolna lista. Uzmi crvenu kocku i spusti je u kutiju je niz zadataka; task1 je anti-uzorak koji kontrolna lista eksplicitno navodi. Nejasne anotacije su na vrhu liste problema, a najvažnije su za modele vida, jezika i akcije, gdje je niz ulaz za model, a ne naziv datoteke.

Defekti koji tiho uništavaju skup podataka

Nijedan ne baca izuzetak. Svi preživljavaju do treninga, pojavljujući se kao kriva gubitka koja izgleda dobro i robot koji ne radi ništa. Provjerite dok je scena postavljena.

DefektKako izgledaOdakle dolaziKako ga uhvatiti
Zamijenjeni prikazi kamereslika zgloba ispod gornjeg ključaponovno dodjeljivanje indeksa nakon ponovnog priključivanjalerobot-find-cameras each session; by-id paths
Zamrznuti okviriista slika za desetine redovakamera prestaje isporučivati; petlja ponavlja posljednji kadarscrub it in lerobot-dataset-viz
Ispušteni okviribroj redova ispod fps puta sekundered se prelijeva, ispušta umjesto da blokira'Encoder queue full' in the log; rows vs fps times duration
Zglob na svojoj granicijedan zglob ravan na min ili maxraspon lidera premašuje raspon pratioca, ili loša srednja pozaper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Slika i akcija van korakapolitika anticipira ili kasnikamere na drugačijem fps-u od petljekeep every camera at --dataset.fps
Mrtvo vrijemedugi nizovi identičnih redova akcijaoperator pauzirao dok je snimač radioudio uzastopnih identičnih redova akcija
Neupotrebljiv niz zadatakatask1, demo2, testbrzo kucanjemeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Ispušteni frejmovi se sami skrivaju

Enkoder drži ograničeni red po kameri, podrazumevano 30 frejmova. Kada ne može da prati, frejmovi se ispuštaju umesto da se blokiraju: snimanje se nastavlja i ništa se ne ruši. Dobijate Encoder queue full for {camera}, dropped N frame(s) i ukupan broj po kameri na kraju epizode. Lerobot prag: oko 5 procenata nedostajućih znači preopterećen sistem, 2 procenta je očekivano opterećenje pri pokretanju. Rešenja po redu: --display_data=false, niži --dataset.encoder_threads, vcodec=h264, isključivanje striminga.

Jedna napomena: tabela vodiča za striming-enkodiranje navodi podrazumevanu vrednost kao True, dok dataclass na glavnoj grani čita streaming_encoding: bool = False. Dokumentacija i kod se ne slažu, pa je postavite eksplicitno; lerobot beleži savet koji to preporučuje kad god se pokrene sa isključenom zastavicom.

Proverite skup podataka pre iznajmljivanja GPU-a

Test prihvatanja iz dokumentacije: uporedite trajanje videa sa trajanjem epizode koje je prijavio CLI, i potvrdite da je broj redova jednak fps puta trajanje. Po epizodi, ne ukupno.

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"])
Epizoda čiji se fps značajno razlikuje od trajanja je kandidat za brisanje, a ne za obuku.

Zatim ga pogledajte. lerobot-dataset-viz ponavlja epizodu kadar po kadar sa tragovima zglobova pored prikaza kamere, u Rerunu ili Foxgloveu. Zamijenjene kamere i zamrznuti kadrovi pojavljuju se za deset sekundi. Ljudi preskaču ovaj korak.

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 takođe vrši podjelu, spajanje, uklanjanje funkcija, modifikaciju zadataka i ponovno izračunavanje statistike. Brišite velikodušno: loša epizoda košta jednu epizodu; zadržavanje košta svako pokretanje obučeno na njoj.
Direktorijum skupa podataka AY-Robots koji prikazuje javne LeRobot skupove podataka sa brojem epizoda i formatima
Kako se uporedivi skupovi podataka dimenzioniraju i anotiraju.

v2.1 ili v3.0: odlučite prije snimanja

v2.1 je pisao jedan parquet i jedan MP4 po epizodi. v3.0 spaja mnoge epizode u zajedničke šardove i obnavlja granice iz metapodataka, tako da info.json nosi šablone putanja kao što su data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet umjesto broja epizode. Opravdanje je manje, veće datoteke: brža inicijalizacija i manji pritisak na datotečni sistem u velikom obimu.

LeRobot v2.1LeRobot v3.0
Rasporedjedan parquet i jedan MP4 po epizodimnogo epizoda po šardu
Metapodaci epizodeJSONL datotekechunked parquet pod meta/episodes/, putem datasets stacka
Striming sa Hubaneda, putem StreamingLeRobotDataset
Napisano od lerobot 0.6.1neda, ono što dobijate danas
Čitano od GR00T N1.7 i N1.5dane, mora se konvertovati naniže
Snimanje danas, obuka GR00T-a sutra

lerobot 0.6.1 piše v3.0, ali GR00T N1.7 i N1.5 čitaju v2.0 ili v2.1 i ruše se na njemu. Primijetite smjer kretanja: src/lerobot/scripts/ sadrži convert_dataset_v21_to_v30.py i ništa što ide u drugom smjeru. Riješite ovo prije sesije. Popravak: dataset odbijen kao 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
Brzo za 50 epizoda. Skaliranje je drugačiji posao: lerobotov vodič za portovanje, za sirovi DROID u v3.0, predviđa 7+ dana lokalne obrade i oko 400 GB.

Dva puta do istog skupa podataka

Sve navedeno, na vašoj mašini: vi ste vlasnik USB enumeracije, ffmpeg builda, podešavanja enkodera i kalibracionih datoteka. Pravi put za razumevanje pipeline-a, pokretanje neobične konfiguracije kamere ili čuvanje podataka lokalno.

Šta košta ovaj put

Vreme: jedno veče po ruci za sastavljanje, nezgodna prva kalibracija i prva sesija koju ćete odbaciti jer je kamera bila u pogrešnom slotu.

Snimajte LeRobot skupove podataka bez samostalnog povezivanja pipeline-a

AY-Robots desktop klijent snima epizode, streamove kamere i stanja zglobova u LeRobot formatu iz sesije teleoperacije, a zatim predaje skup podataka treneru.

Preuzmite desktop klijent

Od skupa podataka do politike

Pedeset čistih epizoda napaja svako pokretanje ovdje. trenira od nule samo na vašem zadatku, oko 80 M parametara pri otprilike 20 ms po koraku akcije, jedini od pet koji je udoban s brzim kretanjem. ima oko 450 M parametara na 24 GB kartici. je temeljni model s otprilike 3 B parametara gdje dotiče oko 40 M parametara, treba A100 ili H100, i želi taj v2.1 skup podataka.

Zatim, vodič za vašu kombinaciju: , ili ; za prvo pokretanje, je kraći. Kada politika radi na stolu, ali se sruši u trenutku kada pomaknete stol, to je problem s podacima: i idu dublje u raznolikost.

Koliko mi je epizoda zaista potrebno za prvu funkcionalnu politiku?

Trideset za SmolVLA, pedeset za ACT, Pi0.5, GR00T N1.5 i N1.7, minimumi koje nameću AY-Robots treneri. LeRobot vodič neovisno preporučuje najmanje 50 za prvi zadatak, oko 10 po lokaciji objekta. Rad na skaliranju podataka pokazao je da se generalizacija skalira s okruženjima i objektima, a ne s brojem demonstracija, tako da je sto snimaka jedne scene gore od pedeset snimaka na pet različitih mjesta.

Trebam li vodeću ruku ili mogu teleoperirati tipkovnicom?

lerobot isporučuje teleoperatore za tipkovnicu i gamepad, tako da vodeća ruka nije strogo potrebna, ali je izrazito poželjna: leader-follower daje kontinuirane putanje zglobova u koordinatnoj konvenciji snimljene akcije, dok unos tipkovnicom proizvodi stepenasto kretanje koje politika uči kao trzaj. Teleoperacija tipkovnicom također zahtijeva globalni pozadinski sustav za tipke, pa ne radi na Waylandu i bez glave.

Mogu li snimati na Raspberry Pi-u ili malom mini PC-u?

Da, uz podešavanje. Vodič za streaming-kodiranje ima kategoriju za niske resurse koja pokriva moderne 4-jezgrene strojeve i Raspberry Pi 5, te stavlja dvije kamere na 640x480 i 30 fps u svoju kolonu 'zahtijeva-neko-podešavanje'. Njegov savjet: zaustavite enkoder da se natječe s petljom snimanja, putem --dataset.rgb_encoder.vcodec=h264 i --dataset.streaming_encoding=false. Ocjenjuje dvije kamere na 640x480 kao oko 55 milijuna piksela u sekundi i dvije na 1920x1080 kao oko 373 milijuna.

Kako znam da je skup podataka koji sam upravo snimio zapravo ispravan?

Tri jeftine provjere. Usporedite trajanje videa svake epizode s trajanjem koje je prijavio CLI i potvrdite da je broj redaka jednak fps puta to trajanje, po epizodi, a ne ukupno; to je test prihvatljivosti koji daje lerobotov vodič za kodiranje. Pročitajte ds.meta.stats, gdje se zglob čiji je min jednak njegovom max nikada nije pomaknuo. Zatim ponovno reproducirajte dvije ili tri epizode u lerobot-dataset-viz, jedini način na koji se prikazuju zamijenjeni prikazi i zamrznuti okviri. Kod ispuštenih okvira vodič povlači crtu na otprilike 5 posto nedostajućih; oko 2 posto je normalno prolazno opterećenje, često samo pri pokretanju.

Moj zadatak obuke odbio je skup podataka kao v3.0. Što sada?

GR00T N1.7 i N1.5 čitaju LeRobot v2.0 ili v2.1 i ruše se na v3.0, što je ono što lerobot 0.6.1 bilježi. Ili dogovorite format prije obuke, ili koristite politiku koja izvorno čita v3.0: Pi0.5, SmolVLA ili ACT. lerobot isporučuje pretvarač v2.1 u v3.0 i ništa obrnuto.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started