Az AY-Robots oktatóoldala az első LeRobot adatkészlet rögzítéséhez egy SO-100 karral
LeRobotSO-100Adatkészlet rögzítésTávvezérlésUtánzó tanulás

Rögzítse első LeRobot adatkészletét egy SO-100-zal

AY-Robots ResearchAugust 23, 202616 perc olvasás

Rögzítsen egy használható LeRobot adatkészletet egy SO-100-zal: kalibrálás, vezető-követő távvezérlés, a valós lerobot-record jelzők és alapértelmezések, kamera beállítása, epizódok száma, és a hibák, amelyek tönkretesznek egy futtatást.

Egy SO-100 követő, egy azonos kialakítású vezető kar és két USB kamera egy délután alatt finomhangolhat egy irányelvet. Ugyanez a tesztpad ugyanolyan könnyen képes hatvan epizódot előállítani, amelyek egészségesnek tűnnek egy fájlböngészőben, és elpazarolnak egy hatórás GPU futtatást. A különbség ritkán a modell; az, ami a szervók és a parquet fájl között történt.

Itt van a manuális útvonal, majd a rövidebb. Minden parancs a lerobot 0.6.1-ből származik, amely 2026. augusztus 3-án jelent meg és jelenleg is elérhető a PyPI-n. Átkerült a konzolos belépési pontokhoz, így az olyan oktatóanyagok, amelyek futtatják a python lerobot/scripts/control_robot.py fájlt, egy már nem létező fájlt írnak le.

A rövid változat

  • lerobot 0.6.1 v3.0-t rögzít; GR00T N1.7 és N1.5 v2.1-et szeretne. Rögzítés előtt állítsa be a formátumot.
  • Négy parancs: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Ugyanazt a --robot.id és --teleop.id azonosítót használja a kalibrálásból a rögzítési munkamenetbe.
  • Valós alapértékek: 30 fps, 60 s epizódonként, 60 s visszaállítás, 50 epizód, körülbelül 100 perc valós idő.
  • Minimális epizódszám itt: 30 a SmolVLA-hoz, 50 a többihez.
  • A sokféleség felülmúlja a mennyiséget. Az adatkészletek négy dolog miatt halnak meg: felcserélt kamera indexek, kihagyott vagy befagyott képkockák, egy határértékénél parkoló ízület, olvashatatlan feladat string.

Mit rögzít egy felvételi munkamenet

A LeRobot adathalmaz nem videók mappája, hanem egy időindexelt táblázat csatolt videóval: minden vezérlőhurok-ütem egy sort ír, amely tartalmazza a parancsolt műveletet, az elért követő állapotát, kameránként egy képkockát, egy időbélyeget és indexeket. A szabályzat csak ezeket az oszlopokat látja. A lerobot/svla_so100_pickplace sémája, a meta/info.json fájlból olvasva.

JellemzőAdattípusAlakMi az
actionfloat32[6]ízületi célok a vezető karról
observation.statefloat32[6]az elért követő ízületi pozíciói
observation.images.topvideo[480, 640, 3]jelenetkamera, MP4 (itt av1)
observation.images.wristvideo[480, 640, 3]csuklókamera, azonos sebességgel
timestampfloat32[1]másodpercek az epizód kezdete óta
frame_index, episode_index, index, task_indexint64[1]automatikusan kitöltött nyilvántartás

Az ízületek a main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll és main_gripper: az SO-100 hat szabadságfoka. A művelet és az állapot azonos alakú, mert a vezető-követő távvezérlés rögzít egy célt és az egy lépéssel később elért pozíciót. Ez a rés információ: hol küzdött a kar a gravitációval vagy egy beragadt tárggyal. Ezek a karakterláncok az adott adathalmazhoz tartoznak. Egy ma 0.6.1-gyel rögzített munkamenet a shoulder_pan.pos-tól a gripper.pos-ig ír, az 1-től 6-ig terjedő azonosítókkal a buszon: ugyanaz a hat ízület, különböző kulcsok, ami akkor számít, amikor egy konfiguráció név szerint hivatkozik egy jellemzőre.

Mérce egy valós adathalmazból

Ez az adathalmaz 50 epizódot és 19 631 képkockát tartalmaz 30 fps sebességgel: körülbelül 393 képkockát, vagy 13 másodpercet epizódonként. Ha az Önök átlaga egy perc, akkor valami nehezebbet csinálnak, vagy holtidőt rögzítenek mindkét végén.

Az AY-Robots szószedet bejegyzése a LeRobot adathalmaz formátumához, bemutatva a könyvtárstruktúrát és a metaadatfájlokat.
Mi található a data/, videos/ és meta/ könyvtárakban, és mely irányelvek melyik verziót olvassák.

Amire szüksége van a munkaasztalon

TételRészletMegjegyzés
Követő karSO-100, six Feetech STS3215 servoskörülbelül 110-150 EUR alkatrészekben
Vezető kara second SO-100, gears removedaz összes hat vezető motor fogaskerekei eltávolítva: csak enkóder, kevesebb súrlódás
Tápellátásmatched to the 7.4 V STS3215 variant in the bill of materialslásd az alábbi figyelmeztetést
Kameráktwo USB cameras, 640x480 at 30 fpsegy jelenetnézet, egy a csuklón
GazdagépPython 3.12 or newer, ffmpegrequires-python >= 3.12
Hub fiókHugging Face write tokenoptional with --dataset.push_to_hub=false
7.4 V, nem 12 V

Az STS3215 két változatban kapható: az SO-ARM100 README a 7.4 V-os változatot 16.5 kg.cm álló nyomatékkal értékeli 6 V-on mérve, a 12 V-os változatot pedig 30 kg.cm-rel, és megjegyzi, hogy a 12 V-os motorok választása azt is jelenti, hogy 5 V-os tápegység helyett 12 V 5 A+ tápegységet kell vásárolni. Az anyagjegyzék 7.4 V-os szervókat sorol fel. A 7.4 V-ra méretezett szervók 12 V-tal való táplálása tönkreteszi azokat, ezért olvassa el a motor címkéjét, mielőtt bármit bekötne. A szervó nem reagál.

Ha a kar még nincs megépítve, az egy külön este: kezdje a SO-100 első lépések és a teljes SO-100 beállítási útmutató. Ha még nem vásárolt semmit, olvassa el először a SO-100 és SO-101 összehasonlítását először: az SO-101 az újabb revízió, továbbfejlesztett kábelezéssel és fogaskerék-eltávolítási lépés nélkül, és a rögzítési munkafolyamat azonos.

A lerobot 0.6.1 telepítése

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
A lerobot-info rendszerösszefoglalót nyomtat, beleértve az ffmpeg verzióját, amelyet a PATH-on talál.

Az extrák okozzák a legtöbb problémát. pip install lerobot csak az alapvető ML függőségeket telepíti, semmit, ami robottal kommunikál. A Koch karoknak dynamixel helyett feetech. Ha a shellje még soha nem hallott a lerobot-recordról, akkor ez az oka.

Portok, motorazonosítók és kalibrálás

Három egyszeri lépés választja el az alkatrészeket egy működő teleop huroktól. lehetővé teszi, hogy a karján betanított irányelv más karján is fusson, a nyers enkóder-számlálókat egy közös ízület-konvencióra képezve le.

  1. 1
    Keresse meg az egyes karok USB portját

    Futtassa mindkét kar csatlakoztatásával, húzza ki azt, amelyet azonosítani szeretne, amikor a rendszer kéri, és jegyezze fel, melyik port tűnik el. Linuxon szükség lehet a sudo chmod 666 /dev/ttyACM0 parancsra.

    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
    Motorazonosítók és baudráták írása

    Az azonosítókat egyszerre egy motorra írják, és a dokumentáció szigorú a módszerre vonatkozóan: pontosan egy motort csatlakoztasson a vezérlőpanelhez, még ne legyen láncba fűzve más motorokkal. A szkript visszafelé halad a láncon, először a markolóhoz kér azonosítót (6-os), majd a csukló forgatásához (5-ös), egészen a vállpánig (1-es). Ezt az összeszerelés előtt végezze el.

    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
    Mindkét kar kalibrálása

    Mozgassa az összes ízületet a tartományának közepére, nyomja meg az Entert, majd mozgassa végig mindegyiket a teljes tartományán. Az id lesz a profil fájlneve.

    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
    Távvezérlés felvétel előtt

    Az elfogadási teszt a fentiek mindegyikére. Ha a távvezérlés rángatózó, tükrözött, vagy egy ízület nem követi az utasításokat, a felvétel 50 epizódban megőrzi ezt.

    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
Hová kerül a kalibrálás, és miért fontos az azonosító

A profilok a $HF_LEROBOT_CALIBRATION helyre kerülnek, alapértelmezés szerint ~/.cache/huggingface/lerobot/calibration, és az azonosító a keresési kulcs. Adjon meg a lerobot-record parancsnak egy kalibrált azonosítót, és felajánlja az Entert a profil újrafelhasználásához, vagy a c-t az újrakalibráláshoz. Ha ismeretlen azonosítót ad meg, és nincs fájl, akkor a kalibrálásba ugrik a munkamenet közepén.

A kamerák határozzák meg, mit lát a policy

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
Futtassa ezt minden munkamenetben: a dokumentáció figyelmeztet, hogy ezek az azonosítók újraindítás vagy újracsatlakoztatás után megváltozhatnak, az operációs rendszertől függően.

Két nézet, és a helyük számít: egy rögzített jelenetkamera, amely lefedi a munkaterületet, és egy csuklókamera a végrehajtó közelében, amely megmutatja, mit készül megérinteni a megfogó. A LeRobot közösségi adatkészletek ellenőrzőlistája lehetőleg két nézetet kér 480x640 / 720p vagy jobb felbontásban, statikus hátteret, semleges, stabil világítást, valamint a vezető kar és az emberi végtagok képkockán kívülre helyezését. A felvételi útmutató hozzáteszi az ökölszabályt: képesnek kell lennie a feladat elvégzésére pusztán a kamera képeit nézve.

A kamera indexe nem stabil azonosító

Az OpenCV indexek a számozási sorrendből származnak, így egy újraindítás vagy újracsatlakoztatás felcserélheti a 0-s és 2-es indexet, és a csukló nézetét teheti a felső pozícióba egy egész munkamenetre. A lerobot maga is ezt mondja: a kamera osztálya eszközútvonalat és egész számot is elfogad, és figyelmeztet, hogy az indexek instabilak az újraindítások vagy portváltozások során, különösen Linuxon. Irányítsa az index_or_path-t a /dev/v4l/by-id/ alatti udev szimbolikus linkre, amely az eszközt követi a számozási sorrend helyett. Ez a leggyakoribb módja annak, hogy egy adatkészlet belsőleg inkonzisztenssé váljon, és a tréning nem tudja kijavítani. Kamera nem észlelhető.

A record parancs és minden flag

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
A kamera szótár egy shell-idézőjeles string; a beágyazott kapcsos zárójelek nem shell szintaxisok.

Az alábbi alapértelmezett értékek innen származnak: src/lerobot/configs/dataset.py a main ágról, nem egy oktatóanyagból. Több közülük nem az, amit az emberek feltételeznek.

FlagAlapértelmezettMit csinál
--dataset.repo_idemptynév; alapértelmezetten időbélyegzővel kiegészítve
--dataset.single_taskemptyfeladat string minden epizóddal tárolva
--dataset.root$HF_LEROBOT_HOME/repo_idírási útvonal, alapértelmezett ~/.cache/huggingface/lerobot/
--dataset.fps30vezérlőhurok sebessége és adatkészlet képkockasebessége
--dataset.episode_time_s60másodpercek, mielőtt egy epizód automatikusan továbbhalad
--dataset.reset_time_s60jelenet visszaállítása; kar mozog, semmi sem tárolódik
--dataset.num_episodes50ebben a munkamenetben rögzített epizódok
--dataset.push_to_hubtruefeltöltés a munkamenet végén; a false helyben marad
--dataset.streaming_encodingfalse in the dataclass, true in the docs tablekódolás rögzítés közben; állítsa be explicit módon
--dataset.encoder_queue_maxsize30pufferelt képkockák kameránként, ~1 mp 30 fps-nél
--dataset.encoder_threadsnull (codec decides)szálak kódolónként; csökkentse, ha a rögzítés akadozik
--dataset.no_stampfalsetartsa a repo_id-t pontosan úgy, ahogy beírta
--resumefalsehozzáfűzés egy meglévő adatkészlethez; ehhez szükséges a --dataset.root
Két kapcsoló, ami meglepetésszerűen egy órába kerülhet

Az adatkészlet neve nem az, amit beírt. A lerobot dátum-idő bélyegzőt fűz hozzá, így a so100_pick_cube-ból so100_pick_cube_20260823_141530 lesz. Használja a --dataset.no_stamp=true kapcsolót a stabil névhez. A folytatás hozzáadásokat számol, nem összegeket. A --resume=true kapcsolóval a --dataset.num_episodes további epizódokat számol, és a --dataset.root kötelezővé válik. Kérjen 50-et egy 30 epizódos adatkészleten, és 80-at kap.

Billentyűzetvezérlés egy munkamenet során

  • Jobb nyíl vagy n: az epizód vagy a visszaállítási fázis korai befejezése. Ezt a billentyűt használja a leggyakrabban, mert egy tiszta fogás ritkán igényel 25 másodpercet.
  • Bal nyíl vagy r: az epizód elvetése és újrakezdése. Egy rossz felvétel most semmibe sem kerül, később viszont sokat.
  • Escape vagy q: a munkamenet leállítása, kódolás befejezése, feltöltés.
  • Ezek működnek X11, Wayland és headless SSH környezetben: globális billentyűzet-háttér nélkül a lerobot-record ugyanazokat a billentyűket olvassa a vezérlő terminálról. A betűk túlélik a lassú SSH kapcsolatokat, ahol a nyíl billentyűk sorozatai szétesnek.
  • A billentyűzetes távvezérlés más, és globális háttérre van szüksége: X11, Windows vagy macOS akadálymentesítéssel.

Hány epizód, és hogyan néz ki egy jó epizód

A felvételi útmutató legalább 50 epizódot javasol az első feladathoz, körülbelül 10-et tárgyhelyenként. Az irányelv oldalak felsorolnak egy minimumot modellenként, ami alatt egy futtatás nem éri meg a GPU idejét.

IrányelvMin. epizódokAdathalmaz formátumGPU szintKöltség futtatásonként
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

A jobb kérdés az, hogy miből mennyit. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) több mint 40 000 demonstrációt gyűjtött, és több mint 15 000 valós világú futtatást végzett. Az általánosítás nagyjából hatványtörvény szerinti összefüggést mutatott a environments and objects, és egy környezetenkénti vagy tárgyankénti küszöbérték után a további demonstrációknak minimális hatása volt. Egy tesztpadon: mozgassa a tárgyat, változtassa meg a világítást, cserélje ki a kockát, ahelyett, hogy egy felvételt ismételne.

Vezető-követő távvezérlés mint adatforrás
Előnyök
  • Folyamatos ízületi trajektóriák, amelyeket egy szervó reprodukálni tud, ellentétben a billentyűzettel vagy a gamepaddel
  • A cselekvés és az állapot közös koordináta-konvenciót használ, így az irányelv olyan célt tanul meg, amelyet közvetlenül parancsolhat
  • Egy 25 másodperces epizód plusz egy 10 másodperces visszaállítás nagyjából 100 epizódot jelent óránként
  • A kezelő érzi, ha a követő megakad vagy beragad, így a hibák az adatok rögzítése előtt felszínre kerülnek
Kompromisszumok
  • Egy második kar nagyjából megduplázza az alkatrészköltséget
  • A demonstrációk öröklik a kezelő szokásait; Mandlekar et al. megállapította, hogy az irányelv minősége nagymértékben függ a demonstráció minőségétől
  • A vezetőt a ciklussebességgel mintavételezik, így a szünetek szinte azonos sorokká válnak, amelyek arra tanítják az irányelvet, hogy várjon
  • Semmi sem kényszeríti ki a konzisztenciát a munkamenetek között: egy 5 cm-rel elmozdított kamera rejtett eloszláseltolódást jelent

Egy jó epizód unalmas: ismételhető kiinduló pozíció, egy dolog elvégezve, befejezve, amint az objektum a tárolóban van, a feladat string a ellenőrzőlista által javasolt 25-50 karakter között. Vedd fel a piros kockát és dobd a dobozba egy feladat string; task1 az az anti-minta, amit az ellenőrzőlista kifejezetten megnevez. A homályos annotációk vezetik a problémák listáját, és ezek a legfontosabbak a látás-nyelv-akció modellek, ahol a string egy modell bemenet, nem pedig egy fájlnév.

Hibák, amelyek csendben tönkretesznek egy adatkészletet

Egyik sem dob kivételt. Mindegyik túléli a betanítást, és egy jól kinéző veszteséggörbeként és egy semmit sem csináló robotként jelentkezik. Ellenőrizze, amíg a jelenet be van állítva.

HibaHogy néz kiHonnan eredHogyan észlelhető
Felcserélt kamera nézetekcsukló kép a felső kulcs alattindex újrarendelés újracsatlakoztatás utánlerobot-find-cameras each session; by-id paths
Befagyott képkockákugyanaz a kép több tucat soron keresztüla kamera leállítja a kép továbbítását; a ciklus megismétli az utolsó képkockátscrub it in lerobot-dataset-viz
Elveszett képkockáksorok száma az fps szorozva másodpercek alatta sor túlcsordul, inkább eldobja, mint blokkolja'Encoder queue full' in the log; rows vs fps times duration
Ízület a határánegy ízület laposan a minimumon vagy maximumona vezető tartománya meghaladja a követőét, vagy rossz középső pozícióper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Kép és akció szinkronon kívüla szabályzat előre jelez vagy késika kamerák eltérő fps-sel működnek, mint a cikluskeep every camera at --dataset.fps
Holtidőhosszú sorozatok azonos akciósorokbólaz operátor szüneteltette a felvevőt, miközben az futottshare of consecutive identical action rows
Használhatatlan feladat stringtask1, demo2, testgyors gépelésmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Az eldobott képkockák elrejtőznek

Az enkóder kameránként egy korlátozott méretű várólistát tart fenn, alapértelmezetten 30 képkockát. Ha nem tudja tartani a tempót, a képkockák eldobásra kerülnek, nem pedig blokkolásra: a rögzítés folytatódik, és semmi sem omlik össze. Ekkor a Encoder queue full for {camera}, dropped N frame(s) üzenetet kapja, valamint egy kameránkénti összesítést az epizód végén. A lerobot küszöbértéke: körülbelül 5 százalék hiányzó képkocka túlterhelt rendszert jelent, 2 százalék a várható indítási terhelés. Javasolt javítások sorrendben: --display_data=false, alacsonyabb --dataset.encoder_threads, vcodec=h264, streaming kikapcsolása.

Egy megjegyzés: a streaming-encoding útmutató táblázata az alapértelmezett értéket True, míg a fő ágon lévő adatosztályban ez áll: streaming_encoding: bool = False. A dokumentáció és a kód eltér, ezért állítsa be explicit módon; a lerobot naplóz egy tippet, amely ezt javasolja, valahányszor a jelző kikapcsolt állapotban indul.

Ellenőrizze az adatkészletet, mielőtt GPU-t bérelne

A dokumentációban szereplő elfogadási teszt: hasonlítsa össze a videó időtartamát a CLI által jelentett epizód időtartamával, és ellenőrizze, hogy a sorok száma megegyezik-e az fps szorozva az időtartammal. Epizódonként, nem az összesre vonatkozóan.

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"])
Egy epizód, amelynek fps-e messze eltér a hossztól, törlésre jelölt, nem betanításra.

Ezután nézze meg. lerobot-dataset-viz lejátszik egy epizódot képkockáról képkockára, ízületi nyomvonalakkal a kamera nézetek mellett, Rerunban vagy Foxglove-ban. Felcserélt kamerák és befagyott képkockák tíz másodpercen belül megjelennek. Az emberek kihagyják ezt a lépést.

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]"
A lerobot-edit-dataset emellett felosztást, egyesítést, funkció eltávolítást, feladatok módosítását és statisztikák újraszámítását is végzi. Töröljön nagylelkűen: egy rossz epizód egy epizódba kerül; megtartása minden rajta betanított futtatásba kerül.
Az AY-Robots adathalmaz könyvtár, amely nyilvános LeRobot adathalmazokat sorol fel epizódszámokkal és formátumokkal
Hogyan méretezik és annotálják az összehasonlítható adathalmazokat.

v2.1 vagy v3.0: döntsön a felvétel előtt

A v2.1 epizódonként egy parquet és egy MP4 fájlt írt. A v3.0 sok epizódot összefűz megosztott shardokba, és metaadatokból építi újra a határokat, így az info.json fájl útvonalsablonokat tartalmaz, mint például data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet egy epizódszám helyett. Az upstream indoklás kevesebb, nagyobb fájl: gyorsabb inicializálás és kisebb fájlrendszer-terhelés nagy léptékben.

LeRobot v2.1LeRobot v3.0
Elrendezésepizódonként egy parquet és egy MP4shard-onként sok epizód
Epizód metaadatokJSONL filesdarabolt parquet a meta/episodes/ alatt, a datasets stack-en keresztül
Streaming a Hub-rólnemigen, a StreamingLeRobotDataset-en keresztül
Írta: lerobot 0.6.1nemigen, amit ma kap
Olvassa: GR00T N1.7 és N1.5igennem, lefelé kell konvertálni
Felvétel ma, GR00T képzés holnap

A lerobot 0.6.1 v3.0-t ír, de a GR00T N1.7 és N1.5 v2.0 vagy v2.1-et olvas, és összeomlik rajta. Figyelje meg az irányt: src/lerobot/scripts/ tartalmazza a convert_dataset_v21_to_v30.py fájlt, és semmi sem megy a másik irányba. Rendezze ezt az ülés előtt. Javítás: v3-ként elutasított adatkészlet.

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
Gyorsan 50 epizódhoz. A skálázás más feladat: a lerobot portolási útmutatója a nyers DROID v3.0-ra való átalakításához 7+ nap helyi feldolgozást és körülbelül 400 GB-ot irányoz elő.

Két út ugyanahhoz az adatkészlethez

Minden fent említett dolog a saját gépeden: te birtoklod az USB enumerációt, az ffmpeg buildet, az enkóder hangolását és a kalibrációs fájlokat. Ez a megfelelő út a pipeline megértéséhez, egy szokatlan kamerafelszerelés futtatásához, vagy az adatok helyben tartásához.

Mennyibe kerül ez az út

Idő: karonként egy este az összeszerelésre, egy macerás első kalibrálás, és egy első munkamenet, amit kidobsz, mert egy kamera rossz foglalatban volt.

Rögzíts LeRobot adatkészleteket anélkül, hogy magadnak kellene bekötnöd a pipeline-t

Az AY-Robots asztali kliens teleoperációs munkamenetből rögzíti az epizódokat, kamerafolyamokat és ízületi állapotokat LeRobot formátumban, majd átadja az adatkészletet a trénernek.

Szerezd be az asztali klienst

Adatkészlettől az irányelvig

Ötven tiszta epizód táplálja az összes itt futó futtatást. Az a nulláról képzi magát a feladatára, körülbelül 80 millió paraméterrel, nagyjából 20 ms/akciólépés sebességgel, az öt közül ez az egyetlen, amely kényelmesen kezeli a gyors mozgást. A körülbelül 450 millió paramétert használ egy 24 GB-os kártyán. A egy körülbelül 3 milliárd paraméteres alapmodell, ahol a körülbelül 40 millió paramétert érint, A100 vagy H100 kártyát igényel, és a v2.1 adatkészletet kéri.

Ezután az útmutató az Ön kombinációjához: , vagy ; az első futtatáshoz a rövidebb. Ha az irányelv működik a tesztpadon, de összeomlik abban a pillanatban, amikor elmozdítja az asztalt, az adatprobléma: a és a mélyebben foglalkozik a diverzitással.

Hány epizódra van valójában szükségem egy első működő irányelvhez?

Harminc a SmolVLA-hoz, ötven az ACT-hez, Pi0.5-höz, GR00T N1.5-höz és N1.7-hez, ezek a minimumok, amiket az AY-Robots trénerek előírnak. A LeRobot útmutatója önállóan legalább 50-et javasol egy első feladathoz, körülbelül 10-et tárgyhelyenként. Az adatskálázási munka azt találta, hogy az általánosítás a környezetekkel és tárgyakkal skálázódik, nem pedig a demonstrációk számával, így száz felvétel egy jelenetről rosszabb, mint ötven öt különböző elhelyezésben.

Szükségem van vezetőkarra, vagy teleoperálhatok billentyűzettel?

A lerobot billentyűzetes és gamepad teleoperátorokat is tartalmaz, így a vezetőkar nem feltétlenül szükséges, de erősen ajánlott: a vezető-követő rendszer folyamatos ízületi trajektóriákat biztosít a rögzített művelet koordináta-konvenciójában, míg a billentyűzetes bevitel lépcsőzetes mozgást eredményez, amit az irányelv rángásként tanul meg. A billentyűzetes teleoperációhoz globális billentyűzet-backend is szükséges, így Wayland és headless környezetben nem működik.

Rögzíthetek Raspberry Pi-n vagy egy kis mini PC-n?

Igen, hangolással. A streaming-kódolási útmutató tartalmaz egy alacsony erőforrásigényű kategóriát, amely lefedi a modern 4 magos gépeket és a Raspberry Pi 5-öt, és két kamerát 640x480 felbontással és 30 fps-sel sorol a „némi hangolást igényel” oszlopba. Tanácsa: akadályozza meg, hogy a kódoló versenyezzen a rögzítési ciklussal, a --dataset.rgb_encoder.vcodec=h264 és --dataset.streaming_encoding=false paraméterekkel. Két 640x480-as kamerát körülbelül 55 millió pixel/másodpercnek, két 1920x1080-as kamerát pedig körülbelül 373 millió pixel/másodpercnek értékel.

Honnan tudom, hogy az éppen rögzített adatkészletem valóban egészséges?

Három egyszerű ellenőrzés. Hasonlítsa össze az egyes epizódok videóhosszát a CLI által jelentett hosszal, és ellenőrizze, hogy a sorok száma megegyezik-e az fps és az adott időtartam szorzatával, epizódonként, nem pedig összesen; ez a lerobot kódolási útmutatójának elfogadási tesztje. Olvassa el a ds.meta.stats fájlt, ahol egy olyan ízület, amelynek minimuma megegyezik a maximumával, soha nem mozdult el. Ezután játsszon le két-három epizódot a lerobot-dataset-viz programban, ez az egyetlen módja annak, hogy a felcserélt nézetek és a befagyott képkockák megjelenjenek. Az eldobott képkockák esetében az útmutató körülbelül 5 százalék hiányzó képkockánál húzza meg a határt; körülbelül 2 százalék normális átmeneti terhelés, gyakran csak indításkor.

A tréningfeladatom elutasította az adatkészletet v3.0-ként. Mi a teendő?

A GR00T N1.7 és N1.5 a LeRobot v2.0 vagy v2.1 verzióját olvassa, és összeomlik a v3.0-n, amit a lerobot 0.6.1 rögzít. Vagy rendezze a formátumot a tréning előtt, vagy használjon olyan irányelvet, amely natívan olvassa a v3.0-t: Pi0.5, SmolVLA vagy ACT. A lerobot tartalmaz egy v2.1-ről v3.0-ra konvertálót, de fordítva nem.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started