Die AY-Robots tutoriaalbladsy vir die opname van jou eerste LeRobot datastel met 'n SO-100 arm
LeRobotSO-100Datastel OpnameTeleoperasieNabootsingsleer

Neem Jou Eerste LeRobot Datastel Op Met 'n SO-100

AY-Robots ResearchAugust 23, 202616 min lees

Neem 'n bruikbare LeRobot datastel op met 'n SO-100: kalibrasie, leier-volger teleoperasie, die werklike lerobot-record vlae en verstekwaardes, kamera-opstelling, episode-tellings, en die defekte wat 'n lopie bederf.

'n SO-100 volger, 'n leierarm van dieselfde ontwerp en twee USB-kameras kan 'n beleid in 'n middag fyninstel. Dieselfde bank kan net so maklik sestig episodes produseer wat gesond lyk in 'n lêerblaaier en 'n ses-uur GPU-lopie vermors. Die verskil is selde die model; dit is wat tussen die servos en die parquet-lêer gebeur het.

Hier is die handmatige roete, dan die korter een. Elke opdrag is van lerobot 0.6.1, vrygestel op 3 Augustus 2026 en tans op PyPI. Dit het na konsole-toegangspunte verskuif, so tutoriale wat loop python lerobot/scripts/control_robot.py beskryf 'n lêer wat nie meer bestaan nie.

Die kort weergawe

  • lerobot 0.6.1 neem v3.0 op; GR00T N1.7 en N1.5 benodig v2.1. Besluit op die formaat voordat jy opneem.
  • Vier opdragte: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Dra dieselfde --robot.id en --teleop.id van kalibrasie oor na die opnamesessie.
  • Werklike verstekwaardes: 30 fps, 60 s per episode, 60 s herstel, 50 episodes, ongeveer 100 minute werklike tyd.
  • Minimum episodes hier: 30 vir SmolVLA, 50 vir die res.
  • Diversiteit oortref volume. Datastelle sterf aan vier dinge: omgeruilde kamera-indekse, gevalle of bevrore rame, 'n gewrig wat by sy limiet geparkeer is, 'n onleesbare taakstring.

Wat 'n opnamesessie vasvang

'n LeRobot-datastel is nie 'n vouer van video's nie, maar 'n tyd-geïndekseerde tabel met video aangeheg: elke beheerlus-tik skryf een ry wat die bevalde aksie, die toestand wat die volger bereik het, een raam per kamera, 'n tydstempel en indekse bevat. Die beleid sien slegs daardie kolomme. Die skema van lerobot/svla_so100_pickplace, gelees uit sy meta/info.json.

FeaturedtypeShapeWhat it is
actionfloat32[6]gewrigteikens van die leierarm
observation.statefloat32[6]gewrigposisies wat die volger bereik het
observation.images.topvideo[480, 640, 3]toneelkamera, MP4 (av1 hier)
observation.images.wristvideo[480, 640, 3]pols-kamera, dieselfde tempo
timestampfloat32[1]sekondes sedert episode begin
frame_index, episode_index, index, task_indexint64[1]outomaties-ingevulde boekhouding

Die gewrigte is main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll en main_gripper: die SO-100 se ses vryheidsgrade. Aksie en toestand deel 'n vorm omdat leier-volger teleoperasie 'n teiken en die posisie wat een stap later bereik is, opneem. Daardie gaping is inligting: waar die arm teen swaartekrag of 'n vasgesteekte voorwerp geveg het. Daardie stringe is dié van daardie datastel. 'n Sessie wat vandag met 0.6.1 opgeneem is, skryf shoulder_pan.pos tot gripper.pos, ID's 1 tot 6 op die bus: dieselfde ses gewrigte, verskillende sleutels, wat saak maak sodra 'n konfigurasie 'n kenmerk by naam aanspreek.

'n Maatstaf van 'n Regte Datastel

Daardie datastel bevat 50 episodes en 19,631 rame teen 30 fps: ongeveer 393 rame, of 13 sekondes, per episode. As joune gemiddeld 'n minuut is, doen jy iets moeiliker of neem jy dooie tyd aan beide kante op.

Die AY-Robots-woordelysinskrywing vir die LeRobot-datastelformaat, wat die gidsuitleg en metadata-lêers toon
Wat in data/, videos/ en meta/ woon, en watter beleide watter weergawe lees.

Wat jy op die bank benodig

ItemDetailNota
VolgerarmSO-100, ses Feetech STS3215 servo'songeveer 110 tot 150 EUR aan onderdele
Leierarm’n tweede SO-100, ratte verwyderratte van al ses leier-motors gestroop: slegs enkodeerder, minder wrywing
Kragpas by die 7.4 V STS3215-variant in die onderdelelyssien die waarskuwing hieronder
Kamerastwee USB-kameras, 640x480 teen 30 fpseen toneelbeeld, een op die pols
GasheerPython 3.12 of nuwer, ffmpegrequires-python >= 3.12
Hub-rekeningHugging Face skryftekenopsioneel met --dataset.push_to_hub=false
7.4 V, nie 12 V nie

Die STS3215 kom in twee weergawes: die SO-ARM100 README gradeer die 7.4 V-weergawe op 16.5 kg.cm stilstandwringkrag gemeet teen 6 V en die 12 V-weergawe op 30 kg.cm, en merk op dat die keuse van die 12 V-motors ook beteken om 'n 12 V 5 A+-toevoer te koop in plaas van die 5 V-een. Die onderdelelys lys 7.4 V servo's. Om 12 V aan servo's wat vir 7.4 V gegradeer is te voer, vernietig hulle, so lees die motor-etiket voordat jy enigiets bedraad. Servo reageer nie.

As die arm nog nie gebou is nie, is dit 'n aparte aand: begin by SO-100 begin en die volledige SO-100 opstelgids. As jy nog niks gekoop het nie, lees eers die SO-100 teen SO-101 vergelyking eerste: die SO-101 is die nuwer hersiening met verbeterde bedrading en geen ratverwyderingstap nie, en die opname-werkvloei is identies.

Installeer 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 druk 'n stelselopsomming, insluitend die ffmpeg-weergawe wat dit op PATH kan vind.

Ekstras veroorsaak die meeste probleme. pip install lerobot installeer slegs kern ML-afhanklikhede, niks wat met 'n robot praat nie. Koch-arms benodig dynamixel in plaas van feetech. As jou dop nog nooit van lerobot-record gehoor het nie, is dit hoekom.

Poorte, motor-ID's en kalibrasie

Drie eenmalige stappe staan tussen onderdele en 'n werkende teleop-lus. laat 'n beleid wat op jou arm opgelei is, op iemand anders s'n loop, deur rou enkodeerderwaardes na 'n gedeelde gewrigskonvensie te karteer.

  1. 1
    Vind die USB-poort van elke arm

    Loop dit met albei arms ingeprop, ontkoppel die een wat jy identifiseer wanneer gevra word, en let op watter poort verdwyn. Op Linux mag jy sudo chmod 666 /dev/ttyACM0 benodig.

    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
    Skryf motor-ID's en baudrates

    ID's word een motor op 'n slag geskryf, en die dokumentasie is streng oor hoe: koppel presies een motor aan die beheerderbord, nog nie aan enige ander gekoppel nie. Die skrip loop die ketting agteruit, vra eers vir die gryper en gee dit ID 6, dan wrist_roll as 5, af na shoulder_pan as 1. Doen dit voor montering.

    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
    Kalibreer albei arms

    Beweeg elke gewrig na die middel van sy omvang, druk Enter, en beweeg dan elkeen deur sy volle omvang. Die id word die profiellêernaam.

    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
    Teleopereer voor enige opname

    Die aanvaardingstoets vir alles hierbo. As teleoperasie rukkerig, gespieël is, of een gewrig nie sal volg nie, bewaar opname dit in 50 episodes.

    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
Waar kalibrasie beland, en waarom die ID saak maak

Profiele gaan na $HF_LEROBOT_CALIBRATION, verstek ~/.cache/huggingface/lerobot/calibration, en die ID is die opsoeksleutel. Gee lerobot-record 'n gekalibreerde ID en dit bied Enter om die profiel te hergebruik of c om dit te herhaal. Gee dit 'n onbekende ID en daar is geen lêer nie, so dit val in kalibrasie in die middel van die sessie.

Kameras besluit wat die beleid sien

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
Loop dit elke sessie: die dokumentasie waarsku dat hierdie identifiseerders kan verander na 'n herlaai of 'n heraansluiting, afhangende van die bedryfstelsel.

Twee aansigte, en waar hulle sit maak saak: 'n vaste toneelkamera wat die werkspasie dek, en 'n polskamera naby die eindeffektor wat wys wat die gryper gaan aanraak. Die LeRobot gemeenskapsdataskema-kontrolelys vra vir verkieslik twee aansigte teen 480x640 / 720p of beter, 'n statiese agtergrond, neutrale stabiele beligting, en die leierarm en menslike ledemate buite die raam. Die opnamegids voeg die duimreël by: jy moet die taak self kan doen deur slegs na die kamerabeelde te kyk.

Die kamera-indeks is nie 'n stabiele identiteit nie

OpenCV-indekse kom van die enumerasievolgorde, so 'n herlaai of heraansluiting kan indeks 0 en 2 plekke laat ruil en die polsaansig vir 'n hele sessie in die boonste gleuf plaas. lerobot sê dit self: sy kameraklas neem 'n toestelpad sowel as 'n heelgetal, en waarsku dat indekse onstabiel is oor herlaaie of poortveranderings, veral op Linux. Wys index_or_path na die udev-simskakel onder /dev/v4l/by-id/, wat die toestel eerder as die enumerasievolgorde volg. Dit is die mees algemene manier waarop 'n datastel intern inkonsekwent raak, en opleiding kan dit nie herstel nie. Kamera nie bespeur nie.

Die opneem-opdrag en elke vlag

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
Die kamera-woordeboek is een dop-aangehaalde string; die geneste hakies is nie dop-sintaksis nie.

Die verstekwaardes hieronder kom van src/lerobot/configs/dataset.py op hoof, nie 'n tutoriaal nie. Verskeie is nie wat mense aanneem nie.

VlagVerstekWat dit doen
--dataset.repo_idemptynaam; tydstempel word by verstek aangeheg
--dataset.single_taskemptytaakstring gestoor met elke episode
--dataset.root$HF_LEROBOT_HOME/repo_idskryfpad, verstek ~/.cache/huggingface/lerobot/
--dataset.fps30beheerlusspoed en datastel-raamtempo
--dataset.episode_time_s60sekondes voordat 'n episode outomaties vorder
--dataset.reset_time_s60toneelterugstelling; arm beweeg, niks gestoor nie
--dataset.num_episodes50episodes opgeneem hierdie sessie
--dataset.push_to_hubtruelaai op aan einde van sessie; false bly lokaal
--dataset.streaming_encodingfalse in the dataclass, true in the docs tableenkodeer tydens opname; stel dit eksplisiet
--dataset.encoder_queue_maxsize30gebufferde rame per kamera, ~1 s teen 30 fps
--dataset.encoder_threadsnull (codec decides)drade per enkodeerder; verlaag as opname hakkel
--dataset.no_stampfalsehou repo_id presies soos getik
--resumefalsevoeg by 'n bestaande datastel; benodig --dataset.root
Twee vlae wat 'n uur onverwags kos

Jou datastel word nie genoem wat jy getik het nie. lerobot voeg 'n datum-tyd-etiket by, so so100_pick_cube word so100_pick_cube_20260823_141530. Gebruik --dataset.no_stamp=true vir 'n stabiele naam. Hervat tel byvoegings, nie totale nie. Met --resume=true tel --dataset.num_episodes bykomende episodes en --dataset.root word verpligtend. Vra vir 50 op 'n 30-episode datastel en jy kry 80.

Sleutelbordbeheer tydens 'n sessie

  • Regspyltjie of n: beëindig die episode of herstel fase vroeg. Die sleutel wat jy die meeste gebruik, want 'n skoon greep benodig selde 25 sekondes.
  • Linkspyltjie of r: verwerp die episode en doen dit oor. 'n Slegte opname kos nou niks en later baie.
  • Escape of q: stop die sessie, voltooi kodering, laai op.
  • Hierdie werk op X11, Wayland en koplose SSH: sonder 'n globale sleutel-backend, lees lerobot-record dieselfde sleutels vanaf die beheerterminal. Die letters oorleef trae SSH-skakels, waar pyltjie-reekse verdeel.
  • Sleutelbord-teleoperasie is anders en benodig wel 'n globale backend: X11, Windows, of macOS met Toeganklikheid.

Hoeveel episodes, en hoe 'n goeie een lyk

Die opnamegids stel ten minste 50 episodes voor vir 'n eerste taak, ongeveer 10 per objekligging. Die beleidsbladsye lys 'n minimum per model, waaronder 'n uitvoering nie die GPU-tyd werd is nie.

BeleidMin episodesDatastelformaatGPU-vlakKoste per uitvoering
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

Die beter vraag is hoeveel van wat. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) het meer as 40 000 demonstrasies versamel en meer as 15 000 werklike uitvoerings gedoen. Veralgemening het 'n rofweg magswet-verwantskap gevolg met die aantal environments and objects, en verby 'n drempel per omgewing of objek, het addisionele demonstrasies minimale effek gehad. Op een bank: skuif die objek, verander die beligting, ruil die kubus, eerder as om een opname te herhaal.

Leier-volger tele-operasie as 'n databron
Voordele
  • Deurlopende gewrigstrajekte wat 'n servo kan reproduseer, anders as 'n sleutelbord of speletjiebeheerder
  • Aksie en toestand deel 'n koördinaatkonvensie, so die beleid leer 'n teiken wat dit direk kan beheer
  • 'n Episode van 25 sekondes plus 'n terugstelling van 10 sekondes is rofweg 100 episodes per uur
  • Die operateur voel die volger stilstaan of vassteek, so foute kom na vore voordat data vasgelê word
Afwegings
  • ’n Tweede arm verdubbel rofweg die onderdelekoste
  • Demonstrasies erf operateurgewoontes; Mandlekar et al. het bevind dat beleidskwaliteit sterk afhang van demonstrasiekwaliteit
  • Die leier word teen lusspoed gemonster, so pouses word byna-identiese rye wat die beleid leer om te wag
  • Niks dwing konsekwentheid tussen sessies af nie: 'n kamera wat 5 cm gestoot is, is 'n verborge verspreidingsverskuiwing

'n Goeie episode is vervelig: herhaalbare tuisposisie, een ding gedoen, geëindig sodra die voorwerp in die houer is, taakstring in die 25 tot 50 karakters wat die kontrolelys aanbeveel. Tel die rooi kubus op en los dit in die boks is 'n taakstring; task1 is die teenpatroon wat die kontrolelys eksplisiet noem. Vaag annotasies is boaan die lys van probleme, en dit is die belangrikste vir visie-taal-aksie modelle, waar die string 'n modelinvoer is, nie 'n lêernaam nie.

Defekte wat 'n datastel stilweg vernietig

Geen gooi 'n uitsondering nie. Almal oorleef tot in opleiding, en verskyn as 'n verlieskurwe wat goed lyk en 'n robot wat niks doen nie. Kontroleer terwyl die toneel opgestel word.

DefekHoe dit lykWaar dit vandaan komHoe om dit te vang
Omgeruilde kamera-aansigtepolsbeeld onder die boonste sleutelindeks hertoewysing na 'n heraansluitinglerobot-find-cameras each session; by-id paths
Bevrore ramedieselfde beeld vir dosyne ryekamera hou op lewer; lus herhaal die laaste raamscrub it in lerobot-dataset-viz
Gedaalde ramery telling onder fps maal sekondestou oorloop, laat val eerder as blokkeer'Encoder queue full' in the log; rows vs fps times duration
Gewrig op sy limieteen gewrig plat by min of maksleier se bereik oorskry die volger s'n, of 'n slegte middelposisieper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Beeld en aksie uit pasdie beleid antisipeer of loop agterkameras teen 'n ander fps as die luskeep every camera at --dataset.fps
Dooie tydlang reekse identiese aksie ryeoperateur het onderbreek terwyl die opnemer loopaandeel van opeenvolgende identiese aksie rye
Onbruikbare taakstringtask1, demo2, testvinnig tikmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Weggelate rame versteek hulself

Die enkodeerder hou 'n begrensde tou per kamera, 30 rame by verstek. Wanneer dit nie kan byhou nie, word rame weggelaat eerder as geblokkeer: opname gaan voort en niks val in duie nie. Jy kry Encoder queue full for {camera}, dropped N frame(s) en 'n per-kamera totaal aan die einde van die episode. Die lerobot-drempel: ongeveer 5 persent ontbrekend beteken 'n oorlaaide stelsel, 2 persent is verwagte opstartlading. Oplossings in volgorde: --display_data=false, verlaag --dataset.encoder_threads, vcodec=h264, stroom af.

Een voorbehoud: die stroom-enkoderinggids se tabel lys die verstek as True, terwyl die dataklas op hoof lees streaming_encoding: bool = False. Dokumente en kode stem nie ooreen nie, stel dit dus eksplisiet; lerobot teken 'n wenk aan wat dit aanbeveel wanneer dit met die vlag af begin.

Kontroleer die datastel voordat 'n GPU gehuur word

Die aanvaardingstoets uit die dokumente: vergelyk video-duur met die episode-duur wat die CLI gerapporteer het, en bevestig dat die ry-telling gelyk is aan fps maal duur. Per episode, nie op die totaal nie.

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"])
’n Episode wat ver van die fps-tye-duur afwyk, is ’n kandidaat vir verwydering, nie opleiding nie.

Kyk dan daarna. lerobot-dataset-viz speel 'n episode raam vir raam af met gewrigspore langs die kamera-aansigte, in Rerun of Foxglove. Verwisselde kameras en bevrore rame verskyn binne tien sekondes. Mense slaan hierdie stap oor.

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 doen ook splitsing, samevoeging, verwydering van kenmerke, wysiging van take en herberekening van statistieke. Verwyder vrygewig: 'n slegte episode kos een episode; om dit te behou, kos elke lopie wat daarop opgelei is.
Die AY-Robots datastelgids wat openbare LeRobot-datastelle met episode-tellings en formate lys
Hoe vergelykbare datastelle grootte en geannoteer word.

v2.1 of v3.0: besluit voordat jy opneem

v2.1 het een parquet en een MP4 per episode geskryf. v3.0 voeg baie episodes saam in gedeelde skerwe en herbou grense van metadata, so info.json dra padtemplates soos data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet in plaas van 'n episode-nommer. Die stroomop-regverdiging is minder, groter lêers: vinniger inisialisering en minder lêerstelseldruk op skaal.

LeRobot v2.1LeRobot v3.0
Uitlegone parquet and one MP4 per episodemany episodes per shard
Episode metadataJSONL fileschunked parquet under meta/episodes/, via the datasets stack
Stroom vanaf die Hubnoyes, via StreamingLeRobotDataset
Geskryf deur lerobot 0.6.1noyes, what you get today
Gelees deur GR00T N1.7 en N1.5yesno, must be converted down
Neem vandag op, lei GR00T môre op

lerobot 0.6.1 skryf v3.0, maar GR00T N1.7 en N1.5 lees v2.0 of v2.1 en val daarop in duie. Let op die reisrigting: src/lerobot/scripts/ bevat convert_dataset_v21_to_v30.py en niks wat die ander kant toe gaan nie. Besluit dit voor die sessie. Oplossing: datastel as v3 verwerp.

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
Vinnig vir 50 episodes. Skaal is 'n ander taak: lerobot se oordraggids, vir rou DROID na v3.0, begroot 7+ dae se plaaslike verwerking en ongeveer 400 GB.

Twee roetes na dieselfde datastel

Alles hierbo, op jou eie masjien: jy besit die USB-enumerasie, die ffmpeg-bou, die enkodeerder-instelling en die kalibrasielêers. Die regte roete om die pyplyn te verstaan, 'n ongewone kamerastel te gebruik, of data plaaslik te hou.

Wat hierdie roete kos

Tyd: 'n aand per arm om te monteer, 'n moeilike eerste kalibrasie, en 'n eerste sessie wat jy weggooi omdat 'n kamera in die verkeerde gleuf was.

Neem LeRobot-datastelle op sonder om self die pyplyn te bedraad

Die AY-Robots rekenaarkliënt teken episodes, kamerastrome en gewrigstoestande in LeRobot-formaat van 'n teleoperasie-sessie aan, en gee dan die datastel aan die opleier oor.

Kry die rekenaarkliënt

Van datastel na beleid

Vyftig skoon episodes voed elke lopie hier. lei van nuuts af op jou taak alleen, ongeveer 80 M parameters teen ongeveer 20 ms per aksiestap, die enigste een van die vyf wat gemaklik is met vinnige beweging. is ongeveer 450 M parameters op 'n 24 GB kaart. is 'n ongeveer 3 B parameter grondslagmodel waar ongeveer 40 M parameters raak, 'n A100 of H100 benodig, en daardie v2.1 datastel wil hê.

Vervolgens, die gids vir jou kombinasie: , of ; vir 'n eerste lopie, is korter. Wanneer die beleid op die bank werk, maar ineenstort sodra jy die tafel skuif, is dit 'n dataprobbleem: en gaan dieper in op diversiteit.

Hoeveel episodes het ek werklik nodig vir 'n eerste werkende beleid?

Dertig vir SmolVLA, vyftig vir ACT, Pi0.5, GR00T N1.5 en N1.7, die minimums wat die AY-Robots opleiers afdwing. Die LeRobot gids beveel onafhanklik ten minste 50 aan vir 'n eerste taak, ongeveer 10 per objekligging. Data-skaalwerk het bevind dat veralgemening skaal met omgewings en objekte eerder as demonstrasietelling, so honderd opnames van een toneel is slegter as vyftig oor vyf plasings.

Het ek 'n leierarm nodig, of kan ek met 'n sleutelbord teleopereer?

lerobot verskaf sleutelbord- en speletjiebeheerder-teleoperateurs, so 'n leierarm is nie streng nodig nie, maar dit is sterk verkieslik: leier-volger gee deurlopende gewrigstrajekte in die koördinaatkonvensie van die opgeneemde aksie, terwyl sleutelbordinvoer getrapte beweging produseer wat 'n beleid as ruk leer. Sleutelbord-teleoperasie benodig ook 'n globale sleutel-agterkant, so dit misluk op Wayland en koploos.

Kan ek op 'n Raspberry Pi of 'n klein mini-rekenaar opneem?

Ja, met instelling. Die stroom-enkoderinggids het 'n lae-hulpbronkategorie wat moderne 4-kern masjiene en die Raspberry Pi 5 dek, en plaas twee kameras teen 640x480 en 30 fps in sy 'vereis-sekere-instelling'-kolom. Die advies: keer dat die enkodeerder met die opnamelus meeding, via --dataset.rgb_encoder.vcodec=h264 en --dataset.streaming_encoding=false. Dit beoordeel twee kameras teen 640x480 as ongeveer 55 miljoen pixels per sekonde en twee teen 1920x1080 as ongeveer 373 miljoen.

Hoe weet ek of die datastel wat ek sopas opgeneem het werklik gesond is?

Drie goedkoop kontroles. Vergelyk elke episode se videoduur teen die duur wat die CLI gerapporteer het en bevestig dat die ry-telling gelyk is aan fps maal daardie duur, per episode eerder as op die totaal; dit is die aanvaardingstoets wat lerobot se enkoderinggids gee. Lees ds.meta.stats, waar 'n gewrig waarvan die min gelyk is aan sy maks nooit beweeg het nie. Speel dan twee of drie episodes in lerobot-dataset-viz, die enigste manier waarop omgeruilde aansigte en bevrore rame verskyn. Op gevalle rame trek die gids die lyn by ongeveer 5 persent wat ontbreek; ongeveer 2 persent is normale tydelike lading, dikwels net opstart.

My training job rejected the dataset as v3.0. What now?

GR00T N1.7 en N1.5 lees LeRobot v2.0 of v2.1 en stort ineen op v3.0, wat is wat lerobot 0.6.1 opneem. Besluit óf die formaat voor opleiding, óf gebruik 'n beleid wat v3.0 inheems lees: Pi0.5, SmolVLA of ACT. lerobot verskaf 'n v2.1 na v3.0 omskakelaar en niks in die teenoorgestelde rigting nie.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started