
Rekam dataset LeRobot yang dapat digunakan dengan SO-100: kalibrasi, teleoperasi leader-follower, flag dan default lerobot-record yang sebenarnya, pengaturan kamera, jumlah episode, dan cacat yang merusak sebuah percobaan.
Sebuah SO-100 pengikut, lengan pemimpin dengan desain yang sama, dan dua kamera USB dapat menyempurnakan kebijakan dalam satu sore. Bangku yang sama dapat dengan mudah menghasilkan enam puluh episode yang terlihat sehat di penjelajah file dan menyia-nyiakan enam jam waktu GPU. Perbedaannya jarang pada model; melainkan apa yang terjadi antara servo dan file parquet.
Berikut adalah rute manual, lalu yang lebih pendek. Setiap perintah berasal dari lerobot 0.6.1, dirilis 3 Agustus 2026 dan terkini di PyPI. Ini beralih ke titik masuk konsol, jadi tutorial yang menjalankan python lerobot/scripts/control_robot.py menjelaskan file yang tidak lagi ada.
Versi singkat
- •lerobot 0.6.1 merekam v3.0; GR00T N1.7 dan N1.5 menginginkan v2.1. Selesaikan formatnya sebelum Anda menekan rekam.
- •Empat perintah: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Gunakan --robot.id dan --teleop.id yang sama dari kalibrasi ke sesi perekaman.
- •Default sebenarnya: 30 fps, 60 detik per episode, 60 detik reset, 50 episode, sekitar 100 menit waktu nyata.
- •Episode minimum di sini: 30 untuk SmolVLA, 50 untuk sisanya.
- •Keberagaman mengalahkan volume. Dataset mati karena empat hal: indeks kamera tertukar, bingkai hilang atau beku, sendi terparkir pada batasnya, string tugas yang tidak dapat dibaca.
Apa yang ditangkap sesi perekaman
Sebuah dataset LeRobot bukanlah folder video melainkan tabel berindeks waktu dengan video terlampir: setiap detak loop kontrol menulis satu baris yang berisi tindakan yang diperintahkan, status yang dicapai pengikut, satu bingkai per kamera, stempel waktu, dan indeks. Kebijakan hanya melihat kolom-kolom tersebut. Skema lerobot/svla_so100_pickplace, dibaca dari meta/info.json-nya.
| Fitur | dtype | Shape | Apa itu |
|---|---|---|---|
| action | float32 | [6] | target sendi dari lengan pemimpin |
| observation.state | float32 | [6] | posisi sendi yang dicapai pengikut |
| observation.images.top | video | [480, 640, 3] | kamera adegan, MP4 (av1 di sini) |
| observation.images.wrist | video | [480, 640, 3] | kamera pergelangan tangan, laju yang sama |
| timestamp | float32 | [1] | detik sejak episode dimulai |
| frame_index, episode_index, index, task_index | int64 | [1] | pencatatan yang diisi otomatis |
Sendi-sendinya adalah main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll, dan main_gripper: enam derajat kebebasan SO-100. Aksi dan status memiliki bentuk yang sama karena teleoperasi pemimpin-pengikut merekam target dan posisi yang dicapai satu langkah kemudian. Kesenjangan itu adalah informasi: di mana lengan melawan gravitasi atau objek yang macet. String-string tersebut adalah milik dataset itu. Sesi yang direkam dengan 0.6.1 hari ini menulis shoulder_pan.pos hingga gripper.pos, id 1 hingga 6 pada bus: enam sendi yang sama, kunci yang berbeda, yang penting saat konfigurasi mengatasi fitur berdasarkan nama.
Dataset tersebut berisi 50 episode dan 19.631 bingkai pada 30 fps: sekitar 393 bingkai, atau 13 detik, per episode. Jika rata-rata Anda satu menit, Anda melakukan sesuatu yang lebih sulit atau merekam waktu mati di kedua ujungnya.

Apa yang Anda butuhkan di meja kerja
| Item | Detail | Catatan |
|---|---|---|
| Lengan pengikut | SO-100, six Feetech STS3215 servos | sekitar 110 hingga 150 EUR untuk suku cadang |
| Lengan pemimpin | SO-100 kedua, roda gigi dilepas | roda gigi dilepas dari keenam motor pemimpin: hanya encoder, gesekan lebih sedikit |
| Daya | disesuaikan dengan varian STS3215 7.4 V dalam daftar bahan | lihat peringatan di bawah |
| Kamera | dua kamera USB, 640x480 pada 30 fps | satu tampilan adegan, satu di pergelangan tangan |
| Host | Python 3.12 or newer, ffmpeg | requires-python >= 3.12 |
| Akun Hub | Hugging Face write token | optional with --dataset.push_to_hub=false |
STS3215 hadir dalam dua versi: README SO-ARM100 menilai versi 7.4 V pada torsi stall 16.5 kg.cm yang diukur pada 6 V dan versi 12 V pada 30 kg.cm, dan mencatat bahwa menggunakan motor 12 V juga berarti membeli catu daya 12 V 5 A+ alih-alih yang 5 V. Daftar bahan mencantumkan servo 7.4 V. Memberi daya 12 V ke servo berperingkat 7.4 V akan merusaknya, jadi baca label motor sebelum Anda melakukan pengkabelan apa pun. Servo tidak merespons.
Jika lengan belum dirakit, itu adalah pekerjaan terpisah untuk malam hari: mulailah dari memulai SO-100 dan panduan pengaturan SO-100 lengkap. Jika Anda belum membeli apa pun, baca perbandingan SO-100 dengan SO-101 terlebih dahulu: SO-101 adalah revisi yang lebih baru dengan pengkabelan yang ditingkatkan dan tanpa langkah pelepasan roda gigi, serta alur kerja perekaman yang identik.
Instal 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 membingungkan orang. pip install lerobot hanya menginstal dependensi ML inti, tidak ada yang berkomunikasi dengan robot. Lengan Koch membutuhkan dynamixel alih-alih feetech. Jika shell Anda belum pernah mendengar tentang lerobot-record, inilah alasannya.
Port, ID motor, dan kalibrasi
Tiga langkah sekali jalan memisahkan komponen dari loop teleoperasi yang berfungsi. memungkinkan kebijakan yang dilatih pada lengan Anda berjalan pada lengan orang lain, memetakan hitungan encoder mentah ke konvensi sambungan bersama.
- 1Temukan port USB setiap lengan
Jalankan dengan kedua lengan terpasang, cabut lengan yang sedang Anda identifikasi saat diminta, dan catat port mana yang menghilang. Di 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 baudrate
ID ditulis satu motor pada satu waktu, dan dokumentasi sangat ketat tentang caranya: sambungkan tepat satu motor ke papan kontroler, belum dirangkai ke motor lain. Skrip akan menelusuri rantai secara terbalik, meminta gripper terlebih dahulu dan memberinya ID 6, lalu wrist_roll sebagai 5, hingga shoulder_pan sebagai 1. Lakukan ini sebelum perakitan.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Kalibrasi kedua lengan
Gerakkan setiap sambungan ke tengah jangkauannya, tekan Enter, lalu sapukan setiap sambungan melalui jangkauan penuhnya.
idakan menjadi nama file 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 merekam apa pun
Uji penerimaan untuk semua hal di atas. Jika teleoperasi tersentak-sentak, tercermin, atau satu sambungan tidak mengikuti, perekaman akan mempertahankan hal tersebut dalam 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
Profil disimpan di $HF_LEROBOT_CALIBRATION, default ~/.cache/huggingface/lerobot/calibration, dan ID adalah kunci pencarian. Berikan lerobot-record ID yang sudah dikalibrasi dan ia akan menawarkan Enter untuk menggunakan kembali profil atau c untuk mengulanginya. Berikan ID yang tidak dikenal dan tidak ada file, sehingga ia akan masuk ke kalibrasi di tengah sesi.
Kamera menentukan apa yang dilihat oleh kebijakan
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 tampilan, dan posisinya penting: kamera pemandangan tetap yang mencakup ruang kerja, dan kamera pergelangan tangan di dekat ujung efektor menunjukkan apa yang akan disentuh oleh penjepit. Daftar periksa dataset komunitas LeRobot meminta sebaiknya dua tampilan pada 480x640 / 720p atau lebih baik, latar belakang statis, pencahayaan stabil netral, serta lengan pemimpin dan anggota tubuh manusia di luar bingkai. Panduan perekaman menambahkan aturan praktis: Anda harus dapat melakukan tugas itu sendiri hanya dengan melihat gambar kamera.
Indeks OpenCV berasal dari urutan enumerasi, sehingga reboot atau pencabutan-pasang ulang dapat membuat indeks 0 dan 2 bertukar tempat dan menempatkan tampilan pergelangan tangan di slot teratas untuk seluruh sesi. lerobot sendiri mengatakannya: kelas kameranya mengambil jalur perangkat serta bilangan bulat, dan memperingatkan bahwa indeks tidak stabil di seluruh reboot atau perubahan port, terutama di Linux. Arahkan index_or_path ke symlink udev di bawah /dev/v4l/by-id/, yang mengikuti perangkat daripada urutan enumerasi. Ini adalah cara paling umum sebuah dataset berakhir tidak konsisten secara internal, dan pelatihan tidak dapat memperbaikinya. Kamera tidak terdeteksi.
Perintah record dan setiap 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=2Default di bawah berasal dari src/lerobot/configs/dataset.py, di main, bukan tutorial. Beberapa tidak seperti yang diasumsikan orang.
| Flag | Default | Fungsinya |
|---|---|---|
| --dataset.repo_id | empty | nama; stempel waktu ditambahkan secara default |
| --dataset.single_task | empty | string tugas disimpan dengan setiap episode |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | jalur tulis, default ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | laju loop kontrol dan laju bingkai dataset |
| --dataset.episode_time_s | 60 | detik sebelum episode maju secara otomatis |
| --dataset.reset_time_s | 60 | reset adegan; lengan bergerak, tidak ada yang disimpan |
| --dataset.num_episodes | 50 | episode yang direkam sesi ini |
| --dataset.push_to_hub | true | unggah di akhir sesi; false tetap lokal |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | encode selama pengambilan; atur secara eksplisit |
| --dataset.encoder_queue_maxsize | 30 | bingkai yang di-buffer per kamera, ~1 detik pada 30 fps |
| --dataset.encoder_threads | null (codec decides) | thread per encoder; kurangi jika pengambilan tersendat |
| --dataset.no_stamp | false | pertahankan repo_id persis seperti yang diketik |
| --resume | false | tambahkan ke dataset yang sudah ada; memerlukan --dataset.root |
Dataset Anda tidak disebut seperti yang Anda ketik. lerobot menambahkan tag tanggal-waktu, sehingga so100_pick_cube menjadi so100_pick_cube_20260823_141530. Gunakan --dataset.no_stamp=true untuk nama yang stabil. Resume menghitung penambahan, bukan total. Dengan --resume=true, --dataset.num_episodes menghitung episode tambahan dan --dataset.root menjadi wajib. Minta 50 pada dataset 30 episode dan Anda akan mendapatkan 80.
Kontrol keyboard selama sesi
- Panah kanan atau
n: mengakhiri episode atau mengatur ulang fase lebih awal. Tombol yang paling sering Anda gunakan, karena genggaman yang bersih jarang membutuhkan 25 detik. - Panah kiri atau
r: membuang episode dan mengulanginya. Pengambilan yang buruk tidak merugikan sekarang dan banyak merugikan nanti. - Escape atau
q: menghentikan sesi, menyelesaikan encoding, mengunggah. - Ini berfungsi di X11, Wayland, dan SSH tanpa kepala: tanpa backend kunci global, lerobot-record membaca kunci yang sama dari terminal pengendali. Huruf-huruf ini bertahan pada tautan SSH yang lambat, di mana urutan panah terpisah.
- Teleoperasi keyboard berbeda dan memang membutuhkan backend global: X11, Windows, atau macOS dengan Aksesibilitas.
Berapa banyak episode, dan seperti apa episode yang baik
Panduan perekaman menyarankan setidaknya 50 episode untuk tugas pertama, sekitar 10 per lokasi objek. Halaman kebijakan mencantumkan jumlah minimum per model, di bawah itu sebuah eksekusi tidak sepadan dengan waktu GPU.
| Kebijakan | Episode Min | Format Dataset | Tingkat GPU | Biaya per Eksekusi |
|---|---|---|---|---|
| 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 |
Pertanyaan yang lebih baik adalah berapa banyak dari apa. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin dkk., 2024) mengumpulkan lebih dari 40.000 demonstrasi dan menjalankan lebih dari 15.000 rollout dunia nyata. Generalisasi mengikuti hubungan hukum pangkat secara kasar dengan jumlah lingkungan dan objek, dan melewati ambang batas per lingkungan atau objek, demonstrasi tambahan memiliki efek minimal. Pada satu bangku: pindahkan objek, ubah pencahayaan, tukar kubus, daripada mengulang satu pengambilan.
- Trajektori sambungan kontinu yang dapat direproduksi servo, tidak seperti keyboard atau gamepad
- Aksi dan status berbagi konvensi koordinat, sehingga kebijakan mempelajari target yang dapat diperintahkan secara langsung
- Satu episode 25 detik ditambah reset 10 detik kira-kira 100 episode per jam
- Operator merasakan follower macet atau terikat, sehingga kesalahan muncul sebelum data dikomit
- Lengan kedua secara kasar menggandakan biaya suku cadang
- Demonstrasi mewarisi kebiasaan operator; Mandlekar dkk. menemukan kualitas kebijakan sangat bergantung pada kualitas demonstrasi
- Leader diambil sampelnya pada laju loop, sehingga jeda menjadi baris yang hampir identik yang mengajarkan kebijakan untuk menunggu
- Tidak ada yang menjamin konsistensi antar sesi: kamera yang bergeser 5 cm adalah pergeseran distribusi tersembunyi
Episode yang baik itu membosankan: posisi awal yang dapat diulang, satu hal selesai, berakhir setelah objek berada di tempat sampah, string tugas dalam 25 hingga 50 karakter yang direkomendasikan daftar periksa. Ambil kubus merah dan jatuhkan ke dalam kotak adalah string tugas; task1 adalah anti-pola yang secara eksplisit disebutkan dalam daftar periksa. Anotasi yang tidak jelas menduduki daftar masalahnya, dan itu paling penting untuk model visi-bahasa-aksi, di mana string adalah masukan model, bukan nama file.
Cacat yang diam-diam merusak dataset
Tidak ada yang memicu pengecualian. Semua bertahan hingga pelatihan, muncul sebagai kurva kerugian yang terlihat baik dan robot yang tidak melakukan apa-apa. Periksa saat adegan sedang disiapkan.
| Cacat | Seperti apa bentuknya | Dari mana asalnya | Cara mendeteksinya |
|---|---|---|---|
| Tampilan kamera tertukar | gambar pergelangan tangan di bawah kunci atas | penugasan ulang indeks setelah dicolok ulang | lerobot-find-cameras each session; by-id paths |
| Bingkai beku | gambar yang sama untuk puluhan baris | kamera berhenti mengirim; loop mengulang bingkai terakhir | scrub it in lerobot-dataset-viz |
| Bingkai yang hilang | jumlah baris di bawah fps dikalikan detik | antrean meluap, menjatuhkan daripada memblokir | 'Encoder queue full' in the log; rows vs fps times duration |
| Sendi pada batasnya | satu sendi datar pada min atau maks | rentang pemimpin melebihi pengikut, atau pose tengah yang buruk | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Gambar dan aksi tidak sinkron | kebijakan mengantisipasi atau tertinggal | kamera pada fps yang berbeda dari loop | keep every camera at --dataset.fps |
| Waktu mati | urutan panjang baris aksi yang identik | operator menjeda saat perekam berjalan | proporsi baris aksi identik berturut-turut |
| String tugas tidak dapat digunakan | task1, demo2, test | mengetik cepat | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Encoder memiliki antrean terbatas per kamera, 30 frame secara default. Ketika tidak dapat mengimbangi, frame dibuang daripada diblokir: pengambilan terus berlanjut dan tidak ada yang crash. Anda akan mendapatkan Encoder queue full for {camera}, dropped N frame(s) dan total per kamera di akhir episode. Ambang batas lerobot: sekitar 5 persen yang hilang berarti sistem kelebihan beban, 2 persen adalah beban startup yang diharapkan. Perbaikan secara berurutan: --display_data=false, turunkan --dataset.encoder_threads, vcodec=h264, streaming dimatikan.
Satu peringatan: tabel panduan streaming-encoding mencantumkan default sebagai True, sementara dataclass di main membaca streaming_encoding: bool = False. Dokumen dan kode tidak setuju, jadi atur secara eksplisit; lerobot mencatat petunjuk yang merekomendasikannya setiap kali dimulai dengan flag mati.
Periksa dataset sebelum menyewa GPU
Uji penerimaan dari dokumen: bandingkan durasi video dengan durasi episode yang dilaporkan CLI, dan konfirmasikan jumlah baris sama dengan fps dikalikan durasi. Per episode, bukan pada 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"])Lalu lihatlah. lerobot-dataset-viz memutar ulang sebuah episode bingkai demi bingkai dengan jejak sendi di samping tampilan kamera, di Rerun atau Foxglove. Kamera yang tertukar dan bingkai yang beku akan terlihat dalam sepuluh detik. Orang-orang melewatkan 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 merekam
v2.1 menulis satu parquet dan satu MP4 per episode. v3.0 menggabungkan banyak episode ke dalam shard bersama dan membangun kembali batas dari metadata, sehingga info.json membawa template jalur seperti data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet alih-alih nomor episode. Justifikasi hulu adalah file yang lebih sedikit dan lebih besar: inisialisasi lebih cepat dan tekanan sistem file lebih rendah pada skala.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Tata Letak | satu parquet dan satu MP4 per episode | banyak episode per shard |
| Metadata Episode | file JSONL | parquet terpotong di bawah meta/episodes/, melalui tumpukan dataset |
| Streaming dari Hub | tidak | ya, melalui StreamingLeRobotDataset |
| Ditulis oleh lerobot 0.6.1 | tidak | ya, apa yang Anda dapatkan hari ini |
| Dibaca oleh GR00T N1.7 dan N1.5 | ya | tidak, harus dikonversi ke bawah |
lerobot 0.6.1 menulis v3.0, tetapi GR00T N1.7 dan N1.5 membaca v2.0 atau v2.1 dan mengalami crash karenanya. Perhatikan arah perjalanannya: src/lerobot/scripts/ berisi convert_dataset_v21_to_v30.py dan tidak ada yang berjalan sebaliknya. Selesaikan ini sebelum sesi. Perbaikan: dataset 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 rute ke dataset yang sama
Semua di atas, di mesin Anda sendiri: Anda memiliki enumerasi USB, build ffmpeg, penyetelan encoder, dan file kalibrasi. Rute yang tepat untuk memahami pipeline, menjalankan rig kamera yang tidak biasa, atau menyimpan data secara lokal.
Waktu: satu malam per lengan untuk merakit, kalibrasi pertama yang rumit, dan sesi pertama yang Anda buang karena kamera berada di slot yang salah.
Klien desktop merekam dataset format LeRobot, episode, aliran kamera, dan status sendi, langsung dari sesi teleoperasi. Dataset tersebut memberi makan formulir pelatihan: pilih model, dataset, dan hyperparameter, dan backend menyewa GPU yang ukurannya disesuaikan dengan VRAM model, menjalankan pelatih, dan menulis checkpoint ke penyimpanan objek.
- 1Instal klien
Di halaman unduhan; pengaturan di dokumen klien.
- 2Rekam dari sesi teleoperasi
Kendalikan lengan; klien menulis episode dalam format LeRobot. Panduan: rekam dataset pertama Anda.
- 3Atau bawa data Anda sendiri
Dataset juga dapat berasal dari ID repo Hugging Face atau mesin Anda sendiri: dokumen dataset, direktori publik.
- 4Latih dan jalankan kembali
Pilih kombinasi di matriks pelatihan, lalu jalankan kebijakan kembali pada lengan. Kira-kira 1 hingga 3 USD pada tingkat 24 GB, 4 hingga 12 pada tingkat A100 atau H100.
Ini tidak merakit atau mengkalibrasi lengan Anda, dan tidak memperbaiki episode yang cacat, jadi langkah inspeksi masih berlaku. Ada juga batas keras di ujung lain: untuk tugas cepat, inferensi harus berada di samping servo. Loop kontrol berjalan 20 hingga 485 ms per langkah tindakan, dan perjalanan pulang-pergi internet publik di atasnya mengubah kebijakan yang berfungsi menjadi kebijakan yang ragu-ragu.
Rekam dataset LeRobot tanpa memasang pipeline sendiri
Klien desktop AY-Robots merekam episode, aliran kamera, dan status sendi dalam format LeRobot dari sesi teleoperasi, lalu menyerahkan dataset ke pelatih.
Dapatkan klien desktopDari dataset ke kebijakan
Lima puluh episode bersih menjadi masukan setiap yang dijalankan di sini. dilatih dari awal hanya untuk tugas Anda, sekitar 80 juta parameter dengan kira-kira 20 ms per langkah tindakan, satu-satunya dari lima yang nyaman dengan gerakan cepat. memiliki sekitar 450 juta parameter pada kartu 24 GB. adalah model dasar dengan sekitar 3 miliar parameter di mana menyentuh sekitar 40 juta parameter, membutuhkan A100 atau H100, dan menginginkan dataset v2.1 tersebut.
Selanjutnya, panduan untuk kombinasi Anda: , atau ; untuk percobaan pertama, lebih singkat. Ketika kebijakan berfungsi di bangku uji tetapi gagal saat Anda menggerakkan meja, itu adalah masalah data: dan membahas lebih dalam tentang keragaman.
Berapa banyak episode yang sebenarnya saya butuhkan untuk kebijakan kerja pertama?▾
Tiga puluh untuk SmolVLA, lima puluh untuk ACT, Pi0.5, GR00T N1.5 dan N1.7, adalah jumlah minimum yang diberlakukan oleh pelatih AY-Robots. Panduan LeRobot secara independen merekomendasikan setidaknya 50 untuk tugas pertama, sekitar 10 per lokasi objek. Pekerjaan penskalaan data menemukan bahwa generalisasi berskala dengan lingkungan dan objek daripada jumlah demonstrasi, jadi seratus pengambilan dari satu adegan lebih buruk daripada lima puluh di lima penempatan.
Apakah saya memerlukan lengan pemimpin, atau bisakah saya melakukan teleoperasi dengan keyboard?▾
lerobot menyediakan teleoperator keyboard dan gamepad, jadi lengan pemimpin tidak mutlak diperlukan, tetapi sangat dianjurkan: pemimpin-pengikut memberikan lintasan sendi kontinu dalam konvensi koordinat tindakan yang direkam, sementara masukan keyboard menghasilkan gerakan bertahap yang dipelajari kebijakan sebagai sentakan. Teleoperasi keyboard juga membutuhkan backend kunci global, sehingga gagal di Wayland dan headless.
Bisakah saya merekam di Raspberry Pi atau mini PC kecil?▾
Ya, dengan penyetelan. Panduan streaming-encoding memiliki kategori sumber daya rendah yang mencakup mesin 4-core modern dan Raspberry Pi 5, dan menempatkan dua kamera pada 640x480 dan 30 fps di kolom 'membutuhkan sedikit penyetelan'. Sarannya: hentikan encoder bersaing dengan loop penangkapan, melalui --dataset.rgb_encoder.vcodec=h264 dan --dataset.streaming_encoding=false. Ini menilai dua kamera pada 640x480 sekitar 55 juta piksel per detik dan dua pada 1920x1080 sekitar 373 juta.
Bagaimana saya tahu dataset yang baru saya rekam benar-benar sehat?▾
Tiga pemeriksaan murah. Bandingkan durasi video setiap episode dengan durasi yang dilaporkan CLI dan konfirmasikan bahwa jumlah baris sama dengan fps dikalikan durasi tersebut, per episode daripada total; itu adalah uji penerimaan yang diberikan panduan encoding lerobot. Baca ds.meta.stats, di mana sendi yang nilai min-nya sama dengan max-nya tidak pernah bergerak. Kemudian putar ulang dua atau tiga episode di lerobot-dataset-viz, satu-satunya cara tampilan yang tertukar dan bingkai yang beku muncul. Untuk bingkai yang hilang, panduan menetapkan batas sekitar 5 persen yang hilang; sekitar 2 persen adalah beban transien normal, seringkali hanya saat startup.
Pekerjaan pelatihan saya menolak dataset sebagai v3.0. Sekarang bagaimana?▾
GR00T N1.7 dan N1.5 membaca LeRobot v2.0 atau v2.1 dan mengalami crash pada v3.0, yang merupakan format yang direkam oleh lerobot 0.6.1. Selesaikan formatnya sebelum pelatihan, atau gunakan kebijakan yang membaca v3.0 secara native: Pi0.5, SmolVLA, atau ACT. lerobot menyediakan konverter v2.1 ke v3.0 dan tidak ada yang sebaliknya.
Sources
- LeRobot: Pembelajaran Imitasi pada Robot Dunia Nyata
- LeRobot: Perakitan SO-100, pengaturan motor, dan kalibrasi
- LeRobot: Kamera dan lerobot-find-cameras
- LeRobot: Instalasi dan matriks tambahan
- LeRobotDataset v3.0: tata letak dan migrasi v2.1
- LeRobot: Pengodean video streaming dan frame yang hilang
- LeRobot: Memindahkan dataset besar ke v3.0 (DROID)
- lerobot v0.6.1 rilis, 3 Agustus 2026
- DatasetRecordConfig: default perekaman yang sebenarnya
- lerobot_record.py: loop perekaman dan penanganan resume
- TheRobotStudio/SO-ARM100: repositori build dan daftar bahan
- Hugging Face: Daftar periksa Dataset Komunitas LeRobot
- lerobot/svla_so100_pickplace: 50 episode, 19.631 frame
- Lin et al. (2024), Hukum Skala Data dalam Pembelajaran Imitasi
- Mandlekar et al. (2021), Hal-hal Penting dalam Pembelajaran dari Demonstrasi Manusia 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