
Запишете използваем 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 кадъра в секунда, 60 секунди на епизод, 60 секунди за нулиране, 50 епизода, около 100 минути реално време.
- •Минимален брой епизоди тук: 30 за SmolVLA, 50 за останалите.
- •Разнообразието е по-важно от обема. Наборите от данни умират от четири неща: разменени индекси на камерите, изпуснати или замръзнали кадри, става, паркирана до лимита си, нечетим низ на задачата.
Какво улавя една сесия за запис
Един набор от данни LeRobot не е папка с видеоклипове, а времево-индексирана таблица с прикачено видео: всеки такт на управляващия цикъл записва един ред, съдържащ подаденото действие, състоянието, което последователят е достигнал, един кадър на камера, времеви маркер и индекси. Политиката вижда само тези колони. Схемата на lerobot/svla_so100_pickplace, прочетена от нейния meta/info.json.
| Характеристика | тип данни | Форма | Какво представлява |
|---|---|---|---|
| action | float32 | [6] | целеви позиции на ставите от водещата ръка |
| observation.state | float32 | [6] | позиции на ставите, достигнати от последователя |
| observation.images.top | video | [480, 640, 3] | камера за сцена, MP4 (av1 тук) |
| observation.images.wrist | video | [480, 640, 3] | камера на китката, същата честота |
| timestamp | float32 | [1] | секунди от началото на епизода |
| frame_index, episode_index, index, task_index | int64 | [1] | автоматично попълвани служебни данни |
Ставите са main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll и main_gripper: шестте степени на свобода на SO-100. Действието и състоянието споделят една и съща форма, защото телеоперация водач-последовател записва цел и позицията, достигната една стъпка по-късно. Тази разлика е информация: къде ръката се е борила с гравитацията или със заседнал обект. Тези низове са от този набор от данни. Сесия, записана с 0.6.1 днес, записва shoulder_pan.pos до gripper.pos, идентификатори от 1 до 6 на шината: същите шест стави, различни ключове, което е от значение в момента, когато конфигурация адресира характеристика по име.
Този набор от данни съдържа 50 епизода и 19 631 кадъра при 30 кадъра в секунда: около 393 кадъра, или 13 секунди, на епизод. Ако вашите са средно по една минута, правите нещо по-трудно или записвате мъртво време в двата края.

Какво ви е необходимо на работната маса
| Елемент | Детайл | Забележка |
|---|---|---|
| Следващо рамо | SO-100, six Feetech STS3215 servos | около 110 до 150 EUR за части |
| Водещо рамо | втори SO-100, премахнати зъбни колела | зъбни колела премахнати от всичките шест водещи мотора: само енкодер, по-малко триене |
| Захранване | съобразено с варианта STS3215 от 7.4 V в спецификацията на материалите | вижте предупреждението по-долу |
| Камери | two USB cameras, 640x480 at 30 fps | един изглед на сцената, един на китката |
| Хост | Python 3.12 or newer, ffmpeg | requires-python >= 3.12 |
| Акаунт в Hub | Hugging Face write token | optional with --dataset.push_to_hub=false |
STS3215 се предлага в две версии: README на SO-ARM100 оценява версията от 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
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Допълнителните пакети объркват повечето хора. pip install lerobot инсталира само основни ML зависимости, нищо, което да комуникира с робот. Ръцете на Koch изискват dynamixel вместо feetech. Ако вашата обвивка никога не е чувала за lerobot-record, това е причината.
Портове, идентификатори на мотори и калибриране
Три еднократни стъпки стоят между частите и работещ телеоперационен цикъл. позволява политика, обучена на вашата ръка, да работи на чужда, като съпоставя необработените показания на енкодера към обща конвенция за ставите.
- 1Намерете USB порта на всяка ръка
Изпълнете го с включени и двете ръце, изключете тази, която идентифицирате, когато бъдете подканени, и отбележете кой порт изчезва. На Linux може да се наложи
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. - 2Запишете идентификаторите на моторите и скоростта на предаване
Идентификаторите се записват по един мотор наведнъж, а документацията е стриктна относно начина: свържете точно един мотор към контролната платка, все още не свързан последователно с друг. Скриптът обхожда веригата назад, като първо подканва за захвата и му дава ID 6, след това за wrist_roll като 5, до shoulder_pan като 1. Направете това преди сглобяването.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Калибрирайте двете ръце
Преместете всяка става в средата на нейния обхват, натиснете Enter, след това прекарайте всяка през пълния ѝ обхват.
idстава име на файла на профила.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 - 4Телеоперирайте преди да записвате каквото и да е
Приемният тест за всичко по-горе. Ако телеоперацията е накъсана, огледална или някоя става не следва, записът запазва това в 50 епизода.
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
Профилите отиват в $HF_LEROBOT_CALIBRATION, по подразбиране ~/.cache/huggingface/lerobot/calibration, а идентификаторът е ключът за търсене. Дайте на lerobot-record калибриран идентификатор и той ще предложи Enter за повторно използване на профила или c за повторно калибриране. Дайте му неизвестен идентификатор и няма да има файл, така че ще премине към калибриране по време на сесията.
Камерите определят какво вижда политиката
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 го казва: неговият клас за камера приема път до устройство, както и цяло число, и предупреждава, че индексите са нестабилни при рестартиране или промени на портове, осоsбено на Linux. Насочете index_or_path към udev символната връзка под /dev/v4l/by-id/, която следва устройството, а не реда на изброяване. Това е най-честият начин, по който един набор от данни завършва вътрешно непоследователен, и обучението не може да го поправи. Камерата не е открита.
Командата record и всеки флаг
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 в main, а не от урок. Някои от тях не са това, което хората предполагат.
| Флаг | По подразбиране | Какво прави |
|---|---|---|
| --dataset.repo_id | empty | име; времеви печат се добавя по подразбиране |
| --dataset.single_task | empty | низ на задача, съхраняван с всеки епизод |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | път за запис, по подразбиране ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | честота на управляващия цикъл и честота на кадрите на набора от данни |
| --dataset.episode_time_s | 60 | секунди преди епизодът да се придвижи автоматично |
| --dataset.reset_time_s | 60 | нулиране на сцената; ръката се движи, нищо не се съхранява |
| --dataset.num_episodes | 50 | епизоди, записани в тази сесия |
| --dataset.push_to_hub | true | качване в края на сесията; false остава локално |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | кодиране по време на заснемане; задайте го изрично |
| --dataset.encoder_queue_maxsize | 30 | буферирани кадри на камера, ~1 сек при 30 кадъра в секунда |
| --dataset.encoder_threads | null (codec decides) | нишки на енкодер; намалете, ако заснемането прекъсва |
| --dataset.no_stamp | false | запазва repo_id точно както е въведен |
| --resume | false | добавяне към съществуващ набор от данни; изисква --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 и безглав SSH: без глобален бекенд за клавиши, lerobot-record чете същите клавиши от контролиращия терминал. Буквите оцеляват при бавни SSH връзки, където последователностите от стрелки се разделят.
- Клавиатурната телеоперация е различна и изисква глобален бекенд: X11, Windows или macOS с Accessibility.
Колко епизода и как изглежда един добър
Ръководството за запис предлага поне 50 епизода за първа задача, около 10 на местоположение на обект. страниците с политики изброяват минимум за всеки модел, под който изпълнението не си струва времето на GPU.
| Политика | Мин. епизоди | Формат на набора от данни | Ниво на GPU | Цена на изпълнение |
|---|---|---|---|---|
| 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 |
По-добрият въпрос е колко от какво. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) събраха над 40 000 демонстрации и извършиха повече от 15 000 изпълнения в реалния свят. Обобщението следваше приблизително степенна зависимост с броя на среди и обекти, а след праг за всяка среда или обект, допълнителните демонстрации имаха минимален ефект. На една работна маса: преместете обекта, променете осветлението, сменете куба, вместо да повтаряте едно и също.
- Непрекъснати траектории на ставите, които серво може да възпроизведе, за разлика от клавиатура или геймпад
- Действието и състоянието споделят координатна конвенция, така че политиката научава цел, която може да командва директно
- Епизод от 25 секунди плюс 10 секунди нулиране е приблизително 100 епизода на час
- Операторът усеща, че последователят засяда или се блокира, така че грешките излизат наяве, преди данните да бъдат записани
- Втора ръка приблизително удвоява цената на частите
- Демонстрациите наследяват навиците на оператора; Mandlekar et al. установиха, че качеството на политиката зависи силно от качеството на демонстрациите
- Лидерът се семплира със скоростта на цикъла, така че паузите стават почти идентични редове, които учат политиката да чака
- Нищо не налага последователност между сесиите: камера, преместена с 5 см, е скрита промяна в разпределението
Добър епизод е скучен: повтаряща се начална поза, едно нещо е направено, приключва, когато обектът е в кофата, низът на задачата е между 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, докато класът за данни в main чете streaming_encoding: bool = False. Документацията и кодът не съвпадат, затова го задайте изрично; lerobot записва подсказка, препоръчваща това, когато стартира с изключен флаг.
Проверете набора от данни, преди да наемете GPU
Приемственият тест от документацията: сравнете продължителността на видеото с продължителността на епизода, докладвана от CLI, и потвърдете, че броят на редовете е равен на fps по продължителността. За всеки епизод, не за общата сума.
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"])След това го разгледайте. lerobot-dataset-viz възпроизвежда епизод кадър по кадър с трасировки на ставите до изгледите от камерата, в Rerun или Foxglove. Разменени камери и замръзнали кадри се появяват за десет секунди. Хората пропускат тази стъпка.
# 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 или v3.0: решете преди да записвате
v2.1 записваше един parquet и един MP4 на епизод. v3.0 обединява много епизоди в споделени сегменти и възстановява границите от метаданни, така че info.json съдържа шаблони за пътища като data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet вместо номер на епизод. Основната обосновка е по-малко, по-големи файлове: по-бърза инициализация и по-малко натоварване на файловата система в мащаб.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Оформление | един parquet и един MP4 на епизод | много епизоди на сегмент |
| Метаданни на епизода | JSONL files | сегментиран parquet под meta/episodes/, чрез стека за набори от данни |
| Поточно предаване от Hub | не | да, чрез StreamingLeRobotDataset |
| Записано от lerobot 0.6.1 | не | да, това, което получавате днес |
| Прочетено от GR00T N1.7 и N1.5 | да | не, трябва да се конвертира надолу |
lerobot 0.6.1 записва v3.0, но GR00T N1.7 и N1.5 четат v2.0 или v2.1 и се сриват при него. Обърнете внимание на посоката на движение: src/lerobot/scripts/ съдържа convert_dataset_v21_to_v30.py и нищо, което да върви в обратна посока. Уредете това преди сесията. Fix: набор от данни отхвърлен като 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=falseДва пътя към един и същ набор от данни
Всичко по-горе, на вашата собствена машина: вие притежавате USB изброяването, компилацията на ffmpeg, настройката на енкодера и калибрационните файлове. Правилният път за разбиране на конвейера, стартиране на необичайна камера или съхраняване на данни локално.
Настолният клиент записва набори от данни във формат LeRobot, епизоди, видео потоци от камери и състояния на ставите, направо от сесия за телеоперация. Този набор от данни захранва формата за обучение: изберете модел, набор от данни и хиперпараметри, а бекендът наема GPU, оразмерен според VRAM на модела, стартира обучителя и записва контролни точки в обектно хранилище.
- 1Инсталирайте клиента
На страницата за изтегляне; настройка в документацията на клиента.
- 2Запис от сесия за телеоперация
Управлявайте ръката; клиентът записва епизоди във формат LeRobot. Ръководство: запишете първия си набор от данни.
- 3Или донесете свои собствени данни
Набор от данни може да дойде и от Hugging Face repo id или от вашата собствена машина: документация за набори от данни, публична директория.
- 4Обучете и стартирайте обратно
Изберете комбинацията в матрицата за обучение, след което стартирайте политиката обратно на ръката. Приблизително 1 до 3 USD на ниво 24 GB, 4 до 12 на ниво A100 или H100.
Записвайте 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 и без глава.
Мога ли да записвам на 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 и нищо в обратна посока.
Sources
- LeRobot: Имитационно обучение на роботи от реалния свят
- LeRobot: SO-100 сглобяване, настройка на мотора и калибриране
- LeRobot: Камери и lerobot-find-cameras
- LeRobot: Инсталация и матрицата с екстри
- LeRobotDataset v3.0: оформление и миграция от v2.1
- LeRobot: Кодиране на поточно видео и изпуснати кадри
- LeRobot: Пренасяне на големи набори от данни към v3.0 (DROID)
- lerobot v0.6.1 издание, 3 август 2026
- DatasetRecordConfig: реалните настройки по подразбиране за запис
- lerobot_record.py: цикъл на запис и обработка на възобновяване
- TheRobotStudio/SO-ARM100: хранилище за изграждане и спецификация на материалите
- Hugging Face: Контролен списък за общностни набори от данни на LeRobot
- lerobot/svla_so100_pickplace: 50 епизода, 19,631 кадъра
- Lin et al. (2024), Закони за мащабиране на данни в имитационното обучение
- Mandlekar et al. (2021), Какво е важно при ученето от офлайн човешки демонстрации
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