Stránka tutoriálu AY-Robots pro nahrávání vašeho prvního datasetu LeRobot s ramenem SO-100
LeRobotSO-100Nahrávání datasetuTeleoperaceImitační učení

Nahrajte svůj první dataset LeRobot s SO-100

AY-Robots ResearchAugust 23, 202616 min čtení

Nahrajte použitelný dataset LeRobot s SO-100: kalibrace, teleoperace leader-follower, skutečné příznaky a výchozí nastavení lerobot-record, nastavení kamery, počty epizod a vady, které zkazí běh.

Následník SO-100, vedoucí rameno stejného designu a dvě USB kamery dokážou doladit politiku během odpoledne. Stejná testovací lavice může stejně snadno vyprodukovat šedesát epizod, které vypadají zdravě v prohlížeči souborů a promarnit šestihodinový běh GPU. Rozdíl je zřídka v modelu; je to to, co se stalo mezi servy a souborem parquet.

Zde je manuální cesta, pak ta kratší. Každý příkaz je z lerobot 0.6.1, vydaného 3. srpna 2026 a aktuálního na PyPI. Přesunul se na vstupní body konzole, takže tutoriály, které spouštějí python lerobot/scripts/control_robot.py popisují soubor, který již neexistuje.

Stručná verze

  • lerobot 0.6.1 zaznamenává v3.0; GR00T N1.7 a N1.5 chtějí v2.1. Ujistěte se o formátu, než stisknete nahrávání.
  • Čtyři příkazy: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Použijte stejné --robot.id a --teleop.id z kalibrace do nahrávací relace.
  • Skutečné výchozí hodnoty: 30 fps, 60 s na epizodu, 60 s reset, 50 epizod, přibližně 100 minut reálného času.
  • Minimální počet epizod zde: 30 pro SmolVLA, 50 pro zbytek.
  • Rozmanitost poráží objem. Datové sady umírají na čtyři věci: prohozené indexy kamer, vynechané nebo zamrzlé snímky, kloub zaparkovaný na svém limitu, nečitelný řetězec úkolu.

Co zachycuje nahrávací relace

A datová sada LeRobot není složka videí, ale časově indexovaná tabulka s připojeným videem: každý takt řídicí smyčky zapíše jeden řádek obsahující příkazovou akci, stav, kterého dosáhl následovník, jeden snímek na kameru, časovou značku a indexy. Politika vidí pouze tyto sloupce. Schéma lerobot/svla_so100_pickplace, načtené z jeho meta/info.json.

VlastnostDatový typTvarPopis
actionfloat32[6]cílové klouby z ramene vedoucího
observation.statefloat32[6]pozice kloubů, kterých dosáhl následovník
observation.images.topvideo[480, 640, 3]scénická kamera, MP4 (zde av1)
observation.images.wristvideo[480, 640, 3]zápěstní kamera, stejná frekvence
timestampfloat32[1]sekundy od začátku epizody
frame_index, episode_index, index, task_indexint64[1]automaticky vyplňované účetnictví

Klouby jsou main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll a main_gripper: šest stupňů volnosti. Akce a stav sdílejí tvar, protože teleoperace vedoucí-následovník zaznamenává cíl a pozici dosaženou o jeden krok později. Tato mezera je informace: kde rameno bojovalo s gravitací nebo zaseknutým objektem. Tyto řetězce patří k dané datové sadě. Relace zaznamenaná dnes s verzí 0.6.1 zapisuje shoulder_pan.pos až po gripper.pos, ID 1 až 6 na sběrnici: stejných šest kloubů, různé klíče, což je důležité v okamžiku, kdy konfigurace odkazuje na funkci jménem.

Měřítko ze skutečné datové sady

Tato datová sada obsahuje 50 epizod a 19 631 snímků při 30 fps: přibližně 393 snímků, neboli 13 sekund, na epizodu. Pokud vaše průměrně trvají minutu, děláte něco obtížnějšího nebo zaznamenáváte mrtvý čas na obou koncích.

Záznam v glosáři AY-Robots pro formát datové sady LeRobot, ukazující rozložení adresářů a soubory metadat.
Co se nachází v data/, videos/ a meta/, a které politiky čtou kterou verzi.

Co budete potřebovat na stole

PoložkaDetailPoznámka
Rameno následovníkaSO-100, šest Feetech STS3215 servpřibližně 110 až 150 EUR v dílech
Rameno vedoucíhodruhé SO-100, odstraněná ozubená kolaozubená kola odstraněna ze všech šesti motorů vedoucího: pouze enkodér, menší tření
Napájeníodpovídající variantě 7.4 V STS3215 v kusovníkuviz upozornění níže
Kamerydvě USB kamery, 640x480 při 30 fpsjeden pohled na scénu, jeden na zápěstí
HostitelPython 3.12 nebo novější, ffmpegrequires-python >= 3.12
Účet HubuHugging Face write tokenvolitelné s --dataset.push_to_hub=false
7.4 V, ne 12 V

Serva STS3215 se dodávají ve dvou verzích: README SO-ARM100 uvádí verzi 7.4 V s blokovacím momentem 16.5 kg.cm měřeným při 6 V a verzi 12 V s 30 kg.cm, a poznamenává, že použití 12 V motorů také znamená nákup 12 V 5 A+ zdroje namísto 5 V. Kusovník uvádí 7.4 V serva. Napájení serv s jmenovitým napětím 7.4 V napětím 12 V je zničí, proto si před zapojením čehokoli přečtěte štítek motoru. Servo nereaguje.

Pokud rameno ještě není sestaveno, to je záležitost na jiný večer: začněte u prvních kroků s SO-100 a kompletního průvodce nastavením SO-100. Pokud jste ještě nic nekoupili, přečtěte si nejprve srovnání SO-100 s SO-101: SO-101 je novější revize s vylepšenou kabeláží a bez kroku s demontáží převodů, a pracovní postup nahrávání je identický.

Nainstalujte 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 vytiskne souhrn systému, včetně verze ffmpeg, kterou najde v PATH.

Doplňky nejčastěji matou. pip install lerobot instaluje pouze základní ML závislosti, nic, co by komunikovalo s robotem. Ramena Koch potřebují dynamixel namísto feetech. Pokud váš shell nikdy neslyšel o lerobot-record, toto je důvod.

Porty, ID motorů a kalibrace

Tři jednorázové kroky dělí díly od funkční teleoperační smyčky. umožňuje, aby se politika trénovaná na vaší paži spustila na paži někoho jiného, mapuje surové hodnoty enkodérů na sdílenou konvenci kloubů.

  1. 1
    Najděte USB port každého ramene

    Spusťte jej s oběma připojenými rameny, po výzvě odpojte to, které identifikujete, a poznamenejte si, který port zmizí. Na Linuxu možná budete potřebovat sudo chmod 666 /dev/ttyACM0.

    bash
    lerobot-find-port
    # Finding all available ports for the MotorsBus.
    # Ports before disconnecting: ['/dev/ttyACM0', '/dev/ttyACM1']
    # Remove the USB cable from your MotorsBus and press Enter when done.
    # The port of this MotorsBus is '/dev/ttyACM1'
    # Reconnect the USB cable.
  2. 2
    Zapište ID motorů a přenosové rychlosti

    ID se zapisují pro každý motor zvlášť a dokumentace je ohledně postupu přísná: připojte k řídicí desce přesně jeden motor, který ještě není řetězen s žádným jiným. Skript prochází řetězec pozpátku, nejprve vyzve k připojení chapadla a přiřadí mu ID 6, poté zápěstí (wrist_roll) jako 5, až po ramenní kloub (shoulder_pan) jako 1. Proveďte to před montáží.

    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
    Zkalibrujte obě ramena

    Přesuňte každý kloub do středu jeho rozsahu, stiskněte Enter a poté každý kloub projděte celým jeho rozsahem. id se stane názvem souboru profilu.

    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
    Teleoperujte před nahráváním čehokoli

    Akceptační test pro vše výše uvedené. Pokud je teleoperace trhaná, zrcadlená nebo jeden kloub nesleduje, záznam to zachová v 50 epizodách.

    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
Kam se kalibrace ukládá a proč je ID důležité

Profily se ukládají do $HF_LEROBOT_CALIBRATION, výchozí je ~/.cache/huggingface/lerobot/calibration, a ID je vyhledávací klíč. Dejte lerobot-record kalibrované ID a nabídne Enter pro opětovné použití profilu nebo c pro jeho zopakování. Dejte mu neznámé ID a soubor neexistuje, takže se uprostřed relace přepne do kalibrace.

Kamery rozhodují, co vidí politika

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
Spouštějte toto každou relaci: dokumentace varuje, že tyto identifikátory se mohou po restartu nebo opětovném připojení změnit v závislosti na operačním systému.

Dva pohledy a jejich umístění je důležité: pevná scéna kamera pokrývající pracovní prostor a kamera na zápěstí blízko koncového efektoru ukazující, čeho se chapač chystá dotknout. Kontrolní seznam komunitních datových sad LeRobot požaduje přednostně dva pohledy v rozlišení 480x640 / 720p nebo lepším, statické pozadí, neutrální stabilní osvětlení a rameno vedoucího a lidské končetiny mimo záběr. Průvodce nahráváním dodává pravidlo: měli byste být schopni provést úkol sami, pouze se dívat na snímky z kamery.

Index kamery není stabilní identita

Indexy OpenCV pocházejí z pořadí výčtu, takže restart nebo opětovné připojení může způsobit, že si indexy 0 a 2 vymění místa a pohled ze zápěstí se dostane na první místo po celou relaci. lerobot to sám říká: jeho třída kamery přijímá cestu k zařízení i celé číslo a varuje, že indexy jsou nestabilní napříč restarty nebo změnami portů, zejména na Linuxu. Nasměrujte index_or_path na udev symlink pod /dev/v4l/by-id/, který sleduje zařízení spíše než pořadí výčtu. Toto je nejčastější způsob, jak se datová sada stane vnitřně nekonzistentní, a trénink to nemůže opravit. Kamera nebyla detekována.

Příkaz record a všechny příznaky

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
Slovník kamery je jeden řetězec v uvozovkách shellu; vnořené závorky nejsou syntaxí shellu.

Níže uvedené výchozí hodnoty pocházejí z src/lerobot/configs/dataset.py na větvi main, nikoli z tutoriálu. Některé nejsou takové, jaké lidé předpokládají.

PříznakVýchozíCo dělá
--dataset.repo_idprázdnénázev; časové razítko je ve výchozím nastavení připojeno
--dataset.single_taskprázdnéřetězec úkolu uložený s každou epizodou
--dataset.root$HF_LEROBOT_HOME/repo_idcesta pro zápis, výchozí ~/.cache/huggingface/lerobot/
--dataset.fps30rychlost řídicí smyčky a snímková frekvence datové sady
--dataset.episode_time_s60sekundy před automatickým posunem epizody
--dataset.reset_time_s60reset scény; rameno se pohybuje, nic se neukládá
--dataset.num_episodes50epizody zaznamenané v této relaci
--dataset.push_to_hubtruenahrát na konci relace; false zůstává lokálně
--dataset.streaming_encodingfalse v datové třídě, true v tabulce dokumentacekódovat během snímání; nastavit explicitně
--dataset.encoder_queue_maxsize30vyrovnávací snímky na kameru, ~1 s při 30 fps
--dataset.encoder_threadsnull (rozhoduje kodek)vlákna na kodér; snížit, pokud se snímání zadrhává
--dataset.no_stampfalseponechat repo_id přesně tak, jak je zadáno
--resumefalsepřipojit k existující datové sadě; vyžaduje --dataset.root
Dva přepínače, které vás překvapivě stojí hodinu času

Váš dataset se nejmenuje tak, jak jste zadali. lerobot připojuje časovou značku, takže so100_pick_cube se stane so100_pick_cube_20260823_141530. Použijte --dataset.no_stamp=true pro stabilní název. Pokračování počítá přírůstky, nikoli celkové součty. S --resume=true, --dataset.num_episodes počítá dodatečné epizody a --dataset.root se stává povinným. Požádejte o 50 u datasetu s 30 epizodami a dostanete 80.

Ovládání klávesnicí během relace

  • Pravá šipka nebo n: ukončí epizodu nebo předčasně resetuje fázi. Klíč, který používáte nejčastěji, protože čisté uchopení zřídka potřebuje 25 sekund.
  • Levá šipka nebo r: zahodí epizodu a zopakuje ji. Špatný záběr nestojí nic teď a hodně později.
  • Escape nebo q: zastaví relaci, dokončí kódování, nahraje.
  • Tyto fungují na X11, Wayland a bezhlavém SSH: bez globálního klíčového backendu čte lerobot-record stejné klávesy z řídicího terminálu. Písmena přežijí pomalé SSH odkazy, kde se sekvence šipek rozdělují.
  • Klávesnicová teleoperace je odlišná a vyžaduje globální backend: X11, Windows nebo macOS s funkcemi usnadnění.

Kolik epizod a jak vypadá dobrá

Průvodce nahráváním doporučuje alespoň 50 epizod pro první úkol, přibližně 10 na umístění objektu. stránky s politikami uvádějí minimum na model, pod kterým se spuštění nevyplatí z hlediska času GPU.

PolitikaMin. epizodyFormát datové sadyÚroveň GPUCena za spuštění
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

Lepší otázka zní, kolik čeho. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) shromáždili přes 40 000 demonstrací a provedli více než 15 000 reálných spuštění. Generalizace se řídila přibližně mocninným vztahem s počtem prostředí a objektů, a po překročení prahu na prostředí nebo objekt měly další demonstrace minimální účinek. Na jedné testovací lavici: přesuňte objekt, změňte osvětlení, vyměňte kostku, spíše než opakovat jeden záběr.

Teleoperace typu leader-follower jako zdroj dat
Výhody
  • Spojité trajektorie kloubů, které může servo reprodukovat, na rozdíl od klávesnice nebo gamepadu
  • Akce a stav sdílejí konvenci souřadnic, takže politika se učí cíl, který může přímo ovládat
  • Epizoda trvající 25 sekund plus 10 sekund resetu je zhruba 100 epizod za hodinu
  • Operátor cítí, že se follower zasekává nebo váže, takže chyby se objeví dříve, než jsou data uložena
Kompromisy
  • Druhé rameno zhruba zdvojnásobuje náklady na díly
  • Demonstrace přebírají návyky operátora; Mandlekar et al. zjistili, že kvalita politiky silně závisí na kvalitě demonstrací
  • Leader je vzorkován rychlostí smyčky, takže pauzy se stávají téměř identickými řádky, které učí politiku čekat
  • Nic nevynucuje konzistenci mezi relacemi: kamera posunutá o 5 cm je skrytý posun distribuce

Dobrá epizoda je nudná: opakovatelná výchozí pozice, jedna věc hotová, ukončená, jakmile je objekt v koši, řetězec úkolu v rozsahu 25 až 50 znaků, jak doporučuje kontrolní seznam. Zvedni červenou kostku a pusť ji do krabice je řetězec úkolu; task1 je anti-vzor, který kontrolní seznam výslovně uvádí. Neurčité anotace vedou seznam problémů a jsou nejdůležitější pro modely vize-jazyk-akce, kde je řetězec vstupem modelu, nikoli názvem souboru.

Vady, které tiše ničí datovou sadu

Žádná nevyvolá výjimku. Všechny přežijí do tréninku a projeví se jako křivka ztráty, která vypadá v pořádku, a robot, který nic nedělá. Zkontrolujte, dokud je scéna nastavena.

VadaJak vypadáOdkud pocházíJak ji odhalit
Prohozené pohledy kamerobraz zápěstí pod horním klíčempřesunutí indexu po opětovném zapojenílerobot-find-cameras každou relaci; cesty by-id
Zaseknuté snímkystejný obraz po desítky řádkůkamera přestane dodávat; smyčka opakuje poslední snímekprojděte to v lerobot-dataset-viz
Zahozené snímkypočet řádků pod fps krát sekundyfronta přeteče, zahazuje spíše než blokuje'Encoder queue full' v logu; řádky vs fps krát trvání
Kloub na svém limitujeden kloub naplocho na min nebo maxrozsah vedoucího přesahuje rozsah následovníka, nebo špatná střední pozicemin/max pro každý kloub v ds.meta.stats; lerobot-find-joint-limits předem
Obraz a akce mimo synchronizacipolitika předjímá nebo zaostávákamery s jiným fps než smyčkaudržujte každou kameru na --dataset.fps
Mrtvý časdlouhé série identických řádků akcíoperátor pozastavil s běžícím záznamníkempodíl po sobě jdoucích identických řádků akcí
Nepoužitelný řetězec úkolutask1, demo2, testrychlé psanímeta/tasks.parquet ve v3.0 (bylo to meta/tasks.jsonl ve v2.1); opravte pomocí lerobot-edit-dataset modify_tasks
Zahozené snímky se skrývají

Kodér udržuje omezenou frontu pro každou kameru, standardně 30 snímků. Pokud nestíhá, snímky jsou zahazovány namísto blokování: snímání pokračuje a nic nepadá. Zobrazí se Encoder queue full for {camera}, dropped N frame(s) a celkový počet za kameru na konci epizody. Prahová hodnota lerobot: přibližně 5 procent chybějících snímků znamená přetížený systém, 2 procenta jsou očekávané zatížení při spuštění. Opravy v pořadí: --display_data=false, snížení --dataset.encoder_threads, vcodec=h264, vypnutí streamování.

Jedna výhrada: tabulka průvodce streamovacím kódováním uvádí výchozí hodnotu jako True, zatímco datová třída na main větvi uvádí streaming_encoding: bool = False. Dokumentace a kód se neshodují, proto to nastavte explicitně; lerobot zaznamená nápovědu doporučující to vždy, když se spustí s vypnutým příznakem.

Zkontrolujte datovou sadu před pronájmem GPU

Akceptační test z dokumentace: porovnejte délku videa s délkou epizody nahlášenou CLI a ověřte, že počet řádků se rovná fps krát délka. Na epizodu, nikoli na celkový součet.

python
from lerobot.datasets import LeRobotDataset

ds = LeRobotDataset("your-user/so100_pick_cube_20260823_141530")
print("fps:", ds.fps, "frames:", ds.num_frames)

# In v3.0 the per-episode records live in meta/episodes/ as chunked parquet:
# lengths, tasks and offsets into the shared parquet and mp4 shards.
# They load through the datasets stack, so this is a datasets.Dataset --
# use .column_names and integer indexing, not pandas .columns / .head().
eps = ds.meta.episodes
print(eps.column_names)
print(eps[0])

# Global feature statistics, including per-joint min and max.
# A joint whose min equals its max never moved. A joint sitting at a
# hard limit for most of the run is the one that will stall the policy.
print(ds.meta.stats["observation.state"])
Epizoda, jejíž délka se výrazně liší od fps krát trvání, je kandidátem na smazání, nikoli na trénování.

Pak se na to podívejte. lerobot-dataset-viz přehrává epizodu snímek po snímku s trasami kloubů vedle pohledů kamery, v Rerun nebo Foxglove. Prohozené kamery a zamrzlé snímky se objeví během deseti sekund. Lidé tento krok přeskočí.

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 také provádí rozdělení, sloučení, odstranění_funkce, úpravu_úkolů a přepočet statistik. Mažte velkoryse: špatná epizoda stojí jednu epizodu; její ponechání stojí každý běh, který na ní byl trénován.
Adresář datových sad AY-Robots uvádějící veřejné datové sady LeRobot s počty epizod a formáty
Jak jsou srovnatelné datové sady dimenzovány a anotovány.

v2.1 nebo v3.0: rozhodněte se před nahráváním

v2.1 zapisoval jeden parquet a jeden MP4 na epizodu. v3.0 zřetězuje mnoho epizod do sdílených shardů a obnovuje hranice z metadat, takže info.json obsahuje šablony cest jako data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet namísto čísla epizody. Odůvodnění ze strany vývojářů je méně, ale větších souborů: rychlejší inicializace a menší tlak na souborový systém ve velkém měřítku.

LeRobot v2.1LeRobot v3.0
Rozloženíjeden parquet a jeden MP4 na epizodumnoho epizod na shard
Metadata epizodysoubory JSONLchunked parquet pod meta/episodes/, přes datový zásobník
Streamování z Hubuneano, přes StreamingLeRobotDataset
Zapsáno pomocí lerobot 0.6.1neano, to, co získáte dnes
Čteno pomocí GR00T N1.7 a N1.5anone, musí být převedeno na nižší verzi
Nahrávání dnes, trénování GR00T zítra

lerobot 0.6.1 zapisuje v3.0, ale GR00T N1.7 a N1.5 čtou v2.0 nebo v2.1 a havarují na něm. Všimněte si směru vývoje: src/lerobot/scripts/ obsahuje convert_dataset_v21_to_v30.py a nic, co by šlo opačným směrem. Vyřešte to před sezením. Fix: datová sada odmítnuta jako v3.

bash
# Upgrade an older v2.1 dataset to v3.0
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube

# By default it pushes the converted dataset back to the hub and tags it v3.0.
# To convert a local copy and keep it off the hub:
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube \
    --root=/path/to/dataset/directory \
    --push-to-hub=false
Rychlé pro 50 epizod. Měřítko je jiná práce: průvodce portováním lerobot pro surová data DROID do v3.0 počítá s 7+ dny lokálního zpracování a přibližně 400 GB.

Dvě cesty ke stejné datové sadě

Vše výše uvedené, na vašem vlastním stroji: vlastníte výčet USB, sestavení ffmpeg, ladění kodéru a kalibrační soubory. Správná cesta k pochopení pipeline, spuštění neobvyklé sestavy kamer nebo udržení dat lokálně.

Co tato cesta stojí

Čas: večer na rameno k sestavení, zdlouhavá první kalibrace a první sezení, které zahodíte, protože kamera byla ve špatném slotu.

Nahrávejte datové sady LeRobot bez vlastního zapojování pipeline

Desktopový klient AY-Robots zaznamenává epizody, streamy z kamer a stavy kloubů ve formátu LeRobot z teleoperačního sezení a poté předává datovou sadu tréninkovému modulu.

Získejte desktopového klienta

Od datové sady k politice

Padesát čistých epizod napájí každý běh zde. se trénuje od základu pouze na vašem úkolu, s přibližně 80 miliony parametrů při zhruba 20 ms na akční krok, jediný z pěti, který si poradí s rychlým pohybem. má přibližně 450 milionů parametrů na 24 GB kartě. je základní model s přibližně 3 miliardami parametrů, kde ovlivňuje přibližně 40 milionů parametrů, vyžaduje A100 nebo H100 a chce datovou sadu v2.1.

Dále průvodce pro vaši kombinaci: , nebo ; pro první spuštění je kratší. Když politika funguje na stole, ale zhroutí se v okamžiku, kdy pohnete stolem, je to problém s daty: a jdou hlouběji do rozmanitosti.

Kolik epizod skutečně potřebuji pro první funkční politiku?

Třicet pro SmolVLA, padesát pro ACT, Pi0.5, GR00T N1.5 a N1.7, což jsou minima vynucená trenéry AY-Robots. Průvodce LeRobot nezávisle doporučuje alespoň 50 pro první úkol, přibližně 10 na umístění objektu. Práce se škálováním dat zjistila, že generalizace se škáluje s prostředími a objekty spíše než s počtem demonstrací, takže sto záběrů jedné scény je horší než padesát napříč pěti umístěními.

Potřebuji vodicí rameno, nebo mohu teleoperovat pomocí klávesnice?

lerobot dodává klávesnicové a gamepadové teleoperátory, takže vodicí rameno není striktně vyžadováno, ale je silně preferováno: režim leader-follower poskytuje spojité trajektorie kloubů v souladu s konvencí zaznamenané akce, zatímco vstup z klávesnice produkuje krokový pohyb, který se politika učí jako trhavý. Klávesnicová teleoperace také vyžaduje globální klíčový backend, takže selhává na Waylandu a v bezhlavém režimu.

Mohu nahrávat na Raspberry Pi nebo malém mini PC?

Ano, s doladěním. Průvodce streamovacím kódováním má sekci pro nízké zdroje pokrývající moderní 4jádrové stroje a Raspberry Pi 5 a uvádí dvě kamery s rozlišením 640x480 a 30 fps ve sloupci 'vyžaduje určité doladění'. Jeho rada: zastavte konkurování kodéru se smyčkou snímání pomocí --dataset.rgb_encoder.vcodec=h264 a --dataset.streaming_encoding=false. Hodnotí dvě kamery s rozlišením 640x480 jako přibližně 55 milionů pixelů za sekundu a dvě s rozlišením 1920x1080 jako přibližně 373 milionů.

Jak poznám, že datová sada, kterou jsem právě nahrál, je skutečně v pořádku?

Tři jednoduché kontroly. Porovnejte délku videa každé epizody s délkou nahlášenou CLI a ověřte, že počet řádků se rovná fps krát tato délka, pro každou epizodu spíše než celkově; to je akceptační test, který uvádí průvodce kódováním lerobot. Přečtěte si ds.meta.stats, kde kloub, jehož min se rovná max, se nikdy nepohnul. Poté přehrajte dvě nebo tři epizody v lerobot-dataset-viz, což je jediný způsob, jak se projeví prohozené pohledy a zamrzlé snímky. U vypuštěných snímků průvodce stanovuje hranici na zhruba 5 procent chybějících; asi 2 procenta jsou normální přechodné zatížení, často jen při spuštění.

Moje tréninková úloha odmítla datovou sadu jako v3.0. Co teď?

GR00T N1.7 a N1.5 čtou LeRobot v2.0 nebo v2.1 a selhávají na v3.0, což je formát, který zaznamenává lerobot 0.6.1. Buď se dohodněte na formátu před tréninkem, nebo použijte politiku, která čte v3.0 nativně: Pi0.5, SmolVLA nebo ACT. lerobot dodává převodník z v2.1 na v3.0 a nic naopak.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started