
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ípus | Alak | Mi az |
|---|---|---|---|
| action | float32 | [6] | ízületi célok a vezető karról |
| observation.state | float32 | [6] | az elért követő ízületi pozíciói |
| observation.images.top | video | [480, 640, 3] | jelenetkamera, MP4 (itt av1) |
| observation.images.wrist | video | [480, 640, 3] | csuklókamera, azonos sebességgel |
| timestamp | float32 | [1] | másodpercek az epizód kezdete óta |
| frame_index, episode_index, index, task_index | int64 | [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.
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.

Amire szüksége van a munkaasztalon
| Tétel | Részlet | Megjegyzés |
|---|---|---|
| Követő kar | SO-100, six Feetech STS3215 servos | körülbelül 110-150 EUR alkatrészekben |
| Vezető kar | a second SO-100, gears removed | az összes hat vezető motor fogaskerekei eltávolítva: csak enkóder, kevesebb súrlódás |
| Tápellátás | matched to the 7.4 V STS3215 variant in the bill of materials | lásd az alábbi figyelmeztetést |
| Kamerák | two USB cameras, 640x480 at 30 fps | egy jelenetnézet, egy a csuklón |
| Gazdagép | Python 3.12 or newer, ffmpeg | requires-python >= 3.12 |
| Hub fiók | Hugging Face write token | optional with --dataset.push_to_hub=false |
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
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-infoAz 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.
- 1Keresse 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/ttyACM0parancsra.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. - 2Motorazonosí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.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Mindké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
idlesz a profil fájlneve.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 - 4Tá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.
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
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
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.0Ké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.
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
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=2Az 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.
| Flag | Alapértelmezett | Mit csinál |
|---|---|---|
| --dataset.repo_id | empty | név; alapértelmezetten időbélyegzővel kiegészítve |
| --dataset.single_task | empty | feladat string minden epizóddal tárolva |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | írási útvonal, alapértelmezett ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | vezérlőhurok sebessége és adatkészlet képkockasebessége |
| --dataset.episode_time_s | 60 | másodpercek, mielőtt egy epizód automatikusan továbbhalad |
| --dataset.reset_time_s | 60 | jelenet visszaállítása; kar mozog, semmi sem tárolódik |
| --dataset.num_episodes | 50 | ebben a munkamenetben rögzített epizódok |
| --dataset.push_to_hub | true | feltöltés a munkamenet végén; a false helyben marad |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | kódolás rögzítés közben; állítsa be explicit módon |
| --dataset.encoder_queue_maxsize | 30 | pufferelt képkockák kameránként, ~1 mp 30 fps-nél |
| --dataset.encoder_threads | null (codec decides) | szálak kódolónként; csökkentse, ha a rögzítés akadozik |
| --dataset.no_stamp | false | tartsa a repo_id-t pontosan úgy, ahogy beírta |
| --resume | false | hozzáfűzés egy meglévő adatkészlethez; ehhez szükséges a --dataset.root |
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ányelv | Min. epizódok | Adathalmaz formátum | GPU szint | Költség futtatásonként |
|---|---|---|---|---|
| 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 |
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.
- 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
- 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.
| Hiba | Hogy néz ki | Honnan ered | Hogyan észlelhető |
|---|---|---|---|
| Felcserélt kamera nézetek | csukló kép a felső kulcs alatt | index újrarendelés újracsatlakoztatás után | lerobot-find-cameras each session; by-id paths |
| Befagyott képkockák | ugyanaz a kép több tucat soron keresztül | a kamera leállítja a kép továbbítását; a ciklus megismétli az utolsó képkockát | scrub it in lerobot-dataset-viz |
| Elveszett képkockák | sorok száma az fps szorozva másodpercek alatt | a sor túlcsordul, inkább eldobja, mint blokkolja | 'Encoder queue full' in the log; rows vs fps times duration |
| Ízület a határán | egy ízület laposan a minimumon vagy maximumon | a 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ül | a szabályzat előre jelez vagy késik | a kamerák eltérő fps-sel működnek, mint a ciklus | keep every camera at --dataset.fps |
| Holtidő | hosszú sorozatok azonos akciósorokból | az operátor szüneteltette a felvevőt, miközben az futott | share of consecutive identical action rows |
| Használhatatlan feladat string | task1, demo2, test | gyors gépelés | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
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.
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"])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.
# 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 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.1 | LeRobot v3.0 | |
|---|---|---|
| Elrendezés | epizódonként egy parquet és egy MP4 | shard-onként sok epizód |
| Epizód metaadatok | JSONL files | darabolt parquet a meta/episodes/ alatt, a datasets stack-en keresztül |
| Streaming a Hub-ról | nem | igen, a StreamingLeRobotDataset-en keresztül |
| Írta: lerobot 0.6.1 | nem | igen, amit ma kap |
| Olvassa: GR00T N1.7 és N1.5 | igen | nem, lefelé kell konvertálni |
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.
# 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=falseKé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.
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.
Az asztali kliens LeRobot-formátumú adatkészleteket, epizódokat, kamerafolyamokat és ízületi állapotokat rögzít, közvetlenül egy teleoperációs munkamenetből. Ez az adatkészlet táplálja a képzési űrlapot: válaszd ki a modellt, az adatkészletet és a hiperparamétereket, a backend pedig a modell VRAM-jához méretezett GPU-t bérel, futtatja a trénert és ellenőrzőpontokat ír az objektumtárolóba.
- 1Kliens telepítése
On A letöltési oldalon; beállítás az ügyfél dokumentációjában.
- 2Rögzítés teleoperációs munkamenetből
Vezesd a kart; a kliens LeRobot formátumban írja az epizódokat. Útmutató: rögzítsd az első adatkészletedet.
- 3Vagy hozd a saját adataidat
Az adatkészlet származhat Hugging Face repo azonosítóból vagy a saját gépedről is: adatkészlet dokumentáció, nyilvános könyvtár.
- 4Képezd és futtasd vissza
Válaszd ki a kombinációt a képzési mátrixon, majd futtasd vissza a szabályzatot a karon. Nagyjából 1-3 USD a 24 GB-os szinten, 4-12 USD az A100 vagy H100 szinten.
Nem szereli össze vagy kalibrálja a karodat, és nem javít hibás epizódot, így az ellenőrzési lépés továbbra is érvényes. Van egy szigorú korlát a másik végén is: gyors feladatok esetén az inferenciának a szervók mellett kell lennie. A vezérlőhurok 20-485 ms-ot fut akció lépésenként, és a nyilvános internetes oda-vissza utak ráadásul egy működő szabályzatot tétovázóvá tesznek.
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 klienstAdatké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.
Sources
- LeRobot: Utánzó Tanulás Valós Robotokon
- LeRobot: SO-100 összeszerelés, motor beállítás és kalibráció
- LeRobot: Kamerák és lerobot-find-cameras
- LeRobot: Telepítés és az extrák mátrixa
- LeRobotDataset v3.0: elrendezés és v2.1 migráció
- LeRobot: Streaming videó kódolás és eldobott képkockák
- LeRobot: Nagy adathalmazok portolása v3.0-ra (DROID)
- lerobot v0.6.1 kiadás, 2026. augusztus 3.
- DatasetRecordConfig: a valós rögzítési alapértelmezések
- lerobot_record.py: rögzítési ciklus és folytatás kezelése
- TheRobotStudio/SO-ARM100: build repo és anyagjegyzék
- Hugging Face: LeRobot Közösségi Adathalmazok ellenőrzőlistája
- lerobot/svla_so100_pickplace: 50 epizód, 19 631 képkocka
- Lin et al. (2024), Adatskálázási Törvények az Utánzó Tanulásban
- Mandlekar et al. (2021), Mi számít az offline emberi demonstrációkból való tanulásban
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