Publiczny katalog zbiorów danych AY-Robots pokazujący zbiory danych LeRobot nagrane na ramionach klasy SO-100
Zbiory danychOpen X-EmbodimentDROIDSO-100LeRobot

Używanie DROID, BridgeData V2 i Open X na SO-100

AY-Robots ResearchAugust 23, 202618 min czytania

DROID, BridgeData V2 i Open X-Embodiment konwertują się na 7-wymiarowe akcje efektora końcowego na ramionach 6- i 7-stopniowych. SO-100 przyjmuje 6 pozycji przegubów. Co się przenosi, co nie, co zrobić zamiast tego.

Wersja skrócona

  • Wersje LeRobot wszystkich trzech współdzielą jedną konwencję: 7-wymiarową akcję efektora końcowego [x, y, z, roll, pitch, yaw, gripper] i 8-wymiarowy stan z miejscem na wypełnienie. SO-100 przyjmuje sześć absolutnych pozycji stawów.
  • Ten 7-wymiarowy wektor jest artefaktem konwertera: własne pole akcji RLDS DROID to 6 prędkości stawów plus pozycja chwytaka, z widokiem kartezjańskim w action_dict.
  • Cztery zegary: DROID 15 fps, BridgeData V2 5 fps, wycinek google_robot 3 fps, nagranie SO-100 przy 30 fps.
  • Nie można ich połączyć z własnymi danymi. validate_all_metadata zgłasza błąd przy pierwszej różnicy w fps, robot_type lub features, a wszystkie trzy się różnią.
  • Przenoszone są wstępnie wytrenowane wagi, a nie epizody. Dane open-source stanowią 9.1 procent mieszanki wstępnego treningu pi0.
  • Ich najtańsze rzeczywiste zastosowanie to stanowisko testowe: sprawdzona próbka DROID o rozmiarze 2 GB i 100 epizodach, która sprawdza Twój potok przed nagrywaniem przez weekend.

Istnieje publiczny zbiór danych miliona trajektorii na zasobniku Google Cloud i SO-100 na biurku, który kosztował od 110 do 150 EUR w częściach. Dlaczego pierwszy nie może nauczyć drugiego? Częściowo może, ale prawie żaden transfer nie zachodzi tam, gdzie ludzie się spodziewają, a część, która wydaje się najłatwiejsza, w ogóle nie działa.

Poniżej: co znajduje się w DROID, BridgeData V2 i Open X-Embodiment, gdzie każdy z nich zderza się z tanim ramieniem 5-DoF, i co zrobić zamiast tego. Każda liczba poniżej pochodzi z artykułu, karty zbioru danych lub pliku źródłowego, do którego należy.

Co faktycznie zawierają te trzy zbiory danych

DROIDBridgeData V2Open X-Embodiment
RobotFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, zestaw za ~4,000 USD22 implementacje, 60 zbiorów danych, 34 laboratoria
Skala76 tys. trajektorii, 350 godzin60 096 trajektoriiPonad 1 mln trajektorii, 527 umiejętności
Różnorodność564 sceny, 84 zadania, 50 zbieraczy24 środowiska, 13 umiejętności160 266 zadań, 21 instytucji
Kompozycjawszystkie teleoperowane50 365 teleoperowanych, 9 731 skryptowychna laboratorium źródłowe
Częstotliwość sterowania15 Hz5 Hzróżnie, od 3 kl./s wzwyż
Kamery2 x ZED 2 zewnętrzne, 1 x ZED Mini na nadgarstkudo 4, większość epizodów tylko stałacokolwiek użyło laboratorium
Pobieranie surowych danych1.7 TB RLDS, 8.7 TB surowego stereoArchiwa JPEGzasobniki TFDS na zbiór danych
Punktem wejścia jest konwersja LeRobot, a nie oryginalny zasobnik

Niewiele osób nadal pobiera 1.7 TB danych RLDS TFRecords. Organizacja społecznościowa IPEC-COMMUNITY ponownie opublikowała większość Open X-Embodiment w formie zbioru danych LeRobot z wideo AV1, gdzie DROID zajmuje 392 GB. To jest wersja, z którą będziesz pracować, a jej meta/info.json należy przeczytać w pierwszej kolejności.

DROID

Najbardziej ustandaryzowany z trzech. Jeden zestaw wszędzie: Franka Panda z chwytakiem Robotiq 2F-85, dwie regulowane kamery stereo ZED 2 i ZED Mini na nadgarstku, teleoperowany za pomocą kontrolerów Meta Quest 2, nagrywany przez Polymetis z częstotliwością 15 Hz zarówno w przestrzeni stawowej, jak i efektora końcowego przestrzeni. Etykiety językowe pojawiły się później za pośrednictwem tasq.ai, do trzech na epizod.

  • 76 tys. trajektorii, 350 godzin, 564 sceny, 84 zadania, 50 kolektorów na trzech kontynentach.
  • Głównym wynikiem jest współtrening, a nie samodzielne trenowanie: partie zmieszane 50/50 z demonstracjami w domenie pokonały następną najlepszą metodę o 22 procent bezwzględnego sukcesu w dystrybucji i 17 procent poza nią.
  • IPEC-COMMUNITY/droid_lerobot: 92 233 epizody, 27 044 326 klatek, franka, 15 fps, codebase_version v2.0, trzy strumienie AV1 w rozdzielczości 180x320, 392 GB.
  • Próbka debugowania o rozmiarze 2 GB, zawierająca 100 epizodów, znajduje się pod adresem gs://gresearch/robotics/droid_100. Zacznij od niej.

BridgeData V2

Najbliżej konfiguracji hobbystycznej: ramię WidowX 250 6-DoF, 60 096 trajektorii w 24 środowiskach i 13 umiejętnościach przy 5 Hz. Zwróć uwagę na skład: 50 365 eksperckich demonstracji teleoperowanych plus 9 731 z losowo skryptowanej polityki podnoszenia i umieszczania, więc około 16 procent nie stanowi demonstracji ludzkich, co ma znaczenie dla uczenia przez naśladowanie jakości. Zwykłe pobranie, IPEC-COMMUNITY/bridge_orig_lerobot, zgłasza 53 192 epizody i 1 893 026 klatek przy 5 fps, robot_type widowx: mniej niż 60 096 z artykułu, więc odczytaj liczbę z meta/info.json zamiast cytować którąkolwiek z nich.

Open X-Embodiment

Nie jest to zbiór danych w tym samym sensie: 60 istniejących zbiorów danych robotów z 34 laboratoriów połączonych w jedną kolekcję RLDS, obejmującą 22 implementacje i ponad milion trajektorii. BridgeData V2 znajduje się w niej jako bridge_orig; wycinek google_robot, fractal20220817_data, konwertuje się na 87 212 epizodów przy 3 fps.

Połączenie to wiąże się z zastrzeżeniem, które artykuł jasno określa. W eksperymentach RT-X autorzy konwertują każde źródło na akcję efektora końcowego 7-DoF, ale nie wyrównują układów współrzędnych między zbiorami danych i pozwalają, aby wartości akcji były pozycjami lub prędkościami absolutnymi lub względnymi, zgodnie z oryginalnym schematem sterowania każdego robota. Ich wniosek: ten sam wektor akcji może wywoływać bardzo różne ruchy dla różnych robotów.

Katalog zbiorów danych AY-Robots zawierający publiczne zbiory danych LeRobot z liczbą epizodów i opisami zadań
Publiczny katalog zbiorów danych pod adresem /directory: zbiory danych już w formacie LeRobot, już pasujące do obsługiwanego ramienia.

Niezgodność, w czterech częściach

Niezgodność ucieleśnienia jest zazwyczaj traktowana jako jeden niejasny problem. Jest ich cztery, psują się inaczej, a dwóch nie da się naprawić skryptowaniem.

1. Stopnie swobody

SO-100 ma pięć przegubów ramienia plus chwytak. Licząc jako silniki, jest to ramię 6-DoF, i tak nazywa je artykuł SmolVLA; licząc jako mechanizm pozycjonujący, jest to 5-DoF, i tak nazywa je LeRobot w swoim docstringu kinematyki odwrotnej, który opisuje IK z miękką orientacją na 5-DOF SO-101, gdzie nadgarstek śledzi orientację tylko częściowo. Franka ma siedem przegubów pozycjonujących. Ta różnica decyduje o tym, jakie pozy istnieją: ramię 5-DoF nie może zazwyczaj osiągnąć jednocześnie dowolnej pozycji i orientacji, więc solver zwraca najbliższą możliwą, ruch inny niż zademonstrowany. Tło: stopnie swobody.

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
Lewo: SO follower LeRobota, z src/lerobot/robots/so_follower/so_follower.py. Prawo: wejście polityki DROID openpi. Sześć przeciwko ośmiu.

Zatem gotowy punkt kontrolny DROID nie jest skrótem. Physical Intelligence dostarcza pi05_droid pod adresem gs://openpi-assets/checkpoints/pi05_droid, a ten sam plik README, który chwali jego szeroki zakres, ostrzega, że te eksperckie punkty kontrolne mogą nie uogólniać się do Twojej konfiguracji. Jego stan to osiem numerów stawów Franka, a klucze obrazów to exterior_image_1_left i wrist_image_left. Żadna flaga nie zamienia tego w sześciomotorowe polecenie SO-100.

2. Co faktycznie mówi wektor akcji

Głębiej niż wymiarowość. W konwersjach LeRobot wszystkie trzy mówią, gdzie powinien iść chwytak, w przestrzeni kartezjańskiej. SO-100 mówi, gdzie powinno iść sześć serwomechanizmów. Konwersja wymaga modelu kinematycznego i solwera, a nie zmiany kształtu.

WłaściwośćOXE, DROID i Bridge w formie LeRobotSO-100 w LeRobot
Wektor akcji7-D: x, y, z, roll, pitch, yaw, gripper6-D: jedna pozycja docelowa na silnik
Wektor stanu8-D, z miejscem na wypełnienie (google_robot używa kwaternionu)6-D, jeden na silnik
Układ odniesieniaKartezjański, niespójny między zbiorami danychprzestrzeń stawów, kalibracja dla każdego ramienia
Absolutny czy względnydowolny, decyzja laboratorium źródłowegoabsolutne pozycje docelowe
Jednostkiznormalizowane na zbiór danych, następnie dyskretyzowanestopnie domyślnie (use_degrees=True), w przeciwnym razie -100 do 100
Cicha awariadelta odczytana jako wartość absolutnaniekalibrowane ramię
7-wymiarowy wektor kartezjański to konwencja konwertera, nie DROIDa

Plik README openx2lerobot dokumentuje ujednolicony 8-wymiarowy stan i 7-wymiarową akcję dla każdego konwertowanego zbioru danych, skąd pochodzi slot pad. Własny schemat RLDS DROIDa różni się: jego najwyższego poziomu action to 7-wektor 6 prędkości stawów plus 1 pozycja chwytaka, z cartesian_position, cartesian_velocity, joint_position i joint_velocity pod action_dict. openpi odczytuje widok w przestrzeni stawów, kompilacja LeRobot dostarcza widok kartezjański. Żaden z nich nie jest sześcioma absolutnymi kątami serwomechanizmów.

LeRobot dostarcza brakujący element: moduł SO follower posiada procesor kinematyki z krokami InverseKinematicsEEToJoints i ForwardKinematicsJointsToEE. Jego klucze to ee.x, ee.y, ee.z plus wektor rotacji ee.wx, ee.wy, ee.wz i ee.gripper_pos, więc nawet kodowanie orientacji różni się od roll-pitch-yaw w plikach. Krok IK przyjmuje orientation_weight, domyślnie 0.01, którego docstring mówi, aby ustawić 0.0 dla IK tylko pozycyjnego na ramionach niedostatecznie sterowanych. Możesz zbudować most, ale połowa orientacji każdej pożyczonej akcji pozostaje przybliżona.

3. Częstotliwość sterowania

DROID działa z częstotliwością 15 Hz, BridgeData V2 5 Hz, wycinek google_robot 3 fps; autorzy pi0 opisują otwartą część swojej mieszanki jako sterowanie niskiej częstotliwości między 2 a 10 Hz. DatasetRecordConfig LeRobot domyślnie ustawia fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. A wytrenowana na danych 5 Hz nauczyła się, że jedna akcja obejmuje 200 ms. Odtwórz to z częstotliwością 30 Hz, a ramię będzie się czołgać; naiwnie resampluj, a rozmyjesz klatkę, w której chwytak się zamyka. Źle współdziała również z : 100-krokowy fragment to 20 sekund przy 5 Hz, 3.3 przy 30 Hz.

4. Kamery

BridgeData V2 losowo ustawiało dwie pozycje kamery co 50 trajektorii, a strona projektu zauważa, że większość danych i tak zawiera tylko stały widok. DROID używał regulowanych mocowań ZED 2 oraz nadgarstkowego ZED Mini. Masz dwie kamery internetowe USB ustawione na oko. Pozycja kamery nie jest zmienną uciążliwą dla ; jest to w dużej mierze to, na czym opierał się koder wizualny, a nic w formacie pliku nie wskazuje na to, że pozycje się różnią.

Pułapka, która pochłania dzień

Elementy pasują do siebie na tyle dobrze, by uruchomić system. Zbiór danych się ładuje, trening się rozpoczyna, strata spada, pojawiają się punkty kontrolne, nic nie zgłasza błędów. Następnie polityka nie wykonuje niczego rozpoznawalnego na ramieniu, a Ty spędzasz dzień na szukaniu błędu w swoim skrypcie treningowym. Nie ma błędu: model nauczył się kartezjańskiego rozkładu akcji dla robota, który nie istnieje w Twoim pokoju. Zacznij od strata spada, polityka nic nie robi, a nie od swoich hiperparametrów.

Co się dzieje, gdy mimo wszystko próbujesz połączyć dane

Oczywisty plan to konkatenacja: kilka tysięcy epizodów DROID plus twoje 50. LeRobot odmawia, a odmowa wymienia trzy rzeczy, które się różnią.

  1. 1
    Pobierz 100-epizodową próbkę, nie pełne 1.7 TB

    2 GB wystarczy, aby zobaczyć strukturę.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Konwertuj RLDS do formatu LeRobot

    openx2lerobot opakowuje standardowe transformacje OXE i dodaje adnotacje dotyczące typu robota oraz częstotliwości sterowania. Plik README umieszcza to w 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
    Przeczytaj meta/info.json przed czymkolwiek innym

    Ten plik decyduje, czy reszta twojego dnia będzie działać.

    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
    Wypróbuj scalanie i przeczytaj błąd

    merge ładuje każdy zbiór danych, a następnie validate_all_metadata sprawdza fps, robot_type i features w porównaniu z pierwszym na liście, zgłaszając błąd przy pierwszym niedopasowaniu.

    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.

Wartości referencyjne pochodzą z tego zbioru danych, który wymieniłeś jako pierwszy, dlatego komunikat narzeka na twoje 30 fps, a nie na 15 fps DROID. Napraw fps, a trafisz na sprawdzenie robot_type; napraw to, a trafisz na sprawdzenie features, 7 przeciwko 6 dla akcji. Żadne uporządkowanie nie przechodzi, a ta sama ochrona działa w czasie nagrywania poprzez sanity_check_dataset_robot_compatibility.

Nie koduj na stałe robot_type, aby ominąć sprawdzenie

W obecnej głównej wersji LeRobot so100_follower i so101_follower są zarejestrowane na jednej współdzielonej SOFollowerRobotConfig, więc ciąg znaków z rzeczywistego nagrania niekoniecznie jest tym, czego oczekujesz. Odczytaj go z własnego pliku meta/info.json i traktuj sprawdzenie, które musiałeś wyłączyć, jako sprawdzenie, które coś ci mówiło.

Więc co właściwie się przenosi?

Wagi, nie epizody. Każda nowoczesna polityka ogólna zaabsorbowała część tego w fazie wstępnego trenowania, a kiedy z wydanego dziedziczysz to już uzgodnione przez osoby posiadające odpowiednią moc obliczeniową, aby zrobić to prawidłowo. Artykuł pi0 otwarcie mówi o proporcji: 9.1 procenta jego mieszanki wstępnego trenowania, liczonej w krokach czasowych, to dane open-source, w tym OXE, Bridge v2 i DROID. Ta liczba dotyczy pi0; mieszanka każdego dostawcy się różni.

Publiczne dane między-ucieleśnieniowe w projekcie SO-100
Zalety
  • Wizualne i językowe priory: koder widział tysiące kuchni i kubków i wie, do czego odnosi się „czerwony klocek”.
  • Prior dotyczący struktury manipulacji: podejście, zamknięcie, podniesienie, transport, zwolnienie, niezależny od ucieleśnienia, nawet jeśli liczby nie są.
  • Sprawdzony zbiór danych do testowania. Jeśli Twoje zadanie nie jest w stanie przetrenować 100 epizodów DROID, problem leży w Twojej konfiguracji.
  • Punkty odniesienia: w domenach z małymi zbiorami danych RT-1-X osiągnął o 50 procent wyższy średni wskaźnik sukcesu niż oryginalna metoda lub RT-1, a RT-2-X pokonał RT-2 około 3x w zakresie umiejętności emergentnych.
Kompromisy
  • Brak użytecznego nadzoru nad akcjami. 7-wymiarowy cel kartezjański to nie 6-wymiarowe polecenie stawu.
  • Brak transferu pozycji kamery, a nic w danych nie wskazuje na to, że pozycje się różnią.
  • Brak transferu synchronizacji: źródła 3, 5 i 15 kl./s w stosunku do rejestratora 30 kl./s.
  • Brak transferu chwytaka. Robotiq 2F-85 i drukowana szczęka na STS3215 różnią się siłą, skokiem i dynamiką.
  • Sama skala nie wystarczyła nawet dla jej autorów: w domenach z dużymi zbiorami danych RT-1-X nie pokonał RT-1 trenowanego wyłącznie na tym zbiorze danych.
  • Brak redukcji liczby własnych epizodów, których potrzebujesz.
Warstwa modeluPrzenosi się?Dlaczego
Koder wizyjnyTak, silnieObiekty i sceny są niezależne od ucieleśnienia
Ugruntowanie językoweTakInstrukcje to tekst, nie geometria
Fuzja między-modalnaW większościZwraca uwagę na obiekt nazwany w podpowiedzi
Koder propriocepcjiNieWymiar wejściowy i semantyka stawów różnią się
Głowica akcjiNieTrenowana w 7-wymiarowej przestrzeni kartezjańskiej, w której się nie znajdujesz
Statystyki normalizacjiNie, i niebezpieczneObce statystyki przesuwają każde polecenie

Dlatego SmolVLA zachowuje się inaczej na ramieniu niskobudżetowym. Jego artykuł wybiera 481 zestawów danych społecznościowych z Hugging Face, filtrowanych według typu ucieleśnienia, liczby epizodów, jakości danych i pokrycia klatek: 22,9 tys. epizodów, 10,6 mln klatek, ocenionych na prawdziwych ramionach SO-100 i SO-101. Małe i dopasowane przewyższa duże i niedopasowane. Porównaj na ACT kontra SmolVLA.

Trzy ścieżki warte podjęcia

Ścieżka A: dostrajanie z punktu kontrolnego, który już przyswoił dane

Większość ludzi powinna wybrać tę ścieżkę. Nigdy nie dotykasz DROID ani Open X-Embodiment: wybierz politykę, której wstępne szkolenie już przyswoiło dane dotyczące różnych ucieleśnień, nagraj własne epizody, dostrój.

PolitykaParametryMin. epizodyFormat zbioru danychPoziom GPUInferencjaBazowy punkt kontrolny
GR00T N1.7~3 B, ~40 M wytrenowane w dostrajaniu50LeRobot v2.0 or v2.1A100 or H100 80 GB152 ms na kroknvidia/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, rdzeń PaliGemma50LeRobot 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 msbrak, od podstaw

ACT to uczciwy przypadek brzegowy: brak modelu bazowego, więc żadne dane publiczne nigdy do niego nie docierają. Nie jest to automatycznie wada, ponieważ przy 20 ms na krok akcji jest to jedyny z pięciu, który może zamknąć szybką pętlę, jak strona ACT, przedstawia. Wybierz według zadania, używając wszystkie pięć porównanych, GR00T N1.7 kontra Pi0.5, oraz 332 wyniki benchmarków dla 85 modeli w arena.

Ścieżka B: użyj DROID jako osprzętu testowego

100-epizodyczna próbka to najlepsze 2 GB, jakie pobierzesz w tym miesiącu, i nie służy do trenowania. Jest to zbiór danych, o którym wiesz, że jest poprawny. Uruchom na nim swój konwerter, ładowarkę i krótkie zadanie GPU; wszystko, co zawiedzie, to błąd infrastruktury znaleziony, gdy było to tanie. NVIDIA robi to samo na dużą skalę: karta GR00T N1.7 wymienia cztery warianty po trenowaniu, dla Bridge i Fractal w SimplerEnv, DROID i LIBERO.

Ścieżka C: nagraj własne, celowo

Trzydzieści do pięćdziesięciu brzmi mało w porównaniu do 76 000, dopóki nie przypomnisz sobie, że Twoje są jedynymi z Twoim ramieniem, Twoimi kamerami i Twoim stołem. Przy domyślnych ustawieniach LeRobot, 50 epizodów to 100 minut czasu zegarowego. Zobacz , i .

Strona samouczka nagrywania AY-Robots pokazująca kroki do przechwycenia zbioru danych LeRobot z sesji teleoperacji
Instrukcja nagrywania na /learn/record-your-first-dataset: krok, którego dane publiczne nie mogą zastąpić.

Dwa sposoby na przejście od danych publicznych do działającej polityki

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.

Strona pobierania klienta desktopowego AY-Robots, klienta, który nagrywa zbiory danych w formacie LeRobot z sesji teleoperacji
Klient desktopowy pod adresem /download zapisuje zbiory danych LeRobot bezpośrednio z sesji teleoperacji, omijając konwersję RLDS.

Ile kosztuje każda ścieżka

ŚcieżkaPamięćCzas ludzkiKoszt GPUSzansa, że poruszy twoim ramieniem
Sam przekonwertowany DROID392 GBdni konwersji4 to 12 USDbardzo niska, niewłaściwa przestrzeń akcji
DROID połączony z twoimi epizodamibothzablokowane przez validate_all_metadatan/ażadna, nie uruchamia się
SmolVLA, 30 do 50 własnych epizodówa few GB100 min nagrywania1 to 3 USDwysoka
GR00T N1.7, 50 własnych epizodówa few GB100 min nagrywania4 to 12 USDwysoka
ACT od zera, 50 własnych epizodówa few GB100 min nagrywania1 to 3 USDwysoka, 20 ms wnioskowania
Próbka DROID jako element testowy2 GBpopołudnieone short runwysoka, jako walidacja

Asymetria jest kluczowa: ścieżka, która pożycza najwięcej danych, jest najdroższa i najmniej prawdopodobna, aby poruszyć twoim ramieniem. Mniej niż dwie godziny twojej własnej teleoperacji jest lepsze niż terabajt Franki kogoś innego. Nie masz jeszcze ramienia? /live transmituje fizyczny SO-100 bez rejestracji. Następnie trenuj swoją pierwszą politykę, a także SmolVLA na SO-100 dla konkretnego przewodnika.

Rozsądny plan domyślny

Pobierz próbkę DROID o rozmiarze 2 GB i użyj jej do sprawdzenia swojego potoku. Zignoruj pozostałe 1.7 TB. Nagraj 50 epizodów jednego zadania ze stałymi kamerami. Dostrój SmolVLA najpierw, ponieważ przy minimum 30 epizodach na karcie 24 GB jest to najtańsze do iteracji, a następnie wypróbuj GR00T N1.7 na tych samych danych. Porównaj na swoim zadaniu, a nie na benchmarku.

Nagrywaj zbiory danych, które już pasują do Twojego ramienia

Klient desktopowy zapisuje zbiory danych w formacie LeRobot bezpośrednio z sesji teleoperacji: odpowiednie ramię, odpowiednia liczba klatek na sekundę, odpowiednia przestrzeń akcji. Bez konwersji RLDS, bez ponownego mapowania.

Pobierz klienta desktopowego
Czy mogę trenować politykę na DROID i uruchamiać ją na moim SO-100?

Nie bezpośrednio. W kompilacji LeRobot akcje DROID to 7-wymiarowe polecenia efektora końcowego dla Franka Panda przy 15 fps; w surowym RLDS są to 6 prędkości stawów plus pozycja chwytaka. SO-100 przyjmuje 6 absolutnych pozycji stawów. Potrzebna byłaby warstwa kinematyki odwrotnej, a nawet wtedy nadgarstek 5-DoF nie może odtworzyć dowolnych pozycji 6-DoF.

Czy mogę mieszać epizody DROID lub Bridge z moimi własnymi epizodami SO-100?

Nie. validate_all_metadata wymaga identycznych wartości fps, robot_type i schematu cech oraz zgłasza ValueError przy pierwszym niedopasowaniu. Wszystkie trzy się różnią: 15 lub 5 fps kontra 30, franka lub widowx kontra Twoje ramię, kształty akcji 7 kontra 6. Przepisanie metadanych w celu przejścia kontroli nie naprawia semantyki.

Czy Open X-Embodiment jest zatem bezużyteczny dla taniego ramienia?

Nie, ale jego wartość dociera do Ciebie poprzez wstępnie wytrenowane wagi, a nie epizody. Zbiory danych open-source, w tym OXE, Bridge v2 i DROID, stanowią 9.1 procent mieszanki wstępnego treningu pi0, a NVIDIA dostarcza warianty GR00T N1.7 potrenowane na Bridge, Fractal, DROID i LIBERO. Czego nie możesz zrobić, to dołączyć tych epizodów do własnego nagrania.

Która polityka najbardziej korzysta z publicznych danych między-embodimentowych?

Pi0.5 i modele GR00T posiadają najwięcej wstępnego treningu między-embodimentowego, ale SmolVLA często działa najlepiej na tanim ramieniu: jego zestaw wstępnego treningu to 481 zbiorów danych społeczności, 22.9K epizodów i 10.6M klatek, ocenionych na prawdziwych ramionach SO-100 i SO-101. ACT jest przeciwieństwem: brak modelu bazowego, 20 ms na krok akcji.

Ile moich własnych epizodów faktycznie potrzebuję?

30 dla SmolVLA, 50 dla GR00T N1.7, GR00T N1.5, Pi0.5 i ACT. Przy domyślnych ustawieniach LeRobot wynoszących 60 s na epizod i 60 s resetu, 50 epizodów to 100 minut czasu rzeczywistego. Pożyczone dane między-embodimentowe nie obniżają tych liczb.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started