
Rakam dataset LeRobot yang boleh digunakan dengan SO-100: penentukuran, teleoperasi pemimpin-pengikut, bendera dan lalai lerobot-record sebenar, persediaan kamera, kiraan episod, dan kecacatan yang merosakkan larian.
Pengikut SO-100, lengan pemimpin dengan reka bentuk yang sama dan dua kamera USB boleh memperhalusi polisi dalam masa sehari. Meja kerja yang sama boleh dengan mudah menghasilkan enam puluh episod yang kelihatan sihat dalam pelayar fail dan membazirkan larian GPU enam jam. Perbezaannya jarang sekali model; ia adalah apa yang berlaku antara servo dan fail parquet.
Berikut adalah laluan manual, kemudian yang lebih pendek. Setiap arahan adalah daripada lerobot 0.6.1, dikeluarkan pada 3 Ogos 2026 dan terkini di PyPI. Ia telah beralih ke titik masuk konsol, jadi tutorial yang menjalankan python lerobot/scripts/control_robot.py menerangkan fail yang tidak lagi wujud.
Versi ringkas
- •lerobot 0.6.1 merekod v3.0; GR00T N1.7 dan N1.5 mahukan v2.1. Selesaikan format sebelum anda menekan rekod.
- •Empat arahan: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Gunakan --robot.id dan --teleop.id yang sama dari penentukuran ke dalam sesi rakaman.
- •Lalai sebenar: 30 fps, 60 s setiap episod, 60 s set semula, 50 episod, kira-kira 100 minit masa jam dinding.
- •Episod minimum di sini: 30 untuk SmolVLA, 50 untuk yang lain.
- •Kepelbagaian mengatasi kuantiti. Set data mati disebabkan empat perkara: indeks kamera tertukar, bingkai tercicir atau beku, sendi yang diletakkan pada hadnya, rentetan tugas yang tidak boleh dibaca.
Apa yang dirakam oleh sesi rakaman
Set data LeRobot bukan folder video tetapi jadual berindeks masa dengan video dilampirkan: setiap denyutan gelung kawalan menulis satu baris yang mengandungi tindakan yang diperintahkan, keadaan yang dicapai oleh pengikut, satu bingkai bagi setiap kamera, cap masa dan indeks. Polisi hanya melihat lajur-lajur tersebut. Skema lerobot/svla_so100_pickplace, dibaca dari meta/info.jsonnya.
| Ciri | dtype | Bentuk | Penerangan |
|---|---|---|---|
| action | float32 | [6] | sasaran sendi dari lengan pemimpin |
| observation.state | float32 | [6] | kedudukan sendi yang dicapai oleh pengikut |
| observation.images.top | video | [480, 640, 3] | kamera pemandangan, MP4 (av1 di sini) |
| observation.images.wrist | video | [480, 640, 3] | kamera pergelangan tangan, kadar yang sama |
| timestamp | float32 | [1] | saat sejak permulaan episod |
| frame_index, episode_index, index, task_index | int64 | [1] | pencatatan yang diisi secara automatik |
Sendi-sendi tersebut ialah main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll dan main_gripper: enam darjah kebebasan SO-100. Tindakan dan keadaan berkongsi bentuk kerana teleoperasi pemimpin-pengikut merekodkan sasaran dan kedudukan yang dicapai satu langkah kemudian. Jurang itu adalah maklumat: di mana lengan melawan graviti atau objek yang tersekat. Rentetan-rentetan itu adalah milik set data tersebut. Sesi yang direkodkan dengan 0.6.1 hari ini menulis shoulder_pan.pos hingga gripper.pos, id 1 hingga 6 pada bas: enam sendi yang sama, kunci yang berbeza, yang penting apabila konfigurasi merujuk ciri mengikut nama.
Set data itu mengandungi 50 episod dan 19,631 bingkai pada 30 fps: kira-kira 393 bingkai, atau 13 saat, setiap episod. Jika purata anda seminit, anda melakukan sesuatu yang lebih sukar atau merekodkan masa mati di kedua-dua hujung.

Apa yang anda perlukan di meja kerja
| Item | Perincian | Nota |
|---|---|---|
| Lengan pengikut | SO-100, enam servo Feetech STS3215 | kira-kira 110 hingga 150 EUR dalam bahagian |
| Lengan pemimpin | SO-100 kedua, gear ditanggalkan | gear dilucutkan dari kesemua enam motor pemimpin: pengekod sahaja, kurang geseran |
| Kuasa | dipadankan dengan varian STS3215 7.4 V dalam bil bahan | lihat amaran di bawah |
| Kamera | dua kamera USB, 640x480 pada 30 fps | satu pandangan pemandangan, satu di pergelangan tangan |
| Hos | Python 3.12 atau lebih baru, ffmpeg | requires-python >= 3.12 |
| Akaun Hab | token tulis Hugging Face | optional with --dataset.push_to_hub=false |
STS3215 datang dalam dua versi: README SO-ARM100 menilai versi 7.4 V pada tork pegun 16.5 kg.cm yang diukur pada 6 V dan versi 12 V pada 30 kg.cm, dan menyatakan bahawa mengambil motor 12 V juga bermakna membeli bekalan 12 V 5 A+ dan bukannya yang 5 V. Bil bahan menyenaraikan servo 7.4 V. Memberi 12 V kepada servo yang dinilai 7.4 V akan merosakkannya, jadi baca label motor sebelum anda menyambung apa-apa. Servo tidak bertindak balas.
Jika lengan belum dibina, itu adalah kerja malam yang berasingan: mulakan dengan Memulakan SO-100 dan panduan persediaan SO-100 yang lengkap. Jika anda belum membeli apa-apa, baca perbandingan SO-100 dengan SO-101 dahulu: SO-101 adalah semakan yang lebih baru dengan pendawaian yang diperbaiki dan tiada langkah penyingkiran gear, dan aliran kerja rakaman adalah sama.
Pasang 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-infoEkstra paling sering mengelirukan orang. pip install lerobot memasang kebergantungan ML teras sahaja, tiada apa-apa yang berkomunikasi dengan robot. Lengan Koch memerlukan dynamixel dan bukannya feetech. Jika shell anda tidak pernah mendengar tentang lerobot-record, inilah sebabnya.
Port, ID motor dan penentukuran
Tiga langkah sekali sahaja memisahkan komponen daripada gelung teleop yang berfungsi. membolehkan polisi yang dilatih pada lengan anda berjalan pada lengan orang lain, memetakan kiraan pengekod mentah kepada konvensyen sendi yang dikongsi.
- 1Cari port USB setiap lengan
Jalankannya dengan kedua-dua lengan dipasang, cabut palam lengan yang anda kenal pasti apabila diminta, dan perhatikan port mana yang hilang. Pada Linux anda mungkin memerlukan
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. - 2Tulis ID motor dan kadar baud
ID ditulis satu motor pada satu masa, dan dokumentasi adalah ketat tentang caranya: sambungkan tepat satu motor ke papan pengawal, belum lagi disambung secara bersiri kepada yang lain. Skrip berjalan ke belakang dalam rantaian, meminta untuk gripper dahulu dan memberikannya id 6, kemudian wrist_roll sebagai 5, sehingga shoulder_pan sebagai 1. Lakukan ini sebelum pemasangan.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Tentukur kedua-dua lengan
Gerakkan setiap sendi ke tengah julatnya, tekan Enter, kemudian sapu setiap satu melalui julat penuhnya.
idmenjadi nama fail profil.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 - 4Teleoperasi sebelum merakam apa-apa
Ujian penerimaan untuk semua perkara di atas. Jika teleoperasi tersentak-sentak, bercermin, atau satu sendi tidak akan mengikut, rakaman akan mengekalkannya dalam 50 episod.
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
Profil disimpan di $HF_LEROBOT_CALIBRATION, lalai ~/.cache/huggingface/lerobot/calibration, dan ID adalah kunci carian. Berikan lerobot-record ID yang telah ditentukur dan ia akan menawarkan Enter untuk menggunakan semula profil atau c untuk melakukannya semula. Berikan ID yang tidak diketahui dan tiada fail, jadi ia akan masuk ke penentukuran di tengah sesi.
Kamera menentukan apa yang dilihat oleh polisi
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.0Dua pandangan, dan kedudukannya penting: kamera pemandangan tetap yang meliputi ruang kerja, dan kamera pergelangan tangan berhampiran penggerak akhir menunjukkan apa yang akan disentuh oleh pengepit. Senarai semak set data komuniti LeRobot meminta sebaik-baiknya dua pandangan pada 480x640 / 720p atau lebih baik, latar belakang statik, pencahayaan stabil yang neutral, dan lengan utama serta anggota badan manusia di luar bingkai. Panduan rakaman menambah peraturan umum: anda sepatutnya dapat melakukan tugas itu sendiri hanya dengan melihat imej kamera.
Indeks OpenCV berasal dari susunan enumerasi, jadi but semula atau pasang semula boleh menyebabkan indeks 0 dan 2 bertukar tempat dan meletakkan pandangan pergelangan tangan di slot teratas untuk keseluruhan sesi. lerobot sendiri menyatakan: kelas kameranya mengambil laluan peranti serta integer, dan memberi amaran bahawa indeks tidak stabil merentasi but semula atau perubahan port, terutamanya pada Linux. Tunjuk index_or_path pada symlink udev di bawah /dev/v4l/by-id/, yang mengikut peranti dan bukannya susunan enumerasi. Ini adalah cara paling biasa set data menjadi tidak konsisten secara dalaman, dan latihan tidak dapat membaikinya. Kamera tidak dikesan.
Perintah rekod dan setiap bendera
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=2Nilai lalai di bawah datang dari src/lerobot/configs/dataset.py pada main, bukan tutorial. Beberapa daripadanya bukan seperti yang orang ramai sangka.
| Bendera | Lalai | Fungsi |
|---|---|---|
| --dataset.repo_id | empty | nama; cap masa ditambahkan secara lalai |
| --dataset.single_task | empty | rentetan tugas disimpan dengan setiap episod |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | laluan tulis, lalai ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | kadar gelung kawalan dan kadar bingkai set data |
| --dataset.episode_time_s | 60 | saat sebelum episod bergerak secara automatik |
| --dataset.reset_time_s | 60 | tetapan semula adegan; lengan bergerak, tiada apa yang disimpan |
| --dataset.num_episodes | 50 | episod yang dirakam sesi ini |
| --dataset.push_to_hub | true | muat naik pada akhir sesi; false kekal tempatan |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | enkod semasa tangkapan; tetapkan secara eksplisit |
| --dataset.encoder_queue_maxsize | 30 | bingkai yang dibuffer setiap kamera, ~1 s pada 30 fps |
| --dataset.encoder_threads | null (codec decides) | benang setiap pengekod; kurangkan jika tangkapan tersekat-sekat |
| --dataset.no_stamp | false | kekalkan repo_id tepat seperti yang ditaip |
| --resume | false | tambah pada set data sedia ada; memerlukan --dataset.root |
Set data anda tidak dinamakan seperti yang anda taip. lerobot menambah tag tarikh-masa, jadi so100_pick_cube menjadi so100_pick_cube_20260823_141530. Gunakan --dataset.no_stamp=true untuk nama yang stabil. Sambung semula mengira penambahan, bukan jumlah. Dengan --resume=true, --dataset.num_episodes mengira episod tambahan dan --dataset.root menjadi mandatori. Minta 50 pada set data 30 episod dan anda akan mendapat 80.
Kawalan papan kekunci semasa sesi
- Anak panah kanan atau
n: tamatkan episod atau fasa set semula lebih awal. Kekunci yang paling kerap anda gunakan, kerana genggaman yang bersih jarang memerlukan 25 saat. - Anak panah kiri atau
r: buang episod dan ulangi. Pengambilan yang buruk tidak merugikan apa-apa sekarang dan banyak kemudian. - Escape atau
q: hentikan sesi, selesaikan pengekodan, muat naik. - Ini berfungsi pada X11, Wayland dan SSH tanpa kepala: tanpa backend kekunci global, lerobot-record membaca kekunci yang sama dari terminal kawalan. Huruf-huruf ini bertahan pada pautan SSH yang lambat, di mana urutan anak panah terpisah.
- Teleoperasi papan kekunci adalah berbeza dan memerlukan backend global: X11, Windows, atau macOS dengan Kebolehcapaian.
Berapa banyak episod, dan bagaimana rupa episod yang baik
Panduan rakaman mencadangkan sekurang-kurangnya 50 episod untuk tugas pertama, kira-kira 10 bagi setiap lokasi objek. Halaman dasar menyenaraikan minimum bagi setiap model, di bawahnya larian tidak berbaloi dengan masa GPU.
| Dasar | Episod min | Format set data | Tahap GPU | Kos setiap larian |
|---|---|---|---|---|
| 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 |
Persoalan yang lebih baik ialah berapa banyak daripada apa. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) mengumpul lebih 40,000 demonstrasi dan menjalankan lebih 15,000 larian dunia nyata. Generalisasi mengikuti hubungan hukum kuasa secara kasar dengan bilangan persekitaran dan objek, dan melepasi ambang bagi setiap persekitaran atau objek, demonstrasi tambahan mempunyai kesan yang minimum. Pada satu bangku: gerakkan objek, tukar pencahayaan, tukar kiub, daripada mengulang satu pengambilan.
- Trajektori sendi berterusan yang boleh dihasilkan semula oleh servo, tidak seperti papan kekunci atau gamepad
- Tindakan dan keadaan berkongsi konvensyen koordinat, jadi dasar mempelajari sasaran yang boleh diperintah secara langsung
- Satu episod 25 saat ditambah set semula 10 saat adalah kira-kira 100 episod sejam
- Pengendali merasakan pengikut terhenti atau terikat, jadi kerosakan muncul sebelum data diserahkan
- Lengan kedua secara kasar menggandakan kos bahagian
- Demonstrasi mewarisi tabiat pengendali; Mandlekar et al. mendapati kualiti dasar sangat bergantung pada kualiti demonstrasi
- Pemimpin disampel pada kadar gelung, jadi jeda menjadi baris yang hampir sama yang mengajar dasar untuk menunggu
- Tiada apa-apa yang menguatkuasakan konsistensi antara sesi: kamera yang teranjak 5 cm adalah anjakan taburan tersembunyi
Episod yang baik adalah membosankan: posisi rumah yang boleh diulang, satu perkara selesai, berakhir sebaik sahaja objek berada di dalam tong, rentetan tugas dalam 25 hingga 50 aksara yang disyorkan oleh senarai semak. Ambil kiub merah dan jatuhkan ke dalam kotak adalah rentetan tugas; task1 adalah anti-corak yang dinamakan secara eksplisit oleh senarai semak. Anotasi yang samar-samar mendahului senarai masalahnya, dan ia paling penting untuk model tindakan bahasa-penglihatan, di mana rentetan itu adalah input model, bukan nama fail.
Kecacatan yang secara senyap merosakkan set data
Tiada satu pun yang menimbulkan pengecualian. Semuanya bertahan sehingga latihan, muncul sebagai lengkung kerugian yang kelihatan baik dan robot yang tidak melakukan apa-apa. Semak semasa adegan sedang disediakan.
| Kecacatan | Bagaimana ia kelihatan | Dari mana ia datang | Bagaimana untuk mengesannya |
|---|---|---|---|
| Pandangan kamera bertukar | imej pergelangan tangan di bawah kunci atas | penetapan semula indeks selepas penyambungan semula | lerobot-find-cameras each session; by-id paths |
| Bingkai beku | imej yang sama untuk berpuluh-puluh baris | kamera berhenti menghantar; gelung mengulang bingkai terakhir | scrub it in lerobot-dataset-viz |
| Bingkai tercicir | kiraan baris di bawah fps kali saat | barisan melimpah, tercicir daripada menyekat | 'Encoder queue full' in the log; rows vs fps times duration |
| Sendi pada hadnya | satu sendi rata pada min atau maks | julat pemimpin melebihi julat pengikut, atau pose tengah yang buruk | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Imej dan tindakan tidak selaras | dasar menjangka atau ketinggalan | kamera pada fps yang berbeza daripada gelung | keep every camera at --dataset.fps |
| Masa mati | jalur panjang baris tindakan yang sama | operator berhenti seketika dengan perakam berjalan | share of consecutive identical action rows |
| Rentetan tugas tidak boleh digunakan | task1, demo2, test | menaip pantas | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Pengekod memegang barisan terhad bagi setiap kamera, 30 bingkai secara lalai. Apabila ia tidak dapat mengekalkan, bingkai digugurkan dan bukannya disekat: penangkapan berterusan dan tiada apa-apa yang ranap. Anda akan mendapat Encoder queue full for {camera}, dropped N frame(s) dan jumlah setiap kamera pada akhir episod. Ambang lerobot: kira-kira 5 peratus kehilangan bermakna sistem terlebih beban, 2 peratus adalah beban permulaan yang dijangka. Penyelesaian mengikut urutan: --display_data=false, kurangkan --dataset.encoder_threads, vcodec=h264, penstriman dimatikan.
Satu peringatan: jadual panduan pengekodan penstriman menyenaraikan nilai lalai sebagai True, manakala dataclass pada main membaca streaming_encoding: bool = False. Dokumen dan kod tidak bersetuju, jadi tetapkan secara eksplisit; lerobot mencatat petunjuk yang mengesyorkannya setiap kali ia bermula dengan bendera dimatikan.
Semak set data sebelum menyewa GPU
Ujian penerimaan daripada dokumen: bandingkan tempoh video dengan tempoh episod yang dilaporkan oleh CLI, dan sahkan kiraan baris sama dengan fps darab tempoh. Setiap episod, bukan pada jumlah keseluruhan.
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"])Kemudian lihatlah. lerobot-dataset-viz memainkan semula episod bingkai demi bingkai dengan jejak sendi di sebelah paparan kamera, dalam Rerun atau Foxglove. Kamera yang tertukar dan bingkai beku muncul dalam ten seconds. Orang ramai melangkau langkah ini.
# 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 atau v3.0: putuskan sebelum anda merakam
v2.1 menulis satu parquet dan satu MP4 bagi setiap episod. v3.0 menggabungkan banyak episod ke dalam serpihan kongsi dan membina semula sempadan daripada metadata, jadi info.json membawa templat laluan seperti data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet dan bukannya nombor episod. Justifikasi huluan adalah fail yang lebih sedikit dan lebih besar: permulaan yang lebih pantas dan kurang tekanan sistem fail pada skala.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Susun Atur | satu parquet dan satu MP4 bagi setiap episod | banyak episod bagi setiap serpihan |
| Metadata Episod | fail JSONL | parquet bersegmen di bawah meta/episodes/, melalui timbunan set data |
| Penstriman dari Hab | tidak | ya, melalui StreamingLeRobotDataset |
| Ditulis oleh lerobot 0.6.1 | tidak | ya, apa yang anda dapat hari ini |
| Dibaca oleh GR00T N1.7 dan N1.5 | ya | tidak, mesti ditukar ke bawah |
lerobot 0.6.1 menulis v3.0, tetapi GR00T N1.7 dan N1.5 membaca v2.0 atau v2.1 dan ranap padanya. Perhatikan arah pergerakan: src/lerobot/scripts/ mengandungi convert_dataset_v21_to_v30.py dan tiada yang bergerak ke arah lain. Selesaikan ini sebelum sesi. Penyelesaian: set data ditolak sebagai 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=falseDua laluan ke set data yang sama
Semua di atas, pada mesin anda sendiri: anda memiliki penyenaraian USB, binaan ffmpeg, penalaan pengekod dan fail penentukuran. Laluan yang tepat untuk memahami saluran paip, menjalankan persediaan kamera yang luar biasa, atau menyimpan data secara tempatan.
Masa: satu petang setiap lengan untuk dipasang, penentukuran pertama yang rumit, dan sesi pertama yang anda buang kerana kamera berada di slot yang salah.
Klien desktop merekodkan set data format LeRobot, episod, strim kamera dan keadaan sendi, terus daripada sesi teleoperasi session. Set data itu menyalurkan borang latihan: pilih model, set data dan hiperparameter, dan bahagian belakang menyewa GPU bersaiz VRAM model, menjalankan pelatih dan menulis titik semak ke storan objek.
- 1Pasang klien
Di halaman muat turun; persediaan dalam dokumen klien.
- 2Rakam dari sesi teleop
Pandu lengan; klien menulis episod dalam format LeRobot. Panduan: rekod set data pertama anda.
- 3Atau bawa data anda sendiri
Set data juga boleh datang dari ID repo Hugging Face atau mesin anda sendiri: dokumen set data, direktori awam.
- 4Latih dan jalankan semula
Pilih kombinasi pada matriks latihan, kemudian jalankan polisi kembali pada lengan. Kira-kira 1 hingga 3 USD pada peringkat 24 GB, 4 hingga 12 pada peringkat A100 atau H100.
Ia tidak memasang atau menentukur lengan anda, dan ia tidak membaiki episod yang rosak, jadi langkah pemeriksaan masih terpakai. Terdapat juga had keras di hujung yang lain: untuk tugas pantas, inferens perlu berada di sebelah servo. Gelung kawalan berjalan 20 hingga 485 ms setiap langkah tindakan, dan perjalanan pergi balik internet awam di atasnya mengubah polisi yang berfungsi menjadi polisi yang ragu-ragu.
Rakam set data LeRobot tanpa menyambung saluran paip sendiri
Klien desktop AY-Robots merekodkan episod, strim kamera dan keadaan sendi dalam format LeRobot dari sesi teleoperasi, kemudian menyerahkan set data kepada pelatih.
Dapatkan klien desktopDaripada set data kepada polisi
Lima puluh episod bersih menyalurkan setiap yang dijalankan di sini. dilatih dari awal untuk tugas anda sahaja, kira-kira 80 J parameter pada kira-kira 20 ms setiap langkah tindakan, satu-satunya daripada lima yang selesa dengan gerakan pantas. adalah kira-kira 450 J parameter pada kad 24 GB. adalah model asas kira-kira 3 B parameter di mana menyentuh kira-kira 40 J parameter, memerlukan A100 atau H100, dan memerlukan set data v2.1 itu.
Seterusnya, panduan untuk kombinasi anda: , atau ; untuk larian pertama, adalah lebih pendek. Apabila polisi berfungsi di bangku ujian tetapi runtuh sebaik sahaja anda menggerakkan meja, itu adalah masalah data: dan mendalami kepelbagaian.
Berapa banyak episod yang saya benar-benar perlukan untuk polisi pertama yang berfungsi?▾
Tiga puluh untuk SmolVLA, lima puluh untuk ACT, Pi0.5, GR00T N1.5 dan N1.7, iaitu jumlah minimum yang dikuatkuasakan oleh pelatih AY-Robots. Panduan LeRobot secara bebas mengesyorkan sekurang-kurangnya 50 untuk tugas pertama, kira-kira 10 bagi setiap lokasi objek. Kerja penskalaan data mendapati generalisasi berskala dengan persekitaran dan objek dan bukannya kiraan demonstrasi, jadi seratus rakaman satu adegan adalah lebih teruk daripada lima puluh merentasi lima penempatan.
Adakah saya memerlukan lengan utama, atau bolehkah saya mengendalikan jarak jauh dengan papan kekunci?▾
lerobot membekalkan teleoperator papan kekunci dan pad permainan, jadi lengan utama tidak diperlukan secara ketat, tetapi ia sangat diutamakan: pengikut-pemimpin memberikan trajektori sendi berterusan dalam konvensyen koordinat tindakan yang direkodkan, manakala input papan kekunci menghasilkan gerakan bertingkat yang dipelajari oleh polisi sebagai sentakan. Teleoperasi papan kekunci juga memerlukan bahagian belakang kunci global, jadi ia gagal pada Wayland dan tanpa kepala.
Bolehkah saya merekod pada Raspberry Pi atau PC mini kecil?▾
Ya, dengan penalaan. Panduan pengekodan strim mempunyai kurungan sumber rendah yang meliputi mesin 4-teras moden dan Raspberry Pi 5, dan meletakkan dua kamera pada 640x480 dan 30 fps dalam lajur 'memerlukan sedikit penalaan'. Nasihatnya: hentikan pengekod bersaing dengan gelung tangkapan, melalui --dataset.rgb_encoder.vcodec=h264 dan --dataset.streaming_encoding=false. Ia menilai dua kamera pada 640x480 sebagai kira-kira 55 juta piksel sesaat dan dua pada 1920x1080 sebagai kira-kira 373 juta.
Bagaimana saya tahu set data yang baru saya rekod sebenarnya sihat?▾
Tiga semakan mudah. Bandingkan tempoh video setiap episod dengan tempoh yang dilaporkan oleh CLI dan sahkan kiraan baris sama dengan fps darab tempoh tersebut, setiap episod dan bukannya jumlah keseluruhan; itu adalah ujian penerimaan yang diberikan oleh panduan pengekodan lerobot. Baca ds.meta.stats, di mana sendi yang minnya sama dengan maksnya tidak pernah bergerak. Kemudian mainkan semula dua atau tiga episod dalam lerobot-dataset-viz, satu-satunya cara pandangan bertukar dan bingkai beku muncul. Pada bingkai yang gugur, panduan menetapkan had pada kira-kira 5 peratus yang hilang; kira-kira 2 peratus adalah beban sementara biasa, selalunya hanya permulaan.
Tugas latihan saya menolak set data sebagai v3.0. Apa sekarang?▾
GR00T N1.7 dan N1.5 membaca LeRobot v2.0 atau v2.1 dan ranap pada v3.0, iaitu apa yang direkodkan oleh lerobot 0.6.1. Sama ada selesaikan format sebelum latihan, atau gunakan polisi yang membaca v3.0 secara asli: Pi0.5, SmolVLA atau ACT. lerobot membekalkan penukar v2.1 ke v3.0 dan tiada apa-apa secara terbalik.
Sources
- LeRobot: Pembelajaran Peniruan pada Robot Dunia Nyata
- LeRobot: Pemasangan SO-100, persediaan motor dan penentukuran
- LeRobot: Kamera dan lerobot-find-cameras
- LeRobot: Pemasangan dan matriks tambahan
- LeRobotDataset v3.0: susun atur dan migrasi v2.1
- LeRobot: Pengekodan video penstriman dan bingkai yang gugur
- LeRobot: Memindahkan set data besar ke v3.0 (DROID)
- lerobot v0.6.1 dikeluarkan, 3 Ogos 2026
- DatasetRecordConfig: tetapan lalai rakaman sebenar
- lerobot_record.py: gelung rakaman dan pengendalian sambungan
- TheRobotStudio/SO-ARM100: repositori binaan dan bil bahan
- Hugging Face: Senarai semak Set Data Komuniti LeRobot
- lerobot/svla_so100_pickplace: 50 episod, 19,631 bingkai
- Lin et al. (2024), Hukum Skala Data dalam Pembelajaran Peniruan
- Mandlekar et al. (2021), Apa yang Penting dalam Pembelajaran daripada Demonstrasi Manusia Luar Talian
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