Страницата со туторијал на AY-Robots за снимање на твојот прв LeRobot збир на податоци со SO-100 рака
LeRobotSO-100Снимање збир на податоциТелеоперацијаУчење со имитација

Сними го твојот прв LeRobot збир на податоци со SO-100

AY-Robots ResearchAugust 23, 202616 мин читање

Сними употреблив LeRobot збир на податоци со SO-100: калибрација, телеоперација водач-следбеник, вистинските lerobot-record знаменца и стандардни вредности, поставување камера, број на епизоди и дефектите што ја уништуваат сесијата.

Следач SO-100, водечка рака со ист дизајн и две USB камери можат да дотераат политика за едно попладне. Истата клупа може исто толку лесно да произведе шеесет епизоди кои изгледаат здрави во прелистувач на датотеки и да потроши шестчасовно GPU извршување. Разликата ретко е моделот; таа е во она што се случило помеѓу сервомоторите и parquet датотеката.

Еве го рачниот пат, а потоа пократкиот. Секоја команда е од lerobot 0.6.1, објавена на 3 август 2026 година и актуелна на PyPI. Се префрли на влезни точки на конзолата, така што упатствата што извршуваат python lerobot/scripts/control_robot.py опишуваат датотека која повеќе не постои.

Кратката верзија

  • lerobot 0.6.1 снима v3.0; GR00T N1.7 и N1.5 сакаат v2.1. Одлучете се за форматот пред да притиснете снимање.
  • Четири команди: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Пренесете ги истите --robot.id и --teleop.id од калибрацијата во сесијата за снимање.
  • Вистински стандардни вредности: 30 fps, 60 s по епизода, 60 s ресетирање, 50 епизоди, околу 100 минути реално време.
  • Минимум епизоди овде: 30 за SmolVLA, 50 за останатите.
  • Разновидноста е подобра од обемот. Сетовите на податоци умираат од четири работи: заменети индекси на камери, испуштени или замрзнати рамки, зглоб паркиран на неговата граница, нечитлив низа на задачи.

Што снима една сесија за снимање

Еден LeRobot збир на податоци не е папка со видеа, туку временски индексирана табела со прикачено видео: секој такт на контролната јамка запишува еден ред што ја содржи наредбената акција, состојбата што ја достигнал следбеникот, една рамка по камера, временски печат и индекси. Политиката ги гледа само тие колони. Шемата на lerobot/svla_so100_pickplace, прочитана од нејзиниот meta/info.json.

КарактеристикаdtypeОбликШто е тоа
actionfloat32[6]цели на зглобовите од водечката рака
observation.statefloat32[6]позиции на зглобовите што ги достигнал следбеникот
observation.images.topvideo[480, 640, 3]камера за сцена, MP4 (av1 овде)
observation.images.wristvideo[480, 640, 3]камера за зглоб, иста стапка
timestampfloat32[1]секунди од почетокот на епизодата
frame_index, episode_index, index, task_indexint64[1]автоматски пополнето сметководство

Зглобовите се main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll и main_gripper: шесте степени на слобода. Акцијата и состојбата делат иста форма бидејќи телеоперација водач-следбеник снима цел и позицијата достигната еден чекор подоцна. Таа празнина е информација: каде раката се борела со гравитацијата или заглавен објект. Тие низи се од тој збир на податоци. Сесија снимена со 0.6.1 денес запишува shoulder_pan.pos преку gripper.pos, ID-а од 1 до 6 на магистралата: истите шест зглобови, различни клучеви, што е важно во моментот кога конфигурацијата адресира карактеристика по име.

Мерка од реален збир на податоци

Тој збир на податоци содржи 50 епизоди и 19.631 рамки со 30 fps: околу 393 рамки, или 13 секунди, по епизода. Ако вашите во просек траат една минута, правите нешто потешко или снимате мртво време на двата краја.

Глосарната ставка на AY-Robots за форматот на податочното множество LeRobot, прикажувајќи го распоредот на директориумите и метаподаточните датотеки
Што се наоѓа во data/, videos/ и meta/, и кои политики ја читаат која верзија.

Што ви е потребно на работната маса

СтавкаДеталиЗабелешка
Следечка ракаSO-100, six Feetech STS3215 servosоколу 110 до 150 ЕУР во делови
Водечка ракавтора SO-100, отстранети запчаницизапчаници отстранети од сите шест водечки мотори: само енкодер, помалку триење
Напојувањесоодветно на варијантата STS3215 од 7.4 V во спецификацијата на материјаливидете го предупредувањето подолу
Камериtwo USB cameras, 640x480 at 30 fpsеден поглед на сцената, еден на зглобот
ДомаќинPython 3.12 or newer, ffmpegrequires-python >= 3.12
Сметка на HubHugging Face write tokenoptional with --dataset.push_to_hub=false
7.4 V, не 12 V

STS3215 доаѓа во две верзии: SO-ARM100 README ја оценува верзијата од 7.4 V на 16.5 kg.cm вртежен момент на застој измерен на 6 V, а верзијата од 12 V на 30 kg.cm, и забележува дека земањето на 12 V мотори исто така значи купување на напојување од 12 V 5 A+ наместо она од 5 V. Спецификацијата на материјали наведува серва од 7.4 V. Напојувањето на серва со 12 V кои се оценети за 7.4 V ги уништува, затоа прочитајте ја етикетата на моторот пред да поврзете што било. Сервото не реагира.

Ако раката сè уште не е изградена, тоа е посебна вечер: започнете од SO-100 започнување и целосен водич за поставување на SO-100. Ако сè уште ништо не сте купиле, прочитајте ја споредбата SO-100 наспроти SO-101 прво: SO-101 е поновата ревизија со подобрено ожичување и без чекор за отстранување на запчаници, а работниот тек на снимање е идентичен.

Инсталирајте 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 печати системски преглед, вклучувајќи ја верзијата на ffmpeg што може да ја најде на PATH.

Додатоците најчесто ги збунуваат луѓето. pip install lerobot инсталира само основни ML зависности, ништо што комуницира со робот. Рацете на Koch бараат dynamixel наместо feetech. Ако вашата школка никогаш не слушнала за lerobot-record, ова е причината.

Порти, ID на мотори и калибрација

Три еднократни чекори стојат помеѓу деловите и функционална телеоп јамка. овозможува политика тренирана на вашата рака да работи на туѓа, мапирајќи ги суровите вредности на енкодерот на заедничка конвенција за зглобови.

  1. 1
    Најдете ја USB портата на секоја рака

    Стартувајте го со двете раце приклучени, исклучете ја онаа што ја идентификувате кога ќе бидете прашани и забележете која порта исчезнува. На Linux можеби ќе ви треба 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
    Запишете ги ID на моторите и брзините на пренос

    Идентификаторите се запишуваат еден мотор по еден, а документацијата е строга за тоа како: поврзете точно еден мотор со контролната плоча, сè уште не поврзан со ниту еден друг. Скриптата ја поминува низата наназад, прво барајќи го гриперот и давајќи му ID 6, потоа wrist_roll како 5, па сè до shoulder_pan како 1. Направете го тоа пред склопување.

    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
    Калибрирајте ги двете раце

    Поместете го секој зглоб до средината на неговиот опсег, притиснете Enter, а потоа поминете го секој низ целиот негов опсег. id станува име на датотеката на профилот.

    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
    Телеоперирајте пред да снимите нешто

    Тестот за прифаќање за сè погоре. Ако телеоперацијата е нерамна, огледална, или еден зглоб не следи, снимањето го зачувува тоа во 50 епизоди.

    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
Каде завршува калибрацијата и зошто ID-то е важно

Профилите одат во $HF_LEROBOT_CALIBRATION, стандардно ~/.cache/huggingface/lerobot/calibration, а ID-то е клучот за пребарување. Дајте му на lerobot-record калибриран ID и тој ќе понуди Enter за повторно користење на профилот или c за повторно извршување. Дајте му непознат ID и нема да има датотека, па ќе влезе во калибрација среде сесија.

Камерите одлучуваат што гледа политиката

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
Стартувајте го ова секоја сесија: документацијата предупредува дека овие идентификатори може да се променат по рестартирање или повторно приклучување, во зависност од оперативниот систем.

Два погледи, и нивната позиција е важна: фиксна камера за сцена која го покрива работниот простор, и камера на зглобот близу крајниот ефектор која покажува што ќе допре грабежот. Контролната листа за податочни множества на заедницата LeRobot бара по можност два погледи со 480x640 / 720p или подобро, статична позадина, неутрално стабилно осветлување, а водечката рака и човечките екстремитети да бидат надвор од кадарот. Водичот за снимање додава практично правило: треба да можете да ја извршите задачата сами, гледајќи ги само сликите од камерата.

Индексот на камерата не е стабилен идентитет

Индексите на OpenCV доаѓаат од редоследот на набројување, така што рестартирање или повторно приклучување може да ги замени местата на индексите 0 и 2 и да го постави погледот од зглобот во горниот слот за цела сесија. lerobot самиот го кажува тоа: неговата класа за камера прифаќа патека до уредот, како и цел број, и предупредува дека индексите се нестабилни при рестартирање или промени на портите, особено на Linux. Насочете го index_or_path кон udev симлинкот под /dev/v4l/by-id/, кој го следи уредот наместо редоследот на набројување. Ова е најчестиот начин на кој податочното множество завршува внатрешно неконзистентно, а обуката не може да го поправи. Камерата не е детектирана.

Командата за запис и секој флаг

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
Речникот на камерата е еден стринг цитиран во школка; вгнездените загради не се синтакса на школка.

Стандардните вредности подолу доаѓаат од src/lerobot/configs/dataset.py на главната гранка, а не од туторијал. Неколку од нив не се она што луѓето го претпоставуваат.

ФлагСтандардноШто прави
--dataset.repo_idпразноиме; временски печат се додава стандардно
--dataset.single_taskпразностринг на задача зачуван со секоја епизода
--dataset.root$HF_LEROBOT_HOME/repo_idпатека за запишување, стандардно ~/.cache/huggingface/lerobot/
--dataset.fps30стапка на контролна јамка и стапка на кадри на податочното множество
--dataset.episode_time_s60секунди пред епизодата автоматски да напредува
--dataset.reset_time_s60ресетирање на сцена; раката се движи, ништо не се зачувува
--dataset.num_episodes50епизоди снимени во оваа сесија
--dataset.push_to_hubtrueпоставување на крајот на сесијата; false останува локално
--dataset.streaming_encodingfalse во dataclass, true во табелата со документацијакодирај за време на снимањето; постави го експлицитно
--dataset.encoder_queue_maxsize30баферирани кадри по камера, ~1 с при 30 fps
--dataset.encoder_threadsnull (кодекот одлучува)нишки по енкодер; намали ако снимањето сецка
--dataset.no_stampfalseчувај го repo_id точно како што е напишано
--resumefalseдодај на постоечко податочно множество; потребен е --dataset.root
Две знаменца кои чинат еден час изненадувачки

Вашето множество податоци не се вика како што напишавте. lerobot додава ознака за датум и време, така што so100_pick_cube станува so100_pick_cube_20260823_141530. Користете --dataset.no_stamp=true за стабилно име. Продолжувањето брои додатоци, а не вкупни збирови. Со --resume=true, --dataset.num_episodes брои дополнителни епизоди и --dataset.root станува задолжително. Побарајте 50 на множество податоци од 30 епизоди и ќе добиете 80.

Контрола со тастатура за време на сесија

  • Десна стрелка или n: завршете ја епизодата или ресетирајте ја фазата порано. Ова е копчето што најмногу го користите, бидејќи чистото фаќање ретко бара 25 секунди.
  • Лева стрелка или r: отфрлете ја епизодата и повторете ја. Лошото снимање не чини ништо сега, а многу подоцна.
  • Escape или q: запрете ја сесијата, завршете го кодирањето, поставете.
  • Овие работат на X11, Wayland и headless SSH: без глобален позадински систем за клучеви, lerobot-record ги чита истите клучеви од контролниот терминал. Буквите преживуваат бавни SSH врски, каде што секвенците на стрелки се делат.
  • Тастатурната телеоперација е различна и бара глобален позадински систем: X11, Windows или macOS со Accessibility.

Колку епизоди, и како изгледа добрата

Водичот за снимање предлага најмалку 50 епизоди за прва задача, околу 10 по локација на објект. Страниците со политики наведуваат минимум по модел, под кој извршувањето не вреди за времето на графичкиот процесор.

ПолитикаМин. епизодиФормат на податочно множествоНиво на графички процесорЦена по извршување
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

Подоброто прашање е колку од што. Закони за скалирање на податоци во учењето со имитација за роботска манипулација (Лин и сор., 2024) собраа над 40.000 демонстрации и извршија повеќе од 15.000 реални извршувања. Генерализацијата следеше приближно степенски законски однос со бројот на околини и објекти, а по надминување на прагот по околина или објект, дополнителните демонстрации имаа минимален ефект. На една клупа: поместете го објектот, променете го осветлувањето, заменете ја коцката, наместо да повторувате едно снимање.

Телеоперација водач-следбеник како извор на податоци
Предности
  • Континуирани траектории на зглобовите што серво може да ги репродуцира, за разлика од тастатура или гејмпад
  • Акцијата и состојбата делат координатна конвенција, така што политиката учи цел што може директно да ја командува
  • Епизода од 25 секунди плус ресетирање од 10 секунди е приближно 100 епизоди на час
  • Операторот чувствува кога следбеникот застанува или се врзува, така што грешките излегуваат на површина пред да се внесат податоците
Компромиси
  • Втора рака приближно ја удвојува цената на деловите
  • Демонстрациите ги наследуваат навиките на операторот; Мандлекар и сор. открија дека квалитетот на политиката во голема мера зависи од квалитетот на демонстрациите
  • Водачот се зема примерок со брзина на јамка, така што паузите стануваат речиси идентични редови кои ја учат политиката да чека
  • Ништо не ја наметнува конзистентноста помеѓу сесиите: камера поместена 5 cm е скриена промена на дистрибуцијата

Добра епизода е досадна: повторлива почетна поза, една работа завршена, завршена откако објектот е во корпата, низа на задача од 25 до 50 знаци како што препорачува контролната листа. Земи ја црвената коцка и стави ја во кутијата е низа на задача; task1 е анти-шаблонот што контролната листа експлицитно го именува. Нејасните анотации се на врвот на листата на проблеми, и тие се најважни за , каде што низата е влез за моделот, а не име на датотека.

Дефекти кои тивко уништуваат збир на податоци

Ниту еден не фрла исклучок. Сите преживуваат до обуката, појавувајќи се како крива на загуба која изгледа добро и робот кој не прави ништо. Проверете додека сцената е поставена.

ДефектКако изгледаОд каде доаѓаКако да се открие
Заменети погледи на камератаслика од зглобот под горниот клучпрераспределба на индексот по повторно приклучувањеlerobot-find-cameras each session; by-id paths
Замрзнати кадриистата слика за десетици редовикамерата престанува да испорачува; јамката го повторува последниот кадарscrub it in lerobot-dataset-viz
Испуштени кадриброј на редови под fps пати секундиредот се прелева, испушта наместо да блокира'Encoder queue full' in the log; rows vs fps times duration
Зглоб на својата границаеден зглоб рамно на мин или максопсегот на лидерот го надминува оној на следбеникот, или лоша средна позаper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Слика и акција надвор од чекорполитиката предвидува или заостанувакамери со различен fps од јамкатаkeep every camera at --dataset.fps
Мртво времедолги низи на идентични редови на акцијаоператорот паузирал додека снимачот работелудел на последователни идентични редови на акција
Неупотреблива низа на задачаtask1, demo2, testбрзо пишувањеmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Отфрлените рамки се кријат

Енкодерот одржува ограничена редица по камера, 30 рамки стандардно. Кога не може да одржи чекор, рамките се отфрлаат наместо да се блокираат: снимањето продолжува и ништо не паѓа. Добивате Encoder queue full for {camera}, dropped N frame(s) и вкупен број по камера на крајот од епизодата. Прагот на lerobot: околу 5 проценти недостаток значи преоптоварен систем, 2 проценти е очекувано оптоварување при стартување. Поправки по редослед: --display_data=false, намалете --dataset.encoder_threads, vcodec=h264, исклучете го стримингот.

Една забелешка: табелата во водичот за стриминг-енкодирање го наведува стандардното како True, додека класата за податоци на главната гранка чита streaming_encoding: bool = False. Документацијата и кодот не се согласуваат, затоа поставете го експлицитно; lerobot логира навестување препорачувајќи го секогаш кога ќе започне со исклучено знаменце.

Проверете го множеството податоци пред да изнајмите графичка картичка

Тестот за прифаќање од документацијата: споредете го времетраењето на видеото со времетраењето на епизодата што го пријави CLI, и потврдете дека бројот на редови е еднаков на fps пати времетраењето. По епизода, не на вкупниот збир.

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"])
Епизода која значително отстапува од fps пати времетраење е кандидат за бришење, а не за тренирање.

Потоа погледнете го. lerobot-dataset-viz го репродуцира епизодата кадар по кадар со траги од зглобови покрај погледите од камерата, во Rerun или Foxglove. Заменети камери и замрзнати кадри се појавуваат за десет секунди. Луѓето го прескокнуваат овој чекор.

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 исто така врши поделба, спојување, отстранување на карактеристики, менување задачи и повторно пресметување на статистики. Бришете великодушно: лоша епизода чини една епизода; нејзиното задржување чини секое извршување тренирано на неа.
Директориумот на податочни множества на AY-Robots ги прикажува јавните LeRobot податочни множества со број на епизоди и формати
Како се димензионираат и анотираат споредливи множества на податоци.

v2.1 или v3.0: одлучете пред да снимате

v2.1 запишуваше еден parquet и еден MP4 по епизода. v3.0 спојува многу епизоди во заеднички парчиња и ги обновува границите од метаподатоците, така што info.json содржи шаблони за патеки како data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet наместо број на епизода. Основната оправданост е помалку, поголеми датотеки: побрза иницијализација и помал притисок врз датотечниот систем при скалирање.

LeRobot v2.1LeRobot v3.0
Распоредеден parquet и еден MP4 по епизодамногу епизоди по парче
Метаподатоци за епизодаJSONL датотекипарчиња parquet под meta/episodes/, преку стекот на податочни множества
Стриминг од Hubнеда, преку StreamingLeRobotDataset
Напишано од lerobot 0.6.1неда, она што го добивате денес
Прочитано од GR00T N1.7 и N1.5дане, мора да се конвертира надолу
Снимање денес, тренирање GR00T утре

lerobot 0.6.1 запишува v3.0, но GR00T N1.7 и N1.5 читаат v2.0 или v2.1 и паѓаат на него. Забележете ја насоката на движење: src/lerobot/scripts/ содржи convert_dataset_v21_to_v30.py и ништо што оди во спротивна насока. Решете го ова пред сесијата. Поправка: податочното множество е одбиено како 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
Брзо за 50 епизоди. Скалирањето е друга работа: упатството за пренесување на LeRobot, за суров DROID во v3.0, предвидува 7+ дена локална обработка и околу 400 GB.

Два патишта до истиот сет на податоци

Сè погоре, на вашата машина: вие сте сопственик на USB енумерацијата, изградбата на ffmpeg, подесувањето на енкодерот и датотеките за калибрација. Вистинскиот пат за разбирање на цевководот, водење необична конфигурација на камера или чување податоци локално.

Што чини овој пат

Време: една вечер по рака за склопување, макотрпна прва калибрација и прва сесија што ќе ја фрлите бидејќи камерата била во погрешен слот.

Снимајте LeRobot сетови на податоци без сами да го поврзувате цевководот

Десктоп клиентот на AY-Robots снима епизоди, видео преноси од камери и состојби на зглобови во LeRobot формат од сесија за телеоперација, а потоа го предава сетот на податоци на тренерот.

Преземете го десктоп клиентот

Од збир на податоци до политика

Педесет чисти епизоди се користат за секое извршување овде. се тренира од нула само на вашата задача, околу 80 милиони параметри со приближно 20 ms по чекор на акција, единствениот од петте кој е удобен со брзо движење. е околу 450 милиони параметри на картичка од 24 GB. е приближно 3 милијарди параметри основен модел каде допира околу 40 милиони параметри, бара A100 или H100 и го сака тој v2.1 збир на податоци.

Следно, водичот за вашата комбинација: , или ; за прво извршување, е пократок. Кога политиката работи на клупата, но се распаѓа во моментот кога ќе ја поместите масата, тоа е проблем со податоците: и одат подлабоко во разновидноста.

Колку епизоди навистина ми се потребни за прва функционална политика?

Триесет за SmolVLA, педесет за ACT, Pi0.5, GR00T N1.5 и N1.7, минимумите што ги наметнуваат тренерите на AY-Robots. Водичот на LeRobot независно препорачува најмалку 50 за прва задача, околу 10 по локација на објект. Работата со скалирање на податоци покажа дека генерализацијата се скалира со околини и објекти, а не со бројот на демонстрации, така што сто снимки од една сцена се полоши од педесет низ пет поставувања.

Дали ми треба водечка рака, или можам да телеоперирам со тастатура?

lerobot испорачува телеоператори за тастатура и гејмпад, така што водечка рака не е строго потребна, но е силно препорачлива: лидер-следбеник дава континуирани траектории на зглобовите во координатна конвенција на снимената акција, додека влезот од тастатура произведува чекорно движење што политиката го учи како грчење. Телеоперацијата со тастатура исто така бара глобален клуч за позадина, така што не работи на Wayland и headless системи.

Може ли да снимам на Raspberry Pi или мал мини компјутер?

Да, со подесување. Водичот за стриминг-кодирање има опсег за ниски ресурси што ги покрива модерните 4-јадрени машини и Raspberry Pi 5, и става две камери на 640x480 и 30 fps во својата колона „бара одредено подесување“. Неговиот совет: спречете го енкодерот да се натпреварува со циклусот на снимање, преку --dataset.rgb_encoder.vcodec=h264 и --dataset.streaming_encoding=false. Оценува две камери на 640x480 како околу 55 милиони пиксели во секунда и две на 1920x1080 како околу 373 милиони.

Како да знам дека збирот на податоци што го снимив е навистина здрав?

Три евтини проверки. Споредете го времетраењето на видеото на секоја епизода со времетраењето што го пријави CLI и потврдете дека бројот на редови е еднаков на fps пати тоа времетраење, по епизода, а не вкупно; тоа е тестот за прифаќање што го дава водичот за кодирање на lerobot. Прочитајте ds.meta.stats, каде што зглоб чиј минимум е еднаков на неговиот максимум никогаш не се поместил. Потоа репродуцирајте две или три епизоди во lerobot-dataset-viz, единствениот начин на кој се појавуваат заменети прикази и замрзнати рамки. За испуштени рамки, водичот повлекува линија на приближно 5 проценти недостаток; околу 2 проценти е нормално минливо оптоварување, често само при стартување.

Мојата задача за тренирање го отфрли збирот на податоци како v3.0. Што сега?

GR00T N1.7 и N1.5 читаат LeRobot v2.0 или v2.1 и паѓаат на v3.0, што е она што го снима lerobot 0.6.1. Или договорете го форматот пред тренирање, или користете политика што чита v3.0 нативно: Pi0.5, SmolVLA или ACT. lerobot испорачува конвертор од v2.1 во v3.0 и ништо обратно.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started