AY-Robots-opassivu ensimmäisen LeRobot-tietoaineistosi tallentamiseen SO-100-varrella
LeRobotSO-100Tietoaineiston tallennusTeleoperaatioJäljittelyoppiminen

Tallenna ensimmäinen LeRobot-tietoaineistosi SO-100:lla

AY-Robots ResearchAugust 23, 202616 min lukua

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.

OminaisuusdtypeMuotoMitä se on
actionfloat32[6]nivelten tavoitteet johtajavarresta
observation.statefloat32[6]seuraajan saavuttamat nivelten asennot
observation.images.topvideo[480, 640, 3]kohtauskamera, MP4 (av1 tässä)
observation.images.wristvideo[480, 640, 3]rannekamera, sama nopeus
timestampfloat32[1]sekunteja jakson alusta
frame_index, episode_index, index, task_indexint64[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ä.

Todellisen aineiston mittatikku

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ä.

AY-Robotsin sanastomerkintä LeRobot-aineistomuodolle, joka näyttää hakemistorakenteen ja metatietotiedostot.
Mitä data/-, videos/- ja meta/-kansioissa on, ja mitkä käytännöt lukevat mitäkin versiota.

Mitä tarvitset työpöydällä

KohdeYksityiskohtaHuomautus
SeuraajavarsiSO-100, kuusi Feetech STS3215 -servoanoin 110–150 EUR osissa
Johtajavarsitoinen SO-100, vaihteet poistettukaikkien kuuden johtajamoottorin vaihteet poistettu: vain enkooderi, vähemmän kitkaa
Virtasovitettu materiaalikustannusluettelon 7.4 V STS3215 -versioonkatso alla oleva varoitus
Kameratkaksi USB-kameraa, 640x480 30 fpsyksi näkymä kohtauksesta, yksi ranteessa
IsäntäPython 3.12 tai uudempi, ffmpegrequires-python >= 3.12
Hub-tiliHugging Face write tokenoptional with --dataset.push_to_hub=false
7.4 V, ei 12 V

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

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 tulostaa järjestelmän yhteenvedon, mukaan lukien ffmpeg-version, jonka se löytää PATH-ympäristömuuttujasta.

Lisä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.

  1. 1
    Etsi 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.

    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
    Kirjoita 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.

    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
    Kalibroi molemmat käsivarret

    Siirrä jokainen nivel liikeratansa keskelle, paina Enter, ja pyyhkäise sitten jokainen läpi koko liikeratansa. id:stä tulee profiilin tiedostonimi.

    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
    Teleoperointi 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.

    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
Mihin kalibrointi tallentuu ja miksi ID on tärkeä

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

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
Suorita tämä jokaisessa istunnossa: dokumentaatio varoittaa, että nämä tunnisteet voivat muuttua uudelleenkäynnistyksen tai uudelleenkytkennän jälkeen käyttöjärjestelmästä riippuen.

Kaksi 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.

Kameran indeksi ei ole vakaa tunniste

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

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
Kamerasanakirja on yksi shell-lainattu merkkijono; sisäkkäiset aaltosulkeet eivät ole shell-syntaksia.

Alla olevat oletusarvot tulevat src/lerobot/configs/dataset.py main-haarasta, eivät opetusohjelmasta. Monet eivät ole sitä, mitä ihmiset olettavat.

LippuOletusMitä se tekee
--dataset.repo_idemptynimi; aikaleima lisätään oletuksena
--dataset.single_taskemptytehtävämerkkijono tallennetaan jokaisen jakson mukana
--dataset.root$HF_LEROBOT_HOME/repo_idkirjoituspolku, oletus ~/.cache/huggingface/lerobot/
--dataset.fps30ohjaussilmukan nopeus ja datasettikehysnopeus
--dataset.episode_time_s60sekuntia ennen kuin jakso etenee automaattisesti
--dataset.reset_time_s60kohtauksen nollaus; käsivarsi liikkuu, mitään ei tallenneta
--dataset.num_episodes50tässä istunnossa tallennetut jaksot
--dataset.push_to_hubtruelataa palveluun istunnon lopussa; false pitää paikallisena
--dataset.streaming_encodingfalse in the dataclass, true in the docs tablekoodaa tallennuksen aikana; aseta se eksplisiittisesti
--dataset.encoder_queue_maxsize30puskuroituja kehyksiä kameraa kohti, ~1 s nopeudella 30 fps
--dataset.encoder_threadsnull (codec decides)säikeitä kooderia kohti; pienennä, jos tallennus nykii
--dataset.no_stampfalsepidä repo_id täsmälleen kirjoitetussa muodossa
--resumefalselisää olemassa olevaan datasettiin; vaatii --dataset.root
Kaksi lippua, jotka yllättäen maksavat tunnin

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.

PolicyMinimijaksotAineiston muotoGPU-tasoKustannus per ajo
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

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.

Johtaja-seuraaja-teleoperaatio tietolähteenä
Edut
  • 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
Haittapuolet
  • 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.

VikaMiltä se näyttääMistä se tuleeMiten se havaitaan
Kameranäkymät vaihdetturanteen kuva ylimmän avaimen allaindeksin uudelleenmääritys uudelleenkytkennän jälkeenlerobot-find-cameras jokaisella istunnolla; by-id-polut
Jäätyneet ruudutsama kuva kymmenissä riveissäkamera lakkaa toimittamasta; silmukka toistaa viimeisen ruuduntarkista se ohjelmassa lerobot-dataset-viz
Pudonneet ruudutrivimäärä alle fps kertaa sekuntiajonon ylivuoto, pudottaa mieluummin kuin estää'Encoder queue full' lokissa; rivit vs fps kertaa kesto
Nivel rajallaanyksi nivel tasaisesti minimissä tai maksimissajohtajan alue ylittää seuraajan, tai huono keskiasentonivelen min/max tiedostossa ds.meta.stats; lerobot-find-joint-limits etukäteen
Kuva ja toiminto epäsynkassapolitiikka ennakoi tai viivästyykamerat eri fps:llä kuin silmukkapidä jokainen kamera --dataset.fps -asetuksessa
Kuollutta aikaapitkiä sarjoja identtisiä toimintorivejäoperaattori keskeytti tallentimen käydessäperäkkäisten identtisten toimintorivien osuus
Käyttökelvoton tehtävämerkkijonotask1, demo2, testnopea kirjoitusmeta/tasks.parquet versiossa v3.0 (se oli meta/tasks.jsonl versiossa v2.1); korjaa komennolla lerobot-edit-dataset modify_tasks
Pudotetut kuvat piiloutuvat

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.

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"])
Jakso, jonka fps-arvo poikkeaa merkittävästi keston ja fps:n tulosta, on ehdokas poistettavaksi, ei koulutettavaksi.

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.

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 tekee myös jaon, yhdistämisen, ominaisuuksien poiston, tehtävien muokkauksen ja tilastojen uudelleenlaskennan. Poista runsaasti: huono jakso maksaa yhden jakson; sen säilyttäminen maksaa jokaisen sillä koulutetun ajon.
AY-Robots-aineiston hakemisto, joka listaa julkiset LeRobot-aineistot jaksojen määrineen ja formaatteineen
Miten vertailukelpoiset aineistot on mitoitettu ja annotoitu.

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.1LeRobot v3.0
Asetteluyksi parquet ja yksi MP4 per jaksomonta jaksoa per osio
Jakson metatiedotJSONL fileslohkotettu parquet meta/episodes/-kansiossa, datasets-pinon kautta
Striimaus Hubistaeikyllä, StreamingLeRobotDatasetin kautta
Kirjoittanut lerobot 0.6.1eikyllä, mitä saat tänään
Lukee GR00T N1.7 ja N1.5kylläei, on muunnettava alaspäin
Tallennus tänään, GR00T-koulutus huomenna

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.

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
Nopea 50 episodille. Skaalaus on eri työ: lerobot'n siirto-opas, raa'alle DROIDille versioon v3.0, budjetoi 7+ päivää paikallista käsittelyä ja noin 400 Gt.

Kaksi 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.

Mitä tämä reitti maksaa

Aika: ilta per varsi kokoamiseen, hankala ensimmäinen kalibrointi ja ensimmäinen istunto, jonka heität pois, koska kamera oli väärässä paikassa.

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äsovellus

Datasetista 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started