Comment sélectionner des caméras pour un système de vision stéréo?

18

Je suis en train de construire un système de vision stéréo à utiliser sur un UGV. Le système est destiné à un robot qui sera utilisé dans une compétition où le robot est téléopéré pour trouver des roches colorées relativement petites dans un grand champ extérieur. Je comprends comment calibrer un tel système et traiter les données d'un système de vision stéréo. Je ne sais cependant pas comment sélectionner les caméras pour un tel système. Quelles sont les meilleures pratiques pour choisir des caméras pour un système de vision stéréo?

DaemonMaker
la source

Réponses:

11

Du haut de ma tête, je passerais par les critères de sélection suivants

  • couleur / noir et blanc - généralement le noir et blanc est meilleur, car les algorithmes stéréo n'utilisent qu'un canal de toute façon
  • ligne de base - cela dépend vraiment de la scène. Avec la ligne de base, vous contrôlez la précision que vous obtenez avec la distance. Une ligne de base plus large entraîne des valeurs de disparité plus élevées et donc moins de bruit sur l'estimation de la distance. Une ligne de base plus élevée signifie également que vous obtiendrez un chevauchement réduit entre votre champ de vision. Plus important encore, plus la ligne de base est large, plus la correspondance entre les deux vues est difficile. La qualité du résultat baisse donc.
  • obturateur - utilisez toujours un obturateur global pour tout ce qui a une vision par ordinateur sur des robots mobiles
  • résolution - la plupart des algorithmes stéréo sont coûteux en calcul. Et vous n'aurez probablement pas besoin d'autant de points 3D. Dans le champ proche, la densité d'échantillonnage est généralement suffisante, et le champ lointain de votre erreur de la faible disparité est plus un problème que la densité d'échantillonnage. 640x480 est très bien dans la plupart des cas. Certaines puces ont un rapport d'aspect plus large, ce qui est favorable au chevauchement, mais vous pouvez obtenir la même chose en utilisant une sous-fenêtre de votre puce.
  • objectifs / champ de vision - pour les robots mobiles d'extérieur, je préfère un large champ de vision aux objectifs étroits. Plus ou moins pour les mêmes raisons que la résolution. Assurez-vous que vos objectifs sont rigides et ont un moyen de fixer toutes les pièces mobiles, par exemple, comme la distance focale réglable. Dans la plupart des cas, une distance focale fixe convient de toute façon, car vous êtes limité par la sélection de votre ligne de base.
  • trigger - lorsque vous créez votre propre équipement stéréo, vos caméras doivent prendre en charge le déclenchement matériel et, idéalement, l'une doit déclencher l'autre.
  • framerate - À mon avis, la considération la moins importante. À moins que vous n'ayez beaucoup de puissance de traitement, vous n'obtiendrez pas beaucoup plus que quelque chose comme 5 Hz de toute façon. Votre algorithme est donc beaucoup plus susceptible d'être le goulot d'étranglement, plutôt que la puce ou la connexion.
  • interface - La plupart des caméras sont livrées avec Firewire / USB2 / USB3 / Ethernet. L'USB2 est inutile car il consomme beaucoup de CPU. Le Firewire est bon si vous avez un port, mais je pense qu'il semble être en déclin en faveur de l'USB3 ces jours-ci. N'avait pas encore beaucoup d'expérience avec USB3. Ethernet est assez agréable car vous êtes plus susceptible de trouver des systèmes embarqués avec GigEthernet que USB3 pour le moment.
  • boîtier - aussi rigide que possible. Le recalibrage est une procédure ennuyeuse.
Jakob
la source
6

Vous devez commencer par calculer le nombre d'images par seconde dont vous avez besoin et la résolution de la caméra que vous pouvez traiter à cette fréquence d'images. Si rien d'autre, cela vous évitera de dépenser trop ou d'acheter un appareil photo qui ne conviendra pas à vos besoins.

Au-delà de cela, il existe une variété de fonctionnalités qui rendent le choix plus difficile / intéressant. Différentes caméras (en particulier les caméras réseau comme Axis) vous permettent de modifier la qualité de l'image ou de spécifier un débit binaire maximal pour le flux d'images. Certains appareils photo vous permettent également de choisir la vitesse d'obturation, ce qui vous permet de privilégier un temps d'exposition constant ou un éclairage moyen constant dans l'image. Certaines caméras sont plus sensibles que d'autres (la dernière fois que j'ai travaillé avec c'était en 2009, et nous avons remarqué que la PS3 Eye fonctionnait très bien dans des conditions de faible luminosité).

La meilleure chose à faire serait probablement d'exécuter vos algorithmes de traitement d'image sur quelques images statiques que vous prenez avec un reflex numérique, puis d'essayer de réduire la taille et la qualité du cadre pour voir où les choses commencent à se détériorer.

Ian
la source
6

Quelques points à surveiller:

  • L'obturateur global signifie essentiellement que tous les pixels sont capturés en même temps, par opposition à l'obturateur roulant, où ils sont capturés séquentiellement de manière linéaire. Étant donné que votre UGV se déplacera et exécutera des algorithmes stéréo sur les images que vous capturez, il pourrait être important d'éviter les aberrations qui se produisent lorsque la caméra se déplace, telles que celles visibles dans les images ci-dessous (tirées de Wikipedia ):

Une voiture en mouvement prise avec un téléphone-appareil photo CMOS présente un biais Une photo présentant une exposition partielle.  Les conditions d'éclairage ont changé entre l'exposition des parties supérieure et inférieure de la photo. Une photo d'une hélice à turbopropulseur

  • La synchronisation des caméras dans le matériel est réalisable par certaines caméras, notamment les caméras FireWire AFAIK. Cela peut considérablement améliorer les résultats en stéréo lorsque les choses bougent.

  • Le montage doit être effectué de manière à ce que les modifications des paramètres extrinsèques (la position relative entre les caméras) de la paire stéréo ne changent probablement pas après l'étalonnage. Dans votre gréement, cela pourrait être plus important, car l'UGV peut faire face à un terrain inégal à l'extérieur et les choses vont vibrer.

  • Un matériel stéréo dédié permet d'acquérir des images de disparité directement en sortie de votre système de vision stéréo, ce qui allège la charge de votre informatique embarquée. Il a également tendance à être beaucoup plus rapide que d'exécuter les mêmes algorithmes dans un logiciel.

Comme d'habitude, plus vous êtes prêt à payer, meilleurs sont les résultats. Pour être honnête, si vous êtes en mesure d'acheter une caméra stéréo à part entière comme le Bumblebee2 , c'est ce que je ferais. Sinon, si vous êtes moins cher, j'irais simplement avec un Kinect : il est peu probable que vous puissiez obtenir un système qui le surpasse pour le même prix.

georgebrindeiro
la source
La question était pour un système extérieur. Cela exclut efficacement le Kinect. De plus, nous avons trouvé que les algorithmes fournis avec le Bumblebee sont loin d'être optimaux.
Jakob
Je suis avec vous sur le commentaire Kinect, mais les algorithmes stéréo fournis avec le Bumblebee ne peuvent-ils pas être remplacés par votre propre code? Le plus grand avantage que je soulignais était dans le matériel réel, pas dans le logiciel qui l'accompagne.
georgebrindeiro
Oui c'est vrai. Vous pouvez l'utiliser comme deux caméras normales et il a l'avantage d'un boîtier rigide.
Jakob
non seulement cela, mais obturateur global, bons objectifs et autres goodies
georgebrindeiro
4

C'est un sujet intéressant, et pas très facile à comprendre du premier coup. Par expérience, voici les choses les plus importantes.

  • Synchronisation . La caméra doit être synchronisée à 100%. Par exemple, supposons que l'UGV roule à un modeste 36 km / h (10 m / s) et enregistre des images à 30 images par seconde. Autrement dit, à chaque image, l'UGV couvrirait 3 m. Maintenant, disons que votre synchronisation est désactivée de 1 ms, l'une des caméras sera désactivée de ~ 0,3 m, ce qui est mauvais [juste en haut de ma tête]. Les problèmes de synchronisation sont très difficiles à détecter.

  • δZ=Z2BfδdδZBfδZδdδd1/2δd

  • Se chevauchent . Vous voulez avoir un chevauchement entre les caméras pour obtenir la stéréo. Par conséquent, vous devez choisir une combinaison de distance focale de l'objectif (champ de vision) et de ligne de base afin d'avoir suffisamment de chevauchement pour l'application. Fondamentalement, la trigonométrie fonctionne sur la carte, ou un script matlab / python rapide.

Pour les UGV, il y a deux utilisations pour la stéréo.

  1. Navigation et estimation de la pose Dans ce cas, vous avez très probablement besoin d'une grande ligne de base + longue focale. Cela permet à la chaîne stéréo de voir et de résoudre la profondeur de façon meilleure et plus longue.

  2. Détection et évitement d'obstacles Vous aurez probablement besoin d'une ligne de base plus courte et d'un objectif plus large (distance focale plus petite) afin de pouvoir vous concentrer sur des choses très proches de vous.

Certains UGV peuvent avoir à la fois des configurations stéréo, un grand champ de vision étroit pour la navigation et un ou deux pour éviter les obstacles.

Faites très attention à ce que vous achetez. Certaines entreprises proposent des configurations stéréo déjà construites. Ceux-ci sont excellents du point de vue de la robustesse, ils ne perdent pas facilement l'étalonnage et sont toujours synchronisés. Le problème est que ceux disponibles dans le commerce ont une petite base de référence. Si vous voulez construire le vôtre. Je suppose que vous finirez par le faire, assurez-vous que la caméra est synchronisable . Firewire est idéal pour cela, deux caméras sur le même bus se synchroniseront avec une précision de 125 microsecondes! Les caméras USB et Gige sont difficiles à synchroniser. Lorsque vous assemblez tout, vous voulez vous assurer que les lentilles ne bougent pas du tout et que la ligne de base est rigide, très rigide pour l'application.

Faites également attention lors de la sélection de l'objectif. Tous les objectifs ne fonctionnent pas avec toutes les caméras. Les objectifs ont également une résolution. Ceci est un autre sujet, voici un court article sur ce http://www.qualitymag.com/articles/90642-qa--selecting-lenses-for-machine-vision-systems

bendervader
la source
4
Votre calcul de synchronisation est incorrect. 30 FPS à 10 m / s donne une distance de 33 cm (pas 3 m) par image. De plus, 1 ms à cette vitesse signifie une distance de 1 cm (quel que soit le FPS). La synchronisation au niveau ms est donc un super résultat en fait pour de telles vitesses!
Kozuch