Halaman tutorial AY-Robots untuk merakam dataset LeRobot pertama anda dengan lengan SO-100
LeRobotSO-100Rakaman DatasetTeleoperasiPembelajaran Peniruan

Rakam Dataset LeRobot Pertama Anda Dengan SO-100

AY-Robots ResearchAugust 23, 202616 minit bacaan

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.

CiridtypeBentukPenerangan
actionfloat32[6]sasaran sendi dari lengan pemimpin
observation.statefloat32[6]kedudukan sendi yang dicapai oleh pengikut
observation.images.topvideo[480, 640, 3]kamera pemandangan, MP4 (av1 di sini)
observation.images.wristvideo[480, 640, 3]kamera pergelangan tangan, kadar yang sama
timestampfloat32[1]saat sejak permulaan episod
frame_index, episode_index, index, task_indexint64[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.

Penanda aras dari set data sebenar

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.

Entri glosari AY-Robots untuk format dataset LeRobot, menunjukkan susun atur direktori dan fail metadata
Apa yang terdapat dalam data/, videos/ dan meta/, dan dasar mana yang membaca versi mana.

Apa yang anda perlukan di meja kerja

ItemPerincianNota
Lengan pengikutSO-100, enam servo Feetech STS3215kira-kira 110 hingga 150 EUR dalam bahagian
Lengan pemimpinSO-100 kedua, gear ditanggalkangear dilucutkan dari kesemua enam motor pemimpin: pengekod sahaja, kurang geseran
Kuasadipadankan dengan varian STS3215 7.4 V dalam bil bahanlihat amaran di bawah
Kameradua kamera USB, 640x480 pada 30 fpssatu pandangan pemandangan, satu di pergelangan tangan
HosPython 3.12 atau lebih baru, ffmpegrequires-python >= 3.12
Akaun Habtoken tulis Hugging Faceoptional with --dataset.push_to_hub=false
7.4 V, bukan 12 V

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

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 ditemui pada PATH.

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

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

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

    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
    Tentukur kedua-dua lengan

    Gerakkan setiap sendi ke tengah julatnya, tekan Enter, kemudian sapu setiap satu melalui julat penuhnya. id menjadi nama fail 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 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.

    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
Di mana penentukuran disimpan, dan mengapa ID penting

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

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 memberi amaran bahawa pengecam ini mungkin berubah selepas but semula atau pasang semula, bergantung pada sistem pengendalian.

Dua 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 kamera bukan identiti yang stabil

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

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 rentetan yang dipetik oleh shell; kurungan bersarang bukan sintaks shell.

Nilai lalai di bawah datang dari src/lerobot/configs/dataset.py pada main, bukan tutorial. Beberapa daripadanya bukan seperti yang orang ramai sangka.

BenderaLalaiFungsi
--dataset.repo_idemptynama; cap masa ditambahkan secara lalai
--dataset.single_taskemptyrentetan tugas disimpan dengan setiap episod
--dataset.root$HF_LEROBOT_HOME/repo_idlaluan tulis, lalai ~/.cache/huggingface/lerobot/
--dataset.fps30kadar gelung kawalan dan kadar bingkai set data
--dataset.episode_time_s60saat sebelum episod bergerak secara automatik
--dataset.reset_time_s60tetapan semula adegan; lengan bergerak, tiada apa yang disimpan
--dataset.num_episodes50episod yang dirakam sesi ini
--dataset.push_to_hubtruemuat naik pada akhir sesi; false kekal tempatan
--dataset.streaming_encodingfalse in the dataclass, true in the docs tableenkod semasa tangkapan; tetapkan secara eksplisit
--dataset.encoder_queue_maxsize30bingkai yang dibuffer setiap kamera, ~1 s pada 30 fps
--dataset.encoder_threadsnull (codec decides)benang setiap pengekod; kurangkan jika tangkapan tersekat-sekat
--dataset.no_stampfalsekekalkan repo_id tepat seperti yang ditaip
--resumefalsetambah pada set data sedia ada; memerlukan --dataset.root
Dua bendera yang secara mengejutkan memakan masa sejam

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.

DasarEpisod minFormat set dataTahap GPUKos setiap larian
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

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.

Teleoperasi pemimpin-pengikut sebagai sumber data
Kelebihan
  • 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
Pertukaran
  • 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.

KecacatanBagaimana ia kelihatanDari mana ia datangBagaimana untuk mengesannya
Pandangan kamera bertukarimej pergelangan tangan di bawah kunci ataspenetapan semula indeks selepas penyambungan semulalerobot-find-cameras each session; by-id paths
Bingkai bekuimej yang sama untuk berpuluh-puluh bariskamera berhenti menghantar; gelung mengulang bingkai terakhirscrub it in lerobot-dataset-viz
Bingkai tercicirkiraan baris di bawah fps kali saatbarisan melimpah, tercicir daripada menyekat'Encoder queue full' in the log; rows vs fps times duration
Sendi pada hadnyasatu sendi rata pada min atau maksjulat pemimpin melebihi julat pengikut, atau pose tengah yang burukper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Imej dan tindakan tidak selarasdasar menjangka atau ketinggalankamera pada fps yang berbeza daripada gelungkeep every camera at --dataset.fps
Masa matijalur panjang baris tindakan yang samaoperator berhenti seketika dengan perakam berjalanshare of consecutive identical action rows
Rentetan tugas tidak boleh digunakantask1, demo2, testmenaip pantasmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Bingkai yang digugurkan menyembunyikan diri

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.

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"])
Episod yang jauh menyimpang dari fps kali tempoh adalah calon untuk dihapuskan, bukan untuk latihan.

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.

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 pengiraan semula statistik. Padamkan dengan murah hati: episod yang buruk menelan kos satu episod; menyimpannya menelan kos setiap larian yang dilatih dengannya.
Direktori set data AY-Robots menyenaraikan set data LeRobot awam dengan kiraan episod dan format
Bagaimana set data yang setanding saiz dan dianotasi.

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.1LeRobot v3.0
Susun Atursatu parquet dan satu MP4 bagi setiap episodbanyak episod bagi setiap serpihan
Metadata Episodfail JSONLparquet bersegmen di bawah meta/episodes/, melalui timbunan set data
Penstriman dari Habtidakya, melalui StreamingLeRobotDataset
Ditulis oleh lerobot 0.6.1tidakya, apa yang anda dapat hari ini
Dibaca oleh GR00T N1.7 dan N1.5yatidak, mesti ditukar ke bawah
Merakam hari ini, melatih GR00T esok

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.

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 episod. Skala adalah tugas yang berbeza: panduan porting lerobot, untuk DROID mentah ke v3.0, memperuntukkan 7+ hari pemprosesan tempatan dan kira-kira 400 GB.

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

Kos laluan ini

Masa: satu petang setiap lengan untuk dipasang, penentukuran pertama yang rumit, dan sesi pertama yang anda buang kerana kamera berada di slot yang salah.

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 desktop

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

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started