O diretório de conjuntos de dados públicos da AY-Robots mostrando conjuntos de dados LeRobot gravados em braços da classe SO-100
Conjuntos de DadosOpen X-EmbodimentDROIDSO-100LeRobot

Usando DROID, BridgeData V2 e Open X em um SO-100

AY-Robots ResearchAugust 23, 202618 min de leitura

DROID, BridgeData V2 e Open X-Embodiment convertem para ações de efetuador final 7-D em braços de 6 e 7 GDL. Um SO-100 aceita 6 posições de junta. O que é transferível, o que não é, e o que fazer em vez disso.

A versão resumida

  • As compilações LeRobot de todos os três compartilham uma convenção: uma ação de efetor final 7-D [x, y, z, roll, pitch, yaw, gripper] e um estado 8-D com um slot de preenchimento. Um SO-100 aceita seis posições absolutas de junta.
  • Esse vetor 7-D é o artefato do conversor: o próprio campo de ação RLDS do DROID é de 6 velocidades de junta mais uma posição de garra, com a visão cartesiana em action_dict.
  • Quatro clocks: DROID 15 fps, BridgeData V2 5 fps, o slice google_robot 3 fps, uma gravação SO-100 a 30 fps.
  • Você não pode mesclá-los com seus próprios dados. validate_all_metadata levanta um erro no primeiro de fps, robot_type ou features que difere, e todos os três diferem.
  • O que é transferido são pesos pré-treinados, não episódios. Dados de código aberto representam 9.1 por cento da mistura de pré-treinamento do pi0.
  • Seu uso real mais barato é um dispositivo de teste: uma amostra DROID de 2 GB e 100 episódios, comprovadamente boa, que valida seu pipeline antes de você gravar por um fim de semana.

Existe um conjunto de dados público de um milhão de trajetórias em um bucket do Google Cloud e um na mesa que custou 110 a 150 EUR em peças. Por que o primeiro não pode ensinar o segundo? Em parte pode, mas quase nenhuma da transferência acontece onde as pessoas esperam, e a parte que parece mais fácil não funciona de forma alguma.

O que se segue: o que está dentro de , e , onde cada um colide com um braço 5-DoF de baixo custo, e o que fazer em vez disso. Cada número abaixo veio do artigo, cartão do conjunto de dados ou arquivo fonte ao qual pertence.

O que os três conjuntos de dados realmente contêm

DROIDBridgeData V2Open X-Embodiment
RobôFranka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 implementações, 60 conjuntos de dados, 34 laboratórios
Escala76k trajetórias, 350 horas60.096 trajetóriasMais de 1M de trajetórias, 527 habilidades
Diversidade564 cenas, 84 tarefas, 50 coletores24 ambientes, 13 habilidades160.266 tarefas, 21 instituições
Composiçãotudo teleoperado50.365 teleoperados, 9.731 roteirizadospor laboratório de origem
Taxa de controle15 Hz5 Hzvaria, 3 fps para cima
Câmeras2 x ZED 2 exterior, 1 x ZED Mini de pulsoaté 4, a maioria dos episódios apenas a fixao que o laboratório usou
Download bruto1.7 TB RLDS, 8.7 TB estéreo brutoArquivos JPEGbuckets TFDS por conjunto de dados
O ponto de entrada é a conversão LeRobot, não o bucket original

Poucas pessoas ainda baixam 1.7 TB de TFRecords RLDS. A organização comunitária IPEC-COMMUNITY republicou a maior parte do Open X-Embodiment no formato de conjunto de dados LeRobot com vídeo AV1, onde DROID ocupa 392 GB. Essa é a versão com a qual você trabalhará, e seu meta/info.json é o que deve ser lido primeiro.

DROID

O mais padronizado dos três. Um único equipamento em todos os lugares: um Franka Panda com uma garra Robotiq 2F-85, duas câmeras estéreo ZED 2 ajustáveis e uma ZED Mini de pulso, teleoperado com controladores Meta Quest 2, gravado via Polymetis a 15 Hz tanto no espaço articular quanto no efetor final espaço. Rótulos de linguagem vieram depois via tasq.ai, até três por episódio.

  • 76k trajetórias, 350 horas, 564 cenas, 84 tarefas, 50 coletores em três continentes.
  • O resultado principal é o co-treinamento, não o treinamento autônomo: lotes misturados 50/50 com demonstrações no domínio superam o próximo melhor método em 22 por cento de sucesso absoluto na distribuição, 17 por cento fora dela.
  • IPEC-COMMUNITY/droid_lerobot: 92.233 episódios, 27.044.326 quadros, franka, 15 fps, codebase_version v2.0, três fluxos AV1 a 180x320, 392 GB.
  • Uma amostra de depuração de 2 GB e 100 episódios está em gs://gresearch/robotics/droid_100. Comece por lá.

BridgeData V2

O mais próximo de uma configuração de hobby: um braço WidowX 250 de 6 GDL, 60.096 trajetórias em 24 ambientes e 13 habilidades a 5 Hz. Observe a composição: 50.365 demonstrações teleoperadas por especialistas mais 9.731 de uma política de pegar e colocar (pick-and-place) roteirizada e aleatória, portanto, cerca de 16 por cento não é demonstração humana, o que é importante para a aprendizagem por imitação qualidade. O download usual, IPEC-COMMUNITY/bridge_orig_lerobot, relata 53.192 episódios e 1.893.026 quadros a 5 fps, robot_type widowx: menos do que os 60.096 do artigo, então leia a contagem de meta/info.json em vez de citar qualquer um.

Open X-Embodiment

Não é um conjunto de dados no mesmo sentido: 60 conjuntos de dados de robôs existentes de 34 laboratórios agrupados em uma coleção RLDS cobrindo 22 implementações e mais de um milhão de trajetórias. BridgeData V2 está contido nela como bridge_orig; a fatia google_robot, fractal20220817_data, converte-se em 87.212 episódios a 3 fps.

O agrupamento apresenta uma ressalva que o artigo declara abertamente. Para os experimentos RT-X, os autores convertem cada fonte em uma ação de efetuador final de 7-DoF, mas não alinham os sistemas de coordenadas entre os conjuntos de dados e permitem que os valores de ação sejam posições ou velocidades absolutas ou relativas, de acordo com o esquema de controle original de cada robô. A conclusão deles: o mesmo vetor de ação pode induzir movimentos muito diferentes para robôs diferentes.

O diretório de conjuntos de dados AY-Robots listando conjuntos de dados públicos LeRobot com contagens de episódios e descrições de tarefas
O diretório público de conjuntos de dados em /directory: conjuntos de dados já no formato LeRobot, já correspondendo a um braço suportado.

A incompatibilidade, em quatro partes

A incompatibilidade de incorporação é geralmente tratada como um problema vago. São quatro, falham de maneiras diferentes, e duas não são corrigíveis por script.

1. Graus de liberdade

Um SO-100 tem cinco articulações de braço mais uma garra. Contado como motores, é um braço de 6-DoF, e o artigo SmolVLA o chama assim; contado como um mecanismo de posicionamento, é de 5-DoF, e LeRobot o chama assim em sua docstring de cinemática inversa, que descreve IK de orientação suave no SO-101 de 5-DOF onde o pulso rastreia a orientação apenas parcialmente. Um Franka tem sete articulações de posicionamento. Essa lacuna decide quais poses existem: um braço de 5-DoF geralmente não consegue alcançar uma posição e orientação arbitrárias ao mesmo tempo, então o resolvedor retorna o mais próximo que pode, um movimento diferente do demonstrado. Contexto: graus de liberdade.

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
Esquerda: Seguidor SO do LeRobot, de src/lerobot/robots/so_follower/so_follower.py. Direita: Entrada da política DROID do openpi. Seis contra oito.

Portanto, um checkpoint DROID pronto não é um atalho. A Physical Intelligence distribui pi05_droid em gs://openpi-assets/checkpoints/pi05_droid, e o mesmo README que elogia sua abrangência adverte que esses checkpoints especializados podem não se generalizar para sua configuração. Seu estado são oito números de junta Franka e suas chaves de imagem são exterior_image_1_left e wrist_image_left. Nenhuma flag transforma isso em um comando SO-100 de seis motores.

2. O que o vetor de ação realmente diz

Mais profundo que a dimensionalidade. Nas conversões LeRobot, todos os três indicam para onde a garra deve ir, no espaço cartesiano. Um SO-100 indica para onde seis servos devem ir. A conversão requer um modelo cinemático e um resolvedor, não um redimensionamento.

PropriedadeOXE, DROID e Bridge no formato LeRobotSO-100 no LeRobot
Vetor de ação7-D: x, y, z, roll, pitch, yaw, gripper6-D: uma posição alvo por motor
Vetor de estado8-D, com um slot de preenchimento (google_robot usa um quatérnio)6-D, um por motor
ReferencialCartesiano, desalinhado entre conjuntos de dadosespaço de junta, calibração por braço
Absoluto ou relativoambos, decidido pelo laboratório de origemposições alvo absolutas
Unidadesnormalizado por conjunto de dados, depois discretizadograus por padrão (use_degrees=True), caso contrário -100 a 100
Falha silenciosaum delta lido como um absolutoum braço não calibrado
O vetor cartesiano 7-D é a convenção do conversor, não do DROID

O README do openx2lerobot documenta um estado unificado de 8 dimensões e uma ação de 7 dimensões para cada conjunto de dados que ele converte, que é de onde vem o slot `pad`. O próprio esquema RLDS do DROID difere: sua `action` de nível superior é um vetor de 7 *6 velocidades de junta mais 1 posição do gripper*, com `cartesian_position`, `cartesian_velocity`, `joint_position` e `joint_velocity` sob `action_dict`. openpi lê a visão do espaço de junta, a compilação do LeRobot entrega a cartesiana. Nenhuma delas são seis ângulos absolutos de servo.

LeRobot realmente fornece a peça que falta: o seguidor SO possui um processador de cinemática com as etapas InverseKinematicsEEToJoints e ForwardKinematicsJointsToEE. Suas chaves são ee.x, ee.y, ee.z mais um vetor de rotação ee.wx, ee.wy, ee.wz e ee.gripper_pos, então até mesmo a codificação de orientação difere do roll-pitch-yaw nos arquivos. A etapa IK leva um orientation_weight, padrão 0.01, cuja docstring diz para definir 0.0 para IK somente de posição em braços subatuados. Você pode construir a ponte, mas a metade de orientação de cada ação emprestada permanece aproximada.

3. Taxa de controle

DROID é 15 Hz, BridgeData V2 5 Hz, o segmento google_robot 3 fps; os autores de pi0 descrevem a parte de código aberto de sua mistura como controle de baixa frequência entre 2 e 10 Hz. O DatasetRecordConfig do LeRobot padroniza para fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50. Uma treinada com dados de 5 Hz aprendeu que uma ação cobre 200 ms. Reproduza-a a 30 Hz e o braço rasteja; reamostre ingenuamente e você borra o quadro onde o gripper fecha. Também interage mal com : um agrupamento de 100 passos é 20 segundos a 5 Hz, 3.3 a 30 Hz.

4. Câmeras

BridgeData V2 randomizou duas poses de câmera a cada 50 trajetórias, e sua página de projeto observa que a maior parte dos dados carrega apenas a visão fixa de qualquer forma. DROID usou suportes ajustáveis ZED 2 mais um ZED Mini de pulso. Você tem duas webcams USB posicionadas a olho. A pose da câmera não é uma variável incômoda para um ; é muito do que o codificador visual se baseou, e nada no formato do arquivo indica que as poses diferem.

A armadilha que consome um dia

As peças se encaixam bem o suficiente para rodar. O conjunto de dados carrega, o treinamento começa, a perda diminui, os checkpoints aparecem, nada dá erro. Então a política não faz nada reconhecível no braço e você passa um dia caçando um bug no seu script de treinamento. Não há bug: o modelo aprendeu uma distribuição de ação cartesiana para um robô que não existe no seu quarto. Comece em a perda diminui, a política não faz nada, não nos seus hiperparâmetros.

O que acontece quando você tenta mesclar os dados de qualquer forma

O plano óbvio é concatenar: alguns milhares de episódios DROID mais os seus 50. LeRobot recusa, e a recusa nomeia as três coisas que diferem.

  1. 1
    Baixe a amostra de 100 episódios, não o total de 1.7 TB

    2 GB é suficiente para ver a estrutura.

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    Converta RLDS para o formato LeRobot

    openx2lerobot encapsula as transformações padrão OXE e anota o tipo de robô e a frequência de controle. O README coloca isso em 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
    Leia meta/info.json antes de qualquer outra coisa

    Este arquivo decide se o resto do seu dia funciona.

    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
    Tente a fusão e leia o erro

    merge carrega cada conjunto de dados, então validate_all_metadata verifica fps, robot_type e features contra o primeiro da lista, levantando um erro no primeiro desencontro.

    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.

Os valores de referência vêm de qualquer conjunto de dados que você listou primeiro, e é por isso que a mensagem reclama dos seus 30 fps em vez dos 15 do DROID. Corrija o fps e você encontrará a verificação de robot_type; corrija isso e você encontrará a verificação de features, 7 contra 6 para a ação. Nenhuma ordenação passa, e a mesma proteção é executada no momento da gravação via sanity_check_dataset_robot_compatibility.

Não codifique robot_type para burlar a verificação

No LeRobot main atual, so100_follower e so101_follower estão ambos registrados em um SOFollowerRobotConfig compartilhado, então a string de uma gravação real não é necessariamente a que você espera. Leia-a do seu próprio meta/info.json, e trate uma verificação que você teve que desabilitar como uma verificação que estava lhe dizendo algo.

Então, o que realmente é transferido?

Pesos, não episódios. Toda política generalista moderna absorveu parte disso no pré-treinamento, e quando você de um lançado, você o herda já reconciliado por pessoas com o poder de computação para fazê-lo corretamente. O artigo de pi0 é franco sobre a proporção: 9,1 por cento de sua mistura de pré-treinamento, contada em passos de tempo, são dados de código aberto, incluindo OXE, Bridge v2 e DROID. Esse número é de pi0; a mistura de cada fornecedor difere.

Dados públicos entre-corporalidade em um projeto SO-100
Vantagens
  • Priors visuais e de linguagem: o codificador viu milhares de cozinhas e canecas e sabe a que se refere "o bloco vermelho".
  • Um prior sobre a estrutura de manipulação: abordagem, fechar, levantar, transportar, soltar, independente da corporalidade mesmo quando os números não são.
  • Um conjunto de dados comprovadamente bom para testes. Se seu trabalho não consegue superajustar 100 episódios DROID, o problema é sua configuração.
  • Pontos de referência: em domínios de conjuntos de dados de pequena escala, o RT-1-X atingiu uma taxa de sucesso média 50 por cento maior do que o método original ou RT-1, e o RT-2-X superou o RT-2 em cerca de 3x em habilidades emergentes.
Compromissos
  • Nenhuma supervisão de ação utilizável. Um alvo cartesiano 7-D não é um comando de junta 6-D.
  • Nenhuma transferência de pose de câmera, e nada nos dados indica que as poses diferem.
  • Nenhuma transferência de tempo: fontes de 3, 5 e 15 fps contra um gravador de 30 fps.
  • Nenhuma transferência de garra. Uma Robotiq 2F-85 e uma garra impressa em um STS3215 diferem em força, curso e dinâmica.
  • A escala por si só não foi suficiente nem para seus autores: nos domínios de grandes conjuntos de dados, o RT-1-X não superou um RT-1 treinado apenas nesse conjunto de dados.
  • Nenhuma redução no número de episódios próprios necessários.
Camada do modeloTransfere?Porquê
Vision encoderSim, fortementeObjetos e cenas são independentes da corporalidade
Language groundingSimAs instruções são texto, não geometria
Cross-modal fusionPrincipalmenteAtende ao objeto nomeado no prompt
Proprioception encoderNãoA dimensão de entrada e a semântica da junta diferem
Action headNãoTreinado em um espaço cartesiano 7-D no qual você não está
Normalisation statisticsNão, e perigosoEstatísticas estrangeiras alteram cada comando

É por isso que SmolVLA se comporta de forma diferente em um braço de baixo custo. Seu artigo seleciona 481 conjuntos de dados da comunidade do Hugging Face, filtrados por tipo de incorporação, contagem de episódios, qualidade dos dados e cobertura de quadros: 22.9K episódios, 10.6M quadros, avaliados em braços reais SO-100 e SO-101. Pequeno e correspondente supera grande e incompatível. Compare em ACT contra SmolVLA.

Três caminhos que valem a pena seguir

Caminho A: ajuste fino a partir de um checkpoint que já absorveu os dados

A maioria das pessoas deve seguir este. Você nunca toca em DROID ou Open X-Embodiment: escolha uma política cujo pré-treinamento já absorveu dados de incorporação cruzada, grave seus próprios episódios, faça o ajuste fino.

PolíticaParâmetrosEpisódios mínimosFormato do conjunto de dadosNível da GPUInferênciaPonto de verificação base
GR00T N1.7~3 B, ~40 M treinados em ajuste fino50LeRobot v2.0 ou v2.1A100 ou H100 80 GB152 ms por passonvidia/GR00T-N1.7-3B
GR00T N1.5~3 B50LeRobot v2.0 ou v2.1A100 ou H100 80 GB165 msnvidia/GR00T-N1.5-3B
Pi0.5~3 B, backbone PaliGemma50LeRobot v3.0A100 ou H100 80 GB485 mslerobot/pi05_base
SmolVLA~450 M30LeRobot v3.0RTX 4090 ou qualquer 24 GB245 mslerobot/smolvla_base
ACT~80 M50LeRobot v3.0RTX 4090 ou qualquer 24 GB20 msnenhum, do zero

ACT é o caso limite honesto: sem modelo base, então nenhum dos dados públicos o alcança. Não é automaticamente uma desvantagem, já que a 20 ms por passo de ação é o único dos cinco que pode fechar um ciclo rápido, como a página do ACT, estabelece. Escolha por tarefa usando todos os cinco comparados, GR00T N1.7 contra Pi0.5, e os 332 resultados de benchmark em 85 modelos na arena.

Caminho B: usar DROID como um dispositivo de teste

A amostra de 100 episódios é os melhores 2 GB que você baixará este mês, e não para treinamento. É um conjunto de dados que você sabe que está correto. Execute seu conversor, carregador e um trabalho curto de GPU nele; qualquer coisa que falhe é um bug de infraestrutura encontrado enquanto era barato. A NVIDIA faz o mesmo em escala: a placa GR00T N1.7 lista quatro variantes pós-treinadas, para Bridge e Fractal em SimplerEnv, DROID e LIBERO.

Caminho C: grave os seus próprios, deliberadamente

Trinta a cinquenta parece pouco perto de 76.000 até você se lembrar que os seus são os únicos com o seu braço, suas câmeras e sua mesa. Nos padrões do LeRobot, 50 episódios equivalem a 100 minutos de tempo real. Veja , e .

A página do tutorial de gravação do AY-Robots mostrando os passos para capturar um conjunto de dados LeRobot de uma sessão de teleoperação
O passo a passo de gravação em /learn/record-your-first-dataset: o passo que os dados públicos não podem substituir.

Duas maneiras de passar de dados públicos para uma política funcional

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.

A página de download do cliente de desktop AY-Robots, o cliente que registra conjuntos de dados no formato LeRobot a partir de uma sessão de teleoperação
O cliente de desktop em /download grava conjuntos de dados LeRobot diretamente de uma sessão de teleoperação, contornando a conversão RLDS.

Quanto custa cada caminho

CaminhoArmazenamentoTempo humanoCusto de GPUChance de mover seu braço
DROID convertido sozinho392 GBdias de conversão4 to 12 USDmuito baixa, espaço de ação errado
DROID mesclado com seus episódiosambosblocked by validate_all_metadatan/anenhuma, não executa
SmolVLA, 30 a 50 episódios própriosalguns GB100 min de gravação1 to 3 USDalta
GR00T N1.7, 50 episódios própriosalguns GB100 min de gravação4 to 12 USDalta
ACT do zero, 50 episódios própriosalguns GB100 min de gravação1 to 3 USDalta, 20 ms de inferência
Amostra DROID como um dispositivo de teste2 GBuma tardeuma execução curtaalta, como validação

The asymmetry is the point: the path that borrows the most data is the most expensive and least likely to move your arm. Under two hours of your own teleoperation beats a terabyte of somebody else's Franka. No arm yet? /live streams a physical SO-100 with no signup. Then train your first policy, and SmolVLA on SO-100 for the specific guide.

Um plano padrão razoável

Baixe a amostra DROID de 2 GB e use-a para testar seu pipeline. Ignore os outros 1.7 TB. Grave 50 episódios de uma tarefa com câmeras fixas. Ajuste fino SmolVLA primeiro, porque com um mínimo de 30 episódios em uma placa de 24 GB é o mais barato para iterar, depois tente GR00T N1.7 com os mesmos dados. Compare na sua tarefa, não em um benchmark.

Grave conjuntos de dados que já correspondem ao seu braço

O cliente de desktop grava conjuntos de dados no formato LeRobot diretamente de uma sessão de teleoperação: braço certo, taxa de quadros certa, espaço de ação certo. Sem conversão RLDS, sem remapeamento.

Obtenha o cliente de desktop
Posso treinar uma política em DROID e executá-la no meu SO-100?

Não diretamente. Na compilação LeRobot, as ações DROID são comandos de efetor final 7-D em um Franka Panda a 15 fps; no RLDS bruto, são 6 velocidades de junta mais uma posição de garra. Um SO-100 aceita 6 posições absolutas de junta. Você precisaria de uma camada de cinemática inversa, e mesmo assim um pulso de 5-DoF não pode reproduzir poses arbitrárias de 6-DoF.

Posso misturar episódios DROID ou Bridge com meus próprios episódios SO-100?

Não. validate_all_metadata requer fps, robot_type e esquema de recursos idênticos e levanta ValueError na primeira incompatibilidade. Todos os três diferem: 15 ou 5 fps contra 30, franka ou widowx contra seu braço, formas de ação de 7 contra 6. Reescrever metadados para passar na verificação não corrige a semântica.

O Open X-Embodiment é inútil para um braço de baixo custo, então?

Não, mas seu valor chega até você através de pesos pré-treinados, não de episódios. Conjuntos de dados de código aberto, incluindo OXE, Bridge v2 e DROID, representam 9.1 por cento da mistura de pré-treinamento do pi0, e a NVIDIA envia variantes GR00T N1.7 pós-treinadas em Bridge, Fractal, DROID e LIBERO. O que você não pode fazer é anexar esses episódios à sua própria gravação.

Qual política se beneficia mais dos dados públicos de incorporação cruzada?

Pi0.5 e os modelos GR00T carregam a maior parte do pré-treinamento de incorporação cruzada, mas SmolVLA frequentemente se comporta melhor em um braço de baixo custo: seu conjunto de pré-treinamento é composto por 481 conjuntos de dados da comunidade, 22.9K episódios e 10.6M quadros, avaliados em braços SO-100 e SO-101 reais. ACT é o oposto: nenhum modelo base, 20 ms por etapa de ação.

Quantos dos meus próprios episódios eu realmente preciso?

30 para SmolVLA, 50 para GR00T N1.7, GR00T N1.5, Pi0.5 e ACT. Nos padrões do LeRobot de 60 s por episódio e 60 s de reinício, 50 episódios equivalem a 100 minutos de tempo real. Dados de incorporação cruzada emprestados não diminuem esses números.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started