
Optag et brugbart LeRobot-datasæt med en SO-100: kalibrering, leder-følger teleoperation, de rigtige lerobot-record-flags og standardindstillinger, kameraopsætning, antal episoder og de fejl, der ødelægger en kørsel.
En SO-100 følger, en lederarm af samme design og to USB-kameraer kan finjustere en politik på en eftermiddag. Den samme testbænk kan lige så nemt producere tres episoder, der ser sunde ud i en filbrowser og spilde en seks-timers GPU-kørsel. Forskellen er sjældent modellen; det er, hvad der skete mellem servoerne og parquet-filen.
Her er den manuelle rute, derefter den kortere. Hver kommando er fra lerobot 0.6.1, udgivet 3. august 2026 og aktuel på PyPI. Den flyttede til konsolindgangspunkter, så tutorials, der kører python lerobot/scripts/control_robot.py beskriver en fil, der ikke længere eksisterer.
Den korte version
- •lerobot 0.6.1 optager v3.0; GR00T N1.7 og N1.5 ønsker v2.1. Aftal formatet, før du trykker på optag.
- •Fire kommandoer: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Brug de samme --robot.id og --teleop.id fra kalibreringen i optagelsessessionen.
- •Standardindstillinger: 30 fps, 60 s pr. episode, 60 s nulstilling, 50 episoder, ca. 100 minutters reel tid.
- •Minimum episoder her: 30 for SmolVLA, 50 for resten.
- •Mangfoldighed slår volumen. Datasæt dør af fire ting: ombyttede kamera-indekser, tabte eller frosne billeder, et led parkeret ved sin grænse, en ulæselig opgavestreng.
Hvad en optagelsessession fanger
Et LeRobot datasæt er ikke en mappe med videoer, men en tidsindekseret tabel med vedhæftet video: hvert kontrolsløjfe-tick skriver én række, der indeholder den kommanderende handling, den tilstand, følgeren nåede, én ramme per kamera, et tidsstempel og indekser. Politikken ser kun disse kolonner. Skemaet for lerobot/svla_so100_pickplace, læst fra dens meta/info.json.
| Funktion | dtype | Form | Hvad det er |
|---|---|---|---|
| action | float32 | [6] | ledmål fra lederarmen |
| observation.state | float32 | [6] | ledpositioner følgeren nåede |
| observation.images.top | video | [480, 640, 3] | scene-kamera, MP4 (av1 her) |
| observation.images.wrist | video | [480, 640, 3] | håndledskamera, samme hastighed |
| timestamp | float32 | [1] | sekunder siden episode start |
| frame_index, episode_index, index, task_index | int64 | [1] | automatisk udfyldt bogføring |
Leddene er main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll og main_gripper: SO-100's seks frihedsgrader. Handling og tilstand deler en form, fordi leder-følger teleoperation registrerer et mål og den position, der blev nået et skridt senere. Dette mellemrum er information: hvor armen kæmpede mod tyngdekraften eller et fastsiddende objekt. Disse strenge er datasættets. En session optaget med 0.6.1 i dag skriver shoulder_pan.pos til gripper.pos, ID'er 1 til 6 på bussen: samme seks led, forskellige nøgler, hvilket er vigtigt i det øjeblik en konfiguration adresserer en funktion ved navn.
Dette datasæt indeholder 50 episoder og 19.631 frames ved 30 fps: omkring 393 frames, eller 13 sekunder, per episode. Hvis dine i gennemsnit er et minut, laver du noget sværere eller optager dødtid i begge ender.

Hvad du skal bruge på arbejdsbordet
| Emne | Detalje | Bemærk |
|---|---|---|
| Følgerarm | SO-100, seks Feetech STS3215 servoer | ca. 110 til 150 EUR i dele |
| Lederarm | en anden SO-100, gear fjernet | gear fjernet fra alle seks ledermotorer: kun encoder, mindre friktion |
| Strøm | tilpasset 7.4 V STS3215 varianten i styklisten | se advarslen nedenfor |
| Kameraer | to USB-kameraer, 640x480 ved 30 fps | én scenevisning, én på håndleddet |
| Vært | Python 3.12 eller nyere, ffmpeg | requires-python >= 3.12 |
| Hub-konto | Hugging Face write token | valgfrit med --dataset.push_to_hub=false |
STS3215 findes i to versioner: SO-ARM100 README angiver 7.4 V versionen til 16.5 kg.cm stallmoment målt ved 6 V og 12 V versionen til 30 kg.cm, og bemærker, at valg af 12 V motorer også betyder, at man skal købe en 12 V 5 A+ strømforsyning i stedet for en 5 V. Styklisten angiver 7.4 V servoer. Tilførsel af 12 V til servoer, der er klassificeret til 7.4 V, ødelægger dem, så læs motorlabelen, før du tilslutter noget. Servo reagerer ikke.
Hvis armen ikke er bygget endnu, er det en separat aften: start med SO-100 introduktion og den komplette SO-100 opsætningsguide. Hvis du ikke har købt noget, læs SO-100 mod SO-101 sammenligning først: SO-101 er den nyere revision med forbedret ledningsføring og intet trin med fjernelse af gear, og optagelsesworkflowet er identisk.
Installer lerobot 0.6.1
conda create -y -n lerobot python=3.12
conda activate lerobot
# TorchCodec is the default video decoder and needs ffmpeg
conda install ffmpeg -c conda-forge
# core_scripts = dataset + hardware + viz extras (record, replay, calibrate)
# feetech = SDK for the STS3215 bus servos in the SO-100
pip install 'lerobot[core_scripts,feetech]'
lerobot-infoEkstraudstyr forvirrer de fleste. pip install lerobot installerer kun kerne ML-afhængigheder, intet der taler med en robot. Koch-arme kræver dynamixel i stedet for feetech. Hvis din shell aldrig har hørt om lerobot-record, er det derfor.
Porte, motor-ID'er og kalibrering
Tre engangstrin står mellem dele og en fungerende teleop-loop. får en politik trænet på din arm til at køre på en andens, idet rå encoder-tællinger mappes til en fælles ledkonvention.
- 1Find USB-porten for hver arm
Kør den med begge arme tilsluttet, træk stikket ud af den, du identificerer, når du bliver bedt om det, og bemærk hvilken port der forsvinder. På Linux skal du muligvis bruge
sudo chmod 666 /dev/ttyACM0.bashlerobot-find-port # Finding all available ports for the MotorsBus. # Ports before disconnecting: ['/dev/ttyACM0', '/dev/ttyACM1'] # Remove the USB cable from your MotorsBus and press Enter when done. # The port of this MotorsBus is '/dev/ttyACM1' # Reconnect the USB cable. - 2Skriv motor-ID'er og baudrater
ID'er skrives én motor ad gangen, og dokumentationen er streng med hensyn til hvordan: tilslut præcis én motor til controllerkortet, endnu ikke seriekoblet til nogen anden. Scriptet gennemgår kæden baglæns, beder først om griberen og giver den id 6, derefter wrist_roll som 5, ned til shoulder_pan som 1. Gør det før samling.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Kalibrer begge arme
Flyt hvert led til midten af dets bevægelsesområde, tryk Enter, og før derefter hvert led gennem dets fulde bevægelsesområde.
idbliver profilfilnavnet.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 - 4Teleoperer før du optager noget
Acceptancetesten for alt ovenstående. Hvis teleoperationen er hakkende, spejlvendt, eller et led ikke følger med, bevares dette i 50 episoder ved optagelse.
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
Profiler gemmes i $HF_LEROBOT_CALIBRATION, standard ~/.cache/huggingface/lerobot/calibration, og ID'et er opslagsnøglen. Giv lerobot-record et kalibreret ID, og den tilbyder Enter for at genbruge profilen eller c for at gentage den. Giv den et ukendt ID, og der er ingen fil, så den falder ind i kalibrering midt i sessionen.
Kameraer bestemmer, hvad politikken ser
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.0To visninger, og hvor de er placeret, er vigtigt: et fast scenekamera, der dækker arbejdsområdet, og et håndledskamera nær end-effektor der viser, hvad griberen er ved at røre. LeRobot-fællesskabsdatasæt-tjeklisten beder om helst to visninger ved 480x640 / 720p eller bedre, en statisk baggrund, neutral stabil belysning og lederarmen og menneskelige lemmer uden for billedet. Optageguiden tilføjer tommelfingerreglen: du skal selv kunne udføre opgaven ved kun at se på kamerabillederne.
OpenCV-indekser kommer fra opregningsrækkefølgen, så en genstart eller et genindstik kan få indeks 0 og 2 til at bytte plads og placere håndledsvisningen i den øverste plads for en hel session. lerobot siger det selv: dens kameraklasse tager en enhedssti såvel som et heltal og advarer om, at indekser er ustabile på tværs af genstarter eller portændringer, især på Linux. Peg index_or_path mod udev-symlinket under /dev/v4l/by-id/, som følger enheden snarere end opregningsrækkefølgen. Dette er den mest almindelige måde, et datasæt ender internt inkonsistent på, og træning kan ikke reparere det. Kamera ikke fundet.
Kommandoen `record` og alle 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=2Standardværdierne nedenfor kommer fra src/lerobot/configs/dataset.py på main, ikke en tutorial. Flere er ikke, hvad folk antager.
| Flag | Standard | Hvad det gør |
|---|---|---|
| --dataset.repo_id | empty | navn; tidsstempel tilføjes som standard |
| --dataset.single_task | empty | opgavestreng gemt med hver episode |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | skrivesti, standard ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | kontrolsløjfehastighed og datasæt-billedhastighed |
| --dataset.episode_time_s | 60 | sekunder før en episode automatisk går videre |
| --dataset.reset_time_s | 60 | nulstilling af scene; armen bevæger sig, intet gemmes |
| --dataset.num_episodes | 50 | episoder optaget i denne session |
| --dataset.push_to_hub | true | upload ved sessionsafslutning; false forbliver lokalt |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | kod under optagelse; indstil det eksplicit |
| --dataset.encoder_queue_maxsize | 30 | bufferede billeder pr. kamera, ~1 s ved 30 fps |
| --dataset.encoder_threads | null (codec decides) | tråde pr. encoder; sænk hvis optagelsen hakker |
| --dataset.no_stamp | false | behold repo_id præcis som indtastet |
| --resume | false | tilføj til et eksisterende datasæt; kræver --dataset.root |
Dit datasæt hedder ikke det, du indtastede. lerobot tilføjer et dato-tidsstempel, så so100_pick_cube bliver til so100_pick_cube_20260823_141530. Brug --dataset.no_stamp=true for et stabilt navn. Resume tæller tilføjelser, ikke totaler. Med --resume=true tæller --dataset.num_episodes yderligere episoder, og --dataset.root bliver obligatorisk. Bed om 50 på et datasæt med 30 episoder, og du får 80.
Tastaturkontrol under en session
- Højre pil eller
n: afslut episoden eller nulstil fasen tidligt. Den tast du bruger mest, da et rent greb sjældent kræver 25 sekunder. - Venstre pil eller
r: forkast episoden og gentag den. En dårlig optagelse koster intet nu og meget senere. - Escape eller
q: stop sessionen, afslut kodning, upload. - Disse virker på X11, Wayland og headless SSH: uden en global tastatur-backend læser lerobot-record de samme taster fra den kontrollerende terminal. Bogstaverne overlever langsomme SSH-forbindelser, hvor piletastsekvenser splittes.
- Tastatur-teleoperation er anderledes og kræver en global backend: X11, Windows eller macOS med Tilgængelighed.
Hvor mange episoder, og hvordan en god en ser ud
Optageguiden foreslår mindst 50 episoder til en første opgave, cirka 10 per objektplacering. De politik-siderne lister et minimum per model, under hvilket en kørsel ikke er GPU-tiden værd.
| Politik | Min. episoder | Datasætformat | GPU-niveau | Omkostning per kørsel |
|---|---|---|---|---|
| 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 |
Det bedre spørgsmål er, hvor mange af hvad. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) indsamlede over 40.000 demonstrationer og udførte mere end 15.000 real-world rollouts. Generalisering fulgte en omtrentlig potenslovsrelation med antallet af miljøer og objekter, og efter en tærskel per miljø eller objekt havde yderligere demonstrationer minimal effekt. På én testbænk: flyt objektet, skift belysningen, byt terningen, snarere end at gentage én optagelse.
- Kontinuerlige led-trajektorier, som en servo kan reproducere, i modsætning til tastatur eller gamepad
- Handling og tilstand deler en koordinatkonvention, så politikken lærer et mål, den kan styre direkte
- En 25 sekunders episode plus en 10 sekunders nulstilling er cirka 100 episoder i timen
- Operatøren mærker, at følgeren går i stå eller binder, så fejl opdages, før data er gemt
- En anden arm fordobler omtrentligt omkostningerne til dele
- Demonstrationer arver operatørvaner; Mandlekar et al. fandt, at politikvaliteten afhænger stærkt af demonstrationskvaliteten
- Lederen samples med loop-hastighed, så pauser bliver næsten identiske rækker, der lærer politikken at vente
- Intet håndhæver konsistens mellem sessioner: et kamera, der er skubbet 5 cm, er et skjult distributionsskift
En god episode er kedelig: gentagelig hjemmeposition, én ting udført, afsluttet når objektet er i beholderen, opgavestreng på 25 til 50 tegn som tjeklisten anbefaler. Pick the red cube and drop it in the box er en opgavestreng; task1 er anti-mønsteret, som tjeklisten eksplicit nævner. Vage annotationer topper listen over problemer, og de er vigtigst for , hvor strengen er en modelinput, ikke et filnavn.
Fejl der stille og roligt ødelægger et datasæt
Ingen kaster en undtagelse. Alle overlever til træning og viser sig som en tabskurve, der ser fin ud, og en robot, der intet gør. Tjek mens scenen er sat op.
| Fejl | Hvordan det ser ud | Hvor det kommer fra | Hvordan man fanger det |
|---|---|---|---|
| Byttede kameravisninger | håndledsbillede under den øverste nøgle | indeksomfordeling efter genindsættelse | lerobot-find-cameras each session; by-id paths |
| Frosne billeder | det samme billede i snesevis af rækker | kamera stopper med at levere; loop gentager det sidste billede | scrub it in lerobot-dataset-viz |
| Tabte billeder | antal rækker under fps gange sekunder | køen løber over, dropper i stedet for at blokere | 'Encoder queue full' in the log; rows vs fps times duration |
| Led ved sin grænse | et led fladt ved min eller max | lederens rækkevidde overstiger følgerens, eller en dårlig midterposition | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Billede og handling ude af trit | politikken foregriber eller halter | kameraer med en anden fps end loopet | keep every camera at --dataset.fps |
| Dødtid | lange serier af identiske handlingsrækker | operatør pausede med optageren kørende | share of consecutive identical action rows |
| Uanvendelig opgavestreng | task1, demo2, test | hurtig indtastning | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Encoderen holder en begrænset kø per kamera, 30 billeder som standard. Når den ikke kan følge med, bliver billeder droppet i stedet for blokeret: optagelsen fortsætter, og intet går ned. Du får Encoder queue full for {camera}, dropped N frame(s) og et total per kamera ved episodens afslutning. Lerobot-grænsen: omkring 5 procent manglende betyder et overbelastet system, 2 procent er forventet opstartsbelastning. Løsninger i rækkefølge: --display_data=false, sænk --dataset.encoder_threads, vcodec=h264, streaming slået fra.
En advarsel: streaming-encoding-guidens tabel angiver standardværdien som True, mens dataclassen på main læser streaming_encoding: bool = False. Dokumentation og kode er uenige, så sæt den eksplicit; lerobot logger et tip, der anbefaler det, hver gang den starter med flaget slået fra.
Tjek datasættet, før du lejer en GPU
Acceptancetesten fra dokumentationen: sammenlign videoens varighed med den episodevarighed, CLI'en rapporterede, og bekræft, at rækkeantallet svarer til fps gange varighed. Per episode, ikke på totalen.
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"])Se derefter på det. lerobot-dataset-viz afspiller en episode frame for frame med ledspor ved siden af kameravisningerne, i Rerun eller Foxglove. Ombyttede kameraer og frosne billeder dukker op på ti sekunder. Folk springer dette trin over.
# 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 eller v3.0: beslut før du optager
v2.1 skrev én parquet og én MP4 per episode. v3.0 samler mange episoder i delte shards og genopbygger grænser fra metadata, så info.json indeholder stiskabeloner som data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet i stedet for et episodenummer. Den bagvedliggende begrundelse er færre, større filer: hurtigere initialisering og mindre filsystemtryk i stor skala.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Layout | én parquet og én MP4 per episode | mange episoder per shard |
| Episode metadata | JSONL-filer | chunked parquet under meta/episodes/, via datasets-stakken |
| Streaming fra Hub'en | nej | ja, via StreamingLeRobotDataset |
| Skrevet af lerobot 0.6.1 | nej | ja, hvad du får i dag |
| Læst af GR00T N1.7 og N1.5 | ja | nej, skal konverteres ned |
lerobot 0.6.1 skriver v3.0, men GR00T N1.7 og N1.5 læser v2.0 eller v2.1 og crasher på det. Bemærk retningen: src/lerobot/scripts/ indeholder convert_dataset_v21_to_v30.py og intet, der går den anden vej. Afgør dette før sessionen. Løsning: datasæt afvist som v3.
# 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=falseTo veje til det samme datasæt
Alt ovenfor, på din egen maskine: du ejer USB-enumereringen, ffmpeg-buildet, encoder-justeringen og kalibreringsfilerne. Den rette vej til at forstå pipelinen, køre et usædvanligt kamera-setup eller holde data lokalt.
Tid: en aften per arm til at samle, en besværlig første kalibrering og en første session, du smider væk, fordi et kamera sad i den forkerte port.
Desktopklienten optager LeRobot-format datasæt, episoder, kamerastrømme og ledtilstande, direkte fra en fjernstyring session. Dette datasæt føder træningsformularen: vælg model, datasæt og hyperparametre, og backend lejer en GPU dimensioneret efter modellens VRAM, kører træneren og skriver kontrolpunkter til objektlager.
- 1Installer klienten
På downloadsiden; opsætning i klientdokumentationen.
- 2Optag fra en fjernstyringssession
Styr armen; klienten skriver episoder i LeRobot-format. Gennemgang: optag dit første datasæt.
- 3Eller medbring dine egne data
Et datasæt kan også komme fra et Hugging Face repo-id eller din egen maskine: datasætdokumentation, offentligt bibliotek.
- 4Træn og kør det tilbage
Vælg kombinationen på træningsmatricen, og kør derefter politikken tilbage på armen. Cirka 1 til 3 USD på 24 GB-niveauet, 4 til 12 på A100- eller H100-niveauet.
Den samler eller kalibrerer ikke din arm, og den reparerer ikke en defekt episode, så inspektionstrinnet gælder stadig. Der er også en hård grænse i den anden ende: for hurtige opgaver skal inferens sidde ved siden af servoerne. Kontrolsløjfen kører 20 til 485 ms per handlingstrin, og offentlige internet-round trips oveni forvandler en fungerende politik til en tøvende.
Optag LeRobot-datasæt uden selv at kable pipelinen
AY-Robots desktopklienten optager episoder, kamerastrømme og ledtilstande i LeRobot-format fra en fjernstyringssession og overfører derefter datasættet til træneren.
Hent desktopklientenFra datasæt til politik
Halvtreds rene episoder føder hver imitationslæring kørsel her. ACT træner fra bunden på din opgave alene, omkring 80 M parametre ved cirka 20 ms pr. handlingstrin, den eneste af de fem, der er komfortabel med hurtig bevægelse. SmolVLA er omkring 450 M parametre på et 24 GB kort. GR00T N1.7 er en grundmodel med cirka 3 B parametre, hvor finjustering berører omkring 40 M parametre, kræver en A100 eller H100 og ønsker det v2.1 datasæt.
Dernæst, guiden til din kombination: ACT på SO-100, SmolVLA på SO-100 eller GR00T N1.7 på SO-100; for en første kørsel, træn din første politik er kortere. Når politikken virker på testbænken, men kollapser i det øjeblik du flytter bordet, er det et dataproblem: politik virker kun i én opsætning og indsamling af VLA-træningsdata af høj kvalitet går dybere ind i diversitet.
Hvor mange episoder har jeg virkelig brug for til en første fungerende politik?▾
Tredive for SmolVLA, halvtreds for ACT, Pi0.5, GR00T N1.5 og N1.7, de minimumskrav som AY-Robots trænere håndhæver. LeRobot-guiden anbefaler uafhængigt mindst 50 til en første opgave, omkring 10 pr. objektplacering. Arbejde med datascalering viste, at generalisering skalerer med miljøer og objekter snarere end antal demonstrationer, så hundrede optagelser af én scene er værre end halvtreds fordelt på fem placeringer.
Har jeg brug for en lederarm, eller kan jeg teleoperere med et tastatur?▾
lerobot leverer tastatur- og gamepad-teleoperatorer, så en lederarm er ikke strengt nødvendig, men den er stærkt at foretrække: leder-følger giver kontinuerlige ledbaner i den koordinatkonvention, der er brugt i den optagede handling, mens tastaturinput producerer trinvis bevægelse, som en politik lærer som ryk. Tastaturteleoperation kræver også en global nøgle-backend, så den fejler på Wayland og headless systemer.
Kan jeg optage på en Raspberry Pi eller en lille mini-pc?▾
Ja, med justering. Streaming-encoding-guiden har en lavressourcekategori, der dækker moderne 4-kernede maskiner og Raspberry Pi 5, og placerer to kameraer ved 640x480 og 30 fps i sin 'kræver-noget-justering'-kolonne. Dets råd: stop encoderen fra at konkurrere med optagelsesløkken via --dataset.rgb_encoder.vcodec=h264 og --dataset.streaming_encoding=false. Den vurderer to kameraer ved 640x480 til omkring 55 millioner pixels pr. sekund og to ved 1920x1080 til omkring 373 millioner.
Hvordan ved jeg, om det datasæt, jeg lige har optaget, faktisk er sundt?▾
Tre billige tjek. Sammenlign hver episodes videovarighed med den varighed, CLI'en rapporterede, og bekræft, at rækkeantallet er lig med fps gange den varighed, pr. episode snarere end totalt; det er den accepttest, lerobots encoding-guide giver. Læs ds.meta.stats, hvor et led, hvis min er lig med dets max, aldrig bevægede sig. Afspil derefter to eller tre episoder i lerobot-dataset-viz, den eneste måde, hvorpå byttede visninger og frosne billeder viser sig. Ved tabte billeder trækker guiden grænsen ved cirka 5 procent manglende; omkring 2 procent er normal forbigående belastning, ofte kun ved opstart.
Mit træningsjob afviste datasættet som v3.0. Hvad nu?▾
GR00T N1.7 og N1.5 læser LeRobot v2.0 eller v2.1 og crasher på v3.0, hvilket er hvad lerobot 0.6.1 optager. Enten afklar formatet før træning, eller brug en politik, der læser v3.0 nativt: Pi0.5, SmolVLA eller ACT. lerobot leverer en v2.1 til v3.0 konverter og intet i den modsatte retning.
Sources
- LeRobot: Imitationslæring på virkelige robotter
- LeRobot: SO-100 samling, motoropsætning og kalibrering
- LeRobot: Kameraer og lerobot-find-cameras
- LeRobot: Installation og ekstramatricen
- LeRobotDataset v3.0: layout og v2.1 migrering
- LeRobot: Streaming video-kodning og tabte billeder
- LeRobot: Porting af store datasæt til v3.0 (DROID)
- lerobot v0.6.1 udgivelse, 3. august 2026
- DatasetRecordConfig: de faktiske optage-standardindstillinger
- lerobot_record.py: optagelsesloop og genoptagelseshåndtering
- TheRobotStudio/SO-ARM100: build repo og stykliste
- Hugging Face: LeRobot Fællesskabsdatasæt tjekliste
- lerobot/svla_so100_pickplace: 50 episoder, 19.631 billeder
- Lin et al. (2024), Data Skaleringslove i Imitationslæring
- Mandlekar et al. (2021), Hvad der betyder noget i læring fra offline menneskelige demonstrationer
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