
Tallenna käyttökelpoinen LeRobot-tietoaineisto SO-100:lla: kalibrointi, johtaja-seuraaja-teleoperaatio, todelliset lerobot-record-liput ja oletusarvot, kameran asennus, jaksojen määrä ja virheet, jotka pilaavat ajon.
Eräs SO-100 seuraaja, samanlaisen rakenteen omaava johtovarsi ja kaksi USB-kameraa voivat hienosäätää toimintamallia yhden iltapäivän aikana. Sama testipenkki voi yhtä helposti tuottaa kuusikymmentä jaksoa, jotka näyttävät terveiltä tiedostoselaimessa ja tuhlata kuuden tunnin GPU-ajon. Ero on harvoin mallissa; se on siinä, mitä tapahtui servojen ja parquet-tiedoston välillä.
Tässä on manuaalinen reitti, sitten lyhyempi. Jokainen komento on peräisin lerobot 0.6.1:stä, joka julkaistiin 3. elokuuta 2026 ja on ajantasainen PyPI:ssä. Se siirtyi konsolin sisääntulopisteisiin, joten opetusohjelmat, jotka ajavat python lerobot/scripts/control_robot.py kuvaavat tiedostoa, jota ei enää ole olemassa.
Lyhyt versio
- •lerobot 0.6.1 tallentaa v3.0; GR00T N1.7 ja N1.5 haluavat v2.1. Varmista formaatti ennen tallennuksen aloittamista.
- •Neljä komentoa: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Käytä samoja --robot.id ja --teleop.id -tunnuksia kalibroinnista tallennussessioon.
- •Todelliset oletusarvot: 30 fps, 60 s per jakso, 60 s nollaus, 50 jaksoa, noin 100 minuuttia todellista aikaa.
- •Minimijaksojen määrä tässä: 30 SmolVLA:lle, 50 muille.
- •Monimuotoisuus voittaa määrän. Aineistot kuolevat neljästä syystä: vaihdetut kameraindeksit, pudonneet tai jäätyneet kuvat, nivel pysäköitynä rajaansa, lukukelvoton tehtävämerkkijono.
Mitä tallennussessio tallentaa
A LeRobot-aineisto ei ole kansio videoita, vaan aika-indeksoitu taulukko, johon on liitetty video: jokainen ohjaussykli kirjoittaa yhden rivin, joka sisältää käsketyn toiminnon, seuraajan saavuttaman tilan, yhden kuvan kameraa kohti, aikaleiman ja indeksit. Politiikka näkee vain nämä sarakkeet. Skeema lerobot/svla_so100_pickplace, luettuna sen meta/info.json-tiedostosta.
| Ominaisuus | dtype | Muoto | Mitä se on |
|---|---|---|---|
| action | float32 | [6] | nivelten tavoitteet johtajavarresta |
| observation.state | float32 | [6] | seuraajan saavuttamat nivelten asennot |
| observation.images.top | video | [480, 640, 3] | kohtauskamera, MP4 (av1 tässä) |
| observation.images.wrist | video | [480, 640, 3] | rannekamera, sama nopeus |
| timestamp | float32 | [1] | sekunteja jakson alusta |
| frame_index, episode_index, index, task_index | int64 | [1] | automaattisesti täytetty kirjanpito |
Nivelet ovat main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll ja main_gripper: SO-100:n kuusi vapausastetta. Toiminto ja tila jakavat muodon, koska johtaja-seuraaja-etäohjaus tallentaa tavoitteen ja yhden askeleen myöhemmin saavutetun position. Tämä ero on tietoa: missä varsi taisteli painovoimaa tai juuttunutta esinettä vastaan. Nämä merkkijonot ovat kyseisen aineiston. Tänään versiolla 0.6.1 tallennettu istunto kirjoittaa shoulder_pan.pos:sta gripper.pos:iin, tunnukset 1–6 väylällä: samat kuusi niveltä, eri avaimet, mikä on tärkeää heti, kun konfiguraatio viittaa ominaisuuteen nimellä.
Tämä aineisto sisältää 50 jaksoa ja 19 631 kuvaa 30 kuvaa sekunnissa: noin 393 kuvaa, eli 13 sekuntia, per jakso. Jos omasi ovat keskimäärin minuutin pituisia, teet jotain vaikeampaa tai tallennat tyhjää aikaa molemmista päistä.

Mitä tarvitset työpöydällä
| Kohde | Yksityiskohta | Huomautus |
|---|---|---|
| Seuraajavarsi | SO-100, kuusi Feetech STS3215 -servoa | noin 110–150 EUR osissa |
| Johtajavarsi | toinen SO-100, vaihteet poistettu | kaikkien kuuden johtajamoottorin vaihteet poistettu: vain enkooderi, vähemmän kitkaa |
| Virta | sovitettu materiaalikustannusluettelon 7.4 V STS3215 -versioon | katso alla oleva varoitus |
| Kamerat | kaksi USB-kameraa, 640x480 30 fps | yksi näkymä kohtauksesta, yksi ranteessa |
| Isäntä | Python 3.12 tai uudempi, ffmpeg | requires-python >= 3.12 |
| Hub-tili | Hugging Face write token | optional with --dataset.push_to_hub=false |
STS3215:stä on kaksi versiota: SO-ARM100 README ilmoittaa 7.4 V version vääntömomentiksi 16.5 kg.cm mitattuna 6 V:lla ja 12 V version 30 kg.cm, ja huomauttaa, että 12 V moottoreiden valitseminen tarkoittaa myös 12 V 5 A+ virtalähteen ostamista 5 V:n sijaan. Materiaaliluettelossa on 7.4 V servot. 12 V:n syöttäminen 7.4 V:lle mitoitetuille servoille tuhoaa ne, joten lue moottorin etiketti ennen kuin kytket mitään. Servo ei vastaa.
Jos käsivartta ei ole vielä rakennettu, se on erillinen ilta: aloita osoitteesta SO-100:n aloitusopas ja täydellinen SO-100:n asennusopas. Jos et ole vielä ostanut mitään, lue ensin SO-100 vs. SO-101 vertailu: SO-101 on uudempi versio parannellulla johdotuksella ja ilman vaihteiston irrotusvaihetta, ja tallennustyönkulku on identtinen.
Asenna lerobot 0.6.1
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-infoLisäosat aiheuttavat eniten päänvaivaa. pip install lerobot asentaa vain ydin-ML-riippuvuudet, ei mitään, mikä kommunikoi robotin kanssa. Koch-käsivarret tarvitsevat dynamixel sen sijaan, että feetech. Jos komentotulkkisi ei ole koskaan kuullut lerobot-recordista, tämä on syy.
Portit, moottori-ID:t ja kalibrointi
Kolme kertaluonteista vaihetta erottaa osat toimivasta teleoperaatiosilmukasta. mahdollistaa käsivarrellesi koulutetun toimintamallin ajamisen toisen käsivarren kanssa, yhdistäen raa'at enkooderilukemat jaetun nivelkonvention mukaisesti.
- 1Etsi kunkin käsivarren USB-portti
Suorita se molemmat käsivarret kytkettyinä, irrota tunnistettava käsivarsi kehotettaessa ja pane merkille, mikä portti katoaa. Linuxissa saatat tarvita komennon
sudo chmod 666 /dev/ttyACM0.bashlerobot-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. - 2Kirjoita moottori-ID:t ja siirtonopeudet
ID:t kirjoitetaan yksi moottori kerrallaan, ja ohjeet ovat tarkat siitä, miten: kytke täsmälleen yksi moottori ohjainkorttiin, ei vielä ketjutettuna muihin. Skripti käy ketjun läpi takaperin, pyytäen ensin tarttujaa ja antaen sille ID:n 6, sitten ranteen pyöritykselle 5, aina olkapään panoroinnille 1 asti. Tee tämä ennen kokoamista.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Kalibroi molemmat käsivarret
Siirrä jokainen nivel liikeratansa keskelle, paina Enter, ja pyyhkäise sitten jokainen läpi koko liikeratansa.
id:stä tulee profiilin tiedostonimi.bashlerobot-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 - 4Teleoperointi ennen mitään tallennusta
Yllä olevan kaiken hyväksymistesti. Jos teleoperaatio on nykivää, peilattua tai jokin nivel ei seuraa, tallennus säilyttää sen 50 episodissa.
bashlerobot-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
Profiilit tallentuvat hakemistoon $HF_LEROBOT_CALIBRATION, oletuksena ~/.cache/huggingface/lerobot/calibration, ja ID on hakukenttä. Anna lerobot-record-komennolle kalibroitu ID, ja se tarjoaa Enterin profiilin uudelleenkäyttöön tai c:n sen uudelleen tekemiseen. Anna sille tuntematon ID, eikä tiedostoa ole, joten se siirtyy kalibrointiin kesken istunnon.
Kamerat päättävät, mitä toimintaperiaate näkee
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.0Kaksi näkymää, ja niiden sijainnilla on merkitystä: kiinteä näkymäkamera, joka kattaa työtilan, ja rannetason kamera lähellä tarttujaa, joka näyttää, mihin tarttuja on koskettamassa. LeRobotin yhteisön datasettien tarkistuslista edellyttää mieluiten kahta näkymää resoluutiolla 480x640 / 720p tai parempi, staattista taustaa, neutraalia vakaata valaistusta sekä sitä, että ohjaajan käsi ja ihmisen raajat ovat poissa kuvasta. Tallennusopas lisää nyrkkisäännön: sinun tulisi pystyä suorittamaan tehtävä itse vain kamerakuvia katsomalla.
OpenCV-indeksit tulevat luettelointijärjestyksestä, joten uudelleenkäynnistys tai uudelleenkytkentä voi vaihtaa indeksien 0 ja 2 paikkaa ja asettaa rannenäkymän ylimpään paikkaan koko istunnon ajaksi. lerobot sanoo sen itse: sen kameraklassi ottaa laitepolun sekä kokonaisluvun, ja varoittaa, että indeksit ovat epävakaita uudelleenkäynnistysten tai porttimuutosten yli, erityisesti Linuxissa. Osoita index_or_path udev-symboliseen linkkiin hakemistossa /dev/v4l/by-id/, joka seuraa laitetta luettelointijärjestyksen sijaan. Tämä on yleisin tapa, jolla datasetti päätyy sisäisesti epäjohdonmukaiseksi, eikä koulutus voi korjata sitä. Kameraa ei havaittu.
Record-komento ja kaikki liput
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=2Alla olevat oletusarvot tulevat src/lerobot/configs/dataset.py main-haarasta, eivät opetusohjelmasta. Monet eivät ole sitä, mitä ihmiset olettavat.
| Lippu | Oletus | Mitä se tekee |
|---|---|---|
| --dataset.repo_id | empty | nimi; aikaleima lisätään oletuksena |
| --dataset.single_task | empty | tehtävämerkkijono tallennetaan jokaisen jakson mukana |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | kirjoituspolku, oletus ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | ohjaussilmukan nopeus ja datasettikehysnopeus |
| --dataset.episode_time_s | 60 | sekuntia ennen kuin jakso etenee automaattisesti |
| --dataset.reset_time_s | 60 | kohtauksen nollaus; käsivarsi liikkuu, mitään ei tallenneta |
| --dataset.num_episodes | 50 | tässä istunnossa tallennetut jaksot |
| --dataset.push_to_hub | true | lataa palveluun istunnon lopussa; false pitää paikallisena |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | koodaa tallennuksen aikana; aseta se eksplisiittisesti |
| --dataset.encoder_queue_maxsize | 30 | puskuroituja kehyksiä kameraa kohti, ~1 s nopeudella 30 fps |
| --dataset.encoder_threads | null (codec decides) | säikeitä kooderia kohti; pienennä, jos tallennus nykii |
| --dataset.no_stamp | false | pidä repo_id täsmälleen kirjoitetussa muodossa |
| --resume | false | lisää olemassa olevaan datasettiin; vaatii --dataset.root |
Tietojoukkoasi ei kutsuta sillä nimellä, jonka kirjoitit. lerobot lisää päivämäärä-aikatunnisteen, joten so100_pick_cube muuttuu muotoon so100_pick_cube_20260823_141530. Käytä --dataset.no_stamp=true vakaan nimen saamiseksi. Jatko laskee lisäyksiä, ei kokonaismääriä. Kun käytät --resume=true, --dataset.num_episodes laskee lisäjaksoja ja --dataset.root muuttuu pakolliseksi. Pyydä 50 jaksoa 30 jakson tietojoukosta ja saat 80.
Näppäimistöohjaus istunnon aikana
- Oikea nuoli tai
n: lopeta jakso tai nollaa vaihe aikaisin. Tämä on näppäin, jota käytät eniten, koska puhdas tarttuminen harvoin vaatii 25 sekuntia. - Vasen nuoli tai
r: hylkää jakso ja tee se uudelleen. Huono otto ei maksa mitään nyt, mutta paljon myöhemmin. - Escape tai
q: pysäytä istunto, viimeistele koodaus, lataa. - Nämä toimivat X11:ssä, Waylandissa ja päättömässä SSH:ssa: ilman globaalia näppäimistötaustajärjestelmää lerobot-record lukee samat näppäimet ohjaavasta terminaalista. Kirjaimet säilyvät viiveisissä SSH-yhteyksissä, joissa nuolisarjat jakautuvat.
- Näppäimistön etäohjaus on erilaista ja vaatii globaalin taustajärjestelmän: X11, Windows tai macOS esteettömyysominaisuuksilla.
Kuinka monta jaksoa ja miltä hyvä jakso näyttää
Tallennusopas ehdottaa vähintään 50 jaksoa ensimmäiseen tehtävään, noin 10 jaksoa per objektin sijainti. käytäntösivut luettelevat vähimmäismäärän per malli, jonka alapuolella ajo ei ole GPU-ajan arvoinen.
| Policy | Minimijaksot | Aineiston muoto | GPU-taso | Kustannus per ajo |
|---|---|---|---|---|
| SmolVLA | 30 | LeRobot v3.0 | RTX 4090 or any 24 GB card | about 1 to 3 USD |
| ACT | 50 | LeRobot v3.0 | RTX 4090 or any 24 GB card | about 1 to 3 USD |
| GR00T N1.7 | 50 | LeRobot v2.0 or v2.1 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
| GR00T N1.5 | 50 | LeRobot v2.0 or v2.1 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
| Pi0.5 | 50 | LeRobot v3.0 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
Parempi kysymys on, kuinka monta mitä. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) keräsi yli 40 000 demonstraatiota ja suoritti yli 15 000 todellisen maailman ajoa. Yleistyminen noudatti karkeasti potenssilain mukaista suhdetta ympäristöjen ja objektien, ja kun kynnysarvo per ympäristö tai objekti ylittyi, lisädemostraatioilla oli minimaalinen vaikutus. Yhdellä testipenkissä: siirrä objektia, vaihda valaistusta, vaihda kuutio, sen sijaan että toistaisit yhden otoksen.
- Jatkuvat nivelten liikeradat, jotka servo voi toistaa, toisin kuin näppäimistö tai peliohjain
- Toiminta ja tila jakavat koordinaattikonvention, joten käytäntö oppii kohteen, jota se voi ohjata suoraan
- 25 sekunnin jakso plus 10 sekunnin nollaus on noin 100 jaksoa tunnissa
- Operaattori tuntee seuraajan pysähtyvän tai jumittuvan, joten viat ilmenevät ennen tietojen tallentamista
- Toinen varsi suunnilleen kaksinkertaistaa osien kustannukset
- Demonstraatiot perivät operaattorin tottumukset; Mandlekar et al. havaitsivat, että käytännön laatu riippuu voimakkaasti demonstraation laadusta
- Johtajaa näytteistetään silmukan nopeudella, joten tauoista tulee lähes identtisiä rivejä, jotka opettavat käytännön odottamaan
- Mikään ei pakota johdonmukaisuutta istuntojen välillä: 5 cm:n verran siirtynyt kamera on piilotettu jakauman muutos
Hyvä episodi on tylsä: toistettava aloitusasento, yksi asia tehty, päättyy kun esine on roskakorissa, tehtävämerkkijono tarkistuslistan suosittelemissa 25–50 merkissä. Nosta punainen kuutio ja pudota se laatikkoon on tehtävämerkkijono; task1 on tarkistuslistan nimeämä anti-kuvio. Epämääräiset annotaatiot ovat sen ongelmalistan kärjessä, ja ne ovat tärkeimpiä visuaalisen kielen toimintamallit, missä merkkijono on mallin syöte, ei tiedostonimi.
Virheet, jotka hiljaa pilaavat aineiston
Yksikään ei aiheuta poikkeusta. Kaikki selviävät koulutukseen, ilmestyen tappiokäyränä, joka näyttää hyvältä, ja robottina, joka ei tee mitään. Tarkista, kun kohtaus on asetettu.
| Vika | Miltä se näyttää | Mistä se tulee | Miten se havaitaan |
|---|---|---|---|
| Kameranäkymät vaihdettu | ranteen kuva ylimmän avaimen alla | indeksin uudelleenmääritys uudelleenkytkennän jälkeen | lerobot-find-cameras jokaisella istunnolla; by-id-polut |
| Jäätyneet ruudut | sama kuva kymmenissä riveissä | kamera lakkaa toimittamasta; silmukka toistaa viimeisen ruudun | tarkista se ohjelmassa lerobot-dataset-viz |
| Pudonneet ruudut | rivimäärä alle fps kertaa sekuntia | jonon ylivuoto, pudottaa mieluummin kuin estää | 'Encoder queue full' lokissa; rivit vs fps kertaa kesto |
| Nivel rajallaan | yksi nivel tasaisesti minimissä tai maksimissa | johtajan alue ylittää seuraajan, tai huono keskiasento | nivelen min/max tiedostossa ds.meta.stats; lerobot-find-joint-limits etukäteen |
| Kuva ja toiminto epäsynkassa | politiikka ennakoi tai viivästyy | kamerat eri fps:llä kuin silmukka | pidä jokainen kamera --dataset.fps -asetuksessa |
| Kuollutta aikaa | pitkiä sarjoja identtisiä toimintorivejä | operaattori keskeytti tallentimen käydessä | peräkkäisten identtisten toimintorivien osuus |
| Käyttökelvoton tehtävämerkkijono | task1, demo2, test | nopea kirjoitus | meta/tasks.parquet versiossa v3.0 (se oli meta/tasks.jsonl versiossa v2.1); korjaa komennolla lerobot-edit-dataset modify_tasks |
Kooderi ylläpitää rajattua jonoa kameraa kohden, oletuksena 30 kuvaa. Kun se ei pysy mukana, kuvat pudotetaan estämisen sijaan: tallennus jatkuu eikä mikään kaadu. Saat ilmoituksen Encoder queue full for {camera}, dropped N frame(s) ja kamerakohtaisen kokonaismäärän jakson lopussa. LeRobot-kynnys: noin 5 prosentin puuttuminen tarkoittaa ylikuormitettua järjestelmää, 2 prosenttia on odotettavissa oleva käynnistyskuorma. Korjaukset järjestyksessä: --display_data=false, pienempi --dataset.encoder_threads, vcodec=h264, suoratoisto pois päältä.
Yksi varoitus: suoratoistokoodauksen oppaan taulukko listaa oletusarvon olevan True, kun taas päähaaran dataluokka lukee streaming_encoding: bool = False. Dokumentaatio ja koodi ovat ristiriidassa, joten aseta se eksplisiittisesti; LeRobot kirjaa vihjeen suositellen sitä aina, kun se käynnistyy ilman lippua.
Tarkista aineisto ennen GPU:n vuokraamista
Dokumentaation hyväksymistesti: vertaa videon kestoa CLI:n ilmoittamaan jakson kestoon ja varmista, että rivien määrä vastaa fps kertaa kesto. Jaksoittain, ei kokonaismäärän mukaan.
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"])Tarkastele sitä sitten. lerobot-dataset-viz toistaa jakson ruutu ruudulta nivelten jäljitysten kanssa kameranäkymien vieressä, Rerunissa tai Foxglovessa. Vaihdetut kamerat ja jäätyneet ruudut näkyvät kymmenessä sekunnissa. Ihmiset ohittavat tämän vaiheen.
# 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]"
v2.1 tai v3.0: päätä ennen tallennusta
v2.1 kirjoitti yhden parquet- ja yhden MP4-tiedoston per jakso. v3.0 yhdistää useita jaksoja jaettuihin osiin ja rakentaa rajat uudelleen metatiedoista, joten info.json sisältää polkumalleja kuten data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet jaksonumeron sijaan. Ylävirran perustelu on vähemmän, suurempia tiedostoja: nopeampi alustus ja vähemmän tiedostojärjestelmän kuormitusta mittakaavassa.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Asettelu | yksi parquet ja yksi MP4 per jakso | monta jaksoa per osio |
| Jakson metatiedot | JSONL files | lohkotettu parquet meta/episodes/-kansiossa, datasets-pinon kautta |
| Striimaus Hubista | ei | kyllä, StreamingLeRobotDatasetin kautta |
| Kirjoittanut lerobot 0.6.1 | ei | kyllä, mitä saat tänään |
| Lukee GR00T N1.7 ja N1.5 | kyllä | ei, on muunnettava alaspäin |
lerobot 0.6.1 kirjoittaa v3.0:aa, mutta GR00T N1.7 ja N1.5 lukevat v2.0:aa tai v2.1:tä ja kaatuvat siihen. Huomaa suunta: src/lerobot/scripts/ sisältää convert_dataset_v21_to_v30.py:n eikä mitään toiseen suuntaan menevää. Selvitä tämä ennen istuntoa. Korjaus: tietojoukko hylätty v3:na.
# 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=falseKaksi reittiä samaan datajoukkoon
Kaikki yllä oleva, omalla koneellasi: omistat USB-luetteloinnin, ffmpeg-koonnoksen, enkooderin virityksen ja kalibrointitiedostot. Oikea reitti ymmärtää putkilinjan, käyttää epätavallista kamerajärjestelmää tai pitää tiedot paikallisina.
Aika: ilta per varsi kokoamiseen, hankala ensimmäinen kalibrointi ja ensimmäinen istunto, jonka heität pois, koska kamera oli väärässä paikassa.
Työpöytäsovellus tallentaa LeRobot-muotoisia datajoukkoja, episodeja, kameravirtoja ja nivelten tiloja suoraan teleoperaatioistunnosta. Tämä datajoukko syöttää koulutuslomakkeen: valitse malli, datajoukko ja hyperparametrit, ja taustaohjelma vuokraa mallin VRAMin mukaan mitoitetun GPU:n, ajaa kouluttajan ja kirjoittaa tarkistuspisteet objektitallennustilaan.
- 1Asenna asiakasohjelma
Lataussivulla lataussivulla; asennus asiakasohjelman dokumentaatiossa.
- 2Tallenna teleoperaatioistunnosta
Ohjaa vartta; asiakasohjelma kirjoittaa episodeja LeRobot-muodossa. Ohje: tallenna ensimmäinen datajoukkosi.
- 3Tai tuo omat tietosi
Datajoukko voi tulla myös Hugging Face -repositorion tunnuksesta tai omalta koneeltasi: datajoukon dokumentaatio, julkinen hakemisto.
- 4Kouluta ja aja takaisin
Valitse yhdistelmä koulutusmatriisista ja aja sitten toimintamalli takaisin varteen. Noin 1–3 USD 24 Gt:n tasolla, 4–12 USD A100- tai H100-tasolla.
Se ei kokoa tai kalibroi varttasi, eikä se korjaa viallista episodia, joten tarkastusvaihe on edelleen voimassa. Toisessa päässä on myös kova raja: nopeissa tehtävissä päättelyn on oltava servojen vieressä. Ohjaussilmukka kestää 20–485 ms per toimintavaihe, ja julkisen internetin edestakaiset matkat muuttavat toimivan toimintamallin epäröiväksi.
Tallenna LeRobot-datajoukkoja ilman, että johdotat putkilinjan itse
AY-Robotsin työpöytäsovellus tallentaa episodeja, kameravirtoja ja nivelten tiloja LeRobot-muodossa teleoperaatioistunnosta ja luovuttaa sitten datajoukon kouluttajalle.
Hanki työpöytäsovellusDatasetista toimintamalliin
Viisikymmentä puhdasta jaksoa syöttää jokaisen jäljittelyoppimisen ajon täällä. ACT harjoittelee alusta alkaen pelkästään sinun tehtävääsi varten, noin 80 miljoonaa parametria ja noin 20 ms per toimintavaihe, ainoana viidestä, joka soveltuu nopeaan liikkeeseen. SmolVLA on noin 450 miljoonaa parametria 24 GB:n kortilla. GR00T N1.7 on noin 3 miljardin parametrin perusmalli, jossa hienosäätö koskettaa noin 40 miljoonaa parametria, vaatii A100- tai H100-kortin ja haluaa sen v2.1-datan.
Seuraavaksi opas yhdistelmällesi: ACT SO-100:lla, SmolVLA SO-100:lla tai GR00T N1.7 SO-100:lla; ensimmäistä ajoa varten harjoittele ensimmäinen toimintamallisi on lyhyempi. Kun toimintamalli toimii testipenkissä, mutta romahtaa heti, kun siirrät pöytää, kyseessä on dataongelma: toimintamalli toimii vain yhdessä asetelmassa ja korkealaatuisen VLA-harjoitusdatan kerääminen syventyvät monimuotoisuuteen.
Kuinka monta jaksoa todella tarvitsen ensimmäiseen toimivaan toimintamalliin?▾
Kolmekymmentä SmolVLA:lle, viisikymmentä ACT:lle, Pi0.5:lle, GR00T N1.5:lle ja N1.7:lle, jotka ovat AY-Robots-kouluttajien asettamia minimimääriä. LeRobot-opas suosittelee itsenäisesti vähintään 50 jaksoa ensimmäiseen tehtävään, noin 10 jaksoa per objektin sijainti. Datan skaalaustyössä havaittiin, että yleistyminen skaalautuu ympäristöjen ja objektien, ei demonstraatioiden määrän mukaan, joten sata otosta yhdestä kohtauksesta on huonompi kuin viisikymmentä viidestä eri sijoittelusta.
Tarvitsenko ohjausvarren, vai voinko teleoperoida näppäimistöllä?▾
lerobot toimittaa näppäimistö- ja peliohjainteleoperaattoreita, joten ohjausvartta ei ehdottomasti tarvita, mutta se on erittäin suositeltavaa: ohjaaja-seuraaja antaa jatkuvia nivelratoja tallennetun toiminnon koordinaattikonvention mukaisesti, kun taas näppäimistösyöte tuottaa askelittaista liikettä, jonka toimintamalli oppii nykimisenä. Näppäimistöteleoperaatio vaatii myös globaalin näppäimistötaustajärjestelmän, joten se epäonnistuu Waylandissa ja päättömissä järjestelmissä.
Voinko tallentaa Raspberry Pi:llä tai pienellä minitietokoneella?▾
Kyllä, säädöllä. Suoratoistokoodausoppaassa on vähäresurssinen luokka, joka kattaa modernit 4-ytimiset koneet ja Raspberry Pi 5:n, ja se sijoittaa kaksi kameraa 640x480-resoluutiolla ja 30 fps:llä "vaatii jonkin verran säätöä" -sarakkeeseensa. Sen neuvo: estä kooderia kilpailemasta kaappausloopin kanssa käyttämällä --dataset.rgb_encoder.vcodec=h264 ja --dataset.streaming_encoding=false. Se arvioi kaksi kameraa 640x480-resoluutiolla noin 55 miljoonaksi pikseliksi sekunnissa ja kaksi 1920x1080-resoluutiolla noin 373 miljoonaksi.
Mistä tiedän, että juuri tallentamani datasetti on todella terve?▾
Kolme edullista tarkistusta. Vertaa kunkin jakson videon kestoa CLI:n ilmoittamaan kestoon ja varmista, että rivien määrä vastaa fps kertaa kyseinen kesto, per jakso eikä kokonaismäärä; tämä on lerobotin koodausoppaan antama hyväksymistesti. Lue ds.meta.stats, jossa nivel, jonka minimi on yhtä suuri kuin sen maksimi, ei koskaan liikkunut. Toista sitten kaksi tai kolme jaksoa lerobot-dataset-vizissä, ainoa tapa, jolla vaihdetut näkymät ja jäätyneet ruudut näkyvät. Pudonneiden ruutujen osalta opas vetää rajan noin 5 prosentin puuttuvaan määrään; noin 2 prosenttia on normaalia ohimenevää kuormitusta, usein vain käynnistyksen yhteydessä.
Harjoitustyöni hylkäsi datasetin v3.0:na. Mitä nyt?▾
GR00T N1.7 ja N1.5 lukevat LeRobot v2.0:aa tai v2.1:tä ja kaatuvat v3.0:lla, joka on se, mitä lerobot 0.6.1 tallentaa. Joko sovita formaatti ennen harjoittelua tai käytä toimintamallia, joka lukee v3.0:aa natiivisti: Pi0.5, SmolVLA tai ACT. lerobot toimittaa v2.1:stä v3.0:aan muuntimen eikä mitään päinvastaista.
Sources
- LeRobot: Jäljittelyoppiminen todellisen maailman roboteilla
- LeRobot: SO-100 kokoonpano, moottorin asennus ja kalibrointi
- LeRobot: Kamerat ja lerobot-find-cameras
- LeRobot: Asennus ja lisäosamatriisi
- LeRobotDataset v3.0: asettelu ja v2.1-migraatio
- LeRobot: Videon suoratoistokoodaus ja pudonneet ruudut
- LeRobot: Suurten aineistojen siirtäminen versioon v3.0 (DROID)
- lerobot v0.6.1 julkaisu, 3. elokuuta 2026
- DatasetRecordConfig: todelliset tallennuksen oletusasetukset
- lerobot_record.py: tallennussykli ja jatkamisen käsittely
- TheRobotStudio/SO-ARM100: rakennusrepo ja materiaalikustannukset
- Hugging Face: LeRobot-yhteisön aineistojen tarkistuslista
- lerobot/svla_so100_pickplace: 50 jaksoa, 19 631 ruutua
- Lin et al. (2024), Datan skaalauslait jäljittelyoppimisessa
- Mandlekar et al. (2021), Mikä on tärkeää oppimisessa offline-ihmisdemonstraatioista
Sources
- LeRobot: Imitation Learning on Real-World Robots
- LeRobot: SO-100 assembly, motor setup and calibration
- LeRobot: Cameras and lerobot-find-cameras
- LeRobot: Installation and the extras matrix
- LeRobotDataset v3.0: layout and v2.1 migration
- LeRobot: Streaming video encoding and dropped frames
- LeRobot: Porting large datasets to v3.0 (DROID)
- lerobot v0.6.1 release, 3 August 2026
- DatasetRecordConfig: the real recording defaults
- lerobot_record.py: record loop and resume handling
- TheRobotStudio/SO-ARM100: build repo and bill of materials
- Hugging Face: LeRobot Community Datasets checklist
- lerobot/svla_so100_pickplace: 50 episodes, 19,631 frames
- Lin et al. (2024), Data Scaling Laws in Imitation Learning
- Mandlekar et al. (2021), What Matters in Learning from Offline Human Demonstrations
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started