Ang direktoryo ng pampublikong dataset ng AY-Robots na nagpapakita ng mga dataset ng LeRobot na naitala sa mga braso ng klase ng SO-100
Mga DatasetOpen X-EmbodimentDROIDSO-100LeRobot

Paggamit ng DROID, BridgeData V2 at Open X sa isang SO-100

AY-Robots ResearchAugust 23, 202618 minuto basahin

Ang DROID, BridgeData V2 at Open X-Embodiment ay nagko-convert sa 7-D end-effector actions sa 6 at 7-DoF na braso. Ang isang SO-100 ay tumatanggap ng 6 na posisyon ng joint. Ano ang naililipat, ano ang hindi, at ano ang dapat gawin sa halip.

Ang maikling bersyon

  • Ang mga build ng LeRobot ng lahat ng tatlo ay may isang kumbensyon: isang 7-D end-effector action [x, y, z, roll, pitch, yaw, gripper] at isang 8-D state na may pad slot. Ang isang SO-100 ay kumukuha ng anim na absolute joint position.
  • Ang 7-D vector na iyon ay ang artefact ng converter: Ang sariling RLDS action field ng DROID ay 6 joint velocities plus isang gripper position, na may Cartesian view sa action_dict.
  • Apat na orasan: DROID 15 fps, BridgeData V2 5 fps, ang google_robot slice 3 fps, isang SO-100 recording sa 30 fps.
  • Hindi mo sila maaaring pagsamahin sa sarili mong data. Ang validate_all_metadata ay nagtataas ng error sa una sa fps, robot_type o features na nagkakaiba, at lahat ng tatlo ay nagkakaiba.
  • Ang naililipat ay pretrained weights, hindi episodes. Ang open-source data ay 9.1 porsyento ng pre-training mixture ng pi0.
  • Ang kanilang pinakamurang tunay na gamit ay isang test fixture: isang kilalang-magandang 2 GB, 100-episode DROID sample na nagpapatunay sa iyong pipeline bago ka mag-record sa loob ng isang weekend.

Mayroong isang million-trajectory public dataset sa isang Google Cloud bucket at isang SO-100 sa desk na nagkakahalaga ng 110 hanggang 150 EUR sa mga piyesa. Bakit hindi matuturuan ng una ang pangalawa? Bahagya itong kaya, ngunit halos walang paglilipat na nangyayari kung saan inaasahan ng mga tao, at ang bahagi na mukhang pinakamadali ay hindi gumagana.

Ang sumusunod: kung ano ang nasa loob ng DROID, BridgeData V2 at Open X-Embodiment, kung saan ang bawat isa ay bumabangga sa isang low-cost na 5-DoF arm, at kung ano ang gagawin sa halip. Ang bawat numero sa ibaba ay nagmula sa papel, dataset card o source file na kinabibilangan nito.

Ano ang aktwal na nilalaman ng tatlong dataset

DROIDBridgeData V2Open X-Embodiment
RobotFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 embodiments, 60 datasets, 34 labs
Sukat76k trajectories, 350 hours60,096 trajectories1M+ trajectories, 527 skills
Pagkakaiba-iba564 scenes, 84 tasks, 50 collectors24 environments, 13 skills160,266 tasks, 21 institutions
Komposisyonlahat teleoperated50,365 teleoperated, 9,731 scriptedbawat source lab
Rate ng kontrol15 Hz5 Hznag-iiba, 3 fps pataas
Mga Kamera2 x ZED 2 panlabas, 1 x ZED Mini sa pulsohanggang 4, karamihan sa mga episode ay ang nakapirming isa langkung ano ang ginamit ng lab
Raw na pag-download1.7 TB RLDS, 8.7 TB raw stereoJPEG archivesper-dataset TFDS buckets
Ang entry point ay ang LeRobot conversion, hindi ang orihinal na bucket

Ilang tao na lang ang nagda-download ng 1.7 TB ng RLDS TFRecords. Ang organisasyon ng komunidad na IPEC-COMMUNITY ay muling naglathala ng karamihan sa Open X-Embodiment sa anyo ng LeRobot dataset na may AV1 video, kung saan ang DROID ay nasa 392 GB. Iyan ang bersyon na iyong gagamitin, at ang meta/info.json nito ang unang babasahin.

DROID

Ang pinaka-standardized sa tatlo. Isang rig sa lahat ng dako: isang Franka Panda na may Robotiq 2F-85 gripper, dalawang adjustable na ZED 2 stereo camera at isang ZED Mini sa pulso, teleoperated gamit ang Meta Quest 2 controllers, na naitala sa pamamagitan ng Polymetis sa 15 Hz sa parehong joint at end-effector space. Ang mga label ng wika ay dumating kalaunan sa pamamagitan ng tasq.ai, hanggang tatlo bawat episode.

  • 76k trajectories, 350 oras, 564 eksena, 84 gawain, 50 kolektor sa tatlong kontinente.
  • Ang pangunahing resulta ay co-training, hindi standalone training: ang mga batch na hinaluan ng 50/50 na in-domain na demonstrasyon ay tinalo ang sumunod na pinakamahusay na paraan ng 22 porsiyentong ganap na tagumpay sa distribusyon, 17 porsiyento sa labas nito.
  • IPEC-COMMUNITY/droid_lerobot: 92,233 episodes, 27,044,326 frames, franka, 15 fps, codebase_version v2.0, three AV1 streams at 180x320, 392 GB.
  • Isang 2 GB, 100-episode na sample para sa debugging ay matatagpuan sa gs://gresearch/robotics/droid_100. Magsimula doon.

BridgeData V2

Ang pinakamalapit sa isang hobby setup: isang WidowX 250 6-DoF arm, 60,096 trajectories sa 24 na kapaligiran at 13 kasanayan sa 5 Hz. Pansinin ang komposisyon: 50,365 expert teleoperated na demonstrasyon kasama ang 9,731 mula sa isang randomized scripted pick-and-place policy, kaya humigit-kumulang 16 porsiyento ay hindi demonstrasyon ng tao, na mahalaga para sa pag-aaral sa pamamagitan ng panggagaya kalidad. Ang karaniwang download, IPEC-COMMUNITY/bridge_orig_lerobot, ay nag-uulat ng 53,192 episodes at 1,893,026 frames sa 5 fps, robot_type widowx: mas kaunti kaysa sa 60,096 ng papel, kaya basahin ang bilang mula sa meta/info.json sa halip na banggitin ang alinman.

Open X-Embodiment

Hindi isang dataset sa parehong kahulugan: 60 umiiral na dataset ng robot mula sa 34 na lab ang pinagsama sa isang koleksyon ng RLDS na sumasaklaw sa 22 embodiment at mahigit isang milyong trajectory. Ang BridgeData V2 ay nasa loob nito bilang bridge_orig; ang google_robot slice, fractal20220817_data, ay nagko-convert sa 87,212 episode sa 3 fps.

Ang pagsasama-sama ay may kaakibat na babala na diretsahang sinasaad ng papel. Para sa mga eksperimento ng RT-X, kino-convert ng mga may-akda ang bawat source sa isang 7-DoF end-effector action, ngunit hindi nila inaayon ang mga coordinate frame sa iba't ibang dataset, at pinapayagan ang mga action value na maging absolute o relative na posisyon o bilis, ayon sa orihinal na control scheme ng bawat robot. Ang kanilang konklusyon: ang parehong action vector ay maaaring magdulot ng napakaibang galaw para sa iba't ibang robot.

Ang direktoryo ng dataset ng AY-Robots na naglilista ng mga pampublikong dataset ng LeRobot na may bilang ng episode at mga deskripsyon ng gawain.
Ang pampublikong direktoryo ng dataset sa /directory: mga dataset na nasa LeRobot form na, at tumutugma na sa sinusuportahang braso.

Ang hindi pagtutugma, sa apat na bahagi

Ang embodiment mismatch ay karaniwang tinuturing na isang malabong problema. Apat ito, magkakaiba ang kanilang pagkabigo, at dalawa ay hindi kayang ayusin sa pamamagitan ng scripting.

Mga Antas ng Kalayaan

Ang isang SO-100 ay may limang joint ng braso at isang gripper. Kung bibilangin bilang mga motor, ito ay isang 6-DoF na braso, at tinatawag itong ganoon sa SmolVLA paper; kung bibilangin bilang isang mekanismo ng pagpoposisyon, ito ay 5-DoF, at tinatawag itong ganoon ng LeRobot sa docstring ng inverse-kinematics nito, na naglalarawan ng soft-orientation IK sa 5-DOF SO-101 kung saan bahagya lamang sinusubaybayan ng pulso ang oryentasyon. Ang isang Franka ay may pitong positioning joint. Ang agwat na iyon ang nagpapasya kung anong mga pose ang umiiral: ang isang 5-DoF na braso ay hindi karaniwang makakaabot ng arbitraryong posisyon at oryentasyon nang sabay-sabay, kaya ibinabalik ng solver ang pinakamalapit na kaya nito, isang ibang galaw mula sa ipinakita. Background: mga antas ng kalayaan.

python
# src/lerobot/robots/so_follower/so_follower.py
motors = {
    "shoulder_pan":  Motor(1, "sts3215", norm_mode_body),
    "shoulder_lift": Motor(2, "sts3215", norm_mode_body),
    "elbow_flex":    Motor(3, "sts3215", norm_mode_body),
    "wrist_flex":    Motor(4, "sts3215", norm_mode_body),
    "wrist_roll":    Motor(5, "sts3215", norm_mode_body),
    "gripper":       Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}
# action keys are "<motor>.pos"; send_action sync_writes them to
# "Goal_Position"  ->  a 6-D ABSOLUTE JOINT POSITION command


# openpi/src/openpi/policies/droid_policy.py
def make_droid_example() -> dict:
    return {
        "observation/exterior_image_1_left": np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/wrist_image_left":      np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/joint_position":        np.random.rand(7),   # seven Franka joints
        "observation/gripper_position":      np.random.rand(1),
        "prompt": "do something",
    }
# state = concat(joint_position, gripper_pos)  ->  8-D
Kaliwa: SO follower ng LeRobot, mula sa src/lerobot/robots/so_follower/so_follower.py. Kanan: input ng DROID policy ng openpi. Anim laban sa walo.

Kaya ang isang handa nang DROID checkpoint ay hindi shortcut. Ang Physical Intelligence ay nagpapadala ng pi05_droid sa gs://openpi-assets/checkpoints/pi05_droid, at ang parehong README na pumupuri sa lawak nito ay nagbabala na ang mga expert checkpoint na ito ay maaaring hindi mag-generalize sa iyong setup. Ang state nito ay walong Franka joint numbers at ang image keys nito ay exterior_image_1_left at wrist_image_left. Walang flag na nagpapalit niyan sa isang six-motor SO-100 command.

2. Ano ang aktwal na sinasabi ng action vector

Mas malalim kaysa sa dimensionality. Sa mga LeRobot conversion, lahat ng tatlo ay nagsasabi kung saan dapat pumunta ang gripper, sa Cartesian space. Ang isang SO-100 ay nagsasabi kung saan dapat pumunta ang anim na servo. Ang pag-convert ay nangangailangan ng kinematic model at isang solver, hindi isang reshape.

KatangianOXE, DROID at Bridge sa LeRobot formSO-100 sa LeRobot
Action vector7-D: x, y, z, roll, pitch, yaw, gripper6-D: isang posisyon ng layunin bawat motor
State vector8-D, na may pad slot (ginagamit ng google_robot ang isang quaternion)6-D, isa bawat motor
FrameCartesian, hindi nakahanay sa iba't ibang datasetjoint space, per-arm calibration
Absolute o relativealinman, depende sa source lababsolute goal positions
Unitsnormalised bawat dataset, pagkatapos ay discretiseddegrees bilang default (use_degrees=True), kung hindi ay -100 hanggang 100
Silent failureisang delta na binasa bilang absoluteisang hindi calibrated na braso
Ang 7-D Cartesian vector ay kumbensyon ng converter, hindi ng DROID

Ang openx2lerobot README ay nagdodokumento ng pinag-isang 8-dim na estado at 7-dim na aksyon para sa bawat dataset na kino-convert nito, kung saan nagmula ang pad slot. Ang sariling RLDS schema ng DROID ay naiiba: ang top-level na action nito ay isang 7-vector ng 6 joint velocities plus 1 gripper position, na may cartesian_position, cartesian_velocity, joint_position at joint_velocity sa ilalim ng action_dict. Binabasa ng openpi ang joint-space view, habang ang LeRobot build ay nagbibigay sa iyo ng Cartesian view. Wala sa mga ito ang anim na absolute servo angles.

Ipinapadala ng LeRobot ang nawawalang bahagi: ang SO follower ay may kinematics processor na may InverseKinematicsEEToJoints at ForwardKinematicsJointsToEE na mga hakbang. Ang mga key nito ay ee.x, ee.y, ee.z kasama ang isang rotation vector na ee.wx, ee.wy, ee.wz at ee.gripper_pos, kaya maging ang orientation encoding ay naiiba sa roll-pitch-yaw sa mga file. Ang hakbang ng IK ay kumukuha ng orientation_weight, default 0.01, na ang docstring ay nagsasabing itakda sa 0.0 para sa position-only IK sa mga under-actuated arm. Maaari mong buuin ang tulay, ngunit ang kalahati ng orientation ng bawat hiniram na aksyon ay nananatiling tinatayang.

3. Rate ng kontrol

Ang DROID ay 15 Hz, BridgeData V2 5 Hz, ang google_robot slice 3 fps; inilalarawan ng mga may-akda ng pi0 ang open-source na bahagi ng kanilang pinaghalong bilang low-frequency control sa pagitan ng 2 at 10 Hz. Ang DatasetRecordConfig ng LeRobot ay nagde-default sa fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Isang na sinanay sa 5 Hz na data ay natutunan na ang isang aksyon ay sumasaklaw ng 200 ms. I-replay ito sa 30 Hz at ang braso ay gumagapang; i-resample nang walang ingat at masisira mo ang frame kung saan sumasara ang gripper. Masama rin itong nakikipag-ugnayan sa : ang isang 100-step na chunk ay 20 segundo sa 5 Hz, 3.3 sa 30 Hz.

4. Mga Kamera

Ang BridgeData V2 ay nag-randomize ng dalawang camera pose bawat 50 trajectory, at ang pahina ng proyekto nito ay nagsasaad na karamihan sa data ay nagdadala lamang ng nakapirming view. Gumamit ang DROID ng adjustable na ZED 2 mounts kasama ang isang wrist ZED Mini. Mayroon kang dalawang USB webcam na nakaposisyon sa pamamagitan ng mata. Ang camera pose ay hindi isang nuisance variable para sa isang ; ito ang karamihan sa kung ano ang pinagbasehan ng visual encoder, at walang anumang sa format ng file ang nagsasabi sa iyo na magkaiba ang mga pose.

Ang bitag na kumakain ng isang araw

Ang mga bahagi ay magkakasya nang sapat upang tumakbo. Naglo-load ang dataset, nagsisimula ang pagsasanay, bumababa ang loss, lumalabas ang mga checkpoint, walang error. Pagkatapos ay walang ginagawang makikilala ang policy sa braso at gumugugol ka ng isang araw sa paghahanap ng bug sa iyong training script. Walang bug: natutunan ng modelo ang isang Cartesian action distribution para sa isang robot na wala sa iyong silid. Magsimula sa bumababa ang loss, walang ginagawa ang policy, hindi sa iyong mga hyperparameters.

Ano ang mangyayari kapag sinubukan mong pagsamahin ang data

Ang malinaw na plano ay pagsamahin: ilang libong DROID episode kasama ang iyong 50. Tumanggi si LeRobot, at ang pagtanggi ay nagbanggit ng tatlong bagay na magkaiba.

  1. 1
    Kunin ang 100-episode na sample, hindi ang buong 1.7 TB

    Sapat na ang 2 GB upang makita ang istraktura.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    I-convert ang RLDS sa LeRobot na porma

    Ang openx2lerobot ay sumasaklaw sa mga standard na transformation ng OXE at naglalagay ng anotasyon sa uri ng robot at dalas ng kontrol. Inilalagay ito ng README sa convert.sh.

    bash
    git clone https://github.com/Tavish9/any4lerobot.git
    cd any4lerobot/openx2lerobot
    
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  3. 3
    Basahin ang meta/info.json bago ang anupaman

    Ang file na ito ang magpapasya kung gagana ang natitirang bahagi ng iyong araw.

    bash
    python -c "import json;d=json.load(open('meta/info.json'));\
    print(d['codebase_version'], d['robot_type'], d['fps']);\
    print(d['features']['action']['shape'], d['features']['observation.state']['shape'])"
  4. 4
    Subukan ang pagsasama at basahin ang error

    Ang merge ay naglo-load ng bawat dataset, pagkatapos ay sinusuri ng validate_all_metadata ang fps, robot_type at mga feature laban sa una sa listahan, at naglalabas ng error sa unang hindi pagtutugma.

    bash
    lerobot-edit-dataset \
        --new_repo_id you/mixed \
        --operation.type merge \
        --operation.repo_ids "['you/droid100_lerobot', 'you/my_so100_task']"
    
    # ValueError: Same fps is expected, but got fps=30 instead of 15.

Ang mga reference value ay nagmumula sa dataset na una mong inilista, kaya ang mensahe ay nagrereklamo tungkol sa iyong 30 fps sa halip na 15 ng DROID. Ayusin ang fps at matutugunan mo ang robot_type check; ayusin iyon at matutugunan mo ang feature check, 7 laban sa 6 para sa action. Walang pag-oorder ang makakadaan, at ang parehong guard ay tumatakbo sa oras ng pag-record sa pamamagitan ng sanity_check_dataset_robot_compatibility.

Huwag i-hardcode ang robot_type upang talunin ang check

Sa kasalukuyang LeRobot main, ang so100_follower at so101_follower ay parehong nakarehistro sa isang shared na SOFollowerRobotConfig, kaya ang string mula sa isang tunay na recording ay hindi kinakailangang ang inaasahan mo. Basahin ito mula sa iyong sariling meta/info.json, at ituring ang isang check na kinailangan mong i-disable bilang isang check na may sinasabi sa iyo.

Kaya, ano ba talaga ang naililipat?

Mga timbang (weights), hindi mga episode. Bawat modernong pangkalahatang patakaran ay sumipsip ng ilan dito sa pretraining, at kapag ikaw ay mula sa isang inilabas na ay namana mo na ito na naayos na ng mga taong may sapat na compute upang magawa ito nang tama. Ang papel ni pi0 ay tapat tungkol sa proporsyon: 9.1 porsiyento ng pre-training mixture nito, binilang sa timesteps, ay open-source data kabilang ang OXE, Bridge v2 at DROID. Ang bilang na iyon ay kay pi0; magkakaiba ang mixture ng bawat vendor.

Pampublikong cross-embodiment data sa isang SO-100 na proyekto
Mga Kalamangan
  • Mga visual at language prior: nakakita ang encoder ng libu-libong kusina at mug at alam kung ano ang tinutukoy ng "the red block".
  • Isang prior sa istraktura ng manipulasyon: lapit, sara, buhat, transporta, bitaw, embodiment-independent kahit na hindi ang mga numero.
  • Isang kilalang-magandang dataset para sa pagsubok. Kung ang iyong trabaho ay hindi kayang mag-overfit ng 100 DROID episode, ang problema ay ang iyong setup.
  • Mga reference point: sa mga domain ng maliliit na dataset, naabot ng RT-1-X ang 50 porsiyentong mas mataas na mean success rate kaysa sa orihinal na pamamaraan o RT-1, at tinalo ng RT-2-X ang RT-2 ng humigit-kumulang 3x sa mga emergent skill.
Mga Kompromiso
  • Walang magagamit na action supervision. Ang 7-D Cartesian target ay hindi isang 6-D joint command.
  • Walang camera-pose transfer, at walang anumang sa data ang nagsasabi sa iyo na magkaiba ang mga pose.
  • Walang timing transfer: 3, 5 at 15 fps na pinagmulan laban sa isang 30 fps na recorder.
  • Walang gripper transfer. Ang isang Robotiq 2F-85 at isang naka-print na panga sa isang STS3215 ay magkaiba sa puwersa, stroke at dynamics.
  • Ang sukat lamang ay hindi sapat kahit para sa mga may-akda nito: sa mga domain ng malalaking dataset, hindi tinalo ng RT-1-X ang isang RT-1 na sinanay lamang sa dataset na iyon.
  • Walang pagbawas sa kung gaano karaming sarili mong episode ang kailangan mo.
Layer ng modeloNaililipat ba?Bakit
Vision encoderOo, malakasAng mga bagay at eksena ay embodiment-independent
Language groundingOoAng mga instruksyon ay teksto, hindi geometry
Cross-modal fusionKaramihanNakatuon sa bagay na pinangalanan sa prompt
Proprioception encoderHindiMagkaiba ang input dimension at joint semantics
Action headHindiSinasanay sa isang 7-D Cartesian space na hindi mo ginagamit
Normalisation statisticsHindi, at mapanganibAng mga dayuhang stats ay naglilipat ng bawat command

Ito ang dahilan kung bakit SmolVLA ay kumikilos nang iba sa isang murang braso. Ang papel nito ay pumipili ng 481 dataset ng komunidad mula sa Hugging Face, na sinala batay sa uri ng embodiment, bilang ng episode, kalidad ng data at saklaw ng frame: 22.9K episode, 10.6M frame, na sinuri sa totoong SO-100 at SO-101 na braso. Ang maliit at tugma ay mas mahusay kaysa sa malaki at hindi tugma. Ihambing sa ACT against SmolVLA.

Tatlong landas na sulit tahakin

Landas A: fine-tune mula sa isang checkpoint na nakakain na ng data

Karamihan sa mga tao ay dapat tahakin ito. Hindi mo kailangang galawin ang DROID o Open X-Embodiment: pumili ng isang policy na ang pretraining ay nakasipsip na ng cross-embodiment data, i-record ang sarili mong mga episode, at i-fine-tune.

PatakaranMga ParametroMinimum na EpisodeFormat ng DatasetAntas ng GPUInferenceBase Checkpoint
GR00T N1.7~3 B, ~40 M trained in fine-tuning50LeRobot v2.0 or v2.1A100 or H100 80 GB152 ms per stepnvidia/GR00T-N1.7-3B
GR00T N1.5~3 B50LeRobot v2.0 or v2.1A100 or H100 80 GB165 msnvidia/GR00T-N1.5-3B
Pi0.5~3 B, PaliGemma backbone50LeRobot v3.0A100 or H100 80 GB485 mslerobot/pi05_base
SmolVLA~450 M30LeRobot v3.0RTX 4090 or any 24 GB245 mslerobot/smolvla_base
ACT~80 M50LeRobot v3.0RTX 4090 or any 24 GB20 msnone, from scratch

Ang ACT ay ang tapat na edge case: walang base model, kaya walang pampublikong data ang nakakarating dito. Hindi ito awtomatikong kawalan, dahil sa 20 ms bawat hakbang ng aksyon, ito lamang ang isa sa lima na kayang magsara ng mabilis na loop, tulad ng pahina ng ACT, na nakasaad. Pumili ayon sa gawain gamit ang lahat ng limang pinaghambing, GR00T N1.7 laban sa Pi0.5, at ang 332 resulta ng benchmark sa 85 modelo sa ang arena.

Path B: gamitin ang DROID bilang test fixture

Ang 100-episode sample ay ang pinakamahusay na 2 GB na iyong ida-download ngayong buwan, at hindi para sa pagsasanay. Ito ay isang dataset na alam mong tama. Patakbuhin ang iyong converter, loader at isang maikling GPU job dito; anumang mag-fail ay isang infrastructure bug na natagpuan habang mura pa. Ginagawa rin ng NVIDIA ang pareho sa malaking sukat: ang GR00T N1.7 card ay naglilista ng apat na post-trained variant, para sa Bridge at Fractal sa SimplerEnv, DROID at LIBERO.

Path C: i-record ang sarili mo, nang sinasadya

Tatlumpu hanggang limampu ay tila maliit kumpara sa 76,000 hanggang sa maalala mong ang sa iyo lang ang may sarili mong braso, mga camera at mesa. Sa mga default ng LeRobot, ang 50 episodes ay 100 minuto ng wall clock. Tingnan ang , at .

Ang pahina ng tutorial sa pag-record ng AY-Robots na nagpapakita ng mga hakbang upang kumuha ng LeRobot dataset mula sa isang teleoperation session
Ang recording walkthrough sa /learn/record-your-first-dataset: ang hakbang na hindi kayang palitan ng pampublikong data.

Dalawang paraan upang makakuha mula sa pampublikong data patungo sa isang gumaganang patakaran

All of this runs on your own machine plus a rented GPU. Knowing the manual path matters because when something breaks you will know which layer broke.

  1. 1
    Install LeRobot with the extras the scripts need

    The record and train entry points each declare their own extra.

    bash
    pip install 'lerobot[core_scripts]'   # lerobot-record
    pip install 'lerobot[training]'      # lerobot-train
    pip install gsutil tensorflow tensorflow-datasets
  2. 2
    Get a small, known-good slice

    100 DROID episodes, 2 GB.

    bash
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  3. 3
    Convert to LeRobot form

    Writes the unified 8-D state and 7-D action, annotating robot type and control frequency.

    bash
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  4. 4
    Check the version against your trainer

    The converter README documents v3.0 output; the published IPEC-COMMUNITY datasets report v2.0. GR00T wants v2.0 or v2.1 and crashes on v3.0; Pi0.5, SmolVLA and ACT want v3.0. Mind the gap: the only conversion script on LeRobot main goes 2.1 to 3.0.

    bash
    python src/lerobot/scripts/convert_dataset_v21_to_v30.py \
        --repo-id=you/droid100_lerobot
  5. 5
    Record your own episodes

    Defaults: 30 fps, 60 s per episode, 60 s reset, 50 episodes. The teleoperator type is so100_leader.

    bash
    lerobot-record \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
      --teleop.type=so100_leader \
      --teleop.port=/dev/ttyACM1 \
      --dataset.repo_id=you/so100_pick_block \
      --dataset.num_episodes=50 \
      --dataset.single_task="Pick up the red block and put it in the bowl"
  6. 6
    Fine-tune on your data only

    Weights from public data, actions from your own. Do not mix the datasets.

    bash
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=you/so100_pick_block \
      --policy.device=cuda \
      --batch_size=4 \
      --steps=20000
Where the time actually goes

Not in training; the GPU job is hours. The conversion, the version mismatch and the moment you find your dataset is v2.0 and your trainer wants v3.0 are days. Read dataset rejected as v3 first.

Ang pahina ng pag-download ng desktop client ng AY-Robots, ang client na nagtatala ng mga dataset na may format na LeRobot mula sa isang teleoperation session
Ang desktop client sa /download ay nagsusulat ng mga dataset ng LeRobot direkta mula sa isang teleop session, nilalampasan ang RLDS conversion.

Gastos ng bawat landas

LandasImbakanOras ng taoGastos ng GPUPosibilidad na igalaw nito ang iyong braso
Converted DROID lang392 GBaraw ng conversion4 to 12 USDnapakababa, maling action space
DROID na pinagsama sa iyong mga episodeparehoblocked by validate_all_metadatan/awala, hindi ito tumatakbo
SmolVLA, 30 hanggang 50 sariling episodeilang GB100 min na pagre-record1 to 3 USDmataas
GR00T N1.7, 50 sariling episodeilang GB100 min na pagre-record4 to 12 USDmataas
ACT mula sa simula, 50 sariling episodeilang GB100 min na pagre-record1 to 3 USDmataas, 20 ms inference
Sample ng DROID bilang test fixture2 GBisang haponisang maikling pagtakbomataas, bilang pagpapatunay

Ang asimetriya ang punto: ang landas na humihiram ng pinakamaraming data ay ang pinakamahal at pinakamababang posibilidad na igalaw ang iyong braso. Sa ilalim ng dalawang oras ng iyong sariling teleoperasyon ay mas mahusay kaysa sa isang terabyte ng Franka ng iba. Wala pang braso? /live nag-stream ng pisikal na SO-100 nang walang pagpaparehistro. Pagkatapos sanayin ang iyong unang patakaran, at SmolVLA on SO-100 para sa partikular na gabay.

Isang makatwirang default na plano

I-download ang 2 GB DROID sample at gamitin ito upang patunayan ang iyong pipeline. Balewalain ang iba pang 1.7 TB. Mag-record ng 50 episode ng isang gawain gamit ang mga nakapirming camera. I-fine-tune ang SmolVLA muna, dahil sa 30 minimum na episode sa isang 24 GB card ito ang pinakamura upang ulitin, pagkatapos ay subukan ang GR00T N1.7 sa parehong data. Ikumpara sa iyong gawain, hindi sa isang benchmark.

Mag-record ng mga dataset na tugma na sa iyong braso

Direktang isinusulat ng desktop client ang mga dataset na LeRobot-format mula sa isang teleop session: tamang braso, tamang frame rate, tamang action space. Walang RLDS conversion, walang remapping.

Kunin ang desktop client
Maaari ko bang sanayin ang isang policy sa DROID at patakbuhin ito sa aking SO-100?

Hindi direkta. Sa LeRobot build, ang mga aksyon ng DROID ay 7-D end-effector commands sa isang Franka Panda sa 15 fps; sa raw RLDS, ang mga ito ay 6 joint velocities plus isang gripper position. Ang isang SO-100 ay tumatanggap ng 6 absolute joint positions. Kakailanganin mo ng inverse-kinematics layer, at kahit na, ang isang 5-DoF wrist ay hindi kayang gayahin ang arbitrary 6-DoF poses.

Maaari ko bang ihalo ang mga DROID o Bridge episodes sa sarili kong SO-100 episodes?

Hindi. Ang validate_all_metadata ay nangangailangan ng magkaparehong fps, robot_type at feature schema at nagpapataas ng ValueError sa unang mismatch. Magkakaiba ang tatlo: 15 o 5 fps laban sa 30, franka o widowx laban sa iyong braso, action shapes na 7 laban sa 6. Ang muling pagsusulat ng metadata upang makapasa sa check ay hindi nag-aayos ng semantics.

Wala bang silbi ang Open X-Embodiment para sa isang low-cost arm kung gayon?

Hindi, ngunit ang halaga nito ay nakakarating sa iyo sa pamamagitan ng pretrained weights, hindi episodes. Ang mga open-source dataset kabilang ang OXE, Bridge v2 at DROID ay 9.1 porsyento ng pre-training mixture ng pi0, at ang NVIDIA ay nagpapadala ng mga GR00T N1.7 variant na post-trained sa Bridge, Fractal, DROID at LIBERO. Ang hindi mo magagawa ay idugtong ang mga episodes na iyon sa sarili mong recording.

Aling policy ang pinakamaraming nakikinabang mula sa pampublikong cross-embodiment data?

Ang Pi0.5 at ang mga modelong GR00T ang may pinakamaraming cross-embodiment pretraining, ngunit ang SmolVLA ay madalas na gumagana nang pinakamahusay sa isang low-cost arm: ang pretraining set nito ay 481 community datasets, 22.9K episodes at 10.6M frames, na sinuri sa totoong SO-100 at SO-101 arms. Ang ACT ay ang kabaligtaran: walang base model, 20 ms bawat action step.

Ilang sarili kong episodes ang talagang kailangan ko?

30 para sa SmolVLA, 50 para sa GR00T N1.7, GR00T N1.5, Pi0.5 at ACT. Sa mga default ng LeRobot na 60 s bawat episode at 60 s reset, ang 50 episodes ay 100 minuto ng wall clock. Ang hiniram na cross-embodiment data ay hindi nagpapababa ng mga numerong iyon.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started