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

Snimite svoj prvi LeRobot skup podataka s SO-100

AY-Robots ResearchAugust 23, 202616 min čitanja

Snimite upotrebljiv LeRobot skup podataka s SO-100: kalibracija, teleoperacija vođa-sljedbenik, stvarne lerobot-record zastavice i zadane vrijednosti, postavke kamere, broj epizoda i nedostaci koji kvare izvođenje.

Sljedbenik SO-100 sljedbenik, vodeća ruka istog dizajna i dvije USB kamere mogu fino podesiti politiku u jednom popodnevu. Ista radna stanica može jednako lako proizvesti šezdeset epizoda koje izgledaju zdravo u pregledniku datoteka i potrošiti šestosatno GPU izvođenje. Razlika je rijetko u modelu; ona je u onome što se dogodilo između serva i parquet datoteke.

Ovo je ručna ruta, zatim kraća. Svaka naredba je iz lerobot 0.6.1, objavljenog 3. kolovoza 2026. i aktualnog na PyPI-ju. Prešao je na ulazne toč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 prije nego što pritisnete snimanje.
  • Četiri naredbe: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Prenesite iste --robot.id i --teleop.id iz kalibracije u sesiju snimanja.
  • Stvarne zadane vrijednosti: 30 fps, 60 s po epizodi, 60 s reset, 50 epizoda, oko 100 minuta stvarnog vremena.
  • Minimalni 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.

Što sesija snimanja bilježi

LeRobot skup podataka nije mapa videozapisa već vremenski indeksirana tablica s priloženim videozapisom: svaki takt upravljačke petlje zapisuje jedan redak koji sadrži zadanu akciju, stanje koje je pratitelj dosegao, jedan kadar po kameri, vremensku oznaku i indekse. Politika vidi samo te stupce. Shema lerobot/svla_so100_pickplace, pročitana iz meta/info.json.

ZnačajkadtypeOblikŠto je to
actionfloat32[6]ciljevi zglobova s vodeće ruke
observation.statefloat32[6]položaji zglobova koje je pratitelj dosegao
observation.images.topvideo[480, 640, 3]kamera scene, MP4 (ovdje 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 knjigovodstvo

Zglobovi su main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll i main_gripper: šest stupnjeva slobode SO-100. Akcija i stanje dijele oblik jer teleoperacija vođa-pratitelj bilježi cilj i položaj dosegnut jedan korak kasnije. Taj jaz je informacija: gdje se ruka borila protiv gravitacije ili zaglavljenog objekta. Ti su nizovi znakova iz tog skupa podataka. Sesija snimljena s 0.6.1 danas zapisuje shoulder_pan.pos do gripper.pos, ID-ove 1 do 6 na sabirnici: istih šest zglobova, različiti ključevi, što je važno u trenutku kada konfiguracija adresira značajku po imenu.

Mjerilo 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 prosjeku traju minutu, radite nešto teže ili snimate prazan hod na oba kraja.

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

Što vam je potrebno na stolu

StavkaDetaljNapomena
Ruka pratilacSO-100, šest Feetech STS3215 servo motoraoko 110 do 150 EUR u dijelovima
Vodeća rukadrugi SO-100, uklonjeni zupčanicizupčanici uklonjeni sa svih šest vodećih motora: samo enkoder, manje trenja
Napajanjeusklađeno s varijantom STS3215 od 7.4 V u popisu materijalapogledajte upozorenje ispod
Kameredvije USB kamere, 640x480 pri 30 fpsjedan prikaz scene, jedna na zglobu
HostPython 3.12 or newer, ffmpegrequires-python >= 3.12
Hub računHugging Face write tokenopcionalno s --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 na 16.5 kg.cm zakretnog momenta pri zaustavljanju mjerenog pri 6 V, a verziju od 12 V na 30 kg.cm, te napominje da uzimanje motora od 12 V također znači kupnju napajanja od 12 V 5 A+ umjesto onog od 5 V. Popis materijala navodi servo motore od 7.4 V. Napajanje servo motora od 7.4 V s 12 V ih uništava, stoga pročitajte naljepnicu motora prije nego što išta spojite. Servo ne reagira.

Ako ruka još nije sastavljena, to je zasebna večernja aktivnost: počnite s SO-100 početak rada i potpunim vodičem za postavljanje SO-100. Ako još niste ništa kupili, prvo pročitajte usporedbu SO-100 i SO-101: SO-101 je novija revizija s poboljšanim ožičenjem i bez koraka uklanjanja zupčanika, a tijek 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 sažetak sustava, 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 ovisnosti, ništa što komunicira s robotom. Koch ruke trebaju dynamixel umjesto feetech. Ako vaša ljuska nikada nije čula za lerobot-record, to je razlog.

Priključci, ID-ovi motora i kalibracija

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

  1. 1
    Pronađite USB priključak svake ruke

    Pokrenite ga s obje ruke priključene, isključite onu koju identificirate kada se to zatraži i zabilježite koji priključak 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
    Zapišite ID-ove motora i brzine prijenosa

    ID-ovi se pišu jedan po jedan motor, a dokumentacija je stroga o tome kako: spojite točno jedan motor na kontrolnu ploču, još ne serijski spojen na bilo koji drugi. Skripta prolazi lanac unatrag, prvo tražeći hvataljku i dajući joj ID 6, zatim zglob_zgloba kao 5, sve do ramena_pan kao 1. Učinite to prije sastavljanja.

    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

    Pomaknite svaki zglob u sredinu njegovog raspona, pritisnite Enter, a zatim svaki provucite kroz cijeli raspon. 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 snimanja bilo čega

    Prihvatni test za sve navedeno. Ako je teleoperacija trzava, zrcaljena ili jedan zglob neće slijediti, snimanje to biljež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
Gdje se kalibracija sprema i zašto je ID važan

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

Kamere odlučuju što 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 spajanja, ovisno o operativnom sustavu.

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 što će hvataljka dodirnuti. Popis za provjeru LeRobot skupova podataka zajednice traži po mogućnosti dva pogleda na 480x640 / 720p ili bolje, statičnu pozadinu, neutralno stabilno osvjetljenje, te da ruka voditelja i ljudski udovi budu izvan kadra. Vodič za snimanje dodaje pravilo: trebali biste moći sami obaviti zadatak samo gledajući slike s kamere.

Indeks kamere nije stabilan identitet

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

Naredba record 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 niz znakova naveden u shellu; ugniježđene zagrade nisu shell sintaksa.

Zadane vrijednosti u nastavku dolaze iz src/lerobot/configs/dataset.py na glavnoj grani, a ne iz tutoriala. Nekoliko njih nije ono što ljudi pretpostavljaju.

ZastavicaZadanoŠto radi
--dataset.repo_idemptynaziv; vremenska oznaka dodana po zadanoj vrijednosti
--dataset.single_taskemptyniz zadataka pohranjen sa svakom epizodom
--dataset.root$HF_LEROBOT_HOME/repo_idputanja za pisanje, zadano ~/.cache/huggingface/lerobot/
--dataset.fps30brzina kontrolne petlje i brzina sličica skupa podataka
--dataset.episode_time_s60sekunde prije nego što epizoda automatski napreduje
--dataset.reset_time_s60resetiranje scene; ruka se pomiče, ništa nije pohranjeno
--dataset.num_episodes50epizode snimljene u ovoj sesiji
--dataset.push_to_hubtrueučitavanje na kraju sesije; false ostaje lokalno
--dataset.streaming_encodingfalse in the dataclass, true in the docs tablekodiranje tijekom snimanja; postavite ga eksplicitno
--dataset.encoder_queue_maxsize30međuspremljene sličice 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 točno kako je upisan
--resumefalsedodajte postojećem skupu podataka; zahtijeva --dataset.root
Dvije zastavice koje iznenada koštaju sat vremena

Vaš skup podataka ne zove se onako kako ste upisali. 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. S --resume=true, --dataset.num_episodes broji dodatne epizode, a --dataset.root postaje obavezan. Zatražite 50 na skupu podataka od 30 epizoda i dobit ćete 80.

Upravljanje tipkovnicom tijekom sesije

  • Desna strelica ili n: završite epizodu ili ranije resetirajte fazu. Tipka koju najviše koristite, jer čisto hvatanje rijetko treba 25 sekundi.
  • Lijeva strelica ili r: odbacite epizodu i ponovite je. Loš pokušaj sada ne košta ništa, a kasnije puno.
  • Escape ili q: zaustavite sesiju, završite kodiranje, prenesite.
  • Ovo radi na X11, Waylandu i headless SSH-u: bez globalnog pozadinskog sustava za tipke, lerobot-record čita iste tipke s kontrolnog terminala. Slova preživljavaju spore SSH veze, gdje se sekvence strelica razdvajaju.
  • Tipkovnička teleoperacija je drugačija i zahtijeva globalni pozadinski sustav: X11, Windows ili macOS s pristupačnošću.

Koliko epizoda, i kako izgleda dobra epizoda

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

PraviloMin. epizodaFormat skupa podatakaGPU razinaTrošak 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 izveli više od 15.000 stvarnih izvođenja. Generalizacija je slijedila približno odnos zakona snage s brojem okruženja i objekata, a nakon praga po okruženju ili objektu, dodatne demonstracije imale su minimalan učinak. Na jednoj klupi: pomaknite objekt, promijenite osvjetljenje, zamijenite kocku, umjesto da ponavljate jedan snimak.

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

Dobra epizoda je dosadna: ponovljiva početna poza, jedna stvar obavljena, završena kada je objekt u kanti, niz zadataka od 25 do 50 znakova kako preporučuje kontrolna lista. Uzmi crvenu kocku i spusti je u kutiju je niz zadataka; task1 je anti-uzorak koji kontrolna lista izričito navodi. Nejasne bilješke predvode popis problema, a najvažnije su za , gdje je niz ulaz za model, a ne naziv datoteke.

Greške koje tiho uništavaju skup podataka

Nijedna ne baca iznimku. Sve prežive do treninga, pojavljujući se kao krivulja gubitka koja izgleda dobro i robot koji ne radi ništa. Provjerite dok je scena postavljena.

GreškaKako izgledaOdakle dolaziKako je otkriti
Zamijenjeni prikazi kamereslika zgloba pod gornjim ključemponovno dodjeljivanje indeksa nakon ponovnog spajanjalerobot-find-cameras each session; by-id paths
Zamrznuti okviriista slika za desetke redakakamera prestaje isporučivati; petlja ponavlja zadnji kadarscrub it in lerobot-dataset-viz
Ispušteni okviribroj redaka 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 vođe premašuje raspon sljedbenika, ili loša srednja pozaper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Slika i akcija izvan korakapolitika predviđa ili kasnikamere na drugačijem fps-u od petljekeep every camera at --dataset.fps
Mrtvo vrijemedugi nizovi identičnih redaka akcijaoperator pauzirao s uključenim snimačemshare of consecutive identical action rows
Neupotrebljiv niz zadatakatask1, demo2, testbrzo tipkanjemeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Ispušteni okviri se skrivaju

Koder drži ograničeni red čekanja po kameri, 30 okvira po zadanoj vrijednosti. Kada ne može pratiti, okviri se ispuštaju umjesto blokiraju: snimanje se nastavlja i ništa se ne ruši. Dobivate Encoder queue full for {camera}, dropped N frame(s) i ukupni broj po kameri na kraju epizode. Prag za lerobot: oko 5 posto nedostajućih znači preopterećen sustav, 2 posto je očekivano opterećenje pri pokretanju. Popravci po redu: --display_data=false, smanjiti --dataset.encoder_threads, vcodec=h264, isključiti streaming.

Jedna napomena: tablica vodiča za streaming-kodiranje navodi zadanu vrijednost kao True, dok dataclass na glavnoj grani čita streaming_encoding: bool = False. Dokumentacija i kod se ne slažu, stoga postavite eksplicitno; lerobot bilježi savjet preporučujući to kad god se pokrene s isključenom zastavicom.

Provjerite skup podataka prije najma GPU-a

Test prihvaćanja iz dokumentacije: usporedite trajanje videa s trajanjem epizode koje je prijavio CLI i potvrdite da je broj redaka 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 puta trajanje znatno razlikuje je kandidat za brisanje, a ne za treniranje.

Zatim je pogledajte. lerobot-dataset-viz reproducira epizodu kadar po kadar s 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đer radi podjelu, spajanje, uklanjanje značajki, izmjenu zadataka i ponovno izračunavanje statistike. Brišite velikodušno: loša epizoda košta jednu epizodu; zadržavanje košta svako pokretanje trenirano na njoj.
Direktorij skupa podataka AY-Robots koji prikazuje javne LeRobot skupove podataka s brojem epizoda i formatima
Kako se usporedivi skupovi podataka dimenzioniraju i bilježe.

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 dijelove (shards) i ponovno gradi granice iz metapodataka, tako da info.json sadrži predloške putanja poput 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 sustav u velikim razmjerima.

LeRobot v2.1LeRobot v3.0
Rasporedjedan parquet i jedan MP4 po epizodimnogo epizoda po dijelu (shardu)
Metapodaci epizodeJSONL datotekechunked parquet pod meta/episodes/, putem skupa podataka
Striming s Hubaneda, putem StreamingLeRobotDataset
Napisano od lerobot 0.6.1neda, ono što dobivate danas
Čita GR00T N1.7 i N1.5dane, mora se pretvoriti u nižu verziju
Snimanje danas, treniranje 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. Obratite pažnju na smjer razvoja: 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: skup podataka 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 portiranje, 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šem vlastitom stroju: vi ste odgovorni za USB enumeraciju, ffmpeg izgradnju, podešavanje enkodera i datoteke kalibracije. Pravi put za razumijevanje cjevovoda, pokretanje neobične konfiguracije kamere ili čuvanje podataka lokalno.

Što ovaj put košta

Vrijeme: jedna večer po ruci za sastavljanje, mukotrpna prva kalibracija i prva sesija koju ćete odbaciti jer je kamera bila u pogrešnom utoru.

Snimajte LeRobot skupove podataka bez samostalnog ožičenja cjevovoda

AY-Robots desktop klijent snima epizode, video streamove kamera i stanja zglobova u LeRobot formatu iz teleoperacijske sesije, 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 pokretima. 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 stvarno 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č 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 raspoređenih na pet 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: sustav vođa-sljedbenik daje kontinuirane putanje zglobova u koordinatnoj konvenciji snimljene akcije, dok unos tipkovnicom proizvodi stupnjevito kretanje koje politika uči kao trzaj. Teleoperacija tipkovnicom također zahtijeva globalni pozadinski sustav za tipke, pa ne radi na Waylandu i u bezglavom načinu rada.

Mogu li snimati na Raspberry Pi-u ili malom mini računalu?

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. Procjenjuje dvije kamere na 640x480 kao oko 55 milijuna piksela u sekundi, a dvije na 1920x1080 kao oko 373 milijuna.

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

Tri jednostavne 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 minimum jednak maksimumu 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 riješite format prije obuke, ili koristite politiku koja izvorno čita v3.0: Pi0.5, SmolVLA ili ACT. lerobot isporučuje pretvarač iz 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