StereoPi - nossa peça de hardware para estudar visão computacional, drones e robôs

Olá pessoal!

Hoje, gostaria de falar sobre o nosso novo hardware baseado no Raspberry Pi Compute Module, projetado para estudar a visão computacional e instalar em robôs e drones. Na verdade, esta é uma câmera estéreo “inteligente” - suporta trabalhar com duas câmeras ao mesmo tempo, tem framboesas reais como “coração” e, mais importante, trabalha com a versão padrão do Raspbian.
Aqui está a aparência da solução montada, com duas câmeras instaladas e um módulo Pi Compute.

imagem

O dispositivo funciona com a versão de estoque do Raspbian. Você só precisa copiar nosso arquivo dtblob.bin para ativar o suporte à câmera dupla.

Isso significa que você pode usar os utilitários raspivid, raspistill e outros comuns para trabalhar com imagens e vídeos.

Para referência, o suporte ao modo estéreo apareceu no Raspbian já em 2014, simultaneamente com o lançamento da primeira versão do Raspberry Pi Compute. Você pode ver o histórico do desenvolvimento do suporte estéreo no fórum Raspberry.

Antes de descrever os detalhes técnicos, deixe-me mostrar alguns exemplos reais de como o dispositivo funciona.

1. Captura de imagem


Código:

raspistill -3d sbs -w 1280 -h 480 -o 1.jpg 

e você obtém o seguinte:

imagem

Você pode fazer o download da imagem capturada original aqui .

2. captura de vídeo


Código:

 raspivid -3d sbs -w 1280 -h 480 -o 1.h264 

e você obtém o seguinte:

imagem

Você pode baixar o arquivo de vídeo original (convertido em mp4) neste link .

3. Usando Python e OpenCV para criar um mapa de profundidade


imagem

Nesse caso, usei um código ligeiramente modificado de um projeto 3Dberry anterior ( https://github.com/realizator/3dberry-turorial ).

Para obter essas fotos e vídeos, usamos este par de câmeras:

imagem

Para instalação em drones, geralmente usamos grande angular (160 graus), são eles:

imagem

Agora um pouco mais sobre o próprio pedaço de ferro




Detalhes técnicos


Vista frontal:

imagem

Vista superior:

imagem

Principais recursos:
Dimensões: 90x40 mm
Câmeras: 2 x cabo CSI 15 pistas
GPIO: 40 clássicos GP de framboesa PI
USB: 2 x USB tipo A, 1 USB nos pinos
Ethernet: RJ45
Memória: Micro SD (para CM3 Lite), para o resto NAND (flash)
Monitor: saída HDMI
Fonte de alimentação: 5V DC
Framboesas com suporte: Módulo de computação Raspberry Pi 3, Raspberry Pi CM 3 Lite, Raspberry Pi CM 1
Tipos de câmeras suportadas: câmera Raspberry Pi OV5647, câmera Raspberry Pi Sony IMX 219, entrada HDMI (modo único)
Para firmware NAND: conector MicroUSB
Interruptor de energia: Sim, sim, é isso. Chega de plugues MicroUSB para reinicialização elétrica!

Um pouco de história


Em geral, a ideia em si surgiu em 2015. A primeira versão nasceu no final de 2015. Algumas pessoas sabem que nossa equipe tem um "modismo" no controle remoto de vários dispositivos mecânicos; portanto, no primeiro lançamento, um chip adicional foi instalado a bordo, o que nos deu 16 saídas PWM - para direção, motores e outras coisas úteis.

imagem

Naquela época, havia apenas a primeira versão do módulo Compute no mercado, a bordo, que era um processador antigo da primeira framboesa. O pedaço de ferro fez um ótimo trabalho de captura, compactação e streaming de vídeo, mas no final, encontramos o processador. Por exemplo, já não era suficiente um fluxo h264 para um piloto e um fluxo RTMP para um servidor ao mesmo tempo. E para os construtores de robôs, o principal desejo era construir um mapa espacial usando um mapa de profundidade e SLAM - aqui o processador estava completamente ausente.

imagem

Aqui você tem a versão do Compute Module 3. Eles saltaram imediatamente da primeira versão para a terceira, colocando o processador do terceiro Raspberry. Agora seu poder já era suficiente para calcular algo em tempo real.

No entanto, as gerações pareciam ser compatíveis, mas parecia não ser assim. O fato de o Compute Module 3 ter um milímetro de largura não nos incomodou. Mas os requisitos nutricionais mudaram seriamente.

Além disso, já acumulamos comentários sobre os resultados do trabalho com a primeira versão e decidimos lançar uma nova, na qual fizemos todas as alterações acumuladas.

O que é corrigido na segunda geração


Adicionado suporte para o Módulo de computação 3

Temos um esquema de energia selecionável, portanto, se você quiser, poderá trabalhar com a primeira framboesa. A escolha aqui é simples: se você só precisa transmitir o vídeo, a primeira framboesa é perfeitamente suficiente. Como um bônus, ele vem com quase três vezes menos consumo de energia e dissipação de calor. E você precisa calcular algo mais sério (alguns vídeos ou visão computacional) - coloque o terceiro.

Módulo implantado "chips da placa"

Na primeira versão, o tipo de conector SoDIMM na placa foi misturado, como resultado, o módulo do computador recebeu chips "para a mãe". No Módulo de computação 1, isso não causou problemas - a porcentagem estava esquentando um pouco e havia gargalo suficiente entre as placas para o resfriamento normal. Com um terceiro, esse truque não teria rolado, então "giramos" o conector, o que implicou na reconexão de toda a placa do zero.

Suporte nativo ao microSD

O primeiro módulo do computador, por padrão, possuía um FLASH embutido e não podia funcionar com o microsd. Tentamos adicionar o MicroSD lá como uma segunda unidade, mas encontramos um grande problema para apoiá-lo. A comunicação com os trabalhadores do kernel em um fórum de framboesa mostrou que o problema não é fácil (ao carregar, o módulo escolhe aleatoriamente NAND ou MicroSD para a inicialização). Como resultado, na revisão atual, fizemos a fiação, como no quadro de referência de framboesa de referência. Se o Compute Module Lite - sem NAND embutido - trabalhamos com microsd como em framboesas comuns. Se a versão não for Lite ou o primeiro módulo, o microsd não estará disponível.

Mova os conectores da câmera para cima e espaçados 65 mm

Na primeira versão, os conectores foram direcionados ao longo do plano da placa. Um pouco, mas depois de muitas instalações no caso, vários problemas ficaram claros.

  • Um loop de uma câmera se destaca dos conectores, o que é aconselhável não dobrar (especialmente a parte reforçada em azul). Isso estupidamente ocupou espaço desnecessário no caso e impediu a instalação.
  • Os conectores estavam muito próximos - isso impedia o trabalho com cabos.
  • As câmeras do gabinete geralmente ficam em uma base estéreo de 65 mm e os cabos na placa estavam próximos. Acontece que cada loop tinha que ser dobrado de maneira não natural - quebras, lágrimas, saindo dos conectores.

Removido o chip e mais 16 PWM

Depois de analisar muitos projetos recentes, percebemos que esse recurso é irrelevante. Na maioria das vezes, o software Raspberries PWM é suficiente.

Adicionado interruptor

Aqueles que pelo menos trabalharam um pouco com framboesas entendem do que se trata :-)

Adicionado um terceiro USB nos pinos laterais

Em nossos projetos de framboesa, geralmente precisamos de dongles USB a bordo. Se eles estiverem presos nos conectores na placa, temos um módulo preso para fora. Tentar usar um cabo de extensão USB agrava o problema. Havia apenas uma opção - a fiação de solda diretamente nas framboesas. Os pinos laterais que adicionamos nos permitem fazer um simples cabo de extensão e colocar um dongle USB (geralmente WiFi ou 4G) diretamente ao longo da placa, e toda essa economia se encaixa perfeitamente em um estojo compacto.

Aqui está uma história que eu queria lhe contar hoje. Agradecemos sua atenção e estou pronto para responder a perguntas.

Source: https://habr.com/ru/post/pt415587/


All Articles