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.

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:

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:

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

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:

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

Agora um pouco mais sobre o próprio pedaço de ferro
Detalhes técnicos
Vista frontal:

Vista superior:
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.

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.

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 3Temos 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 microSDO 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 mmNa 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 PWMDepois de analisar muitos projetos recentes, percebemos que esse recurso é irrelevante. Na maioria das vezes, o software Raspberries PWM é suficiente.
Adicionado interruptorAqueles que pelo menos trabalharam um pouco com framboesas entendem do que se trata :-)
Adicionado um terceiro USB nos pinos lateraisEm 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.