Système de vision et de cartographie à caméra unique

17

Il y a quelque temps, j'ai vu une démo d'un petit «réservoir de jouets» avec une seule caméra montée dessus. Ce char a pu contourner le sol et détecter des objets, puis se déplacer / se diriger pour les éviter. La partie intéressante était qu'elle utilisait un système de vision à caméra unique et, pour autant que je m'en souvienne, profitait du sol plat. puis en utilisant la vitesse à laquelle une entité se déplaçait dans la scène par rapport aux moteurs et aux directions de déplacement pour évaluer et donc cartographier la scène.

Quelqu'un peut-il m'envoyer des pointeurs à rechercher pour obtenir plus d'informations à ce sujet, ou des pointeurs vers des bases de code qui peuvent le faire?

La raison pour laquelle je demande, c'est qu'il s'agissait d'un système à caméra unique datant d'un certain nombre d'années (5+) et donc (d'après ce dont je me souviens) était une charge de calcul relativement faible. J'avais l'intention d'essayer cela sur un Raspberry PI pour construire une voiture / réservoir qui mappe une pièce ou un ensemble de pièces.

Ben
la source
2
Bienvenue dans la robotique Ben. Veuillez consulter Comment poser des questions et visiter quelques conseils sur la façon de rédiger des questions pratiques et fiables en fonction des problèmes réels auxquels vous êtes confronté . Merci,
Mark Booth

Réponses:

4

Il est difficile de dire exactement ce qu'ils faisaient, mais les termes que vous voudrez peut-être ici sont " flux optique " et " egomotion ". Des sons comme s'il y avait peut-être eu une détection et une correspondance des fonctionnalités (quelque chose comme SURF ou SIFT) ou une segmentation de premier plan / arrière-plan également.

OpenCV est probablement la base de code la plus utilisée pour la vision par ordinateur, ils ont beaucoup de fonctionnalités pour l'analyse de mouvement . OpenCV devrait fonctionner sur le Raspberry Pi, bien que vos algorithmes puissent être limités par la puissance de calcul.

WildCrustacean
la source
4

S'appuyant sur la réponse de WildCrustcean , une autre possibilité serait la vision stéréo . Alors que nous pensons souvent que la vision stéréo utilise deux caméras, les techniques n'ont vraiment besoin que d'images déplacées dans l'espace et d'un modèle de déplacement. En d'autres termes, je peux prendre une image, me déplacer, puis prendre une autre image. Tant que je connais la transformation entre ces deux images, je peux alors utiliser des techniques de vision stéréo pour calculer la distance à un point de l'image.

DaemonMaker
la source
2
Je pense que la technique dont vous parlez s'appelle "Structure from motion".
Kozuch
1

Il aurait pu utiliser Parellel Tracking and Mapping PTAM . PTAM est une implémentation du problème SLAM (Simultaneous Localisation and Mapping) qui utilise une seule caméra pour construire une carte 3D du monde et localiser en suivant des caractéristiques visuelles.

Mon équipe a déjà expérimenté l'utilisation du package PTAM dans ROS .

Nous utilisions Ubuntu sur un processeur Intel Atom, et si je me souviens bien, cela n'a pas trop grainé le processeur. Nous n'avons cependant pas fini par l'utiliser, principalement parce que nous n'avons pas pu trouver suffisamment de fonctionnalités dans l'environnement où notre robot fonctionnerait.

Robz
la source
0

En général, vous ne pouvez pas extraire des mesures de distance métrique à partir d'une seule image, sauf si vous avez des informations supplémentaires sur le monde. Par exemple, si vous savez que le monde est plan (ou si vous pouvez détecter le sol, qui est une région plane), vous pouvez alors estimer une homographie.

Une homographie est une transformation projective entre plans (matrice 3x3). Étant donné l'étalonnage intrinsèque de la caméra, vous pouvez décomposer cette homographie induite par l'avion en une rotation et une translation. La traduction est à l'échelle. Vous pouvez résoudre cette ambiguïté d'échelle en connaissant la distance de la caméra au sol (plan).

Une fois que vous avez l'homographie, vous pouvez détecter des objets qui ne sont pas dans l'avion. L'homographie vous permet de déformer la première image sur la seconde. Les objets dans l'avion s'aligneront et auront une petite erreur. Les objets ne se trouvant pas dans l'avion ne s'aligneront pas . C'est ce qu'on appelle la parallaxe.

Une façon de mettre cela en œuvre pourrait être

  1. Extraire les fonctionnalités des deux images.
  2. Faites correspondre les fonctionnalités ou suivez-les.
  3. Estimer l'homographie à l'aide de RANSAC.
  4. Décomposer l'homographie en une rotation et une translation à l'aide de l'étalonnage.
  5. Déformez la première image sur la
    seconde. Les pixels avec de grosses erreurs ne sont pas sur le sol et pourraient être des
    obstacles.

La plupart des blocs de construction sont implémentés dans opencv (voir http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).

Bonne chance.

PS la décomposition de l'homographie vous donnera également la normale du plan. Mais, puisque vous supposez que c'est le plan du sol, nous avons la normale pointant vers le haut. Une solution plus précise peut être réalisée dans votre procédure d'étalonnage. Vous pouvez utiliser une cible en damier et estimer sa pose. La pose aura un plan normal et à distance de la caméra.

bendervader
la source