AY-Robots stranica tutorijala 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, podešavanje kamere, broj epizoda i defekti koji kvare pokretanje.

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

Evo ručne rute, pa onda kraće. Svaka komanda je iz lerobot 0.6.1, objavljenog 3. avgusta 2026. i aktuelnog na PyPI-ju. Premešten je na ulazne tačke konzole, 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 pre 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 podrazumevane vrednosti: 30 fps, 60 s po epizodi, 60 s reset, 50 epizoda, oko 100 minuta realnog vremena.
  • Minimalan broj epizoda ovde: 30 za SmolVLA, 50 za ostale.
  • Raznolikost pobeđuje kvantitet. Skupovi podataka propadaju zbog četiri stvari: zamenjeni indeksi kamera, ispušteni ili zamrznuti frejmovi, zglob parkiran na svojoj granici, nečitljiv string zadatka.

Šta sesija snimanja beleži

LeRobot skup podataka nije fascikla video zapisa, već tabela indeksirana vremenom sa priloženim videom: svaki takt kontrolne petlje upisuje 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.

KarakteristikadtypeOblikŠta predstavlja
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 (ovde av1)
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. 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 upisuje shoulder_pan.pos do gripper.pos, ID-jeve 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 mrtvo vreme na oba kraja.

Unos u rečniku AY-Robots za format skupa podataka LeRobot, 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

StavkaDetaljNapomena
Ruka pratiocaSO-100, six Feetech STS3215 servosoko 110 do 150 EUR u delovima
Ruka vođedruga SO-100, zupčanici uklonjenizupč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
Kameredve USB kamere, 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 dve verzije: SO-ARM100 README ocenjuje verziju od 7.4 V na 16.5 kg.cm obrtnog momenta pri zaustavljanju merenog na 6 V, a verziju od 12 V na 30 kg.cm, i napominje da uzimanje motora od 12 V takođe znači kupovinu napajanja od 12 V 5 A+ umesto 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, zato pročitajte etiketu motora pre nego što bilo šta povežete. Servo ne reaguje.

Ako ruka još nije sastavljena, to je zasebno veče: počnite sa SO-100 početak rada i kompletnim SO-100 vodičem za podešavanje. Ako još niste ništa kupili, 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 tok rada 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 sistemski sažetak, 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 umesto 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 delova i funkcionalne teleop petlje. omogućava da se politika obučena na vašoj ruci pokreće na tuđoj, mapirajući sirove vrednosti enkodera na zajedničku konvenciju zglobova.

  1. 1
    Pronađite USB port svake ruke

    Pokrenite ga sa obe ruke priključene, isključite onu koju identifikujete kada se to zatraži i zabeležite koji port nestaje. Na Linuxu će vam 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
    Zapišite ID-ove motora i brzine prenosa

    ID-ovi se pišu jedan po jedan motor, a dokumentacija je stroga po pitanju načina: povežite tačno jedan motor na kontrolnu ploču, još uvek ne serijski povezan sa bilo kojim drugim. Skripta prolazi 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 pre sklapanja.

    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 obe ruke

    Pomerite svaki zglob u sredinu njegovog opsega, pritisnite Enter, a zatim svaki provucite kroz ceo 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
    Teleoperišite pre snimanja bilo čega

    Test prihvatanja za sve navedeno. Ako je teleoperacija trzava, ogledalna, ili jedan zglob neće pratiti, snimanje to beleži 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
Gde se kalibracija čuva i zašto je ID važan

Profili idu u $HF_LEROBOT_CALIBRATION, podrazumevano ~/.cache/huggingface/lerobot/calibration, a ID je ključ za pretragu. Dajte lerobot-record kalibrisani ID i on će ponuditi Enter za ponovnu upotrebu profila ili c za ponovno kalibrisanje. 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
Pokrećite ovo svake sesije: dokumentacija upozorava da se ovi identifikatori mogu promeniti nakon ponovnog pokretanja ili ponovnog priključivanja, u zavisnosti od operativnog sistema.

Dva pogleda, i njihov položaj je važan: fiksna kamera scene koja pokriva radni prostor, i kamera na zglobu blizu krajnjeg efektora koja pokazuje šta hvataljka namerava da dodirne. LeRobot kontrolna lista za skupove podataka zajednice traži po mogućnosti dva pogleda na 480x640 / 720p ili bolje, statičnu pozadinu, neutralno stabilno osvetljenje, i da ruka vođe i ljudski udovi budu van kadra. Vodič za snimanje dodaje pravilo: trebalo bi da ste u mogućnosti da sami obavite zadatak samo gledajući slike sa kamere.

Indeks kamere nije stabilan identitet

OpenCV indeksi potiču iz redosleda nabrajanja, tako da ponovno pokretanje ili ponovno priključivanje može dovesti do zamene mesta indeksa 0 i 2 i postaviti pogled sa zgloba u gornji slot za celu sesiju. lerobot to sam kaže: njegova klasa kamere prihvata putanju uređaja kao i ceo broj, i upozorava da su indeksi nestabilni pri ponovnim pokretanjima ili promenama portova, posebno na Linuxu. Usmjerite index_or_path na udev simboličku vezu pod /dev/v4l/by-id/, koja prati uređaj, a ne redosled nabrajanja. Ovo je najčešći način da skup podataka postane interno nedosledan, i obuka to ne može popraviti. Kamera nije detektovana.

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

Podrazumevane vrednosti ispod potiču iz src/lerobot/configs/dataset.py na glavnoj grani, a ne iz tutorijala. Nekoliko njih nije ono što ljudi pretpostavljaju.

ZastavicaPodrazumevanoŠta radi
--dataset.repo_idemptyime; vremenska oznaka se podrazumevano dodaje
--dataset.single_taskemptystring zadatka sačuvan sa svakom epizodom
--dataset.root$HF_LEROBOT_HOME/repo_idputanja za pisanje, podrazumevano ~/.cache/huggingface/lerobot/
--dataset.fps30brzina kontrolne petlje i brzina kadrova skupa podataka
--dataset.episode_time_s60sekundi pre nego što se epizoda automatski nastavi
--dataset.reset_time_s60reset scene; ruka se pomera, ništa se ne čuva
--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 secka
--dataset.no_stampfalsezadržite repo_id tačno onako kako je unet
--resumefalsedodajte postojećem skupu podataka; zahteva --dataset.root
Dve 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 vrednosti. 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. Taster koji najviše koristite, jer čisto hvatanje retko zahteva 25 sekundi.
  • Leva 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, Wayland i headless SSH: bez globalnog pozadinskog sistema za tastere, lerobot-record čita iste tastere sa kontrolnog terminala. Slova preživljavaju spore SSH veze, gde se sekvence strelica razdvajaju.
  • Tastaturna teleoperacija je drugačija i zahteva 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 vredno GPU vremena.

PolitikaMin. epizodaFormat skupa podatakaGPU nivoCena 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) su prikupili preko 40.000 demonstracija i izvršili više od 15.000 simulacija u stvarnom svetu. Generalizacija je pratila približno odnos zakona snage sa brojem okruženja i objekata, a nakon praga po okruženju ili objektu, dodatne demonstracije su imale minimalan efekat. Na jednoj klupi: pomerite objekat, promenite osvetljenje, zamenite kocku, umesto da ponavljate jedan snimak.

Teleoperacija vođa-pratilac kao izvor podataka
Prednosti
  • Kontinuirane putanje zglobova koje servo može reprodukovati, za razliku od tastature ili gamepada
  • Akcija i stanje dele koordinatnu konvenciju, tako da politika uči cilj kojim može direktno da komanduje
  • Epizoda od 25 sekundi plus reset od 10 sekundi je otprilike 100 epizoda na sat
  • Operater oseća zastoj ili zaglavljivanje pratioca, tako da se greške pojavljuju pre nego što se podaci obavežu
Kompromisi
  • Druga ruka otprilike udvostručuje troškove delova
  • Demonstracije nasleđuju navike operatera; Mandlekar et al. su otkrili da kvalitet politike u velikoj meri zavisi od kvaliteta demonstracija
  • Vođa se uzorkuje brzinom petlje, tako da pauze postaju skoro identični redovi koji uče politiku da čeka
  • Ništa ne obezbeđuje doslednost između sesija: kamera pomerena za 5 cm je skrivena promena distribucije

Dobra epizoda je dosadna: ponovljiva početna pozicija, jedna stvar urađena, završena kada je objekat u kanti, string zadatka od 25 do 50 karaktera koje preporučuje kontrolna lista. Uzmi crvenu kocku i spusti je u kutiju je string zadatka; task1 je anti-obrazac koji kontrolna lista eksplicitno navodi. Nejasne anotacije su na vrhu liste problema, i one su najvažnije za , gde je string ulaz za model, a ne naziv datoteke.

Defekti koji tiho uništavaju skup podataka

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

DefektKako izgledaOdakle dolaziKako ga uhvatiti
Zamenjeni prikazi kamereslika zgloba pod gornjim ključemponovno dodeljivanje indeksa nakon ponovnog priključivanjalerobot-find-cameras each session; by-id paths
Zamrznuti frejmoviista slika za desetine redovakamera prestaje da isporučuje; petlja ponavlja poslednji frejmscrub it in lerobot-dataset-viz
Ispušteni frejmovibroj redova ispod fps puta sekundired se preliva, ispušta umesto da blokira'Encoder queue full' in the log; rows vs fps times duration
Zglob na svojoj granicijedan zglob ravan na min ili maxopseg lidera premašuje opseg 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 vremedugi nizovi identičnih redova akcijaoperator pauzirao dok je snimač radioshare of consecutive identical action rows
Neupotrebljiv string zadatkatask1, 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 isprati, 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, smanjiti --dataset.encoder_threads, vcodec=h264, isključiti striming.

Jedna napomena: tabela u vodiču 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čenim flagom.

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 koja značajno odstupa od fps puta trajanje je kandidat za brisanje, a ne za obuku.

Zatim je pogledajte. lerobot-dataset-viz ponavlja epizodu kadar po kadar sa tragovima zglobova pored prikaza kamere, u Rerunu ili Foxglove-u. Zamenjene kamere i zamrznuti kadrovi se pojavljuju 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 podelu, spajanje, uklanjanje funkcija, modifikaciju zadataka i ponovno izračunavanje statistike. Brišite velikodušno: loša epizoda košta jednu epizodu; njeno zadržavanje košta svako pokretanje obučeno na njoj.
Direktorijum skupa podataka AY-Robots prikazuje javne LeRobot skupove podataka sa brojem epizoda i formatima.
Kako se uporedivi skupovi podataka dimenzionišu i anotiraju.

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

v2.1 je pisao jedan parquet i jedan MP4 po epizodi. v3.0 spaja mnoge epizode u deljene šardove i ponovo gradi granice iz metapodataka, tako da info.json nosi šablone putanja kao što su data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet umesto broja epizode. Opravdanje je manje, veće datoteke: brža inicijalizacija i manji pritisak na sistem datoteka 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/, preko datasets steka
Strimovanje sa Hubaneda, preko StreamingLeRobotDataset
Napisano od strane lerobot 0.6.1neda, ono što dobijate danas
Čita GR00T N1.7 i N1.5dane, mora se konvertovati naniže
Snimanje danas, trening GR00T sutra

lerobot 0.6.1 piše v3.0, ali GR00T N1.7 i N1.5 čitaju v2.0 ili v2.1 i padaju na njemu. Obratite pažnju na smer kretanja: src/lerobot/scripts/ sadrži convert_dataset_v21_to_v30.py i ništa što ide u drugom smeru. Rešite ovo pre sesije. Popravka: dataset rejected as 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: lerobot-ov 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 odgovorni za USB enumeraciju, ffmpeg build, podešavanje enkodera i kalibracione fajlove. Pravi put za razumevanje pajplajna, pokretanje neobične konfiguracije kamere ili čuvanje podataka lokalno.

Šta ovaj put košta

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

Snimajte LeRobot skupove podataka bez samostalnog povezivanja pajplajna

AY-Robots desktop klijent snima epizode, strimove kamera i stanja zglobova u LeRobot formatu iz teleoperacione sesije, a zatim predaje skup podataka treneru.

Preuzmite desktop klijent

Od skupa podataka do politike

Pedeset čistih epizoda napaja svako učenje imitacijom pokretanje ovde. ACT se trenira od nule samo na vašem zadatku, sa oko 80 M parametara i otprilike 20 ms po koraku akcije, jedini od pet koji je udoban sa brzim pokretima. SmolVLA ima oko 450 M parametara na kartici od 24 GB. GR00T N1.7 je temeljni model sa otprilike 3 B parametara gde fino podešavanje dotiče oko 40 M parametara, zahteva A100 ili H100, i želi taj v2.1 skup podataka.

Zatim, vodič za vašu kombinaciju: ACT na SO-100, SmolVLA na SO-100 ili GR00T N1.7 na SO-100; za prvo pokretanje, trenirajte svoju prvu politiku je kraći. Kada politika radi na stolu, ali se sruši čim pomerite sto, to je problem sa podacima: politika radi samo u jednom podešavanju i prikupljanje visokokvalitetnih VLA podataka za obuku dublje ulaze u raznolikost.

Koliko epizoda mi je zaista potrebno za prvu funkcionalnu politiku?

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

Da li mi je potrebna vodeća ruka, ili mogu da teleoperišem tastaturom?

lerobot isporučuje teleoperatore za tastaturu i gamepad, tako da vodeća ruka nije strogo neophodna, ali je izrazito poželjna: sistem vođa-pratilac daje kontinuirane putanje zglobova u koordinatnoj konvenciji snimljene akcije, dok unos sa tastature proizvodi stepenasto kretanje koje politika uči kao trzaj. Teleoperacija tastaturom takođe zahteva globalni pozadinski sistem za tastere, pa ne radi na Wayland-u i u bezglavom režimu (headless).

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

Da, uz podešavanje. Vodič za striming-kodiranje ima odeljak za niske resurse koji pokriva moderne mašine sa 4 jezgra i Raspberry Pi 5, i stavlja dve kamere na 640x480 i 30 fps u svoju kolonu 'zahteva-neko-podešavanje'. Njegov savet: zaustavite enkoder da se takmiči sa petljom za snimanje, putem --dataset.rgb_encoder.vcodec=h264 i --dataset.streaming_encoding=false. Ocenjuje dve kamere na 640x480 kao oko 55 miliona piksela u sekundi, a dve na 1920x1080 kao oko 373 miliona.

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

Tri jednostavne provere. Uporedite trajanje videa svake epizode sa trajanjem koje je prijavio CLI i potvrdite da je broj redova jednak fps puta to trajanje, po epizodi, a ne ukupno; to je test prihvatanja koji daje lerobot-ov vodič za kodiranje. Pročitajte ds.meta.stats, gde se zglob čiji je min jednak njegovom max nikada nije pomerio. Zatim ponovo reprodukujte dve ili tri epizode u lerobot-dataset-viz, što je jedini način da se prikažu zamenjeni prikazi i zamrznuti kadrovi. Kada su u pitanju ispušteni kadrovi, vodič povlači crtu na otprilike 5 procenata nedostajućih; oko 2 procenta je normalno prolazno opterećenje, često samo pri pokretanju.

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

GR00T N1.7 i N1.5 čitaju LeRobot v2.0 ili v2.1 i padaju na v3.0, što je ono što lerobot 0.6.1 snima. Ili usaglasite format pre obuke, ili koristite politiku koja nativno čita v3.0: Pi0.5, SmolVLA ili ACT. lerobot isporučuje konverter 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