• Aucun résultat trouvé

Analyse de l’existant

Dans le document SLAM Visuel 3D pour robot mobile autonome (Page 34-41)

D. Contribution au SLAM

II. Analyse de l’existant

Cette partie présente un tour d’horizon des recherches qui ont inspiré ou ont servi de base à cette étude.

RGBD Mapping

Au début du stage il y avait assez peu d’études faisant l’objet de publications dans le domaine du SLAM 3D à base de caméra RGB-D, la Kinect n’ayant fait son apparition il n’y a que quelques mois. On peut cependant citer l’article de Dieter Fox et ses collègues [1], une des premières équipes à avoir utilisé la Kinect pour du SLAM.

L’algorithme présenté dans la publication permet de tirer partie à la fois des données visuelles et des données Laser. La première étape consiste à extraire des données visuelles des points d’intérêt grâce à l’algorithme SURF. Ces points sont ensuite projetés dans l’espace grâce aux données de profondeur fournis par la caméra IR. Ils forment un nuage de points (PCL) restreint qui va permettre d’estimer le déplacement entre deux images successives. Pour se faire l’algorithme RANSAC est utilisé et permet d’extraire la transformation la plus vraisemblable en se basant sur le support de point le plus important. Ensuite cette estimation est affinée en utilisant l’algorithme ICP qui permet un matching fin des nuages de points (en utilisant l’ensemble des points cette fois-ci). La fermeture de boucle (loop-closure) est détectée en comparant chaque nouveau nuage de points d’intérêt avec l’ensemble des précédents. L’algorithme RANSAC est une nouvelle fois utilisé pour déterminer s’il existe un nombre de point suffisant pour dire qu’il s’agit d’une fermeture de boucle. Enfin l’algorithme Toro est utilisé pour optimiser globalement le graphe créé par l’algorithme.

L’intérêt principal de cette approche dans le cadre qui nous intéresse ici, outre le fait d’utiliser le même capteur, est sa robustesse. En effet d’après la publication cet algorithme peut être utilisé dans le noir complet. C’est un point très intéressant puisque le robot amené à évoluer dans un environnement réel devra être capable de fonctionner en toute circonstance. Cette robustesse vient notamment de la richesse des informations utilisées. En effet il y a une redondance partielle entre informations visuelles et 3D. Ceci permet de palier les défaillances ou bien la lenteur d’une partie du traitement des données. On voit par exemple que le temps de convergence d’ICP est de 500ms environ lorsque initialisé avec les données visuelles tandis qu’il augmente jusqu’à 1 seconde sans initialisation. Le volume de données à traiter augmente cependant. A contrario dans certains cas rares, la défaillance d’un des systèmes entraîne la défaillance de l’ensemble. En effet comme précisé dans l’article, il arrive que le laser ne soit pas à même de mesurer certaines distances par exemple lorsque la surface est réfléchissante ou la cible trop lointaine. Tous les points

34 d’intérêt détectés dans la zone sont alors inutilisables. Ceci amène à des situations où les seuls points détectés et utilisables sont concentrés dans une zone restreinte de l’image. L’estimation du déplacement est alors très mauvaise et la localisation peut rapidement être perdue.

L’utilisation de donnés à la fois visuelles et laser offre donc une grande robustesse car la redondance d’information permet à l’algorithme de fonctionner dans des cas où des algorithmes n’utilisant qu’un seul système ne seraient pas fonctionnels. Il faut cependant noter que dans certains cas la défaillance du système visuel peut conduire à une perte de localisation du fait de l’interdépendance partielle des systèmes. Une autre approche a été présentée par A. Nuechter et une implémentation de ce code est disponible sur OpenSlam.org (Slam6D). Il s’agit cette fois de n’utiliser que des nuages de points pour réaliser l’estimation de pose 3D.

Seules les données du laser sont utilisées. Le calcul de la transformation entre nuages de points successifs se fait ici aussi grâce à l’algorithme ICP. La différence vient de l’implémentation de l’algorithme ICP qui présente plusieurs variantes.

L’une d’elles est présentée dans l’article [2]. Bien que n’utilisant pas de Kinect mais une caméra ToF (Time Of Flight), l’article présente un intérêt notamment du fait de la mise au point de cette nouvelle variante de l’algorithme ICP. En effet comme on l’a vue plus haut le temps de convergence d’ICP est le point faible de l’algorithme de SLAM 3D. Ce point est donc le plus critique et nécessite d’être amélioré. On peut donc à juste titre chercher à optimiser cette partie du traitement qui représente le temps de calcul le plus important. L’idée présentée dans l’article est de 1) rendre plus robuste l’algorithme 2) diminuer le volume de données à traiter en ne conservant que les données susceptibles d’être utilisées. Pour cela la méthode proposée consiste à : définir un volume (cône) observable estimé à chaque itération et ne conserver que les points appartenant à la zone recouverte par deux cônes successifs. En effet, seuls les points présents dans les deux nuages de points successifs peuvent faire l’objet d’un appariement. Cette méthode permet donc de limiter le nombre de points utilisés, et donc d’accélérer la convergence de l’algorithme.

Un second article des mêmes auteurs offre lui aussi une approche intéressante pour le traitement de l’algorithme ICP [3]. Plus précisément c’est la recherche du plus proche voisin, sous-jacente à l’algorithme ICP, qui fait ici l’objet d’une amélioration.

Le principe est de paralléliser massivement le calcul pour le rendre exécutable sur un GPU. Ici l’implémentation est faite sur une carte NVIDIA à architecture CUDA. Cette architecture permet la programmation du GPU à l’aide d’un langage de programmation proche du C et par ailleurs open source, ce qui facilite grandement les développements.

La recherche du plus proche voisin de chaque point se fait traditionnellement en utilisant un kd-tree. Il s’agit d’une représentation particulière de l’information contenue dans un nuage de points. Elle prend la forme d’un arbre dont chaque embranchement divise l’espace en k parties. Ceci permet d’accélérer l’accès à l’information par rapport à un tableau classique. La forme la plus courante de kd-tree

35 est l’octree dans lequel chaque nœud a huit « fils » (partition de l’espace en huit parties). La première étape est de sérialiser le kd-tree. Ceci consiste à numéroter les branches pour permettre de placer l’arbre dans un tableau afin de tirer partie aux mieux des spécificités de l’architecture des GPU. En effet du fait de l’organisation de la mémoire il n’est pas possible de stocker le kd-tree directement en mémoire.

Ensuite est mis en œuvre un algorithme de recherche prioritaire qui permet d’extraire les éléments ayant une distance minimale par rapport au point recherché.

Cet algorithme remplace les algorithmes classiques sur les kd-tree qui ne sont pas applicables lorsque utilisés sur GPU.

La troisième étape consiste finalement à déterminer le plus proche voisin parmi les points trouvés. La méthode utilisée ici pour optimiser l’espace consiste à fixer une longueur maximale de la file dans laquelle la recherche est faite. Des tests montrent de très bonnes performances avec cette méthode et une convergence plus rapide. Plus généralement les résultats présentés montrent une très grande efficacité de l’algorithme GPU-ICP comparativement aux algorithmes utilisant OpenMP7 ou une implémentation classique sur CPU multicoeur. Ainsi en termes d’implémentation l’emploi d’un GPU offre un gain de temps très important.

De la même manière d’autres points peuvent être améliorés pour accélérer l’exécution de l’algorithme. Notamment l’implémentation de la détection des points d’intérêt SURF peut faire l’objet d’améliorations. C’est ce qui a été fait par une équipe de l’université de Waterloo. Bien que leur travail n’ait pas encore fait l’objet d’une publication, le code source disponible permet d’avoir accès à l’algorithme utilisé. Ici le principe est de paralléliser l’algorithme SURF avec un GPU en utilisant GPUSURF [9]. Là encore l’avantage est de pouvoir accélérer la phase assez longue de détection/extraction des points d’intérêt.

Comme présenté dans l’article [9] GPUSURF permet de traiter des images de 640x480 à un taux de 100 images par seconde sur un pc doté d’une carte graphique GF8800GTX. Ceci est tout à fait compatible avec les attentes du SLAM 3D et l’utilisation de GPUSURF peut permettre d’accélérer considérablement l’algorithme.

Cependant l’utilisation d’un GPU additionnel implique d’une part une plus grande consommation énergétique ce qui n’est pas souhaitable pour un robot mobile (diminution de l’autonomie) et d’autre part un coût plus élevé du fait de l’achat de matériel supplémentaire. A titre indicatif les cartes NVIDIA sont annoncées pour consommer de 35 à 100W ce qui équivaut ou dépasse la consommation de la carte mère du robot! Le choix d’ajouter ou non un GPU à une application doit donc être faite en connaissance de cause et selon les objectifs du projet.

7 OpenMP est une interface de programmation pour le calcul parallèle sur CPU offrant une bibliothèque puissante pour le développement d’applications en C.

36 Ainsi de ces articles il ressort que :

- le calcul de l’algorithme ICP est la partie la plus longue dans l’approche citée ci-dessous et consomme énormément de ressources.

- Ce calcul peut être amélioré en limitant le nombre de point des nuages à matcher à l’aide d’une estimation de la pose de la caméra.

- L’implémentation sur GPU offre un avantage conséquent en termes de temps de calcul aussi bien pour l’algorithme ICP que pour l’algorithme SURF.

Points d’intérêt et descripteurs NARFs

Ainsi à travers ces différents articles a été présentée une première approche offrant différentes variantes et possibilités d’amélioration. Elle offre donc des performances satisfaisantes pour entreprendre une étude plus poussée.

On peut cependant envisager d’autres techniques basées sur l’exploitation de l’information contenue dans les nuages de points. En effet de la même manière que des points d’intérêts peuvent être extrait de façon robuste d’une image, on peut chercher à définir des points d’intérêt dans un nuage de points caractérisant de façon robuste la géométrie d’un lieu. L’idée serait de remplacer les informations issues de SURF par des informations issues uniquement du nuage de point et ce afin d’augmenter la robustesse par rapport aux variations de luminosité notamment. De nombreuses études dans ce sens ont étés faites, notamment dans le domaine de la reconnaissance d’objets et des descripteurs variés ont étés mis au point pour identifier de façon robuste des objets en tenant parfois compte de la possibilité d’occlusion. Dans [4] est présenté un nouveau type de descripteurs nommés NARF qui permettent de caractériser de façon robuste des zones du nuage de point. Dans cette méthode la détection de point se fait de la manière suivante :

- détermination de comment la surface change autour de chaque point et calcule d’une direction privilégiée de changement

- Calcule d’une valeur d’intérêt du point prenant en compte la manière dont la direction privilégiée change dans le voisinage et comment la surface change au niveau du point.

- lissage des valeurs

- suppression des non maximums

L’un des paramètres important de l’algorithme est la taille du voisinage de chaque point dans lequel on cherche à déterminer les changements. D’après les tests les auteurs préconise une taille de 25% de l’objet observé environ. Pour assurer l’appariement efficace des points de deux nuages consécutifs il faut ensuite extraire les propriétés de chacun des points d’intérêt. Les exigences concernant le descripteur est qu’il permette de:

-définir l’espace occupé et l’espace libre en 3D de façon à décrire la forme de l’objet

37 - qu’il soit robuste au bruit et invariable selon la position du point d’intérêt -qu’il permette d’extraire un référentiel local unique en chaque point L’algorithme pour le calcul des descripteurs NARF d’un point est le suivant:

- calcul de l’image de profondeur8 locale en ce point

- créer en ce point un schéma en forme d’étoile dont les valeurs des pixels le long des bras seront les valeurs du descripteur

- extraire l’orientation du descripteur

-initialiser le descripteur par rapport à sa direction privilégiée pour le rendre invariant par rotation

L’une des exigences majeures pour ce type d’algorithme est sa stabilité. En effet pour pouvoir faire correspondre dans deux nuages de points successifs les points d’intérêt il faut que ceux-ci soient à la même position. D’après l’auteur, en observant un même objet avec deux orientations différentes de 20° on retrouve environ 70% de points d’intérêt commun d’un nuage à l’autre. Pour deux observations à 70° on trouve 55% de points en commun. D’après l’article les tests de mise en correspondance de deux nuages de points successifs grâce aux descripteurs NARFs montrent de bonnes performances pour de faibles angles de rotation.

L’intérêt de ce type d’approche a déjà été souligné: elle permet de se passer des données visuelles et de n’utiliser que des données du nuage de points : en reprenant l’algorithme présenté au début de cette étude on peut remplacer le calcul et l’extraction des points d’intérêt SURF dans l’image par l’extraction de point d’intérêt dans le nuage de point directement. A partir de l’estimation de déplacement faite du matching des deux nuages de points successifs avec la méthode RANSAC on affine le calcul avec l’algorithme ICP agissant sur l’ensemble des points.

L’utilisation de point d’intérêt et de descripteur NARFs est donc une piste intéressante bien que nécessitant des tests complémentaires pour s’assurer de la robustesse du procédé. Cette approche fera donc l’objet d’une évaluation puis de développement éventuellement.

8 « Range image » : image dont les pixels codent non pas l’intensité lumineuse mais la distance

38 Segmentation et reconstruction 3D

Enfin un autre type d’approche est envisageable pour le SLAM 3D. Au lieu de chercher à faire correspondre des points contenus dans des nuages successifs, on peut chercher à extraire des nuages les primitives géométriques tels que les plans formant le sol, les murs et le plafond pour ensuite établir une correspondance entre ces mêmes plans. Ceci impose de pouvoir extraire rapidement des informations à partir de nuages de points pour ensuite chercher les correspondances.

Il existe plusieurs études portant sur la recherche de plans dans des nuages de points. Parmi les travaux les plus récents on trouve notamment [6] qui utilise la transformée de Hough 3D pour réaliser la détection. En plus de faire un récapitulatif des différentes méthodes l’article présente une nouvelle variante de la transformée de Hough 3D pour la détection de plans.

Elle consiste en un nouvel accumulateur sphérique qui se différencie principalement par la manière dont l’espace de Hough est discrétisé. Il offre l’avantage d’être composé de cellule de même taille qui offre donc une meilleure homogénéité dans la détection des plans. D’après les résultats présentés la méthode semble satisfaisante pour notre application. Cependant la carte d’un bâtiment sera constituée d’une multitude de plans de tailles relativement petite par rapport à l’ensemble du nuage. La détection basée sur des accumulateurs risque donc de ne pas être efficace car le remplissage des cellules tendra à s’uniformiser.

On pourrait être tenté de dire que des directions privilégiées pourraient tout de même être extraites, tous les murs étant verticaux et les sols horizontaux.

Cependant si de nombreux objets sont présents dans la pièce la détection des plans peut être brouillée. Face à cette difficulté une approche locale peut peut-être offrir de meilleurs résultats. D’autres méthodes plus classiques utilisant notamment les variantes de l’algorithme RANSAC sont présentées dans [10]. Les performances en détection sont très bonnes puisque avec l’algorithme présenté il est possible de détecter des formes d’une taille relative de 1/3000 ! Autrement dit il est possible de détecter des formes dont le nombre de point les codant n’est que de 1/3000 du nombre total de points du nuage.

L’algorithme présenté apporte une nouveauté dans la manière dont sont détectée les formes: ici à chaque point est ajouté une série de paramètres constituée des coordonnées du vecteur normal estimé en ce point. Ainsi il suffit de deux points au maximum pour détecter la plupart des formes géométriques de base. La méthode consiste donc dans un premier temps à estimer la forme locale du nuage de point en se reportant à des formes de base : cône, plan et. Chaque « individu » se voit alors noté en fonction de ses performances estimée par l’algorithme RANSAC. Les primitives géométriques sont finalement extraites de manière statistique en tenant compte du score de chaque candidat. On peut aussi adopter une approche un peu différente qui consiste à créer un mesh à partir du nuage de point et rechercher les plans à partir de l’observation des normales de chacune des facettes. Les plans sont

39 formés des facettes dont les normales ne varient que peu autour d’une direction moyenne dont le seuil est à définir. On peut ainsi reconstruire les plans dans une scène à partir d’un nuage de points diffus. Cette méthode est proche des techniques utilisées pour le lissage des surfaces dans le domaine de la modélisation 3D.

Le problème principal de cette approche concerne la phase de triangulation.

Malheureusement les techniques actuelles sont trop lentes pour envisager leur utilisation temps réelle nécessaire ici [11].

40

Dans le document SLAM Visuel 3D pour robot mobile autonome (Page 34-41)

Documents relatifs