
Regjistroni një set të dhënash LeRobot të përdorshëm me një SO-100: kalibrimi, teleoperimi udhëheqës-ndjekës, parametrat dhe vlerat e paracaktuara reale të lerobot-record, konfigurimi i kamerës, numri i episodeve dhe defektet që prishin një ekzekutim.
Një ndjekës SO-100, një krah udhëheqës i të njëjtës dizajn dhe dy kamera USB mund të rregullojnë një politikë në një pasdite. I njëjti stol mund të prodhojë po aq lehtë gjashtëdhjetë episode që duken të shëndetshme në një shfletues skedarësh dhe të shpërdorojë një ekzekutim GPU gjashtë-orësh. Dallimi rrallë është modeli; është ajo që ndodhi midis servove dhe skedarit parquet.
Këtu është rruga manuale, pastaj ajo më e shkurtra. Çdo komandë është nga lerobot 0.6.1, lëshuar më 3 gusht 2026 dhe aktual në PyPI. Ajo u zhvendos në pika hyrjeje të konsolës, kështu që udhëzuesit që ekzekutojnë python lerobot/scripts/control_robot.py përshkruajnë një skedar që nuk ekziston më.
Versioni i shkurtër
- •lerobot 0.6.1 regjistron v3.0; GR00T N1.7 dhe N1.5 kërkojnë v2.1. Vendosni formatin para se të shtypni regjistro.
- •Katër komanda: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Mbani të njëjtin --robot.id dhe --teleop.id nga kalibrimi në sesionin e regjistrimit.
- •Parazgjedhjet reale: 30 fps, 60 s për episod, 60 s rivendosje, 50 episode, rreth 100 minuta kohë reale.
- •Minimumi i episodeve këtu: 30 për SmolVLA, 50 për të tjerat.
- •Diversiteti mund vëllimin. Grupet e të dhënave vdesin nga katër gjëra: indekset e kamerave të shkëmbyera, kornizat e rëna ose të ngrira, një nyje e parkuar në kufirin e saj, një varg detyre i palexueshëm.
Çfarë kap një sesion regjistrimi
Një dataset i LeRobot nuk është një dosje me video, por një tabelë e indeksuar sipas kohës me video të bashkëngjitur: çdo cikël kontrolli shkruan një rresht që përmban veprimin e komanduar, gjendjen që arriti ndjekësi, një kornizë për kamerë, një vulë kohore dhe indekse. Politika sheh vetëm ato kolona. Skema e lerobot/svla_so100_pickplace, lexuar nga meta/info.json e saj.
| Veçori | dtype | Forma | Çfarë është |
|---|---|---|---|
| action | float32 | [6] | targete të nyjeve nga krahu udhëheqës |
| observation.state | float32 | [6] | pozicionet e nyjeve që arriti ndjekësi |
| observation.images.top | video | [480, 640, 3] | kamera e skenës, MP4 (av1 këtu) |
| observation.images.wrist | video | [480, 640, 3] | kamera e kyçit të dorës, e njëjta shpejtësi |
| timestamp | float32 | [1] | sekonda që nga fillimi i episodit |
| frame_index, episode_index, index, task_index | int64 | [1] | mbajtje automatike e llogarive |
Nyjet janë main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll dhe main_gripper: gjashtë shkallë lirie të SO-100. Veprimi dhe gjendja ndajnë një formë sepse teleoperacioni udhëheqës-ndjekës regjistron një objektiv dhe pozicionin e arritur një hap më vonë. Ky boshllëk është informacion: ku krahu luftoi gravitetin ose një objekt të ngecur. Këto vargje janë të atij dataseti. Një sesion i regjistruar me 0.6.1 sot shkruan shoulder_pan.pos deri te gripper.pos, ID 1 deri në 6 në autobus: të njëjtat gjashtë nyje, çelësa të ndryshëm, gjë që ka rëndësi në momentin kur një konfigurim i referohet një veçorie me emër.
Ky dataset përmban 50 episode dhe 19,631 korniza me 30 fps: rreth 393 korniza, ose 13 sekonda, për episod. Nëse tuajat mesatarisht janë një minutë, ju po bëni diçka më të vështirë ose po regjistroni kohë të vdekur në të dyja anët.

Çfarë ju nevojitet në bankën e punës
| Artikulli | Detaji | Shënim |
|---|---|---|
| Krahu ndjekës | SO-100, gjashtë servo Feetech STS3215 | rreth 110 deri në 150 EUR në pjesë |
| Krahu udhëheqës | një SO-100 i dytë, ingranazhet e hequra | ingranazhet e hequra nga të gjashtë motorët udhëheqës: vetëm enkoder, më pak fërkim |
| Fuqia | përshtatur me variantin 7.4 V STS3215 në listën e materialeve | shih paralajmërimin më poshtë |
| Kamera | dy kamera USB, 640x480 në 30 fps | një pamje skene, një në kyçin e dorës |
| Host | Python 3.12 ose më i ri, ffmpeg | requires-python >= 3.12 |
| Llogaria e Hub-it | token shkrimi Hugging Face | opsionale me --dataset.push_to_hub=false |
STS3215 vjen në dy versione: README i SO-ARM100 vlerëson versionin 7.4 V me një çift rrotullues bllokimi prej 16.5 kg.cm të matur në 6 V dhe versionin 12 V me 30 kg.cm, dhe thekson se marrja e motorëve 12 V do të thotë gjithashtu blerja e një furnizimi 12 V 5 A+ në vend të atij 5 V. Lista e materialeve rendit servo 7.4 V. Furnizimi me 12 V i servove të vlerësuara 7.4 V i shkatërron ato, prandaj lexoni etiketën e motorit para se të lidhni diçka. Servo nuk përgjigjet.
Nëse krahu nuk është ndërtuar ende, kjo është një mbrëmje tjetër: filloni te fillimi me SO-100 dhe udhëzuesi i plotë i konfigurimit të SO-100. Nëse nuk keni blerë asgjë, lexoni krahasimi SO-100 kundrejt SO-101 fillimisht: SO-101 është rishikimi më i ri me instalime elektrike të përmirësuara dhe pa hapin e heqjes së ingranazheve, dhe rrjedha e punës së regjistrimit është identike.
Instaloni 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-infoEkstrat i ngatërrojnë më shumë njerëzit. pip install lerobot instalon vetëm varësitë thelbësore të ML, asgjë që komunikon me një robot. Krahët Koch kanë nevojë për dynamixel në vend të feetech. Nëse shell-i juaj nuk ka dëgjuar kurrë për lerobot-record, kjo është arsyeja.
Portet, ID-të e motorëve dhe kalibrimi
Tre hapa të veçantë qëndrojnë midis pjesëve dhe një cikli funksional teleoperimi. bën që një politikë e trajnuar në krahun tuaj të funksionojë në krahun e dikujt tjetër, duke hartuar numrat e papërpunuar të enkoderit në një konventë të përbashkët nyjesh.
- 1Gjeni portën USB të çdo krahu
Ekzekutojeni me të dy krahët të kyçur, shkëputni atë që po identifikoni kur të kërkohet, dhe vini re cili port zhduket. Në Linux mund t'ju duhet
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. - 2Shkruani ID-të e motorëve dhe shpejtësitë e transmetimit
ID-të shkruhen një motor në një kohë, dhe dokumentacioni është i rreptë për mënyrën: lidhni saktësisht një motor në bordin e kontrolluesit, ende pa u lidhur në zinxhir me ndonjë tjetër. Skripti ecën zinxhirin mbrapsht, duke kërkuar fillimisht kapësen dhe duke i dhënë ID 6, pastaj rrotullimin e kyçit të dorës si 5, deri te rrotullimi i shpatullës si 1. Bëjeni këtë para montimit.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Kalibroni të dy krahët
Lëvizni çdo nyje në mes të diapazonit të saj, shtypni Enter, pastaj kaloni secilën nëpër diapazonin e saj të plotë.
idbëhet emri i skedarit të profilit.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 - 4Teleoperoni para se të regjistroni diçka
Testi i pranimit për gjithçka më sipër. Nëse teleoperimi është i çrregullt, i pasqyruar, ose një nyje nuk do të ndjekë, regjistrimi e ruan këtë në 50 episode.
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
Profilet shkojnë te $HF_LEROBOT_CALIBRATION, parazgjedhja ~/.cache/huggingface/lerobot/calibration, dhe ID-ja është çelësi i kërkimit. Jepini lerobot-record një ID të kalibruar dhe ai ofron Enter për të ripërdorur profilin ose c për ta ripërsëritur. Jepini një ID të panjohur dhe nuk ka skedar, kështu që kalon në kalibrim në mes të sesionit.
Kamerat vendosin se çfarë sheh politika
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.0Dy pamje, dhe vendndodhja e tyre ka rëndësi: një kamerë fikse e skenës që mbulon hapësirën e punës, dhe një kamerë dore pranë efektorit fundor që tregon se çfarë do të prekë kapësja. Lista e kontrollit të grupeve të të dhënave të komunitetit LeRobot kërkon preferohet dy pamje në 480x640 / 720p ose më mirë, një sfond statik, ndriçim neutral të qëndrueshëm, dhe krahu udhëheqës dhe gjymtyrët njerëzore jashtë kornizës. Udhëzuesi i regjistrimit shton rregullin e përgjithshëm: duhet të jeni në gjendje ta kryeni vetë detyrën duke parë vetëm imazhet e kamerës.
Indekset e OpenCV vijnë nga rendi i numërimit, kështu që një rindezje ose rilidhje mund të bëjë që indekset 0 dhe 2 të ndërrojnë vendet dhe të vendosin pamjen e kyçit të dorës në vendin e sipërm për një sesion të tërë. lerobot e thotë vetë: klasa e saj e kamerës merr një shteg pajisjeje si dhe një numër të plotë, dhe paralajmëron se indekset janë të paqëndrueshme gjatë rindezjeve ose ndryshimeve të portave, veçanërisht në Linux. Drejtoni index_or_path te symlink-u i udev nën /dev/v4l/by-id/, i cili ndjek pajisjen dhe jo rendin e numërimit. Kjo është mënyra më e zakonshme që një grup të dhënash përfundon i brendshëm i paqëndrueshëm, dhe trajnimi nuk mund ta riparojë atë. Kamera nuk u zbulua.
Komanda record dhe çdo flamur
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=2Vlerat e paracaktuara më poshtë vijnë nga src/lerobot/configs/dataset.py në main, jo nga një tutorial. Disa nuk janë ato që njerëzit supozojnë.
| Flamuri | Parazgjedhur | Çfarë bën |
|---|---|---|
| --dataset.repo_id | bosh | emri; data/ora shtohet automatikisht |
| --dataset.single_task | bosh | vargu i detyrës ruhet me çdo episod |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | shtegu i shkrimit, parazgjedhur ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | shpejtësia e ciklit të kontrollit dhe shpejtësia e kornizave të grupit të të dhënave |
| --dataset.episode_time_s | 60 | sekonda para se një episod të avancojë automatikisht |
| --dataset.reset_time_s | 60 | rivendosja e skenës; krahu lëviz, asgjë nuk ruhet |
| --dataset.num_episodes | 50 | episode të regjistruara në këtë sesion |
| --dataset.push_to_hub | true | ngarkimi në fund të sesionit; false mbetet lokale |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | kodimi gjatë kapjes; vendoseni në mënyrë eksplicite |
| --dataset.encoder_queue_maxsize | 30 | korniza të buferuara për kamerë, ~1 s në 30 fps |
| --dataset.encoder_threads | null (codec decides) | fije për kodues; uleni nëse kapja ndërpritet |
| --dataset.no_stamp | false | mbani repo_id saktësisht siç është shkruar |
| --resume | false | shtojini një grupi të dhënash ekzistues; kërkon --dataset.root |
Seti juaj i të dhënave nuk quhet siç e shkruat. lerobot shton një etiketë datë-kohë, kështu që so100_pick_cube bëhet so100_pick_cube_20260823_141530. Përdorni --dataset.no_stamp=true për një emër të qëndrueshëm. Rifillimi numëron shtesat, jo totalet. Me --resume=true, --dataset.num_episodes numëron episode shtesë dhe --dataset.root bëhet i detyrueshëm. Kërkoni 50 në një set të dhënash me 30 episode dhe merrni 80.
Kontrolli me tastierë gjatë një sesioni
- Shigjeta djathtas ose
n: përfundoni episodin ose rivendosni fazën më herët. Çelësi që përdorni më shpesh, sepse një kapje e pastër rrallë ka nevojë për 25 sekonda. - Shigjeta majtas ose
r: hidhni episodin dhe rifillojeni. Një marrje e keqe nuk kushton asgjë tani dhe shumë më vonë. - Escape ose
q: ndaloni sesionin, përfundoni kodimin, ngarkoni. - Këto funksionojnë në X11, Wayland dhe SSH pa kokë: pa një backend global të çelësave, lerobot-record lexon të njëjtat çelësa nga terminali kontrollues. Shkronjat mbijetojnë lidhjet SSH të ngadalta, ku sekuencat e shigjetave ndahen.
- Teleoperimi me tastierë është i ndryshëm dhe ka nevojë për një backend global: X11, Windows, ose macOS me Accessibility.
Sa episode, dhe si duket një i mirë
Udhëzuesi i regjistrimit sugjeron të paktën 50 episode për një detyrë të parë, rreth 10 për vendndodhje objekti. Faqet e politikave listojnë një minimum për model, nën të cilin një ekzekutim nuk ia vlen kohën e GPU-së.
| Politika | Episodet min | Formati i grupit të të dhënave | Niveli i GPU-së | Kostoja për ekzekutim |
|---|---|---|---|---|
| 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 |
Pyetja më e mirë është sa dhe çfarë. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) mblodhi mbi 40,000 demonstrime dhe ekzekutoi më shumë se 15,000 prova në botën reale. Përgjithësimi ndoqi një marrëdhënie afërsisht ligj-fuqi me numrin e environments and objects, dhe pas një pragu për mjedis ose objekt, demonstrimet shtesë kishin efekt minimal. Në një bankë prove: lëvizni objektin, ndryshoni ndriçimin, ndërroni kubin, në vend që të përsërisni një marrje.
- Trajektore të vazhdueshme të nyjeve që një servo mund të riprodhojë, ndryshe nga tastiera ose gamepad-i
- Veprimi dhe gjendja ndajnë një konventë koordinatash, kështu që politika mëson një objektiv që mund ta komandojë drejtpërdrejt
- Një episod 25 sekonda plus një rivendosje 10 sekonda është afërsisht 100 episode në orë
- Operatori ndjen bllokimin ose ngecjen e ndjekësit, kështu që defektet shfaqen para se të dhënat të angazhohen
- Një krah i dytë afërsisht dyfishon koston e pjesëve
- Demonstrimet trashëgojnë zakonet e operatorit; Mandlekar et al. zbuluan se cilësia e politikës varet shumë nga cilësia e demonstrimit
- Udhëheqësi merret në mostër me shpejtësinë e ciklit, kështu që pauzat bëhen rreshta pothuajse identikë që mësojnë politikën të presë
- Asgjë nuk garanton konsistencën midis sesioneve: një kamerë e zhvendosur 5 cm është një ndryshim i fshehur i shpërndarjes
Një episod i mirë është i mërzitshëm: pozë shtëpie e përsëritshme, një gjë e bërë, e përfunduar sapo objekti të jetë në kosh, vargu i detyrës në 25 deri në 50 karaktere që rekomandon lista kontrolluese. Pick the red cube and drop it in the box është një varg detyre; task1 është anti-modeli që lista kontrolluese e emërton shprehimisht. Shënimet e paqarta kryesojnë listën e problemeve të saj, dhe ato kanë më shumë rëndësi për , ku vargu është një hyrje modeli, jo një emër skedari.
Defekte që shkatërrojnë në heshtje një grup të dhënash
Asnjë nuk hedh një përjashtim. Të gjitha mbijetojnë në trajnim, duke u shfaqur si një kurbë humbjeje që duket mirë dhe një robot që nuk bën asgjë. Kontrolloni ndërsa skena është vendosur.
| Defekti | Si duket | Nga vjen | Si ta kapësh |
|---|---|---|---|
| Pamje kamerash të shkëmbyera | imazhi i kyçit të dorës nën çelësin kryesor | ri-caktimi i indeksit pas një ri-lidhjeje | lerobot-find-cameras each session; by-id paths |
| Korniza të ngrira | i njëjti imazh për dhjetëra rreshta | kamera ndalon së dërguari; cikli përsërit kornizën e fundit | scrub it in lerobot-dataset-viz |
| Korniza të rëna | numri i rreshtave nën fps herë sekonda | radha tejmbushet, lëshon në vend që të bllokojë | 'Encoder queue full' in the log; rows vs fps times duration |
| Nyja në kufirin e saj | një nyje e sheshtë në min ose max | gama e liderit tejkalon atë të ndjekësit, ose një pozë e keqe e mesme | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Imazhi dhe veprimi jashtë sinkronizimit | politika parashikon ose mbetet prapa | kamerat me një fps të ndryshëm nga cikli | keep every camera at --dataset.fps |
| Kohë e vdekur | vargje të gjata rreshtash veprimi identikë | operatori ndaloi me regjistruesin në punë | share of consecutive identical action rows |
| Varg detyre i papërdorshëm | task1, demo2, test | shtypje e shpejtë | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Koduesi mban një radhë të kufizuar për çdo kamerë, 30 korniza si parazgjedhje. Kur nuk mund të mbajë ritmin, kornizat hiqen në vend që të bllokohen: kapja vazhdon dhe asgjë nuk rrëzohet. Ju merrni Encoder queue full for {camera}, dropped N frame(s) dhe një total për kamerë në fund të episodit. Pragu i lerobot: rreth 5 për qind mungesë do të thotë një sistem i mbingarkuar, 2 për qind është ngarkesë e pritshme fillestare. Zgjidhjet në rend: --display_data=false, ulni --dataset.encoder_threads, vcodec=h264, transmetimi i fikur.
Një paralajmërim: tabela e udhëzuesit të transmetimit-kodimit liston parazgjedhjen si True, ndërsa dataclass në main lexon streaming_encoding: bool = False. Dokumentacioni dhe kodi nuk pajtohen, prandaj vendoseni në mënyrë eksplicite; lerobot regjistron një sugjerim duke e rekomanduar sa herë që fillon me flamurin e fikur.
Kontrolloni grupin e të dhënave para se të merrni me qira një GPU
Testi i pranimit nga dokumentacioni: krahasoni kohëzgjatjen e videos me kohëzgjatjen e episodit të raportuar nga CLI, dhe konfirmoni që numri i rreshtave është i barabartë me fps herë kohëzgjatjen. Për episod, jo në total.
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"])Pastaj shikoje. lerobot-dataset-viz riprodhon një episod kornizë pas kornize me gjurmë nyjesh pranë pamjeve të kamerës, në Rerun ose Foxglove. Kamerat e shkëmbyera dhe kornizat e ngrira shfaqen brenda dhjetë sekondave. Njerëzit e anashkalojnë këtë hap.
# 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 ose v3.0: vendosni para se të regjistroni
v2.1 shkruante një parquet dhe një MP4 për çdo episod. v3.0 bashkon shumë episode në sharda të përbashkëta dhe rindërton kufijtë nga metadatat, kështu që info.json përmban shabllone rrugësh si data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet në vend të një numri episodi. Justifikimi i sipërm është më pak skedarë, por më të mëdhenj: inicializim më i shpejtë dhe më pak presion në sistemin e skedarëve në shkallë të gjerë.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Paraqitja | një parquet dhe një MP4 për episod | shumë episode për shard |
| Metadatat e episodit | Skedarë JSONL | parquet i ndarë nën meta/episodes/, nëpërmjet stack-ut të dataset-eve |
| Transmetimi nga Hub-i | jo | po, nëpërmjet StreamingLeRobotDataset |
| Shkruar nga lerobot 0.6.1 | jo | po, ajo që merrni sot |
| Lexuar nga GR00T N1.7 dhe N1.5 | po | jo, duhet të konvertohet poshtë |
lerobot 0.6.1 shkruan v3.0, por GR00T N1.7 dhe N1.5 lexojnë v2.0 ose v2.1 dhe bien në të. Vini re drejtimin e lëvizjes: src/lerobot/scripts/ përmban convert_dataset_v21_to_v30.py dhe asgjë që shkon në drejtimin tjetër. Zgjidhni këtë para sesionit. Zgjidhja: dataset-i u refuzua si 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=falseDy rrugë drejt të njëjtit grup të dhënash
Gjithçka më sipër, në makinën tuaj: ju zotëroni enumerimin USB, ndërtimin e ffmpeg, rregullimin e enkoderit dhe skedarët e kalibrimit. Rruga e duhur për të kuptuar tubacionin, për të drejtuar një pajisje të pazakontë kamerash, ose për të mbajtur të dhënat lokale.
Koha: një mbrëmje për krah për montim, një kalibrim i parë i vështirë, dhe një sesion i parë që e hidhni poshtë sepse një kamera ishte në vendin e gabuar.
Klienti i desktopit regjistron grupe të dhënash, episode, transmetime kamerash dhe gjendje nyjesh në formatin LeRobot, direkt nga një teleoperacion sesion. Ai grup të dhënash ushqen formularin e trajnimit: zgjidhni modelin, grupin e të dhënave dhe hiperparametrat, dhe backend-i merr me qira një GPU të madhësisë së VRAM-it të modelit, ekzekuton trajnerin dhe shkruan pika kontrolli në ruajtjen e objekteve.
- 1Instaloni klientin
Në faqen e shkarkimit; konfigurimi në dokumentacionin e klientit.
- 2Regjistroni nga një sesion teleoperacioni
Drejtoni krahun; klienti shkruan episode në formatin LeRobot. Udhëzues: regjistroni grupin tuaj të parë të të dhënave.
- 3Ose sillni të dhënat tuaja
Një grup të dhënash mund të vijë gjithashtu nga një ID repo e Hugging Face ose makina juaj: dokumentacioni i grupeve të të dhënave, direktoria publike.
- 4Trajnoni dhe ekzekutojeni përsëri
Zgjidhni kombinimin në matricën e trajnimit, pastaj ekzekutoni politikën përsëri në krah. Afërsisht 1 deri në 3 USD në nivelin 24 GB, 4 deri në 12 në nivelin A100 ose H100.
Ai nuk monton ose kalibron krahun tuaj, dhe nuk riparon një episod me defekt, kështu që hapi i inspektimit ende vlen. Ekziston gjithashtu një kufi i fortë në anën tjetër: për detyra të shpejta, inferenca duhet të jetë pranë servove. Cikli i kontrollit ekzekutohet 20 deri në 485 ms për hap veprimi, dhe udhëtimet vajtje-ardhje në internetin publik e kthejnë një politikë funksionale në një politikë hezituese.
Regjistroni grupe të dhënash LeRobot pa lidhur vetë tubacionin
Klienti i desktopit AY-Robots regjistron episode, transmetime kamerash dhe gjendje nyjesh në formatin LeRobot nga një sesion teleoperacioni, pastaj ia dorëzon grupin e të dhënave trajnerit.
Merrni klientin e desktopitNga grupi i të dhënave te politika
Pesëdhjetë episode të pastra ushqejnë çdo mësim imitues që ekzekutohet këtu. ACT trajnohet nga e para vetëm në detyrën tuaj, rreth 80 M parametra me afërsisht 20 ms për hap veprimi, i vetmi nga të pesë që është i përshtatshëm me lëvizje të shpejtë. SmolVLA ka rreth 450 M parametra në një kartë 24 GB. GR00T N1.7 është një model themelor me rreth 3 B parametra ku akordimi i imët prek rreth 40 M parametra, kërkon një A100 ose H100, dhe dëshiron atë grup të dhënash v2.1.
Më pas, udhëzuesi për kombinimin tuaj: ACT on SO-100, SmolVLA on SO-100 ose GR00T N1.7 on SO-100; për një ekzekutim të parë, trajnoni politikën tuaj të parë është më i shkurtër. Kur politika funksionon në bankë por kolapson në momentin që lëvizni tavolinën, ky është një problem me të dhënat: politika funksionon vetëm në një konfigurim dhe mbledhja e të dhënave trajnuese VLA me cilësi të lartë thellohen më shumë në diversitet.
Sa episode më duhen realisht për një politikë të parë funksionale?▾
Tridhjetë për SmolVLA, pesëdhjetë për ACT, Pi0.5, GR00T N1.5 dhe N1.7, minimumet që zbatojnë trajnerët e AY-Robots. Udhëzuesi i LeRobot rekomandon në mënyrë të pavarur të paktën 50 për një detyrë të parë, rreth 10 për vendndodhje objekti. Puna e shkallëzimit të të dhënave zbuloi se përgjithësimi shkallëzohet me mjediset dhe objektet, jo me numrin e demonstrimeve, kështu që njëqind marrje të një skene janë më keq se pesëdhjetë në pesë vendosje.
Më duhet një krah udhëheqës, apo mund të teleoperoj me tastierë?▾
lerobot ofron teleoperatorë me tastierë dhe gamepad, kështu që një krah udhëheqës nuk është rreptësisht i nevojshëm, por është shumë i preferueshëm: udhëheqës-ndjekës jep trajektore të vazhdueshme të nyjeve në konventën koordinative të veprimit të regjistruar, ndërsa hyrja nga tastiera prodhon lëvizje me hapa që një politikë e mëson si dridhje. Teleoperimi me tastierë kërkon gjithashtu një backend global të çelësave, kështu që dështon në Wayland dhe headless.
A mund të regjistroj në një Raspberry Pi apo një mini PC të vogël?▾
Po, me akordim. Udhëzuesi i kodimit me transmetim ka një kategori me burime të ulëta që mbulon makinat moderne me 4 bërthama dhe Raspberry Pi 5, dhe vendos dy kamera në 640x480 dhe 30 fps në kolonën e saj 'kërkon-disa-akordime'. Këshilla e tij: ndaloni koduesin të konkurrojë me ciklin e kapjes, nëpërmjet --dataset.rgb_encoder.vcodec=h264 dhe --dataset.streaming_encoding=false. Ai vlerëson dy kamera në 640x480 si rreth 55 milionë pikselë për sekondë dhe dy në 1920x1080 si rreth 373 milionë.
Si e di që grupi i të dhënave që sapo regjistrova është vërtet i shëndetshëm?▾
Tre kontrolle të lira. Krahasoni kohëzgjatjen e videos së çdo episodi me kohëzgjatjen e raportuar nga CLI dhe konfirmoni që numri i rreshtave është i barabartë me fps herë atë kohëzgjatje, për episod dhe jo në total; ky është testi i pranimit që jep udhëzuesi i kodimit të lerobot. Lexoni ds.meta.stats, ku një nyje, min e së cilës është e barabartë me max e saj, nuk lëvizi kurrë. Më pas riprodhoni dy ose tre episode në lerobot-dataset-viz, e vetmja mënyrë që shfaqen pamjet e shkëmbyera dhe kornizat e ngrira. Për kornizat e humbura, udhëzuesi vendos kufirin në rreth 5 për qind mungesë; rreth 2 për qind është ngarkesë normale kalimtare, shpesh vetëm në fillim.
Puna ime e trajnimit refuzoi grupin e të dhënave si v3.0. Çfarë të bëj tani?▾
GR00T N1.7 dhe N1.5 lexojnë LeRobot v2.0 ose v2.1 dhe bien në v3.0, gjë që regjistron lerobot 0.6.1. Ose vendosni formatin para trajnimit, ose përdorni një politikë që lexon v3.0 në mënyrë native: Pi0.5, SmolVLA ose ACT. lerobot ofron një konvertues nga v2.1 në v3.0 dhe asgjë në të kundërt.
Sources
- LeRobot: Mësimi Imitues në Robotë të Botës Reale
- LeRobot: SO-100 montimi, konfigurimi i motorit dhe kalibrimi
- LeRobot: Kamerat dhe lerobot-find-cameras
- LeRobot: Instalimi dhe matrica e shtesave
- LeRobotDataset v3.0: paraqitja dhe migrimi i v2.1
- LeRobot: Kodimi i videos transmetuese dhe kornizat e humbura
- LeRobot: Portimi i grupeve të mëdha të të dhënave në v3.0 (DROID)
- lerobot v0.6.1 lëshimi, 3 Gusht 2026
- DatasetRecordConfig: parametrat e parazgjedhur të regjistrimit real
- lerobot_record.py: cikël regjistrimi dhe menaxhimi i rifillimit
- TheRobotStudio/SO-ARM100: repo e ndërtimit dhe lista e materialeve
- Hugging Face: Lista e kontrollit të grupeve të të dhënave të komunitetit LeRobot
- lerobot/svla_so100_pickplace: 50 episode, 19,631 korniza
- Lin et al. (2024), Ligjet e Shkallëzimit të të Dhënave në Mësimin Imitues
- Mandlekar et al. (2021), Çfarë ka rëndësi në mësimin nga demonstrimet njerëzore offline
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