Como selecionar câmeras para um sistema de visão estéreo?

18

Estou no processo de construção de um sistema de visão estéreo para ser usado em um UGV. O sistema é para um robô que será usado em uma competição em que o robô é teleoperado para encontrar rochas coloridas relativamente pequenas em um grande campo ao ar livre. Entendo como calibrar esse sistema e processar os dados para um sistema de visão estéreo. No entanto, não sei como selecionar câmeras para esse sistema. Quais são as melhores práticas para escolher câmeras para um sistema de visão estéreo?

DaemonMaker
fonte

Respostas:

11

Em cima da minha cabeça eu iria pelos seguintes critérios de seleção

  • color / preto e branco - geralmente preto e branco é melhor, já que os algoritmos estéreo usam apenas um canal de qualquer maneira
  • linha de base - isso realmente depende da cena. Com a linha de base, você controla quanta precisão obtém com a distância. Uma linha de base mais ampla resulta em valores de disparidade mais altos e, portanto, menos ruído na estimativa da distância. Uma linha de base mais alta também significa que você obterá uma sobreposição reduzida entre seu campo de visão. Mais importante, porém, quanto maior a linha de base, mais difícil será a correspondência entre as duas visualizações. Então a qualidade do resultado diminui.
  • shutter - sempre use um obturador global para qualquer coisa com visão computacional em robôs móveis
  • resolução - a maioria dos algoritmos estéreo são computacionalmente caros. E você provavelmente não precisará de tantos pontos em 3D. No campo próximo, a densidade de amostragem é geralmente suficiente e, no campo distante, o erro da baixa disparidade é mais um problema do que a densidade de amostragem. 640x480 é bom na maioria dos casos. Alguns chips têm uma relação de aspecto mais ampla, o que é favorável à sobreposição, mas você pode obter o mesmo usando uma sub-janela do seu chip.
  • objetivos / campo de visão - para robôs móveis externos, eu prefiro um amplo campo de visão a objetivos estreitos. Mais ou menos pelos mesmos motivos que a resolução. Certifique-se de que seus objetivos sejam rígidos e possuam meios para fixar qualquer peça móvel, como a distância focal ajustável. Na maioria dos casos, uma distância focal fixa é boa, pois você é limitado pela seleção da sua linha de base.
  • gatilho - quando você cria seu próprio equipamento estéreo, suas câmeras devem suportar gatilho de hardware e, idealmente, uma deve disparar a outra.
  • framerate - Na minha opinião, a consideração menos importante. A menos que você tenha muito poder de processamento, não terá muito mais do que 5 Hz de qualquer maneira. Portanto, é mais provável que seu algoritmo seja o gargalo, e não o chip ou a conexão.
  • interface - A maioria das câmeras vem com Firewire / USB2 / USB3 / Ethernet. O USB2 é inútil, pois consome muita CPU. O Firewire é bom se você tiver uma porta, mas acho que parece estar em declínio a favor do USB3 atualmente. Ainda não tinha muita experiência com USB3. A Ethernet é bastante agradável, porque é mais provável que você encontre sistemas embarcados com GigEthernet do que USB3 no momento.
  • caixa - o mais rígida possível. Recalibrar é um procedimento irritante.
Jakob
fonte
6

Você deve começar calculando quantos quadros por segundo precisa e quanta resolução de câmera pode processar nessa taxa de quadros. Se nada mais, isso impedirá que você gaste demais ou compre uma câmera que não atenda às suas necessidades.

Além disso, há uma variedade de recursos que tornam a escolha mais difícil / interessante. Câmeras diferentes (especialmente câmeras de rede como Axis) permitem alterar a qualidade da imagem ou especificar uma taxa de bits máxima para o fluxo de imagens. Algumas câmeras também oferecem opções de velocidade do obturador, permitindo um tempo de exposição constante ou uma iluminação média constante na imagem. Algumas câmeras são mais sensíveis que outras (a última vez que trabalhei com isso foi em 2009, e percebemos que o PS3 Eye se saiu muito bem em condições de pouca luz).

Provavelmente, a melhor coisa que você pode fazer seria executar seus algoritmos de processamento de imagem em algumas imagens estáticas que você tira com uma DSLR e tentar reduzir o tamanho e a qualidade do quadro para ver onde as coisas começam a falhar.

Ian
fonte
6

Algumas coisas que você deve estar atento:

  • Obturador global significa basicamente que todos os pixels são capturados ao mesmo tempo, ao contrário do obturador de rolamento, onde são capturados sequencialmente em uma varredura de linha. Como o seu UGV estará se movimentando e executando algoritmos estéreo sobre as imagens capturadas, pode ser importante evitar aberrações que ocorrem quando a câmera se move, como as vistas nas fotos abaixo (tiradas da Wikipedia ):

Carro em movimento, levado com o telefone da câmera CMOS, apresenta inclinação Uma foto exibindo exposição parcial.  As condições de iluminação foram alteradas entre a exposição das partes superior e inferior da foto. Um tiro de uma hélice turboélice

  • A sincronização da câmera no hardware é alcançável por algumas câmeras, principalmente as câmeras FireFire AFAIK. Isso pode melhorar muito os resultados para estéreo quando as coisas estão se movendo.

  • A montagem deve ser feita de maneira que as alterações nos parâmetros extrínsecos (a posição relativa entre as câmeras) para o par estéreo provavelmente não sejam alteradas após a calibração. No seu equipamento, isso pode ser mais importante, pois o UGV pode enfrentar terrenos irregulares ao ar livre e as coisas vibrarão.

  • O hardware estéreo dedicado permite adquirir imagens de disparidades diretamente como saída do seu sistema de visão estéreo, o que facilita a carga da sua computação incorporada. Também tende a ser muito mais rápido do que executar os mesmos algoritmos no software.

Como sempre, quanto mais você estiver disposto a pagar, melhores serão os resultados. Para ser sincero, se você puder comprar uma câmera estéreo completa, como a Bumblebee2 , é isso que eu faria. Caso contrário, se você estiver do lado mais barato, eu simplesmente usaria um Kinect : é improvável que você consiga um sistema que o supere pelo mesmo preço.

georgebrindeiro
fonte
A questão era para um sistema externo. Isso efetivamente descarta o Kinect. Além disso, descobrimos que os algoritmos que acompanham o Bumblebee estão longe de ser ótimos.
Jakob
Estou com você no comentário do Kinect, mas os algoritmos estéreo que acompanham o Bumblebee não podem ser substituídos pelo seu próprio código? A maior vantagem que eu estava apontando foi no hardware real, não no software que o acompanha.
Georgebrindeiro
sim isso é verdade. Você pode usá-lo como duas câmeras normais e tem a vantagem de uma caixa rígida.
Jakob
Não só isso, mas obturador global, boas lentes e outras guloseimas
georgebrindeiro
4

Esse é um tópico interessante e não é muito fácil de acertar na primeira tentativa. Da experiência com isso, aqui estão as coisas mais importantes.

  • Sincronização . A câmera deve estar 100% sincronizada. Por exemplo, digamos que o UGV esteja dirigindo a modestos 36 km / h (10 m / s) e gravando quadros a 30 quadros por segundo. Ou seja, em todos os quadros o UGV cobriria 3m. Agora, digamos que sua sincronização esteja desativada em 1ms, uma das câmeras estará desativada em ~ 0,3m, o que é ruim [bem no topo da minha cabeça]. Problemas de sincronização são muito difíceis de detectar.

  • Resolução . No contexto do estéreo, nos referimos à resolução de profundidade, ou quanta profundidade podemos resolver, dada uma mudança na disparidade. Uma excelente explicação pode ser encontrada aqui http://pub1.willowgarage.com/~konolige/svs/disparity.htm A equação que você deseja examinar é uma função da distância focal da imagem e da linha de base estéreo.δZ=Z2BfδdδZBfδZδdδd1 1/2δd.

  • Sobreposição . Você deseja se sobrepor entre as câmeras para obter estéreo. Portanto, você precisa escolher uma combinação de distância focal da lente (campo de visão) e linha de base para ter sobreposição suficiente para o aplicativo. Basicamente, a trigonometria funciona no quadro ou um script matlab / python rápido.

Para UGVs, existem dois usos para estéreo.

  1. Estimativa de navegação e pose Neste caso, você provavelmente precisará de uma linha de base grande + distância focal longa. Isso permite que o aparelho de som veja e resolva melhor a profundidade e alcance mais longo.

  2. Detecção e prevenção de obstáculos Você provavelmente precisará de uma linha de base mais curta e uma lente mais larga (menor distância focal) para poder focar em coisas muito próximas a você.

Alguns UGVs podem ter configurações estéreo, o grande campo de visão estreito da linha de base para navegação e outro ou dois para evitar obstáculos.

Tenha muito cuidado com o que você compra. Algumas empresas oferecem configurações estéreo já construídas. Eles são ótimos em termos de robustez, não perdem a calibração com facilidade e estão sempre sincronizados. O problema é que os disponíveis comercialmente têm uma pequena linha de base. Se você deseja construir o seu próprio. Suponho que você acabará fazendo isso, verifique se a câmera é sincronizável . O Firewire é ótimo para isso, duas câmeras no mesmo barramento sincronizam com precisão de 125 microssegundos imediatamente! As câmeras USB e Gige são difíceis de sincronizar. Quando você junta tudo, quer ter certeza de que as lentes não se moverão e a linha de base é rígida, muito rígida para a aplicação.

Também tenha cuidado na seleção de lentes. Nem todas as lentes funcionam com todas as câmeras. As lentes também têm uma resolução. Este é outro tópico, aqui está um pequeno artigo sobre este http://www.qualitymag.com/articles/90642-qa--selecting-lenses-for-machine-vision-systems

Bendervader
fonte
4
Seu cálculo de sincronização está errado. 30 FPS a 10m / s proporcionam uma distância de 33cm (não 3m) por quadro. Também 1ms nessa velocidade significa distância de 1cm (independentemente do FPS). Portanto, a sincronização no nível ms é realmente um super resultado para essas velocidades!
Kozuch