Halaman tutorial AY-Robots untuk merekam dataset LeRobot pertama Anda dengan lengan SO-100
LeRobotSO-100Perekaman DatasetTeleoperasiPembelajaran Imitasi

Rekam Dataset LeRobot Pertama Anda Dengan SO-100

AY-Robots ResearchAugust 23, 202616 menit baca

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.

FiturdtypeShapeApa itu
actionfloat32[6]target sendi dari lengan pemimpin
observation.statefloat32[6]posisi sendi yang dicapai pengikut
observation.images.topvideo[480, 640, 3]kamera adegan, MP4 (av1 di sini)
observation.images.wristvideo[480, 640, 3]kamera pergelangan tangan, laju yang sama
timestampfloat32[1]detik sejak episode dimulai
frame_index, episode_index, index, task_indexint64[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.

Tolok Ukur dari Dataset Nyata

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.

Entri glosarium AY-Robots untuk format dataset LeRobot, menunjukkan tata letak direktori dan file metadata
Apa yang ada di data/, videos/ dan meta/, dan kebijakan mana yang membaca versi mana.

Apa yang Anda butuhkan di meja kerja

ItemDetailCatatan
Lengan pengikutSO-100, six Feetech STS3215 servossekitar 110 hingga 150 EUR untuk suku cadang
Lengan pemimpinSO-100 kedua, roda gigi dilepasroda gigi dilepas dari keenam motor pemimpin: hanya encoder, gesekan lebih sedikit
Dayadisesuaikan dengan varian STS3215 7.4 V dalam daftar bahanlihat peringatan di bawah
Kameradua kamera USB, 640x480 pada 30 fpssatu tampilan adegan, satu di pergelangan tangan
HostPython 3.12 or newer, ffmpegrequires-python >= 3.12
Akun HubHugging Face write tokenoptional with --dataset.push_to_hub=false
7.4 V, bukan 12 V

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

bash
conda create -y -n lerobot python=3.12
conda activate lerobot

# TorchCodec is the default video decoder and needs ffmpeg
conda install ffmpeg -c conda-forge

# core_scripts = dataset + hardware + viz extras (record, replay, calibrate)
# feetech     = SDK for the STS3215 bus servos in the SO-100
pip install 'lerobot[core_scripts,feetech]'

lerobot-info
lerobot-info mencetak ringkasan sistem, termasuk versi ffmpeg yang dapat ditemukannya di PATH.

Ekstra 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.

  1. 1
    Temukan 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.

    bash
    lerobot-find-port
    # Finding all available ports for the MotorsBus.
    # Ports before disconnecting: ['/dev/ttyACM0', '/dev/ttyACM1']
    # Remove the USB cable from your MotorsBus and press Enter when done.
    # The port of this MotorsBus is '/dev/ttyACM1'
    # Reconnect the USB cable.
  2. 2
    Tulis 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.

    bash
    lerobot-setup-motors \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0
    
    lerobot-setup-motors \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1
  3. 3
    Kalibrasi kedua lengan

    Gerakkan setiap sambungan ke tengah jangkauannya, tekan Enter, lalu sapukan setiap sambungan melalui jangkauan penuhnya. id akan menjadi nama file profil.

    bash
    lerobot-calibrate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_so100_follower
    
    lerobot-calibrate \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_so100_leader
  4. 4
    Teleoperasi 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.

    bash
    lerobot-teleoperate \
        --robot.type=so100_follower \
        --robot.port=/dev/ttyACM0 \
        --robot.id=my_so100_follower \
        --teleop.type=so100_leader \
        --teleop.port=/dev/ttyACM1 \
        --teleop.id=my_so100_leader \
        --display_data=true
Tempat kalibrasi disimpan, dan mengapa ID penting

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

bash
lerobot-find-cameras opencv   # or: lerobot-find-cameras realsense

# --- Detected Cameras ---
# Camera #0:
#   Name: OpenCV Camera @ 0
#   Type: OpenCV
#   Id: 0
#   Backend api: AVFOUNDATION
#   Default stream profile:
#     Format: 16.0
#     Width: 1920
#     Height: 1080
#     Fps: 15.0
Jalankan ini setiap sesi: dokumentasi memperingatkan bahwa pengidentifikasi ini dapat berubah setelah reboot atau pencabutan-pasang ulang, tergantung pada sistem operasi.

Dua 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 kamera bukanlah identitas yang stabil

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

bash
HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')

lerobot-record \
    --robot.type=so100_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_so100_follower \
    --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
    --teleop.type=so100_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_so100_leader \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/so100_pick_cube \
    --dataset.single_task="Pick the red cube and drop it in the box" \
    --dataset.num_episodes=50 \
    --dataset.fps=30 \
    --dataset.episode_time_s=25 \
    --dataset.reset_time_s=10 \
    --dataset.streaming_encoding=true \
    --dataset.encoder_threads=2
Kamus kamera adalah satu string yang dikutip shell; kurung kurawal bersarang bukan sintaks shell.

Default di bawah berasal dari src/lerobot/configs/dataset.py, di main, bukan tutorial. Beberapa tidak seperti yang diasumsikan orang.

FlagDefaultFungsinya
--dataset.repo_idemptynama; stempel waktu ditambahkan secara default
--dataset.single_taskemptystring tugas disimpan dengan setiap episode
--dataset.root$HF_LEROBOT_HOME/repo_idjalur tulis, default ~/.cache/huggingface/lerobot/
--dataset.fps30laju loop kontrol dan laju bingkai dataset
--dataset.episode_time_s60detik sebelum episode maju secara otomatis
--dataset.reset_time_s60reset adegan; lengan bergerak, tidak ada yang disimpan
--dataset.num_episodes50episode yang direkam sesi ini
--dataset.push_to_hubtrueunggah di akhir sesi; false tetap lokal
--dataset.streaming_encodingfalse in the dataclass, true in the docs tableencode selama pengambilan; atur secara eksplisit
--dataset.encoder_queue_maxsize30bingkai yang di-buffer per kamera, ~1 detik pada 30 fps
--dataset.encoder_threadsnull (codec decides)thread per encoder; kurangi jika pengambilan tersendat
--dataset.no_stampfalsepertahankan repo_id persis seperti yang diketik
--resumefalsetambahkan ke dataset yang sudah ada; memerlukan --dataset.root
Dua flag yang secara tak terduga menghabiskan waktu satu jam

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.

KebijakanEpisode MinFormat DatasetTingkat GPUBiaya per Eksekusi
SmolVLA30LeRobot v3.0RTX 4090 or any 24 GB cardabout 1 to 3 USD
ACT50LeRobot v3.0RTX 4090 or any 24 GB cardabout 1 to 3 USD
GR00T N1.750LeRobot v2.0 or v2.1A100 80 GB or H100 80 GBabout 4 to 12 USD
GR00T N1.550LeRobot v2.0 or v2.1A100 80 GB or H100 80 GBabout 4 to 12 USD
Pi0.550LeRobot v3.0A100 80 GB or H100 80 GBabout 4 to 12 USD

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.

Teleoperasi Leader-Follower sebagai Sumber Data
Keuntungan
  • 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
Pertimbangan
  • 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.

CacatSeperti apa bentuknyaDari mana asalnyaCara mendeteksinya
Tampilan kamera tertukargambar pergelangan tangan di bawah kunci ataspenugasan ulang indeks setelah dicolok ulanglerobot-find-cameras each session; by-id paths
Bingkai bekugambar yang sama untuk puluhan bariskamera berhenti mengirim; loop mengulang bingkai terakhirscrub it in lerobot-dataset-viz
Bingkai yang hilangjumlah baris di bawah fps dikalikan detikantrean meluap, menjatuhkan daripada memblokir'Encoder queue full' in the log; rows vs fps times duration
Sendi pada batasnyasatu sendi datar pada min atau maksrentang pemimpin melebihi pengikut, atau pose tengah yang burukper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Gambar dan aksi tidak sinkronkebijakan mengantisipasi atau tertinggalkamera pada fps yang berbeda dari loopkeep every camera at --dataset.fps
Waktu matiurutan panjang baris aksi yang identikoperator menjeda saat perekam berjalanproporsi baris aksi identik berturut-turut
String tugas tidak dapat digunakantask1, demo2, testmengetik cepatmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Frame yang Dibuang Menyembunyikan Diri

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.

python
from lerobot.datasets import LeRobotDataset

ds = LeRobotDataset("your-user/so100_pick_cube_20260823_141530")
print("fps:", ds.fps, "frames:", ds.num_frames)

# In v3.0 the per-episode records live in meta/episodes/ as chunked parquet:
# lengths, tasks and offsets into the shared parquet and mp4 shards.
# They load through the datasets stack, so this is a datasets.Dataset --
# use .column_names and integer indexing, not pandas .columns / .head().
eps = ds.meta.episodes
print(eps.column_names)
print(eps[0])

# Global feature statistics, including per-joint min and max.
# A joint whose min equals its max never moved. A joint sitting at a
# hard limit for most of the run is the one that will stall the policy.
print(ds.meta.stats["observation.state"])
Sebuah episode yang jauh dari fps kali durasi adalah kandidat untuk dihapus, bukan untuk pelatihan.

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.

bash
# Replay one episode with camera views and joint traces
lerobot-dataset-viz \
    --repo-id your-user/so100_pick_cube_20260823_141530 \
    --episode-index 0

# Foxglove instead, for a seekable, scrubbable timeline
lerobot-dataset-viz \
    --repo-id your-user/so100_pick_cube_20260823_141530 \
    --episode-index 0 \
    --display-mode foxglove

# Drop the episodes that did not survive review
lerobot-edit-dataset \
    --repo_id your-user/so100_pick_cube_20260823_141530 \
    --new_repo_id your-user/so100_pick_cube_clean \
    --operation.type delete_episodes \
    --operation.episode_indices "[3, 17, 41]"
lerobot-edit-dataset juga melakukan split, merge, remove_feature, modify_tasks, dan penghitungan ulang statistik. Hapus dengan murah hati: satu episode buruk hanya merugikan satu episode; menyimpannya merugikan setiap proses pelatihan yang menggunakannya.
Daftar direktori dataset AY-Robots yang menampilkan dataset LeRobot publik dengan jumlah episode dan format
Bagaimana dataset yang sebanding diukur dan dianotasi.

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.1LeRobot v3.0
Tata Letaksatu parquet dan satu MP4 per episodebanyak episode per shard
Metadata Episodefile JSONLparquet terpotong di bawah meta/episodes/, melalui tumpukan dataset
Streaming dari Hubtidakya, melalui StreamingLeRobotDataset
Ditulis oleh lerobot 0.6.1tidakya, apa yang Anda dapatkan hari ini
Dibaca oleh GR00T N1.7 dan N1.5yatidak, harus dikonversi ke bawah
Merekam hari ini, melatih GR00T besok

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.

bash
# Upgrade an older v2.1 dataset to v3.0
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube

# By default it pushes the converted dataset back to the hub and tags it v3.0.
# To convert a local copy and keep it off the hub:
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
    --repo-id=your-user/so100_pick_cube \
    --root=/path/to/dataset/directory \
    --push-to-hub=false
Cepat untuk 50 episode. Skala adalah pekerjaan yang berbeda: panduan porting lerobot, untuk DROID mentah ke v3.0, menganggarkan 7+ hari pemrosesan lokal dan sekitar 400 GB.

Dua 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.

Biaya rute ini

Waktu: satu malam per lengan untuk merakit, kalibrasi pertama yang rumit, dan sesi pertama yang Anda buang karena kamera berada di slot yang salah.

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 desktop

Dari 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started