Crie uma Demonstração de Visão Surround com Quatro Câmeras Olho de Peixe no Jetson AGX Thor
Introdução
Esta demonstração executa um pipeline de visão surround com quatro câmeras olho de peixe no NVIDIA Jetson AGX Thor. Quatro câmeras ao redor do chassi são calibradas e fundidas em uma visão de cima (BEV) em tempo real. A ocupação indica o movimento do chassi, o YOLO-World localiza alvos de preensão e um VLM gera legendas da cena.
Layout BEV após a fusão:
- Parte superior da imagem = frente do veículo
- Centro da imagem = corpo do veículo
- As câmeras apontam para frente, trás, esquerda e direita
YOLO responde onde está o alvo. O VLM responde como é a cena. A ocupação é uma indicação 2D no solo, não um mapa de LiDAR.
Esta demonstração foi verificada no reComputer Robotics J601.
| reComputer Robotics J601 | Sensing SG3S-ISX031C-GMSL2F |
|---|---|
![]() | ![]() |
Principais Recursos
- Fusão na GPU com CUDA OpenCV
- Calibração via web para intrínsecos, extrínsecos e emendas
- Ocupação, YOLO-World e VLM em um único BEV compartilhado
- Verificado em Jetson AGX Thor / reComputer Robotics J601
Pré-requisitos
Hardware
- reComputer Robotics J601 (Jetson AGX Thor)
- Quatro câmeras olho de peixe GMSL2 Sensing SG3S-ISX031C-GMSL2F
- Um cabo Mini-Fakra 4 em 1 para que todas as quatro câmeras compartilhem uma única porta GMSL
- Um monitor ou uma sessão de área de trabalho remota
- Acesso à rede se você abrir a página de calibração a partir de outro computador
Opcional:
- Um chassi móvel, se você quiser usar a ocupação para assistência de movimento
- Um braço robótico, se você quiser usar as posições de alvo do YOLO para assistência de preensão
Software
- JetPack com suporte a driver GMSL para o J601
- OpenCV com CUDA habilitado para fusão em tempo real
- Ambiente Python para a interface web de calibração
- Dependências do YOLO-World e do modelo VLM opcional
Conexão de Hardware
Conecte quatro câmeras olho de peixe Sensing GMSL2 a uma porta Mini-Fakra GMSL no reComputer Robotics J601 antes da calibração. O J601 possui dois conectores Mini-Fakra (até oito câmeras GMSL2). Esta demonstração usa uma porta GMSL e um cabo Mini-Fakra 4 em 1.
- Alimente a placa J601 pela entrada DC XT30.
- Se estiver usando a placa de expansão GMSL, encaixe-a primeiro no conector de expansão de câmera.
- Conecte o cabo Mini-Fakra 4 em 1 em uma porta Mini-Fakra GMSL.
- Conecte as quatro câmeras olho de peixe Sensing às quatro pontas Fakra desse cabo.
- Monte as câmeras ao redor do chassi de forma que apontem para frente, trás, esquerda e direita.
- Opcionalmente conecte um monitor HDMI se quiser assistir à janela BEV ao vivo na placa.
Para inicialização do GMSL no J601, consulte Robotics J601 Hardware Interfaces Usage.

Depois que as câmeras estiverem conectadas, confirme os nós /dev/video* e o mapeamento em config/camera_profile.json. Consulte Step 1. Check Camera Mapping.
Instalação e Configuração
Etapa 1. Clonar o Repositório
git clone https://github.com/xbs0325/j601-surround-demo.git
cd j601-surround-demo
Etapa 2. Compilar o CUDA OpenCV
Antes de executar a demonstração de visão surround ao vivo, certifique-se de que o OpenCV com CUDA habilitado esteja disponível.
cd ~/j601-surround-demo
./scripts/build_opencv_cuda.sh --jobs $(nproc)
source scripts/env_opencv_cuda.sh
python3 -c "import cv2; print(cv2.__version__, cv2.cuda.getCudaEnabledDeviceCount())"
Se a configuração estiver correta, a contagem de dispositivos CUDA deve ser 1.
Etapa 3. Instalar Dependências da Calibração Web
A interface web de calibração depende de aiortc e pacotes Python relacionados.
./scripts/install_web_deps.sh
No Ubuntu 24.04, não execute um simples pip3 install -r requirements.txt no Python do sistema. Este projeto mantém o ambiente de fusão separado do ambiente de modelos de percepção.
Etapa 4. Instalar Dependências de Percepção
Para habilitar a assistência de preensão com YOLO-World e o entendimento de cena com VLM, execute:
./scripts/setup_perception_thor.sh
./scripts/download_perception_models.sh
Isso prepara o ambiente de percepção e baixa os arquivos de modelo necessários.
Como Usar
Calibre primeiro as quatro câmeras e depois inicie a demonstração de visão surround ao vivo. Não execute ambos ao mesmo tempo; eles precisam de acesso exclusivo às câmeras.
Etapa 1. Verificar o Mapeamento das Câmeras
O mapeamento dos dispositivos de câmera é definido em:
config/camera_profile.json
Mapeamento típico no repositório:
front:/dev/video0back:/dev/video2left:/dev/video3right:/dev/video1
Confirme esses nós de dispositivo antes da calibração. Depois que a demonstração estiver em execução, você pode conferir novamente cobrindo a câmera frontal: a parte superior da imagem BEV deve escurecer. Se frente e trás estiverem trocadas, altere o mapeamento de dispositivos no arquivo de configuração. Não edite os arquivos de resultado da calibração para isso.
Etapa 2. Abrir a Interface Web de Calibração
Inicie o serviço de calibração:
./calib.sh
Em seguida, abra a página de calibração no seu navegador:
http://<board-ip>:8787/

A interface de calibração é usada para:
- calibração intrínseca
- alinhamento extrínseco
- refinamento de emendas
Para o refinamento de emendas, siga o pareamento do repositório:
front + leftfront + rightback + leftback + right
Coloque o tabuleiro de xadrez na região de sobreposição entre as duas visões de câmera. Quando ambas as visões detectarem o tabuleiro e mostrarem status pronto, o sistema poderá refinar aquela emenda.
Etapa 3. Executar a Demonstração
Após a conclusão da calibração, inicie a demonstração de visão surround:
./run.sh
Isso inicia o pipeline BEV ao vivo: fusão, ocupação, assistência de preensão com YOLO e legendagem de cena opcional com VLM.
Você também pode iniciar o lançador de percepção diretamente:
./scripts/run_perception.sh --vlm off --mode nav --range 2.5
./scripts/run_perception.sh --mode grasp --target bottle
Modos Comuns
| Objetivo | Comando |
|---|---|
| Assistência ao movimento do chassi | ./scripts/run_perception.sh --vlm off --mode nav --range 2.5 |
| Assistência de preensão com braço robótico | ./scripts/run_perception.sh --mode grasp --target bottle |
| Execução sem interface gráfica (headless) | ./scripts/run_perception.sh --no-window |
| Teste rápido offline | /usr/bin/python3 -m perception.smoke_offline |
--mode navfoca na ocupação ao redor do chassi--mode grasp --target bottlefaz o YOLO procurar um alvo de preensão--vlm offignora a legendagem de cena quando você só precisa de posicionamento ou detecção
Resultado da Demonstração e Controles
Quando a janela da demonstração estiver em execução, estes atalhos de teclado estarão disponíveis:
| Tecla | Ação |
|---|---|
ESC ou q | Sair |
o | Executar YOLO-World uma vez para assistência de preensão |
a | Disparar uma legenda de VLM para entendimento da cena |
s | Salvar um quadro |
m | Alternar o mapa de ocupação |
Durante a execução, a demonstração também pode gravar:
output/perception/preview.jpgevents.jsonl
Esses arquivos são úteis para depuração, validação e integração posterior.
Convenção de Coordenadas
O projeto usa esta convenção de BEV:
| Item | Significado |
|---|---|
| Parte superior da imagem | Frente do veículo |
Origem de base_link | Aproximadamente o centro do BEV |
+X | Para frente |
+Y | Esquerda |
O YOLO pode, portanto, relatar posições-alvo 2D aproximadas, como direção, distância à frente e deslocamento lateral, para auxiliar a preensão.
O resultado ainda é uma aproximação no plano do solo. Não é uma pose de preensão com 6 DoF e não deve ser tratada como verdade de base para manipulação precisa.
Observações e Limitações
- Esta demonstração fornece assistência de percepção. Ela não envia comandos de controle para o chassi ou para o braço
- O YOLO localiza alvos para auxiliar a preensão; ele não fecha o loop de preensão por conta própria
- A saída do VLM é para entendimento de cena, não para coordenadas
- A ocupação é uma indicação 2D no solo, não um mapa de SLAM com LiDAR
- A fusão em tempo real é destinada ao Jetson AGX Thor com CUDA habilitado
- O modo apenas CPU é útil para depuração, mas não é recomendado para implantação ao vivo
Recursos
- Vídeo de demonstração
- Primeiros passos com o reComputer Robotics J601
- Uso das interfaces de hardware do Robotics J601
- GitHub
Suporte técnico e discussão sobre o produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

