Faqja e tutorialit AY-Robots për regjistrimin e setit tuaj të parë të dhënash LeRobot me një krah SO-100
LeRobotSO-100Regjistrimi i Setit të DhënaveTeleoperimMësimi me Imitim

Regjistroni Setin tuaj të Parë të Dhënave LeRobot Me një SO-100

AY-Robots ResearchAugust 23, 202616 min lexim

Regjistroni një set të dhënash LeRobot të përdorshëm me një SO-100: kalibrimi, teleoperimi udhëheqës-ndjekës, parametrat dhe vlerat e paracaktuara reale të lerobot-record, konfigurimi i kamerës, numri i episodeve dhe defektet që prishin një ekzekutim.

Një ndjekës SO-100, një krah udhëheqës i të njëjtës dizajn dhe dy kamera USB mund të rregullojnë një politikë në një pasdite. I njëjti stol mund të prodhojë po aq lehtë gjashtëdhjetë episode që duken të shëndetshme në një shfletues skedarësh dhe të shpërdorojë një ekzekutim GPU gjashtë-orësh. Dallimi rrallë është modeli; është ajo që ndodhi midis servove dhe skedarit parquet.

Këtu është rruga manuale, pastaj ajo më e shkurtra. Çdo komandë është nga lerobot 0.6.1, lëshuar më 3 gusht 2026 dhe aktual në PyPI. Ajo u zhvendos në pika hyrjeje të konsolës, kështu që udhëzuesit që ekzekutojnë python lerobot/scripts/control_robot.py përshkruajnë një skedar që nuk ekziston më.

Versioni i shkurtër

  • lerobot 0.6.1 regjistron v3.0; GR00T N1.7 dhe N1.5 kërkojnë v2.1. Vendosni formatin para se të shtypni regjistro.
  • Katër komanda: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Mbani të njëjtin --robot.id dhe --teleop.id nga kalibrimi në sesionin e regjistrimit.
  • Parazgjedhjet reale: 30 fps, 60 s për episod, 60 s rivendosje, 50 episode, rreth 100 minuta kohë reale.
  • Minimumi i episodeve këtu: 30 për SmolVLA, 50 për të tjerat.
  • Diversiteti mund vëllimin. Grupet e të dhënave vdesin nga katër gjëra: indekset e kamerave të shkëmbyera, kornizat e rëna ose të ngrira, një nyje e parkuar në kufirin e saj, një varg detyre i palexueshëm.

Çfarë kap një sesion regjistrimi

Një dataset i LeRobot nuk është një dosje me video, por një tabelë e indeksuar sipas kohës me video të bashkëngjitur: çdo cikël kontrolli shkruan një rresht që përmban veprimin e komanduar, gjendjen që arriti ndjekësi, një kornizë për kamerë, një vulë kohore dhe indekse. Politika sheh vetëm ato kolona. Skema e lerobot/svla_so100_pickplace, lexuar nga meta/info.json e saj.

VeçoridtypeFormaÇfarë është
actionfloat32[6]targete të nyjeve nga krahu udhëheqës
observation.statefloat32[6]pozicionet e nyjeve që arriti ndjekësi
observation.images.topvideo[480, 640, 3]kamera e skenës, MP4 (av1 këtu)
observation.images.wristvideo[480, 640, 3]kamera e kyçit të dorës, e njëjta shpejtësi
timestampfloat32[1]sekonda që nga fillimi i episodit
frame_index, episode_index, index, task_indexint64[1]mbajtje automatike e llogarive

Nyjet janë main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll dhe main_gripper: gjashtë shkallë lirie të SO-100. Veprimi dhe gjendja ndajnë një formë sepse teleoperacioni udhëheqës-ndjekës regjistron një objektiv dhe pozicionin e arritur një hap më vonë. Ky boshllëk është informacion: ku krahu luftoi gravitetin ose një objekt të ngecur. Këto vargje janë të atij dataseti. Një sesion i regjistruar me 0.6.1 sot shkruan shoulder_pan.pos deri te gripper.pos, ID 1 deri në 6 në autobus: të njëjtat gjashtë nyje, çelësa të ndryshëm, gjë që ka rëndësi në momentin kur një konfigurim i referohet një veçorie me emër.

Një pikë referimi nga një dataset real

Ky dataset përmban 50 episode dhe 19,631 korniza me 30 fps: rreth 393 korniza, ose 13 sekonda, për episod. Nëse tuajat mesatarisht janë një minutë, ju po bëni diçka më të vështirë ose po regjistroni kohë të vdekur në të dyja anët.

Hyrja e fjalorit AY-Robots për formatin e grupit të të dhënave LeRobot, duke treguar strukturën e direktorive dhe skedarët e meta të dhënave
Çfarë gjendet në data/, videos/ dhe meta/, dhe cilat politika lexojnë cilin version.

Çfarë ju nevojitet në bankën e punës

ArtikulliDetajiShënim
Krahu ndjekësSO-100, gjashtë servo Feetech STS3215rreth 110 deri në 150 EUR në pjesë
Krahu udhëheqësnjë SO-100 i dytë, ingranazhet e hequraingranazhet e hequra nga të gjashtë motorët udhëheqës: vetëm enkoder, më pak fërkim
Fuqiapërshtatur me variantin 7.4 V STS3215 në listën e materialeveshih paralajmërimin më poshtë
Kamerady kamera USB, 640x480 në 30 fpsnjë pamje skene, një në kyçin e dorës
HostPython 3.12 ose më i ri, ffmpegrequires-python >= 3.12
Llogaria e Hub-ittoken shkrimi Hugging Faceopsionale me --dataset.push_to_hub=false
7.4 V, jo 12 V

STS3215 vjen në dy versione: README i SO-ARM100 vlerëson versionin 7.4 V me një çift rrotullues bllokimi prej 16.5 kg.cm të matur në 6 V dhe versionin 12 V me 30 kg.cm, dhe thekson se marrja e motorëve 12 V do të thotë gjithashtu blerja e një furnizimi 12 V 5 A+ në vend të atij 5 V. Lista e materialeve rendit servo 7.4 V. Furnizimi me 12 V i servove të vlerësuara 7.4 V i shkatërron ato, prandaj lexoni etiketën e motorit para se të lidhni diçka. Servo nuk përgjigjet.

Nëse krahu nuk është ndërtuar ende, kjo është një mbrëmje tjetër: filloni te fillimi me SO-100 dhe udhëzuesi i plotë i konfigurimit të SO-100. Nëse nuk keni blerë asgjë, lexoni krahasimi SO-100 kundrejt SO-101 fillimisht: SO-101 është rishikimi më i ri me instalime elektrike të përmirësuara dhe pa hapin e heqjes së ingranazheve, dhe rrjedha e punës së regjistrimit është identike.

Instaloni 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 printon një përmbledhje të sistemit, duke përfshirë versionin e ffmpeg që mund të gjejë në PATH.

Ekstrat i ngatërrojnë më shumë njerëzit. pip install lerobot instalon vetëm varësitë thelbësore të ML, asgjë që komunikon me një robot. Krahët Koch kanë nevojë për dynamixel në vend të feetech. Nëse shell-i juaj nuk ka dëgjuar kurrë për lerobot-record, kjo është arsyeja.

Portet, ID-të e motorëve dhe kalibrimi

Tre hapa të veçantë qëndrojnë midis pjesëve dhe një cikli funksional teleoperimi. bën që një politikë e trajnuar në krahun tuaj të funksionojë në krahun e dikujt tjetër, duke hartuar numrat e papërpunuar të enkoderit në një konventë të përbashkët nyjesh.

  1. 1
    Gjeni portën USB të çdo krahu

    Ekzekutojeni me të dy krahët të kyçur, shkëputni atë që po identifikoni kur të kërkohet, dhe vini re cili port zhduket. Në Linux mund t'ju duhet 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
    Shkruani ID-të e motorëve dhe shpejtësitë e transmetimit

    ID-të shkruhen një motor në një kohë, dhe dokumentacioni është i rreptë për mënyrën: lidhni saktësisht një motor në bordin e kontrolluesit, ende pa u lidhur në zinxhir me ndonjë tjetër. Skripti ecën zinxhirin mbrapsht, duke kërkuar fillimisht kapësen dhe duke i dhënë ID 6, pastaj rrotullimin e kyçit të dorës si 5, deri te rrotullimi i shpatullës si 1. Bëjeni këtë para montimit.

    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
    Kalibroni të dy krahët

    Lëvizni çdo nyje në mes të diapazonit të saj, shtypni Enter, pastaj kaloni secilën nëpër diapazonin e saj të plotë. id bëhet emri i skedarit të profilit.

    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
    Teleoperoni para se të regjistroni diçka

    Testi i pranimit për gjithçka më sipër. Nëse teleoperimi është i çrregullt, i pasqyruar, ose një nyje nuk do të ndjekë, regjistrimi e ruan këtë në 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
Ku përfundon kalibrimi, dhe pse ID-ja ka rëndësi

Profilet shkojnë te $HF_LEROBOT_CALIBRATION, parazgjedhja ~/.cache/huggingface/lerobot/calibration, dhe ID-ja është çelësi i kërkimit. Jepini lerobot-record një ID të kalibruar dhe ai ofron Enter për të ripërdorur profilin ose c për ta ripërsëritur. Jepini një ID të panjohur dhe nuk ka skedar, kështu që kalon në kalibrim në mes të sesionit.

Kamerat vendosin se çfarë sheh politika

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
Ekzekutojeni këtë çdo sesion: dokumentacioni paralajmëron se këta identifikues mund të ndryshojnë pas një rindezjeje ose rilidhjeje, në varësi të sistemit operativ.

Dy pamje, dhe vendndodhja e tyre ka rëndësi: një kamerë fikse e skenës që mbulon hapësirën e punës, dhe një kamerë dore pranë efektorit fundor që tregon se çfarë do të prekë kapësja. Lista e kontrollit të grupeve të të dhënave të komunitetit LeRobot kërkon preferohet dy pamje në 480x640 / 720p ose më mirë, një sfond statik, ndriçim neutral të qëndrueshëm, dhe krahu udhëheqës dhe gjymtyrët njerëzore jashtë kornizës. Udhëzuesi i regjistrimit shton rregullin e përgjithshëm: duhet të jeni në gjendje ta kryeni vetë detyrën duke parë vetëm imazhet e kamerës.

Indeksi i kamerës nuk është një identitet i qëndrueshëm

Indekset e OpenCV vijnë nga rendi i numërimit, kështu që një rindezje ose rilidhje mund të bëjë që indekset 0 dhe 2 të ndërrojnë vendet dhe të vendosin pamjen e kyçit të dorës në vendin e sipërm për një sesion të tërë. lerobot e thotë vetë: klasa e saj e kamerës merr një shteg pajisjeje si dhe një numër të plotë, dhe paralajmëron se indekset janë të paqëndrueshme gjatë rindezjeve ose ndryshimeve të portave, veçanërisht në Linux. Drejtoni index_or_path te symlink-u i udev nën /dev/v4l/by-id/, i cili ndjek pajisjen dhe jo rendin e numërimit. Kjo është mënyra më e zakonshme që një grup të dhënash përfundon i brendshëm i paqëndrueshëm, dhe trajnimi nuk mund ta riparojë atë. Kamera nuk u zbulua.

Komanda record dhe çdo flamur

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
Fjalori i kamerës është një varg i cituar nga shell; kllapat e brendshme nuk janë sintaksë shell.

Vlerat e paracaktuara më poshtë vijnë nga src/lerobot/configs/dataset.py në main, jo nga një tutorial. Disa nuk janë ato që njerëzit supozojnë.

FlamuriParazgjedhurÇfarë bën
--dataset.repo_idboshemri; data/ora shtohet automatikisht
--dataset.single_taskboshvargu i detyrës ruhet me çdo episod
--dataset.root$HF_LEROBOT_HOME/repo_idshtegu i shkrimit, parazgjedhur ~/.cache/huggingface/lerobot/
--dataset.fps30shpejtësia e ciklit të kontrollit dhe shpejtësia e kornizave të grupit të të dhënave
--dataset.episode_time_s60sekonda para se një episod të avancojë automatikisht
--dataset.reset_time_s60rivendosja e skenës; krahu lëviz, asgjë nuk ruhet
--dataset.num_episodes50episode të regjistruara në këtë sesion
--dataset.push_to_hubtruengarkimi në fund të sesionit; false mbetet lokale
--dataset.streaming_encodingfalse in the dataclass, true in the docs tablekodimi gjatë kapjes; vendoseni në mënyrë eksplicite
--dataset.encoder_queue_maxsize30korniza të buferuara për kamerë, ~1 s në 30 fps
--dataset.encoder_threadsnull (codec decides)fije për kodues; uleni nëse kapja ndërpritet
--dataset.no_stampfalsembani repo_id saktësisht siç është shkruar
--resumefalseshtojini një grupi të dhënash ekzistues; kërkon --dataset.root
Dy flamuj që kushtojnë një orë papritur

Seti juaj i të dhënave nuk quhet siç e shkruat. lerobot shton një etiketë datë-kohë, kështu që so100_pick_cube bëhet so100_pick_cube_20260823_141530. Përdorni --dataset.no_stamp=true për një emër të qëndrueshëm. Rifillimi numëron shtesat, jo totalet. Me --resume=true, --dataset.num_episodes numëron episode shtesë dhe --dataset.root bëhet i detyrueshëm. Kërkoni 50 në një set të dhënash me 30 episode dhe merrni 80.

Kontrolli me tastierë gjatë një sesioni

  • Shigjeta djathtas ose n: përfundoni episodin ose rivendosni fazën më herët. Çelësi që përdorni më shpesh, sepse një kapje e pastër rrallë ka nevojë për 25 sekonda.
  • Shigjeta majtas ose r: hidhni episodin dhe rifillojeni. Një marrje e keqe nuk kushton asgjë tani dhe shumë më vonë.
  • Escape ose q: ndaloni sesionin, përfundoni kodimin, ngarkoni.
  • Këto funksionojnë në X11, Wayland dhe SSH pa kokë: pa një backend global të çelësave, lerobot-record lexon të njëjtat çelësa nga terminali kontrollues. Shkronjat mbijetojnë lidhjet SSH të ngadalta, ku sekuencat e shigjetave ndahen.
  • Teleoperimi me tastierë është i ndryshëm dhe ka nevojë për një backend global: X11, Windows, ose macOS me Accessibility.

Sa episode, dhe si duket një i mirë

Udhëzuesi i regjistrimit sugjeron të paktën 50 episode për një detyrë të parë, rreth 10 për vendndodhje objekti. Faqet e politikave listojnë një minimum për model, nën të cilin një ekzekutim nuk ia vlen kohën e GPU-së.

PolitikaEpisodet minFormati i grupit të të dhënaveNiveli i GPU-sëKostoja për ekzekutim
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

Pyetja më e mirë është sa dhe çfarë. Data Scaling Laws in Imitation Learning for Robotic Manipulation (Lin et al., 2024) mblodhi mbi 40,000 demonstrime dhe ekzekutoi më shumë se 15,000 prova në botën reale. Përgjithësimi ndoqi një marrëdhënie afërsisht ligj-fuqi me numrin e environments and objects, dhe pas një pragu për mjedis ose objekt, demonstrimet shtesë kishin efekt minimal. Në një bankë prove: lëvizni objektin, ndryshoni ndriçimin, ndërroni kubin, në vend që të përsërisni një marrje.

Teleoperimi udhëheqës-ndjekës si burim të dhënash
Avantazhet
  • Trajektore të vazhdueshme të nyjeve që një servo mund të riprodhojë, ndryshe nga tastiera ose gamepad-i
  • Veprimi dhe gjendja ndajnë një konventë koordinatash, kështu që politika mëson një objektiv që mund ta komandojë drejtpërdrejt
  • Një episod 25 sekonda plus një rivendosje 10 sekonda është afërsisht 100 episode në orë
  • Operatori ndjen bllokimin ose ngecjen e ndjekësit, kështu që defektet shfaqen para se të dhënat të angazhohen
Kompromise
  • Një krah i dytë afërsisht dyfishon koston e pjesëve
  • Demonstrimet trashëgojnë zakonet e operatorit; Mandlekar et al. zbuluan se cilësia e politikës varet shumë nga cilësia e demonstrimit
  • Udhëheqësi merret në mostër me shpejtësinë e ciklit, kështu që pauzat bëhen rreshta pothuajse identikë që mësojnë politikën të presë
  • Asgjë nuk garanton konsistencën midis sesioneve: një kamerë e zhvendosur 5 cm është një ndryshim i fshehur i shpërndarjes

Një episod i mirë është i mërzitshëm: pozë shtëpie e përsëritshme, një gjë e bërë, e përfunduar sapo objekti të jetë në kosh, vargu i detyrës në 25 deri në 50 karaktere që rekomandon lista kontrolluese. Pick the red cube and drop it in the box është një varg detyre; task1 është anti-modeli që lista kontrolluese e emërton shprehimisht. Shënimet e paqarta kryesojnë listën e problemeve të saj, dhe ato kanë më shumë rëndësi për , ku vargu është një hyrje modeli, jo një emër skedari.

Defekte që shkatërrojnë në heshtje një grup të dhënash

Asnjë nuk hedh një përjashtim. Të gjitha mbijetojnë në trajnim, duke u shfaqur si një kurbë humbjeje që duket mirë dhe një robot që nuk bën asgjë. Kontrolloni ndërsa skena është vendosur.

DefektiSi duketNga vjenSi ta kapësh
Pamje kamerash të shkëmbyeraimazhi i kyçit të dorës nën çelësin kryesorri-caktimi i indeksit pas një ri-lidhjejelerobot-find-cameras each session; by-id paths
Korniza të ngrirai njëjti imazh për dhjetëra rreshtakamera ndalon së dërguari; cikli përsërit kornizën e funditscrub it in lerobot-dataset-viz
Korniza të rënanumri i rreshtave nën fps herë sekondaradha tejmbushet, lëshon në vend që të bllokojë'Encoder queue full' in the log; rows vs fps times duration
Nyja në kufirin e sajnjë nyje e sheshtë në min ose maxgama e liderit tejkalon atë të ndjekësit, ose një pozë e keqe e mesmeper-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand
Imazhi dhe veprimi jashtë sinkronizimitpolitika parashikon ose mbetet prapakamerat me një fps të ndryshëm nga ciklikeep every camera at --dataset.fps
Kohë e vdekurvargje të gjata rreshtash veprimi identikëoperatori ndaloi me regjistruesin në punëshare of consecutive identical action rows
Varg detyre i papërdorshëmtask1, demo2, testshtypje e shpejtëmeta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks
Kornizat e rëna fshihen vetë

Koduesi mban një radhë të kufizuar për çdo kamerë, 30 korniza si parazgjedhje. Kur nuk mund të mbajë ritmin, kornizat hiqen në vend që të bllokohen: kapja vazhdon dhe asgjë nuk rrëzohet. Ju merrni Encoder queue full for {camera}, dropped N frame(s) dhe një total për kamerë në fund të episodit. Pragu i lerobot: rreth 5 për qind mungesë do të thotë një sistem i mbingarkuar, 2 për qind është ngarkesë e pritshme fillestare. Zgjidhjet në rend: --display_data=false, ulni --dataset.encoder_threads, vcodec=h264, transmetimi i fikur.

Një paralajmërim: tabela e udhëzuesit të transmetimit-kodimit liston parazgjedhjen si True, ndërsa dataclass në main lexon streaming_encoding: bool = False. Dokumentacioni dhe kodi nuk pajtohen, prandaj vendoseni në mënyrë eksplicite; lerobot regjistron një sugjerim duke e rekomanduar sa herë që fillon me flamurin e fikur.

Kontrolloni grupin e të dhënave para se të merrni me qira një GPU

Testi i pranimit nga dokumentacioni: krahasoni kohëzgjatjen e videos me kohëzgjatjen e episodit të raportuar nga CLI, dhe konfirmoni që numri i rreshtave është i barabartë me fps herë kohëzgjatjen. Për episod, jo në 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"])
Një episod shumë larg nga fps herë kohëzgjatja është një kandidat për fshirje, jo për trajnim.

Pastaj shikoje. lerobot-dataset-viz riprodhon një episod kornizë pas kornize me gjurmë nyjesh pranë pamjeve të kamerës, në Rerun ose Foxglove. Kamerat e shkëmbyera dhe kornizat e ngrira shfaqen brenda dhjetë sekondave. Njerëzit e anashkalojnë këtë hap.

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 gjithashtu bën ndarje, bashkim, heqje veçorie, modifikim detyrash dhe rikalkulim statistikash. Fshini me bujari: një episod i keq kushton një episod; mbajtja e tij kushton çdo ekzekutim të trajnuar mbi të.
Lista e direktorisë së grupeve të të dhënave AY-Robots që tregon grupet publike të të dhënave LeRobot me numrin e episodeve dhe formatet
Si maten dhe shënohen grupet e të dhënave të krahasueshme.

v2.1 ose v3.0: vendosni para se të regjistroni

v2.1 shkruante një parquet dhe një MP4 për çdo episod. v3.0 bashkon shumë episode në sharda të përbashkëta dhe rindërton kufijtë nga metadatat, kështu që info.json përmban shabllone rrugësh si data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet në vend të një numri episodi. Justifikimi i sipërm është më pak skedarë, por më të mëdhenj: inicializim më i shpejtë dhe më pak presion në sistemin e skedarëve në shkallë të gjerë.

LeRobot v2.1LeRobot v3.0
Paraqitjanjë parquet dhe një MP4 për episodshumë episode për shard
Metadatat e episoditSkedarë JSONLparquet i ndarë nën meta/episodes/, nëpërmjet stack-ut të dataset-eve
Transmetimi nga Hub-ijopo, nëpërmjet StreamingLeRobotDataset
Shkruar nga lerobot 0.6.1jopo, ajo që merrni sot
Lexuar nga GR00T N1.7 dhe N1.5pojo, duhet të konvertohet poshtë
Regjistrimi sot, trajnimi i GR00T nesër

lerobot 0.6.1 shkruan v3.0, por GR00T N1.7 dhe N1.5 lexojnë v2.0 ose v2.1 dhe bien në të. Vini re drejtimin e lëvizjes: src/lerobot/scripts/ përmban convert_dataset_v21_to_v30.py dhe asgjë që shkon në drejtimin tjetër. Zgjidhni këtë para sesionit. Zgjidhja: dataset-i u refuzua si 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
Shpejt për 50 episode. Shkallëzimi është një punë tjetër: udhëzuesi i portimit të lerobot, për DROID të papërpunuar në v3.0, parashikon 7+ ditë përpunim lokal dhe rreth 400 GB.

Dy rrugë drejt të njëjtit grup të dhënash

Gjithçka më sipër, në makinën tuaj: ju zotëroni enumerimin USB, ndërtimin e ffmpeg, rregullimin e enkoderit dhe skedarët e kalibrimit. Rruga e duhur për të kuptuar tubacionin, për të drejtuar një pajisje të pazakontë kamerash, ose për të mbajtur të dhënat lokale.

Çfarë kushton kjo rrugë

Koha: një mbrëmje për krah për montim, një kalibrim i parë i vështirë, dhe një sesion i parë që e hidhni poshtë sepse një kamera ishte në vendin e gabuar.

Regjistroni grupe të dhënash LeRobot pa lidhur vetë tubacionin

Klienti i desktopit AY-Robots regjistron episode, transmetime kamerash dhe gjendje nyjesh në formatin LeRobot nga një sesion teleoperacioni, pastaj ia dorëzon grupin e të dhënave trajnerit.

Merrni klientin e desktopit

Nga grupi i të dhënave te politika

Pesëdhjetë episode të pastra ushqejnë çdo mësim imitues që ekzekutohet këtu. ACT trajnohet nga e para vetëm në detyrën tuaj, rreth 80 M parametra me afërsisht 20 ms për hap veprimi, i vetmi nga të pesë që është i përshtatshëm me lëvizje të shpejtë. SmolVLA ka rreth 450 M parametra në një kartë 24 GB. GR00T N1.7 është një model themelor me rreth 3 B parametra ku akordimi i imët prek rreth 40 M parametra, kërkon një A100 ose H100, dhe dëshiron atë grup të dhënash v2.1.

Më pas, udhëzuesi për kombinimin tuaj: ACT on SO-100, SmolVLA on SO-100 ose GR00T N1.7 on SO-100; për një ekzekutim të parë, trajnoni politikën tuaj të parë është më i shkurtër. Kur politika funksionon në bankë por kolapson në momentin që lëvizni tavolinën, ky është një problem me të dhënat: politika funksionon vetëm në një konfigurim dhe mbledhja e të dhënave trajnuese VLA me cilësi të lartë thellohen më shumë në diversitet.

Sa episode më duhen realisht për një politikë të parë funksionale?

Tridhjetë për SmolVLA, pesëdhjetë për ACT, Pi0.5, GR00T N1.5 dhe N1.7, minimumet që zbatojnë trajnerët e AY-Robots. Udhëzuesi i LeRobot rekomandon në mënyrë të pavarur të paktën 50 për një detyrë të parë, rreth 10 për vendndodhje objekti. Puna e shkallëzimit të të dhënave zbuloi se përgjithësimi shkallëzohet me mjediset dhe objektet, jo me numrin e demonstrimeve, kështu që njëqind marrje të një skene janë më keq se pesëdhjetë në pesë vendosje.

Më duhet një krah udhëheqës, apo mund të teleoperoj me tastierë?

lerobot ofron teleoperatorë me tastierë dhe gamepad, kështu që një krah udhëheqës nuk është rreptësisht i nevojshëm, por është shumë i preferueshëm: udhëheqës-ndjekës jep trajektore të vazhdueshme të nyjeve në konventën koordinative të veprimit të regjistruar, ndërsa hyrja nga tastiera prodhon lëvizje me hapa që një politikë e mëson si dridhje. Teleoperimi me tastierë kërkon gjithashtu një backend global të çelësave, kështu që dështon në Wayland dhe headless.

A mund të regjistroj në një Raspberry Pi apo një mini PC të vogël?

Po, me akordim. Udhëzuesi i kodimit me transmetim ka një kategori me burime të ulëta që mbulon makinat moderne me 4 bërthama dhe Raspberry Pi 5, dhe vendos dy kamera në 640x480 dhe 30 fps në kolonën e saj 'kërkon-disa-akordime'. Këshilla e tij: ndaloni koduesin të konkurrojë me ciklin e kapjes, nëpërmjet --dataset.rgb_encoder.vcodec=h264 dhe --dataset.streaming_encoding=false. Ai vlerëson dy kamera në 640x480 si rreth 55 milionë pikselë për sekondë dhe dy në 1920x1080 si rreth 373 milionë.

Si e di që grupi i të dhënave që sapo regjistrova është vërtet i shëndetshëm?

Tre kontrolle të lira. Krahasoni kohëzgjatjen e videos së çdo episodi me kohëzgjatjen e raportuar nga CLI dhe konfirmoni që numri i rreshtave është i barabartë me fps herë atë kohëzgjatje, për episod dhe jo në total; ky është testi i pranimit që jep udhëzuesi i kodimit të lerobot. Lexoni ds.meta.stats, ku një nyje, min e së cilës është e barabartë me max e saj, nuk lëvizi kurrë. Më pas riprodhoni dy ose tre episode në lerobot-dataset-viz, e vetmja mënyrë që shfaqen pamjet e shkëmbyera dhe kornizat e ngrira. Për kornizat e humbura, udhëzuesi vendos kufirin në rreth 5 për qind mungesë; rreth 2 për qind është ngarkesë normale kalimtare, shpesh vetëm në fillim.

Puna ime e trajnimit refuzoi grupin e të dhënave si v3.0. Çfarë të bëj tani?

GR00T N1.7 dhe N1.5 lexojnë LeRobot v2.0 ose v2.1 dhe bien në v3.0, gjë që regjistron lerobot 0.6.1. Ose vendosni formatin para trajnimit, ose përdorni një politikë që lexon v3.0 në mënyrë native: Pi0.5, SmolVLA ose ACT. lerobot ofron një konvertues nga v2.1 në v3.0 dhe asgjë në të kundërt.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started