
Mag-record ng magagamit na LeRobot dataset gamit ang SO-100: kalibrasyon, leader-follower teleoperasyon, ang tunay na lerobot-record flags at defaults, setup ng camera, bilang ng episode, at ang mga depekto na sumisira sa isang pagtakbo.
Ang SO-100 follower, isang leader arm na may parehong disenyo at dalawang USB camera ay kayang i-fine-tune ang isang policy sa loob ng isang hapon. Ang parehong bench ay madaling makagawa ng animnapung episode na mukhang maayos sa isang file browser at mag-aksaya ng anim na oras na GPU run. Ang pagkakaiba ay bihirang ang modelo; ito ay kung ano ang nangyari sa pagitan ng mga servo at ng parquet file.
Narito ang manual na ruta, pagkatapos ay ang mas maikli. Ang bawat command ay mula sa lerobot 0.6.1, inilabas noong 3 Agosto 2026 at kasalukuyan sa PyPI. Lumipat ito sa console entry points, kaya ang mga tutorial na nagpapatakbo ng python lerobot/scripts/control_robot.py ay naglalarawan ng isang file na wala na.
Ang maikling bersyon
- •lerobot 0.6.1 records v3.0; GR00T N1.7 and N1.5 want v2.1. Ayusin ang format bago ka mag-record.
- •Apat na command: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Dalhin ang parehong --robot.id at --teleop.id mula sa calibration patungo sa recording session.
- •Mga totoong default: 30 fps, 60 s per episode, 60 s reset, 50 episodes, about 100 minutes of wall clock.
- •Minimum na episode dito: 30 for SmolVLA, 50 for the rest.
- •Ang pagkakaiba-iba ay mas mahalaga kaysa sa dami. Ang mga dataset ay namamatay dahil sa apat na bagay: nagkapalit na camera indices, nahulog o nagyelong frames, isang joint na nakaparada sa limit nito, isang hindi mabasa na task string.
Ano ang nakukuha ng isang recording session
Ang LeRobot dataset ay hindi isang folder ng mga video kundi isang time-indexed na talahanayan na may kalakip na video: bawat control-loop tick ay nagsusulat ng isang row na naglalaman ng iniutos na aksyon, ang estado na naabot ng follower, isang frame bawat camera, isang timestamp at mga index. Ang policy ay nakikita lamang ang mga column na iyon. Ang schema ng lerobot/svla_so100_pickplace, nabasa mula sa meta/info.json nito.
| Feature | dtype | Shape | Ano ito |
|---|---|---|---|
| action | float32 | [6] | mga target ng joint mula sa leader arm |
| observation.state | float32 | [6] | mga posisyon ng joint na naabot ng follower |
| observation.images.top | video | [480, 640, 3] | scene camera, MP4 (av1 dito) |
| observation.images.wrist | video | [480, 640, 3] | wrist camera, parehong rate |
| timestamp | float32 | [1] | segundo mula nang magsimula ang episode |
| frame_index, episode_index, index, task_index | int64 | [1] | awtomatikong pinupuno na bookkeeping |
Ang mga joint ay main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll at main_gripper: ang anim na degrees of freedom ng SO-100. Ang aksyon at estado ay may parehong hugis dahil leader-follower teleoperation ay nagtatala ng isang target at ang posisyon na naabot pagkatapos ng isang hakbang. Ang agwat na iyon ay impormasyon: kung saan nilabanan ng braso ang gravity o isang nakasabit na bagay. Ang mga string na iyon ay sa dataset na iyon. Ang isang session na naitala gamit ang 0.6.1 ngayon ay nagsusulat ng shoulder_pan.pos hanggang gripper.pos, mga ID 1 hanggang 6 sa bus: parehong anim na joint, iba't ibang key, na mahalaga sa sandaling ang isang config ay tumutukoy sa isang feature sa pamamagitan ng pangalan.
Ang dataset na iyon ay naglalaman ng 50 episode at 19,631 frame sa 30 fps: humigit-kumulang 393 frame, o 13 segundo, bawat episode. Kung ang iyong average ay isang minuto, gumagawa ka ng isang bagay na mas mahirap o nagtatala ng patay na oras sa magkabilang dulo.

Ano ang kailangan mo sa bench
| Item | Detalye | Tandaan |
|---|---|---|
| Follower arm | SO-100, anim na Feetech STS3215 servo | mga 110 hanggang 150 EUR sa mga piyesa |
| Leader arm | isang pangalawang SO-100, tinanggal ang mga gear | tinanggal ang mga gear mula sa lahat ng anim na leader motor: encoder lang, mas kaunting friction |
| Power | katugma sa 7.4 V STS3215 variant sa bill of materials | tingnan ang babala sa ibaba |
| Mga Camera | dalawang USB camera, 640x480 sa 30 fps | isang scene view, isa sa pulso |
| Host | Python 3.12 o mas bago, ffmpeg | requires-python >= 3.12 |
| Hub account | Hugging Face write token | opsyonal sa --dataset.push_to_hub=false |
Ang STS3215 ay may dalawang bersyon: ang SO-ARM100 README ay nagre-rate ng 7.4 V na bersyon sa 16.5 kg.cm stall torque na sinusukat sa 6 V at ang 12 V na bersyon sa 30 kg.cm, at binabanggit na ang pagkuha ng 12 V na motor ay nangangahulugan din ng pagbili ng 12 V 5 A+ na supply sa halip na ang 5 V. Ang bill of materials ay naglilista ng 7.4 V na servo. Ang pagbibigay ng 12 V sa mga servo na naka-rate ng 7.4 V ay sumisira sa mga ito, kaya basahin ang label ng motor bago mo ikonekta ang anumang bagay. Hindi tumutugon ang servo.
Kung hindi pa nabubuo ang braso, iyon ay para sa ibang gabi: magsimula sa pagsisimula sa SO-100 at ang kumpletong gabay sa pag-setup ng SO-100. Kung wala ka pang nabibili, basahin muna ang paghahambing ng SO-100 laban sa SO-101 muna: ang SO-101 ay ang mas bagong rebisyon na may pinahusay na wiring at walang hakbang sa pagtanggal ng gear, at magkapareho ang daloy ng trabaho sa pagre-record.
I-install ang 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-infoAng mga extras ang kadalasang nagpapahirap sa mga tao. pip install lerobot ay nag-i-install lamang ng mga pangunahing dependency ng ML, walang anumang nakikipag-ugnayan sa isang robot. Ang mga braso ng Koch ay nangangailangan ng dynamixel sa halip na feetech. Kung ang iyong shell ay hindi pa nakarinig ng lerobot-record, ito ang dahilan.
Mga Port, Motor ID at Kalibrasyon
Tatlong beses lang na hakbang ang kailangan para maging gumagana ang teleop loop. ang nagpapagana ng patakarang sinanay sa iyong braso sa braso ng iba, na nagmamapa ng mga raw encoder count sa isang shared joint convention.
- 1Hanapin ang USB port ng bawat braso
Patakbuhin ito na nakasaksak ang parehong braso, tanggalin ang saksak ng braso na iyong kinikilala kapag sinenyasan, at tandaan kung aling port ang nawala. Sa Linux, maaaring kailanganin mo ang
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. - 2Isulat ang mga Motor ID at Baudrate
Ang mga ID ay isinusulat nang paisa-isang motor, at mahigpit ang mga dokumento tungkol sa kung paano: ikonekta ang eksaktong isang motor sa controller board, hindi pa naka-daisy-chain sa iba. Ang script ay naglalakad paatras sa chain, nagtatanong muna para sa gripper at binibigyan ito ng id 6, pagkatapos ay wrist_roll bilang 5, pababa sa shoulder_pan bilang 1. Gawin ito bago ang pag-assemble.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3I-calibrate ang parehong braso
Ilipat ang bawat joint sa gitna ng saklaw nito, pindutin ang Enter, pagkatapos ay i-sweep ang bawat isa sa buong saklaw nito. Ang
idang magiging filename ng profile.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 - 4Mag-teleoperate bago mag-record ng anuman
Ang acceptance test para sa lahat ng nasa itaas. Kung ang teleoperation ay magalaw, mirrored, o hindi susunod ang isang joint, naitatala ito sa 50 episodes.
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
Ang mga profile ay napupunta sa $HF_LEROBOT_CALIBRATION, default ~/.cache/huggingface/lerobot/calibration, at ang id ang lookup key. Bigyan ang lerobot-record ng calibrated id at mag-aalok ito ng Enter para gamitin muli ang profile o c para ulitin ito. Bigyan ito ng hindi kilalang id at walang file, kaya't magsisimula ito ng kalibrasyon sa gitna ng session.
Ang mga camera ang nagpapasya kung ano ang nakikita ng patakaran
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.0Dalawang view, at mahalaga kung saan sila nakapuwesto: isang nakapirming scene camera na sumasaklaw sa workspace, at isang wrist camera malapit sa end-effector na nagpapakita kung ano ang malapit nang hawakan ng gripper. Ang checklist ng LeRobot community-datasets ay humihingi ng mas mainam na dalawang view sa 480x640 / 720p o mas mahusay, isang static na background, neutral na matatag na ilaw, at ang leader arm at mga bahagi ng katawan ng tao ay wala sa frame. Idinagdag ng recording guide ang panuntunan: dapat mong magawa ang gawain sa iyong sarili sa pamamagitan lamang ng pagtingin sa mga imahe ng camera.
Ang mga index ng OpenCV ay nagmumula sa pagkakasunud-sunod ng enumerasyon, kaya ang pag-reboot o muling pagkabit ay maaaring magpalit ng lugar ng index 0 at 2 at ilagay ang wrist view sa pinakamataas na puwesto para sa isang buong session. Sinasabi mismo ng lerobot: ang klase ng camera nito ay tumatanggap ng device path pati na rin ng integer, at nagbabala na ang mga index ay hindi matatag sa mga pag-reboot o pagbabago ng port, lalo na sa Linux. Ituro ang index_or_path sa udev symlink sa ilalim ng /dev/v4l/by-id/, na sumusunod sa device sa halip na sa pagkakasunud-sunod ng enumerasyon. Ito ang pinakakaraniwang paraan kung paano nagiging hindi magkatugma sa loob ang isang dataset, at hindi ito kayang ayusin ng training. Hindi nakita ang camera.
Ang record command at bawat 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=2Ang mga default sa ibaba ay nagmula sa src/lerobot/configs/dataset.py sa main, hindi isang tutorial. Marami ang hindi inaakala ng mga tao.
| Flag | Default | Ano ang ginagawa nito |
|---|---|---|
| --dataset.repo_id | empty | pangalan; awtomatikong idinadagdag ang timestamp |
| --dataset.single_task | empty | task string na nakaimbak sa bawat episode |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | write path, default ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | control loop rate at dataset frame rate |
| --dataset.episode_time_s | 60 | segundo bago awtomatikong umusad ang isang episode |
| --dataset.reset_time_s | 60 | scene reset; gumagalaw ang braso, walang nakaimbak |
| --dataset.num_episodes | 50 | mga episode na naitala sa session na ito |
| --dataset.push_to_hub | true | i-upload sa pagtatapos ng session; ang false ay nananatiling lokal |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | i-encode habang kumukuha; itakda ito nang malinaw |
| --dataset.encoder_queue_maxsize | 30 | buffered frames bawat camera, ~1 s sa 30 fps |
| --dataset.encoder_threads | null (codec decides) | threads bawat encoder; babaan kung nag-stutter ang capture |
| --dataset.no_stamp | false | panatilihin ang repo_id nang eksakto tulad ng na-type |
| --resume | false | idagdag sa isang umiiral na dataset; nangangailangan ng --dataset.root |
Ang iyong dataset ay hindi tinatawag sa kung ano ang iyong tinype. Nagdaragdag ang lerobot ng date-time tag, kaya ang so100_pick_cube ay nagiging so100_pick_cube_20260823_141530. Gamitin ang --dataset.no_stamp=true para sa isang stable na pangalan. Ang resume ay nagbibilang ng mga karagdagan, hindi kabuuan. Sa --resume=true, binibilang ng --dataset.num_episodes ang karagdagang episodes at nagiging mandatory ang --dataset.root. Humingi ng 50 sa isang 30-episode dataset at makakakuha ka ng 80.
Pagkontrol ng keyboard sa panahon ng isang session
- Right arrow o
n: tapusin ang episode o i-reset ang phase nang maaga. Ito ang key na pinakamadalas mong gamitin, dahil ang isang malinis na paghawak ay bihirang mangailangan ng 25 segundo. - Left arrow o
r: itapon ang episode at ulitin ito. Ang isang masamang take ay walang gastos ngayon at malaki ang gastos sa huli. - Escape o
q: ihinto ang session, tapusin ang encoding, i-upload. - Gumagana ang mga ito sa X11, Wayland at headless SSH: nang walang global key backend, binabasa ng lerobot-record ang parehong mga key mula sa controlling terminal. Ang mga letra ay nakakaligtas sa laggy na SSH links, kung saan nahahati ang mga arrow sequence.
- Iba ang Keyboard teleoperation at nangangailangan ng global backend: X11, Windows, o macOS na may Accessibility.
Ilang episode, at ano ang hitsura ng isang magandang episode
Ang gabay sa pagre-record ay nagmumungkahi ng hindi bababa sa 50 episode para sa unang gawain, humigit-kumulang 10 bawat lokasyon ng bagay. Ang mga pahina ng patakaran ay naglilista ng minimum bawat modelo, kung saan ang isang pagpapatakbo ay hindi sulit sa oras ng GPU.
| Patakaran | Min. episode | Format ng Dataset | Antas ng GPU | Gastos bawat pagpapatakbo |
|---|---|---|---|---|
| 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 |
Ang mas mahusay na tanong ay kung gaano karami ng ano. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) ay nakakolekta ng mahigit 40,000 demonstrasyon at nagpatakbo ng mahigit 15,000 real-world rollout. Ang paglalahat ay sumunod sa isang halos power-law na relasyon sa bilang ng environments and objects, at lampas sa isang threshold bawat kapaligiran o bagay, ang mga karagdagang demonstrasyon ay may kaunting epekto. Sa isang bench: ilipat ang bagay, baguhin ang ilaw, palitan ang cube, sa halip na ulitin ang isang take.
- Mga tuloy-tuloy na joint trajectory na kayang kopyahin ng servo, hindi tulad ng keyboard o gamepad
- Ang aksyon at estado ay nagbabahagi ng isang coordinate convention, kaya natututo ang patakaran ng isang target na maaari nitong direktang utusan
- Ang isang 25 segundong episode kasama ang isang 10 segundong reset ay humigit-kumulang 100 episode sa isang oras
- Nararamdaman ng operator ang paghinto o pagkabuhol ng follower, kaya lumalabas ang mga pagkakamali bago ma-commit ang data
- Ang pangalawang braso ay halos nagdodoble sa gastos ng mga piyesa
- Ang mga demonstrasyon ay nagmamana ng mga gawi ng operator; natuklasan nina Mandlekar et al. na ang kalidad ng patakaran ay lubos na nakasalalay sa kalidad ng demonstrasyon
- Ang leader ay sinusuri sa bilis ng loop, kaya ang mga paghinto ay nagiging halos magkaparehong row na nagtuturo sa patakaran na maghintay
- Walang nagpapatupad ng pagkakapare-pareho sa pagitan ng mga session: ang isang camera na naitulak ng 5 cm ay isang nakatagong pagbabago sa distribusyon
Ang isang magandang episode ay nakakainip: paulit-ulit na home pose, isang bagay lang ang ginawa, natapos kapag nasa basurahan na ang bagay, task string na nasa 25 hanggang 50 karakter na inirerekomenda ng checklist. Piliin ang pulang cube at ihulog ito sa kahon ay isang task string; task1 ay ang anti-pattern na tahasang binanggit ng checklist. Ang malabong anotasyon ang nangunguna sa listahan ng mga problema nito, at pinakamahalaga ang mga ito para sa mga modelo ng vision-language-action, kung saan ang string ay isang input ng modelo, hindi isang filename.
Mga Depekto na Tahimik na Sumisira sa Isang Dataset
Wala sa mga ito ang nagtatapon ng exception. Lahat ay nakakaligtas sa training, lumalabas bilang isang loss curve na mukhang maayos at isang robot na walang ginagawa. Suriin habang naka-set up ang eksena.
| Depekto | Ano ang hitsura nito | Saan ito nagmumula | Paano ito mahuhuli |
|---|---|---|---|
| Nagkapalit na view ng camera | larawan ng pulso sa ilalim ng top key | muling pagtatalaga ng index pagkatapos ng muling pagsaksak | lerobot-find-cameras each session; by-id paths |
| Mga nakapirming frame | ang parehong larawan sa dose-dosenang row | humihinto ang camera sa paghahatid; inuulit ng loop ang huling frame | scrub it in lerobot-dataset-viz |
| Mga nahulog na frame | bilang ng row na mas mababa sa fps times seconds | umaapaw ang queue, naghuhulog sa halip na mag-block | 'Encoder queue full' in the log; rows vs fps times duration |
| Joint sa limitasyon nito | isang joint na flat sa min o max | lumalampas ang saklaw ng leader sa follower, o isang masamang middle pose | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Hindi magkasabay ang larawan at aksyon | ang policy ay nauuna o nahuhuli | mga camera na may ibang fps kaysa sa loop | keep every camera at --dataset.fps |
| Patay na oras | mahahabang sunud-sunod na magkakaparehong action row | nag-pause ang operator habang tumatakbo ang recorder | bahagi ng magkakasunod na magkakaparehong action row |
| Hindi magamit na task string | task1, demo2, test | mabilis na pagta-type | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Ang encoder ay may hawak na bounded queue bawat camera, 30 frame bilang default. Kapag hindi ito makasabay, ang mga frame ay ibinababa sa halip na harangan: nagpapatuloy ang pagkuha at walang nagka-crash. Makakakuha ka ng Encoder queue full for {camera}, dropped N frame(s) at isang kabuuang bawat camera sa pagtatapos ng episode. Ang lerobot threshold: humigit-kumulang 5 porsiyentong nawawala ay nangangahulugang isang overloaded na sistema, 2 porsiyento ang inaasahang startup load. Mga solusyon sa pagkakasunod-sunod: --display_data=false, babaan ang --dataset.encoder_threads, vcodec=h264, i-off ang streaming.
Isang babala: ang talahanayan ng gabay sa streaming-encoding ay naglilista ng default bilang True, habang ang dataclass sa main ay nagbabasa ng streaming_encoding: bool = False. Hindi magkatugma ang docs at code, kaya itakda ito nang tahasan; nagla-log ang lerobot ng pahiwatig na nagrerekomenda nito tuwing nagsisimula ito nang naka-off ang flag.
Suriin ang dataset bago umarkila ng GPU
Ang acceptance test mula sa docs: ihambing ang tagal ng video sa tagal ng episode na iniulat ng CLI, at kumpirmahin na ang bilang ng row ay katumbas ng fps times duration. Bawat episode, hindi sa kabuuan.
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"])Pagkatapos tingnan ito. lerobot-dataset-viz inirereplay ang isang episode frame by frame na may joint traces sa tabi ng mga view ng camera, sa Rerun o Foxglove. Ang mga pinagpalit na camera at frozen frames ay lumalabas sa loob ng sampung segundo. Nilalaktawan ng mga tao ang hakbang na ito.
# 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 o v3.0: magpasya bago ka mag-record
Ang v2.1 ay sumulat ng isang parquet at isang MP4 bawat episode. Pinagsasama ng v3.0 ang maraming episode sa mga shared shard at muling binubuo ang mga hangganan mula sa metadata, kaya ang info.json ay nagdadala ng mga template ng path tulad ng data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet sa halip na numero ng episode. Ang pangangatwiran sa upstream ay mas kaunti, mas malalaking file: mas mabilis na pagsisimula at mas kaunting pressure sa file-system sa scale.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Layout | isang parquet at isang MP4 bawat episode | maraming episode bawat shard |
| Metadata ng Episode | mga JSONL file | chunked parquet sa ilalim ng meta/episodes/, sa pamamagitan ng datasets stack |
| Streaming mula sa Hub | hindi | oo, sa pamamagitan ng StreamingLeRobotDataset |
| Isinulat ng lerobot 0.6.1 | hindi | oo, ang makukuha mo ngayon |
| Binasa ng GR00T N1.7 at N1.5 | oo | hindi, kailangang i-convert pababa |
Ang lerobot 0.6.1 ay sumusulat ng v3.0, ngunit ang GR00T N1.7 at N1.5 ay bumabasa ng v2.0 o v2.1 at nagka-crash dito. Tandaan ang direksyon ng paglalakbay: ang src/lerobot/scripts/ ay naglalaman ng convert_dataset_v21_to_v30.py at wala nang iba pang pabalik. Ayusin ito bago ang sesyon. Ayusin: dataset na tinanggihan bilang 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=falseDalawang ruta patungo sa parehong dataset
Lahat ng nasa itaas, sa sarili mong makina: ikaw ang may-ari ng USB enumeration, ang ffmpeg build, ang encoder tuning at ang mga calibration file. Ang tamang ruta upang maunawaan ang pipeline, magpatakbo ng hindi pangkaraniwang camera rig, o panatilihing lokal ang data.
Oras: isang gabi bawat braso para buuin, isang maselan na unang calibration, at isang unang sesyon na itatapon mo dahil nasa maling slot ang camera.
Ang desktop client ay nagre-record ng LeRobot-format na mga dataset, episode, camera stream at joint state, direkta mula sa isang teleoperasyon sesyon. Ang dataset na iyon ay nagpapakain sa training form: pumili ng modelo, dataset at hyperparameters, at ang backend ay umuupa ng GPU na ang laki ay batay sa VRAM ng modelo, pinapatakbo ang trainer at isinusulat ang checkpoints sa object storage.
- 1I-install ang client
Sa pahina ng pag-download; setup sa mga doc ng client.
- 2Mag-record mula sa isang teleop session
Paandarin ang braso; isinusulat ng client ang mga episode sa format ng LeRobot. Walkthrough: i-record ang iyong unang dataset.
- 3O dalhin ang sarili mong data
Ang isang dataset ay maaari ding magmula sa isang Hugging Face repo id o sa sarili mong makina: mga doc ng dataset, pampublikong direktoryo.
- 4Sanayin at patakbuhin muli
Piliin ang kombinasyon sa training matrix, pagkatapos ay patakbuhin muli ang policy sa braso. Humigit-kumulang 1 hanggang 3 USD sa 24 GB tier, 4 hanggang 12 sa A100 o H100 tier.
Hindi nito binubuo o kinakalibrate ang iyong braso, at hindi nito inaayos ang isang depektibong episode, kaya't nalalapat pa rin ang hakbang ng inspeksyon. Mayroon ding matinding limitasyon sa kabilang dulo: para sa mabilis na gawain, ang inference ay kailangang nasa tabi ng mga servo. Ang control loop ay tumatakbo ng 20 hanggang 485 ms bawat action step, at ang mga round trip sa pampublikong internet sa ibabaw nito ay nagiging sanhi upang ang isang gumaganang policy ay maging nag-aalangan.
Mag-record ng mga LeRobot dataset nang hindi ikaw mismo ang nagwa-wire ng pipeline
Ang AY-Robots desktop client ay nagre-record ng mga episode, camera stream at joint state sa LeRobot format mula sa isang teleoperation session, pagkatapos ay ibinibigay ang dataset sa trainer.
Kunin ang desktop clientMula dataset patungo sa policy
Limampung malinis na episode ang nagpapakain sa bawat na tumatakbo dito. nagsasanay mula sa simula sa iyong gawain lamang, humigit-kumulang 80 M parameter sa halos 20 ms bawat hakbang ng aksyon, ang tanging isa sa lima na kumportable sa mabilis na paggalaw. ay humigit-kumulang 450 M parameter sa isang 24 GB card. ay isang humigit-kumulang 3 B parameter na foundation model kung saan humahawak ng humigit-kumulang 40 M parameter, nangangailangan ng A100 o H100, at gusto ang v2.1 dataset na iyon.
Susunod, ang gabay para sa iyong kombinasyon: , o ; para sa unang pagpapatakbo, ay mas maikli. Kapag gumagana ang policy sa bench ngunit bumagsak sa sandaling ilipat mo ang mesa, iyon ay problema sa data: at ay mas malalim sa pagkakaiba-iba.
Ilang episode ba talaga ang kailangan ko para sa isang unang gumaganang policy?▾
Tatlumpu para sa SmolVLA, limampu para sa ACT, Pi0.5, GR00T N1.5 at N1.7, ang minimum na ipinapatupad ng mga trainer ng AY-Robots. Ang gabay ng LeRobot ay independiyenteng nagrerekomenda ng hindi bababa sa 50 para sa isang unang gawain, humigit-kumulang 10 bawat lokasyon ng bagay. Natuklasan ng pag-aaral sa data-scaling na ang generalisasyon ay sumusukat sa mga kapaligiran at bagay sa halip na sa bilang ng demonstrasyon, kaya ang isang daang pagkuha ng isang eksena ay mas masahol kaysa sa limampu sa limang pagkakalagay.
Kailangan ko ba ng leader arm, o maaari akong mag-teleoperate gamit ang keyboard?▾
Ang lerobot ay nagpapadala ng mga keyboard at gamepad teleoperator, kaya hindi mahigpit na kinakailangan ang isang leader arm, ngunit mas mainam ito: ang leader-follower ay nagbibigay ng tuloy-tuloy na joint trajectories sa coordinate convention ng naitalang aksyon, habang ang input ng keyboard ay gumagawa ng stepped motion na natutunan ng isang policy bilang jerk. Ang keyboard teleoperation ay nangangailangan din ng global key backend, kaya nabibigo ito sa Wayland at headless.
Maaari ba akong mag-record sa isang Raspberry Pi o isang maliit na mini PC?▾
Oo, na may tuning. Ang gabay sa streaming-encoding ay may low-resource bracket na sumasaklaw sa modernong 4-core na makina at ang Raspberry Pi 5, at naglalagay ng dalawang camera sa 640x480 at 30 fps sa column nitong nangangailangan ng ilang tuning. Ang payo nito: pigilan ang encoder na makipagkumpitensya sa capture loop, sa pamamagitan ng --dataset.rgb_encoder.vcodec=h264 at --dataset.streaming_encoding=false. Tinantya nito ang dalawang camera sa 640x480 bilang humigit-kumulang 55 milyong pixel bawat segundo at dalawa sa 1920x1080 bilang humigit-kumulang 373 milyon.
Paano ko malalaman kung ang dataset na naitala ko ay talagang malusog?▾
Tatlong murang pagsusuri. Ihambing ang video duration ng bawat episode laban sa duration na iniulat ng CLI at kumpirmahin na ang row count ay katumbas ng fps times ang duration na iyon, bawat episode sa halip na sa kabuuan; iyan ang acceptance test na ibinibigay ng encoding guide ng lerobot. Basahin ang ds.meta.stats, kung saan ang isang joint na ang min ay katumbas ng max nito ay hindi kailanman gumalaw. Pagkatapos ay i-replay ang dalawa o tatlong episode sa lerobot-dataset-viz, ang tanging paraan upang lumabas ang mga pinagpalit na view at frozen frames. Sa mga dropped frames, ang gabay ay nagtatakda ng limitasyon sa humigit-kumulang 5 porsyentong nawawala; humigit-kumulang 2 porsyento ay normal na transient load, madalas ay startup lang.
Tinanggihan ng aking training job ang dataset bilang v3.0. Ano na ngayon?▾
Ang GR00T N1.7 at N1.5 ay nagbabasa ng LeRobot v2.0 o v2.1 at nagka-crash sa v3.0, na siyang nire-record ng lerobot 0.6.1. Ayusin ang format bago magsanay, o gumamit ng policy na nagbabasa ng v3.0 nang natively: Pi0.5, SmolVLA o ACT. Ang lerobot ay nagpapadala ng v2.1 to v3.0 converter at wala sa kabaligtaran.
Sources
- LeRobot: Pag-aaral ng Panggagaya sa mga Tunay na Robot
- LeRobot: SO-100 pag-assemble, pag-set up ng motor at kalibrasyon
- LeRobot: Mga Camera at lerobot-find-cameras
- LeRobot: Pag-install at ang extras matrix
- LeRobotDataset v3.0: layout at v2.1 migrasyon
- LeRobot: Streaming video encoding at mga nawalang frame
- LeRobot: Paglilipat ng malalaking dataset sa v3.0 (DROID)
- lerobot v0.6.1 release, 3 Agosto 2026
- DatasetRecordConfig: ang tunay na recording defaults
- lerobot_record.py: record loop at paghawak ng pagpapatuloy
- TheRobotStudio/SO-ARM100: build repo at listahan ng mga materyales
- Hugging Face: Checklist ng LeRobot Community Datasets
- lerobot/svla_so100_pickplace: 50 episodes, 19,631 frames
- Lin et al. (2024), Mga Batas ng Pag-scale ng Data sa Pag-aaral ng Panggagaya
- Mandlekar et al. (2021), Ano ang Mahalaga sa Pag-aaral mula sa Offline na Demonstrasyon ng Tao
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