Das öffentliche Datensatzverzeichnis von AY-Robots, das LeRobot-Datensätze zeigt, die auf SO-100-Klasse-Armen aufgezeichnet wurden
DatensätzeOpen X-EmbodimentDROIDSO-100LeRobot

DROID, BridgeData V2 und Open X auf einem SO-100 verwenden

AY-Robots Research23. August 202618 Min. Lesezeit

DROID, BridgeData V2 und Open X-Embodiment werden in 7-D Endeffektor-Aktionen für 6- und 7-DoF-Arme umgewandelt. Ein SO-100 benötigt 6 Gelenkpositionen. Was übertragbar ist, was nicht, und was stattdessen zu tun ist.

Die Kurzversion

  • Die LeRobot-Builds aller drei teilen eine Konvention: eine 7-D Endeffektor-Aktion [x, y, z, roll, pitch, yaw, gripper] und einen 8-D Zustand mit einem Pad-Slot. Ein SO-100 nimmt sechs absolute Gelenkpositionen.
  • Dieser 7-D Vektor ist das Artefakt des Konverters: DROID's eigenes RLDS-Aktionsfeld sind 6 Gelenkgeschwindigkeiten plus eine Greiferposition, mit der kartesischen Ansicht in action_dict.
  • Vier Taktraten: DROID 15 fps, BridgeData V2 5 fps, der google_robot Slice 3 fps, eine SO-100 Aufnahme mit 30 fps.
  • Sie können sie nicht mit Ihren eigenen Daten zusammenführen. validate_all_metadata schlägt beim ersten Unterschied von fps, robot_type oder features fehl, und alle drei unterscheiden sich.
  • Was übertragen wird, sind vortrainierte Gewichte, nicht Episoden. Open-Source-Daten machen 9,1 Prozent der Vortrainingsmischung von pi0 aus.
  • Ihr günstigster praktischer Einsatz ist eine Testvorrichtung: ein bekanntermaßen gutes 2 GB, 100-Episoden DROID-Sample, das Ihre Pipeline beweist, bevor Sie ein Wochenende lang aufnehmen.

Es gibt einen öffentlichen Datensatz mit einer Million Trajektorien auf einem Google Cloud Bucket und einen SO-100 auf dem Schreibtisch, der 110 bis 150 EUR an Teilen gekostet hat. Warum kann der erste den zweiten nicht lehren? Teilweise schon, aber fast keine der Übertragungen geschieht dort, wo man es erwartet, und der Teil, der am einfachsten aussieht, funktioniert überhaupt nicht.

Was folgt: was sich in DROID, BridgeData V2 und Open X-Embodiment, wo jedes mit einem kostengünstigen 5-DoF-Arm kollidiert, und was stattdessen zu tun ist. Jede Zahl unten stammt aus dem Papier, der Datensatzkarte oder der Quelldatei, zu der sie gehört.

Was die drei Datensätze tatsächlich enthalten

DROIDBridgeData V2Open X-Embodiment
RoboterFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 Embodiments, 60 Datensätze, 34 Labore
Umfang76k Trajektorien, 350 Stunden60,096 Trajektorien1M+ Trajektorien, 527 Skills
Vielfalt564 Szenen, 84 Aufgaben, 50 Sammler24 Umgebungen, 13 Skills160.266 Aufgaben, 21 Institutionen
Zusammensetzungvollständig teleoperiert50.365 teleoperiert, 9.731 skriptgesteuertpro Quelllabor
Regelrate15 Hz5 Hzvariiert, ab 3 fps
Kameras2 x ZED 2 extern, 1 x ZED Mini Handgelenkbis zu 4, die meisten Episoden nur die festewas immer das Labor verwendet hat
Rohdaten-Download1.7 TB RLDS, 8.7 TB raw stereoJPEG archivesper-dataset TFDS buckets
Der Einstiegspunkt ist die LeRobot-Konvertierung, nicht der ursprüngliche Bucket

Nur wenige Leute laden noch 1,7 TB RLDS TFRecords herunter. Die Community-Organisation IPEC-COMMUNITY hat den Großteil von Open X-Embodiment im LeRobot-Datensatz-Format mit AV1-Video neu veröffentlicht, wobei DROID bei 392 GB liegt. Das ist die Version, mit der Sie arbeiten werden, und ihre meta/info.json ist das, was Sie zuerst lesen sollten.

DROID

Der standardisierteste der drei. Ein Aufbau überall: ein Franka Panda mit einem Robotiq 2F-85 Greifer, zwei einstellbaren ZED 2 Stereokameras und einer Handgelenk-ZED Mini, teleoperiert mit Meta Quest 2 Controllern, aufgezeichnet über Polymetis mit 15 Hz sowohl im Gelenk- als auch im Endeffektor Raum. Sprachlabels kamen später über tasq.ai, bis zu drei pro Episode.

  • 76k Trajektorien, 350 Stunden, 564 Szenen, 84 Aufgaben, 50 Sammler auf drei Kontinenten.
  • Das Hauptergebnis ist Co-Training, nicht eigenständiges Training: Batches, die 50/50 mit In-Domain-Demonstrationen gemischt wurden, übertreffen die nächstbeste Methode um 22 Prozent absoluten Erfolg in der Verteilung und 17 Prozent außerhalb davon.
  • 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.
  • Ein 2 GB, 100-Episoden-Debugging-Sample befindet sich unter gs://gresearch/robotics/droid_100. Beginnen Sie dort.

BridgeData V2

Am nächsten an einem Hobby-Setup: ein WidowX 250 6-DoF Arm, 60,096 trajectories across 24 environments and 13 skills at 5 Hz. Beachten Sie die Zusammensetzung: 50,365 expert teleoperated demonstrations plus 9,731 from a randomised scripted pick-and-place policy, sodass etwa 16 Prozent keine menschliche Demonstration sind, was für die Imitationslernen Qualität. Der übliche Download, IPEC-COMMUNITY/bridge_orig_lerobot, meldet 53,192 episodes and 1,893,026 frames at 5 fps, robot_type widowx: weniger als die 60,096 des Papers, lesen Sie also die Anzahl aus meta/info.json, anstatt eine der beiden zu zitieren.

Open X-Embodiment

Kein Datensatz im herkömmlichen Sinne: 60 bestehende Roboter-Datensätze von 34 Laboren wurden zu einer RLDS-Sammlung zusammengeführt, die 22 Ausführungsformen und über eine Million Trajektorien umfasst. BridgeData V2 ist darin als bridge_orig enthalten; der google_robot-Ausschnitt, fractal20220817_data, wird in 87.212 Episoden mit 3 fps umgewandelt.

Die Zusammenführung birgt einen Vorbehalt, den das Papier ausdrücklich nennt. Für die RT-X-Experimente wandeln die Autoren jede Quelle in eine 7-DoF-Endeffektoraktion um, richten jedoch die Koordinatensysteme nicht über die Datensätze hinweg aus und erlauben, dass Aktionswerte absolute oder relative Positionen oder Geschwindigkeiten sein können, je nach dem ursprünglichen Steuerungsschema jedes Roboters. Ihre Schlussfolgerung: Derselbe Aktionsvektor kann bei verschiedenen Robotern sehr unterschiedliche Bewegungen hervorrufen.

Das AY-Robots Datensatzverzeichnis listet öffentliche LeRobot-Datensätze mit Episodenzahlen und Aufgabenbeschreibungen auf
Das öffentliche Datensatzverzeichnis unter /directory: Datensätze bereits im LeRobot-Format, die bereits einem unterstützten Arm entsprechen.

Die Diskrepanz, in vier Teilen

Die Diskrepanz in der Verkörperung wird normalerweise als ein vages Problem behandelt. Es sind vier, sie versagen unterschiedlich, und zwei sind nicht durch Skripting behebbar.

1. Freiheitsgrade

Ein SO-100 hat fünf Armgelenke plus einen Greifer. Als Motoren gezählt ist es ein 6-DoF-Arm, und das SmolVLA-Paper nennt ihn so; als Positionierungsmechanismus gezählt ist es 5-DoF, und LeRobot nennt es so in seinem Inverse-Kinematik-Docstring, der eine weiche Orientierungs-IK am 5-DOF SO-101 beschreibt, bei der das Handgelenk die Orientierung nur teilweise verfolgt. Ein Franka hat sieben Positionierungsgelenke. Diese Lücke entscheidet, welche Posen existieren: Ein 5-DoF-Arm kann im Allgemeinen nicht gleichzeitig eine beliebige Position und Orientierung erreichen, daher gibt der Solver das Nächstmögliche zurück, eine andere Bewegung als die demonstrierte. Hintergrund: .

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
Links: LeRobots SO-Follower, aus src/lerobot/robots/so_follower/so_follower.py. Rechts: openpis DROID-Policy-Eingabe. Sechs gegen acht.

Ein vorgefertigter DROID-Checkpoint ist also keine Abkürzung. Physical Intelligence liefert pi05_droid unter gs://openpi-assets/checkpoints/pi05_droid aus, und dieselbe README-Datei, die seine Breite lobt, warnt davor, dass diese Experten-Checkpoints möglicherweise nicht auf Ihr Setup verallgemeinerbar sind. Sein Zustand sind acht Franka-Gelenknummern und seine Bildschlüssel sind exterior_image_1_left und wrist_image_left. Kein Flag wandelt dies in einen Sechs-Motor-SO-100-Befehl um.

2. Was der Aktionsvektor tatsächlich aussagt

Tiefer als Dimensionalität. Bei den LeRobot-Konvertierungen geben alle drei an, wohin der Greifer im kartesischen Raum gehen soll. Ein SO-100 gibt an, wohin sechs Servos gehen sollen. Die Konvertierung erfordert ein kinematisches Modell und einen Solver, keine Umformung.

EigenschaftOXE, DROID und Bridge in LeRobot-FormSO-100 in LeRobot
Aktionsvektor7-D: x, y, z, Roll, Nick, Gier, Greifer6-D: eine Zielposition pro Motor
Zustandsvektor8-D, mit einem Füllplatz (google_robot verwendet ein Quaternion)6-D, einer pro Motor
ReferenzrahmenKartesisch, nicht über Datensätze hinweg ausgerichtetGelenkraum, pro-Arm-Kalibrierung
Absolut oder relativbeides, vom Quelllabor entschiedenabsolute Zielpositionen
Einheitenpro Datensatz normalisiert, dann diskretisiertGrad standardmäßig (use_degrees=True), sonst -100 bis 100
Stiller Fehlerein Delta, das als Absolutwert gelesen wirdein unkalibrierter Arm
Der 7-D kartesische Vektor ist die Konvention des Konverters, nicht die von DROID

Das openx2lerobot README dokumentiert einen vereinheitlichten 8-dim Zustand und 7-dim Aktion für jeden Datensatz, den es konvertiert, woraus der pad-Slot stammt. DROID's eigenes RLDS-Schema unterscheidet sich: seine Top-Level action ist ein 7-Vektor aus 6 Gelenkgeschwindigkeiten plus 1 Greiferposition, mit cartesian_position, cartesian_velocity, joint_position und joint_velocity unter action_dict. openpi liest die Gelenkraumansicht, der LeRobot-Build liefert Ihnen die kartesische. Keines davon sind sechs absolute Servowinkel.

LeRobot liefert das fehlende Teil: Der SO-Follower verfügt über einen Kinematikprozessor mit den Schritten InverseKinematicsEEToJoints und ForwardKinematicsJointsToEE. Seine Schlüssel sind ee.x, ee.y, ee.z plus ein Rotationsvektor ee.wx, ee.wy, ee.wz und ee.gripper_pos, sodass sich sogar die Orientierungskodierung von der Roll-Pitch-Yaw in den Dateien unterscheidet. Der IK-Schritt nimmt einen orientation_weight an, Standard 0.01, dessen Docstring besagt, dass 0.0 für positionsbasierte IK bei unteraktuierte Armen eingestellt werden soll. Sie können die Brücke bauen, aber die Orientierungshälfte jeder entliehenen Aktion bleibt approximiert.

3. Regelrate

DROID ist 15 Hz, BridgeData V2 5 Hz, der google_robot-Slice 3 fps; die Autoren von pi0 beschreiben den Open-Source-Teil ihrer Mischung als niederfrequente Steuerung zwischen 2 und 10 Hz. LeRobot's DatasetRecordConfig hat standardmäßig fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Eine die auf 5-Hz-Daten trainiert wurde, lernte, dass eine Aktion 200 ms abdeckt. Spielt man sie mit 30 Hz ab, kriecht der Arm; resampelt man naiv, verschmiert man den Frame, in dem der Greifer schließt. Es interagiert auch schlecht mit : ein 100-Schritt-Chunk ist 20 Sekunden bei 5 Hz, 3.3 bei 30 Hz.

4. Kameras

BridgeData V2 randomisierte alle 50 Trajektorien zwei Kameraposen, und auf der Projektseite wird vermerkt, dass die meisten Daten ohnehin nur die feste Ansicht enthalten. DROID verwendete verstellbare ZED 2 Halterungen sowie eine Handgelenk-ZED Mini. Sie haben zwei USB-Webcams, die nach Augenmaß positioniert sind. Die Kamerapose ist keine Störvariable für ein ; sie ist ein Großteil dessen, worauf der visuelle Encoder basierte, und nichts im Dateiformat sagt Ihnen, dass sich die Posen unterscheiden.

Die Falle, die einen Tag frisst

Die Teile passen gut genug zusammen, um zu laufen. Der Datensatz lädt, das Training beginnt, der Verlust sinkt, Checkpoints erscheinen, nichts schlägt fehl. Dann tut die Policy nichts Erkennbares am Arm, und Sie verbringen einen Tag damit, einen Fehler in Ihrem Trainingsskript zu suchen. Es gibt keinen Fehler: Das Modell hat eine kartesische Aktionsverteilung für einen Roboter gelernt, der in Ihrem Raum nicht existiert. Beginnen Sie bei Verlust sinkt, Policy tut nichts, nicht bei Ihren Hyperparametern.

Was passiert, wenn Sie versuchen, die Daten trotzdem zusammenzuführen

Der offensichtliche Plan ist zu verketten: ein paar tausend DROID-Episoden plus Ihre 50. LeRobot lehnt ab, und die Ablehnung nennt die drei Dinge, die sich unterscheiden.

  1. 1
    Ziehen Sie die 100-Episoden-Stichprobe, nicht die vollen 1,7 TB

    2 GB reichen aus, um die Struktur zu sehen.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    RLDS in LeRobot-Form konvertieren

    openx2lerobot kapselt die OXE-Standardtransformationen und annotiert Robotertyp und Steuerfrequenz. Die README legt dies in convert.sh ab.

    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
    Lesen Sie meta/info.json vor allem anderen

    Diese Datei entscheidet, ob der Rest Ihres Tages funktioniert.

    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
    Versuchen Sie den Merge und lesen Sie den Fehler

    merge lädt jeden Datensatz, dann prüft validate_all_metadata fps, robot_type und Features gegen den ersten in der Liste und löst beim ersten Konflikt einen Fehler aus.

    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.

Die Referenzwerte stammen von dem Datensatz, den Sie zuerst aufgelistet haben, weshalb die Meldung Ihre 30 fps bemängelt und nicht die 15 von DROID. Beheben Sie die fps, und Sie stoßen auf die robot_type-Prüfung; beheben Sie diese, und Sie stoßen auf die Feature-Prüfung, 7 gegen 6 für die Aktion. Keine Reihenfolge kommt durch, und dieselbe Schutzfunktion läuft zur Aufnahmezeit über sanity_check_dataset_robot_compatibility.

robot_type nicht fest codieren, um die Prüfung zu umgehen

Im aktuellen LeRobot-Main sind so100_follower und so101_follower beide auf einer gemeinsamen SOFollowerRobotConfig registriert, sodass der String einer echten Aufnahme nicht unbedingt der ist, den Sie erwarten. Lesen Sie ihn aus Ihrer eigenen meta/info.json und betrachten Sie eine Prüfung, die Sie deaktivieren mussten, als eine Prüfung, die Ihnen etwas mitgeteilt hat.

Was wird also tatsächlich übertragen?

Gewichte, nicht Episoden. Jede moderne Generalisten-Policy hat einen Teil davon im Vortraining absorbiert, und wenn Sie von einem veröffentlichten erben Sie es bereits von Personen mit der Rechenleistung, um es richtig zu machen, abgestimmt. Das Papier von pi0 ist offen bezüglich des Anteils: 9,1 Prozent seiner Vortrainingsmischung, in Zeitschritte gezählt, sind Open-Source-Daten, einschließlich OXE, Bridge v2 und DROID. Diese Zahl stammt von pi0; die Mischung jedes Anbieters unterscheidet sich.

Öffentliche Daten über verschiedene Verkörperungen hinweg für ein SO-100 Projekt
Vorteile
  • Visuelle und sprachliche Prioren: Der Encoder hat Tausende von Küchen und Tassen gesehen und weiß, worauf sich "der rote Block" bezieht.
  • Ein Prior über die Manipulationsstruktur: Annähern, Schließen, Heben, Transportieren, Loslassen, verkörperungsunabhängig, auch wenn die Zahlen es nicht sind.
  • Ein bekanntermaßen guter Datensatz zum Testen. Wenn Ihr Job 100 DROID-Episoden nicht überanpassen kann, liegt das Problem an Ihrem Setup.
  • Referenzpunkte: In kleinen Datensatzdomänen erreichte RT-1-X eine um 50 Prozent höhere mittlere Erfolgsrate als die ursprüngliche Methode oder RT-1, und RT-2-X übertraf RT-2 um etwa das Dreifache bei emergenten Fähigkeiten.
Kompromisse
  • Keine nutzbare Aktionsüberwachung. Ein 7-D kartesisches Ziel ist kein 6-D Gelenkbefehl.
  • Keine Kamera-Posen-Übertragung, und nichts in den Daten sagt Ihnen, dass die Posen unterschiedlich sind.
  • Keine Zeitübertragung: 3, 5 und 15 fps Quellen gegenüber einem 30 fps Rekorder.
  • Keine Greiferübertragung. Ein Robotiq 2F-85 und eine gedruckte Backe an einem STS3215 unterscheiden sich in Kraft, Hub und Dynamik.
  • Skalierung allein war selbst für die Autoren nicht ausreichend: In den Domänen großer Datensätze übertraf RT-1-X ein RT-1, das nur auf diesem Datensatz trainiert wurde, nicht.
  • Keine Reduzierung der Anzahl Ihrer benötigten eigenen Episoden.
Schicht des ModellsÜberträgt?Warum
Vision-EncoderJa, starkObjekte und Szenen sind verkörperungsunabhängig
Sprachliche VerankerungJaAnweisungen sind Text, nicht Geometrie
Kreuzmodale FusionMeistensBezieht sich auf das im Prompt genannte Objekt
Propriozeptions-EncoderNeinEingabedimension und Gelenksemantik unterscheiden sich
AktionskopfNeinTrainiert in einem 7-D kartesischen Raum, in dem Sie sich nicht befinden
NormalisierungsstatistikenNein, und gefährlichFremde Statistiken verschieben jeden Befehl

Deshalb SmolVLA verhält sich auf einem kostengünstigen Arm anders. Sein Paper wählt 481 Community-Datensätze von Hugging Face aus, gefiltert nach Verkörperungstyp, Episodenanzahl, Datenqualität und Frame-Abdeckung: 22.9K Episoden, 10.6M Frames, evaluiert an echten SO-100 und SO-101 Armen. Klein und passend schlägt groß und unpassend. Vergleichen Sie auf ACT gegen SmolVLA.

Drei lohnende Wege

Weg A: Feinabstimmung von einem Checkpoint, der die Daten bereits verarbeitet hat

Die meisten Leute sollten diesen Weg wählen. Sie berühren niemals DROID oder Open X-Embodiment: wählen Sie eine Policy, deren Vortraining bereits Cross-Embodiment-Daten absorbiert hat, zeichnen Sie Ihre eigenen Episoden auf, führen Sie eine Feinabstimmung durch.

RichtlinieParameterMin. EpisodenDatensatzformatGPU-KlasseInferenzBasis-Checkpoint
GR00T N1.7~3 B, ~40 M im Fine-Tuning trainiert50LeRobot v2.0 or v2.1A100 or H100 80 GB152 ms pro Schrittnvidia/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 mskeine, von Grund auf

ACT ist der ehrliche Grenzfall: kein Basismodell, daher erreichen keine der öffentlichen Daten es jemals. Dies ist nicht automatisch ein Nachteil, da es mit 20 ms pro Aktionsschritt das einzige der fünf ist, das einen schnellen Regelkreis schließen kann, wie die ACT-Seite darlegt. Wählen Sie nach Aufgabe unter Verwendung von alle fünf im Vergleich, GR00T N1.7 gegen Pi0.5, und den 332 Benchmark-Ergebnissen über 85 Modelle in der Arena.

Pfad B: DROID als Testvorrichtung verwenden

Die 100-Episoden-Stichprobe ist die besten 2 GB, die Sie diesen Monat herunterladen werden, und nicht zum Training. Es ist ein Datensatz, von dem Sie wissen, dass er korrekt ist. Führen Sie Ihren Konverter, Loader und einen kurzen GPU-Job darauf aus; alles, was fehlschlägt, ist ein Infrastrukturfehler, der gefunden wurde, als es noch günstig war. NVIDIA macht dasselbe im großen Maßstab: Die GR00T N1.7-Karte listet vier nachtrainierte Varianten auf, für Bridge und Fractal in SimplerEnv, DROID und LIBERO.

Pfad C: Eigene Daten gezielt aufzeichnen

Dreißig bis fünfzig klingt wenig im Vergleich zu 76.000, bis man bedenkt, dass Ihre die einzigen sind, die mit Ihrem Arm, Ihren Kameras und Ihrem Tisch aufgenommen wurden. Bei den Standardeinstellungen von LeRobot entsprechen 50 Episoden 100 Minuten Echtzeit. Siehe , und .

Die AY-Robots Aufzeichnungs-Tutorial-Seite, die die Schritte zur Erfassung eines LeRobot-Datensatzes aus einer Teleoperationssitzung zeigt
Die Aufzeichnungsanleitung unter /learn/record-your-first-dataset: der Schritt, den öffentliche Daten nicht ersetzen können.

Zwei Wege, um von öffentlichen Daten zu einer funktionierenden Policy zu gelangen

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.

Die Download-Seite des AY-Robots Desktop-Clients, der Client, der Datensätze im LeRobot-Format aus einer Teleoperationssitzung aufzeichnet
Der Desktop-Client unter /download schreibt LeRobot-Datensätze direkt aus einer Teleoperationssitzung und umgeht so die RLDS-Konvertierung.

Was jeder Pfad kostet

PfadSpeicherplatzMenschliche ZeitGPU-KostenChance, dass es Ihren Arm bewegt
Konvertiertes DROID allein392 GBTage der Konvertierung4 to 12 USDsehr gering, falscher Aktionsraum
DROID mit Ihren Episoden zusammengeführtbeidesblocked by validate_all_metadatan/akeine, es läuft nicht
SmolVLA, 30 to 50 own episodeseinige GB100 Min. Aufnahme1 to 3 USDhoch
GR00T N1.7, 50 own episodeseinige GB100 Min. Aufnahme4 to 12 USDhoch
ACT from scratch, 50 own episodeseinige GB100 Min. Aufnahme1 to 3 USDhoch, 20 ms Inferenz
DROID-Beispiel als Test-Fixture2 GBein Nachmittagein kurzer Laufhoch, als Validierung

Die Asymmetrie ist der Punkt: Der Pfad, der die meisten Daten ausleiht, ist der teuerste und am wenigsten wahrscheinlich, Ihren Arm zu bewegen. Weniger als zwei Stunden Ihrer eigenen Teleoperation schlagen ein Terabyte einer fremden Franka. Noch keinen Arm? /live streamt einen physischen SO-100 ohne Anmeldung. Dann trainieren Sie Ihre erste Policy, und SmolVLA auf SO-100 für die spezifische Anleitung.

Ein vernünftiger Standardplan

Laden Sie das 2 GB DROID-Beispiel herunter und verwenden Sie es, um Ihre Pipeline zu testen. Ignorieren Sie die anderen 1.7 TB. Nehmen Sie 50 Episoden einer Aufgabe mit festen Kameras auf. Optimieren Sie zuerst SmolVLA, da es mit mindestens 30 Episoden auf einer 24 GB Karte am günstigsten zu iterieren ist, und versuchen Sie dann GR00T N1.7 mit denselben Daten. Vergleichen Sie auf Ihrer Aufgabe, nicht auf einem Benchmark.

Datensätze aufzeichnen, die bereits zu Ihrem Arm passen

Der Desktop-Client schreibt Datensätze im LeRobot-Format direkt aus einer Teleoperationssitzung: passender Arm, passende Bildrate, passender Aktionsraum. Keine RLDS-Konvertierung, kein Neuzuordnung.

Desktop-Client herunterladen
Kann ich eine Policy auf DROID trainieren und auf meinem SO-100 ausführen?

Nicht direkt. Im LeRobot-Build sind DROID-Aktionen 7-D Endeffektor-Befehle auf einem Franka Panda mit 15 fps; im rohen RLDS sind es 6 Gelenkgeschwindigkeiten plus eine Greiferposition. Ein SO-100 benötigt 6 absolute Gelenkpositionen. Sie bräuchten eine invers-kinematische Schicht, und selbst dann kann ein 5-DoF Handgelenk keine beliebigen 6-DoF Posen reproduzieren.

Kann ich DROID- oder Bridge-Episoden mit meinen eigenen SO-100-Episoden mischen?

Nein. validate_all_metadata erfordert identische fps, robot_type und Feature-Schema und löst einen ValueError beim ersten Konflikt aus. Alle drei unterscheiden sich: 15 oder 5 fps gegenüber 30, franka oder widowx gegenüber Ihrem Arm, Aktionsformen von 7 gegenüber 6. Das Umschreiben von Metadaten, um die Prüfung zu bestehen, behebt die Semantik nicht.

Ist Open X-Embodiment dann nutzlos für einen kostengünstigen Arm?

Nein, aber sein Wert erreicht Sie durch vortrainierte Gewichte, nicht durch Episoden. Open-Source-Datensätze wie OXE, Bridge v2 und DROID machen 9.1 Prozent der Vortrainingsmischung von pi0 aus, und NVIDIA liefert GR00T N1.7-Varianten, die auf Bridge, Fractal, DROID und LIBERO nachtrainiert wurden. Was Sie nicht tun können, ist, diese Episoden an Ihre eigene Aufnahme anzuhängen.

Welche Policy profitiert am meisten von öffentlichen Cross-Embodiment-Daten?

Pi0.5 und die GR00T-Modelle verfügen über das meiste Cross-Embodiment-Vortraining, aber SmolVLA verhält sich oft am besten an einem kostengünstigen Arm: Sein Vortrainingssatz besteht aus 481 Community-Datensätzen, 22.9K Episoden und 10.6M Frames, evaluiert an echten SO-100- und SO-101-Armen. ACT ist das Gegenteil: kein Basismodell, 20 ms pro Aktionsschritt.

Wie viele meiner eigenen Episoden benötige ich tatsächlich?

30 für SmolVLA, 50 für GR00T N1.7, GR00T N1.5, Pi0.5 und ACT. Bei LeRobots Standardeinstellungen von 60 s pro Episode und 60 s Reset sind 50 Episoden 100 Minuten Echtzeit. Ausgeliehene Cross-Embodiment-Daten senken diese Zahlen nicht.

Bereit für hochwertige Robotik-Daten?

AY-Robots verbindet Ihre Roboter mit qualifizierten Operatoren weltweit.

Jetzt starten