Por que um Formato Padrão é Importante
O aprendizado de robôs historicamente sofreu porque cada laboratório usava um formato de dados diferente — tornando impossível compartilhar conjuntos de dados, combinar dados de diferentes robôs ou usar políticas pré-treinadas entre sistemas. O formato de conjunto de dados LeRobot resolve isso definindo um único esquema que funciona em todo o hardware suportado. Um conjunto de dados gravado em um SO-100 pode ser usado para treinar uma política para um OpenArm sem qualquer conversão — desde que as dimensões do espaço de ação correspondam.
Compreender o formato antes de gravar significa que você não descobrirá um problema estrutural em seus dados durante o treinamento. Isso também torna a depuração muito mais fácil: quando o treinamento falha, o primeiro lugar a olhar é o conjunto de dados.
Estrutura do Conjunto de Dados: Parquet + MP4
Cada conjunto de dados LeRobot vive em um diretório com esta estrutura:
A divisão entre Parquet (para séries temporais numéricas) e MP4 (para vídeo) é deliberada. Parquet comprime estados e ações das juntas de forma eficiente e suporta acesso aleatório rápido por índice de episódio. MP4 usa codecs de vídeo projetados para sequências de imagens, resultando em arquivos 10–30x menores do que armazenar imagens brutas como tensores.
Campos Chave em Cada Episódio
| Campo | Forma | Descrição |
|---|---|---|
| observação.estado | [T, D] | Posições das juntas (e opcionalmente velocidades) em cada passo de tempo. D é o número de juntas (por exemplo, 7 para SO-100: 6 juntas + 1 garra). |
| ação | [T, D] | Posições das juntas alvo comandadas em cada passo de tempo. Mesma dimensionalidade que observation.state. |
| carimbo de data/hora | [T] | Tempo em segundos desde o início do episódio, a 50Hz por padrão (0,02s por passo). |
| índice_do_episódio | escalar | Índice inteiro deste episódio dentro do conjunto de dados. Usado pelo dataloader para agrupar passos de tempo em episódios. |
| índice_do_quadro | [T] | Número do quadro dentro do episódio (0 a T-1). Corresponde ao número do quadro no MP4 correspondente. |
| next.done | [T] | Sinalizador booleano — Verdadeiro no último passo de tempo de um episódio. Usado para sinalizar limites de episódios durante o treinamento. |
| índice_da_tarefa | escalar | Índice em tasks.jsonl. Permite conjuntos de dados de múltiplas tarefas onde diferentes episódios correspondem a diferentes instruções. |
observation.images.cam_high como uma referência de caminho (índice do quadro + índice do episódio) em vez de dados de pixel brutos. O dataloader LeRobot lida com a decodificação e sincronização de forma transparente.
Carregar e visualizar um conjunto de dados existente
Carregar o lerobot-raw/aloha_sim_insertion_scripted conjunto de dados do HuggingFace Hub e visualizar 3 episódios. Este conjunto de dados contém demonstrações roteirizadas de um robô bimanual inserindo um pino — um exemplo claro de como um conjunto de dados bem estruturado se parece.
O visualizador gera uma página HTML com reprodução de vídeo de cada episódio ao lado de gráficos de estado de junta sincronizados. Procure por:
- Trajetórias de junta suaves — picos agudos indicam artefatos de gravação ou colisões do braço
- Comprimento consistente do episódio — episódios que variam muito em comprimento (por exemplo, 50 vs 400 quadros) frequentemente indicam que algumas demonstrações capturaram movimentos parciais ou abortados
- Mudanças de estado do gripper — a última dimensão da junta deve mostrar transições binárias claras (abrir → fechar → abrir) para tarefas de manipulação
Explore a Coleção de Conjuntos de Dados SVRC
A biblioteca de conjuntos de dados SVRC inclui conjuntos de dados de aprendizado de robôs curados no formato LeRobot. Navegue por eles para entender como são as diferentes tarefas e hardware antes de gravar o seu próprio. Navegar por conjuntos de dados →
Unidade 2 Completa Quando...
Você visualizou com sucesso 3 episódios de lerobot-raw/aloha_sim_insertion_scripted e a saída HTML é aberta no seu navegador. Você pode identificar os campos observation.state, action e timestamp em um arquivo Parquet carregado com Python. Você entende a diferença entre o que é armazenado em Parquet e MP4. Você está pronto para gravar seu próprio conjunto de dados na Unidade 3.