Maison >Périphériques technologiques >IA >GSLAM | Une architecture générale et un benchmark

GSLAM | Une architecture générale et un benchmark

王林
王林avant
2023-10-20 11:37:01780parcourir

J'ai soudainement découvert un article vieux de 19 ans

GSLAM : A General SLAM Framework and Benchmark

Code source ouvert : https://github.com/zdzhaoyong/GSLAM

Allez directement au texte intégral pour ressentir la qualité de ce travail ~

1 Abstrait

La technologie SLAM a récemment remporté de nombreux succès et a attiré l'attention des entreprises de haute technologie. Cependant, la question de savoir comment s'interfacer avec les algorithmes existants ou émergents pour effectuer efficacement des analyses comparatives en termes de vitesse, de robustesse et de portabilité reste une question. Dans cet article, une nouvelle plateforme SLAM appelée GSLAM est proposée, qui fournit non seulement des fonctions d'évaluation mais fournit également aux chercheurs des outils utiles pour développer rapidement leurs propres systèmes SLAM. La contribution fondamentale du GSLAM est universelle. Interface SLAM multiplateforme et entièrement open source conçue pour gérer l'interaction des ensembles de données d'entrée, des implémentations SLAM, des visualisations et des applications dans un cadre unifié. Grâce à cette plate-forme, les utilisateurs peuvent implémenter leurs propres fonctions sous forme de plug-ins pour améliorer les performances du SLAM et pousser davantage l'application du SLAM vers des applications pratiques.

2 Introduction

Depuis les années 1980, la localisation et la cartographie simultanées (SLAM) sont un sujet de recherche populaire dans le domaine de la vision par ordinateur et de la robotique. SLAM fournit des fonctionnalités essentielles pour de nombreuses applications nécessitant une navigation en temps réel, telles que la robotique, les véhicules aériens sans pilote (UAV), la conduite autonome et la réalité virtuelle et augmentée. Ces dernières années, la technologie SLAM s'est développée rapidement et divers systèmes SLAM ont été proposés, notamment des systèmes SLAM monoculaires (basés sur des points caractéristiques, des méthodes directes et semi-directes), des systèmes SLAM multicapteurs (méthodes RGBD, binoculaires et assistées par inertie). ) et les systèmes SLAM basés sur l'apprentissage (méthodes supervisées et non supervisées).

Cependant, avec le développement rapide de la technologie SLAM, presque tous les chercheurs se concentrent sur la théorie et la mise en œuvre de leurs propres systèmes SLAM, ce qui rend difficile l'échange d'idées et la mise en œuvre d'une migration vers d'autres systèmes. Cela entrave l’application rapide de la technologie SLAM dans divers domaines industriels. En outre, il existe actuellement de nombreuses implémentations différentes de systèmes SLAM, et la manière de comparer efficacement la vitesse, la robustesse et la portabilité reste un problème. Récemment, Nardi et al. et Bodin et al. ont proposé un système de référence SLAM unifié pour mener des études expérimentales quantitatives, comparables et vérifiables et également explorer les compromis entre différents systèmes SLAM. Ces systèmes facilitent la réalisation d'expériences d'évaluation à l'aide d'ensembles de données et de modules d'évaluation métriques.

Étant donné que les systèmes existants ne fournissent que des références d'évaluation, cet article estime qu'il est possible d'établir une plate-forme pour servir l'ensemble du cycle de vie des algorithmes SLAM, y compris les étapes de développement, d'évaluation et d'application. De plus, le SLAM basé sur l'apprentissage profond a fait des progrès significatifs ces dernières années, il est donc nécessaire de créer une plate-forme prenant en charge non seulement C++ mais également Python pour mieux prendre en charge l'intégration de la géométrie et des systèmes SLAM basés sur l'apprentissage profond. Par conséquent, dans cet article, une nouvelle plate-forme SLAM est présentée qui fournit non seulement des capacités d'évaluation, mais fournit également aux chercheurs des outils utiles pour développer rapidement leurs propres systèmes SLAM. Grâce à cette plateforme, les fonctions couramment utilisées sont fournies sous forme de plug-ins, afin que les utilisateurs puissent les utiliser directement ou créer leurs propres fonctions pour de meilleures performances. On espère que cette plateforme pourra promouvoir davantage l’application pratique des systèmes SLAM. En résumé, les principales contributions de cet article sont les suivantes :

  1. Cet article propose une plateforme SLAM générale, multiplateforme et entièrement open source, conçue pour la recherche et l'utilisation commerciale, surpassant les systèmes d'analyse comparative précédents. L'interface SLAM se compose de plusieurs fichiers d'en-tête légers et sans dépendances, ce qui facilite l'interaction avec différents ensembles de données, algorithmes SLAM et applications sous forme de plug-ins dans un cadre unifié. De plus, JavaScript et Python sont fournis pour prendre en charge les applications SLAM basées sur le Web et l'apprentissage profond.
  2. Dans la plateforme GSLAM proposée, trois modules optimisés sont introduits en tant que classes utilitaires, notamment Estimator, Optimizer et Vocabulary. Estimator vise à fournir un ensemble de solveurs de forme fermée, couvrant tous les cas, avec une forte cohérence d'échantillon (RANSAC) ; Optimizer vise à fournir une interface unifiée aux problèmes SLM non linéaires populaires. Le vocabulaire vise à fournir une implémentation efficace et portable du sac de vocabulaire pour plusieurs ; reconnaissance de lieu filetée et optimisée SIMD.
  3. Bénéficiant des interfaces ci-dessus, ce travail implémente et évalue des plug-ins pour les ensembles de données existants, les implémentations SLAM et les applications de visualisation dans un cadre unifié, et les benchmarks ou applications émergents dans le futur peuvent également être facilement intégrés davantage.

Ce qui suit présente d'abord l'interface du framework GSLAM et explique le principe de fonctionnement de GSLAM. Deuxièmement, trois composants pratiques sont introduits, à savoir l'estimateur, l'optimiseur et le vocabulaire. Ensuite, différentes implémentations SLAM populaires sont évaluées à l'aide du cadre GSLAM en utilisant plusieurs ensembles de données publiques typiques. Enfin, nous résumons ces travaux et attendons avec impatience les futures orientations de recherche.

3 Travail connexe

Localisation et cartographie simultanées

La technologie SLAM est utilisée pour créer des cartes dans des environnements inconnus et positionner des capteurs sur la carte, se concentrant principalement sur les opérations en temps réel. Les premiers SLAM étaient principalement basés sur le filtrage de Kalman étendu (EKF). Les paramètres de mouvement de 6 degrés de liberté et des repères 3D sont représentés de manière probabiliste sous la forme d'un vecteur d'état unique. La complexité de l'EKF classique augmente quadratiquement avec l'augmentation du nombre de points de repère, limitant son évolutivité. Ces dernières années, la technologie SLAM s'est développée rapidement et de nombreux systèmes SLAM visuels monoculaires ont été proposés, notamment des méthodes directes basées sur des points caractéristiques et des méthodes semi-directes. Cependant, les systèmes SLAM monoculaires manquent d'informations sur l'échelle et ne peuvent pas gérer les situations de rotation pure. C'est pourquoi d'autres systèmes SLAM multicapteurs, notamment les méthodes RGBD, binoculaires et assistées par inertie, ont émergé pour améliorer la robustesse et la précision.

Bien qu'un grand nombre de systèmes SLAM aient été proposés, il y a eu peu de travaux sur l'unification des interfaces de ces algorithmes et aucune comparaison complète de leurs performances. De plus, les implémentations de ces algorithmes SLAM sont souvent publiées sous forme d'exécutables autonomes plutôt que de bibliothèques, et ne sont souvent conformes à aucune structure standard.

Récemment, l'odométrie visuelle (VO) supervisée et non supervisée basée sur l'apprentissage profond a proposé de nouvelles idées par rapport aux méthodes traditionnelles basées sur la géométrie. Cependant, optimiser davantage la cohérence de plusieurs images clés n’est toujours pas facile. GSLAM fournit des outils qui peuvent aider à obtenir une meilleure cohérence globale. Grâce à ce cadre, il est plus facile de visualiser ou d'évaluer les résultats et de les appliquer davantage à divers secteurs industriels.

Plate-forme de vision par ordinateur et de robotique

Dans le domaine de la robotique et des ordinateurs, le système robotique (ROS) fournit une méthode de communication très pratique entre les nœuds et est privilégié par la plupart des chercheurs en robotique. De nombreuses implémentations SLAM fournissent des wrappers ROS pour s'abonner aux données des capteurs et publier les résultats de visualisation. Cependant, il n’unifie pas les entrées et les sorties de la mise en œuvre du SLAM, ce qui rend difficile l’évaluation plus approfondie des différents systèmes SLAM.

Inspiré de l'architecture de message ROS, GSLAM implémente une classe d'utilitaires de communication inter-processus similaire appelée Messenger. Cela fournit une alternative au ROS dans l'implémentation SLAM et maintient la compatibilité, c'est-à-dire que tous les messages définis par ROS sont pris en charge dans le cadre et que les wrappers ROS sont implémentés naturellement. Grâce à la conception en cours, les messages sont livrés sans sérialisation ni transfert de données, et les messages peuvent être envoyés sans délai et sans frais supplémentaires. Dans le même temps, la charge utile d'un message ne se limite pas aux messages définis par ROS, mais peut également être n'importe quelle structure de données copiable. En outre, non seulement il fournit des capacités d'évaluation, mais il fournit également aux chercheurs des outils utiles pour développer et intégrer rapidement leurs propres algorithmes SLAM.

Benchmarks SLAM

Il existe actuellement plusieurs systèmes de référence SLAM, notamment le benchmark KITTI, le benchmark TUM RGB-D et l'ensemble de données de référence ICL-NUIM RGB-D. Ces systèmes fournissent uniquement des fonctions d'évaluation. De plus, SLAMBench2 étend ces benchmarks aux algorithmes et aux ensembles de données, obligeant les utilisateurs à rendre les implémentations publiées compatibles avec SLAMBench2 à des fins d'évaluation, ce qui est difficile à étendre à davantage de domaines d'application. Contrairement à ces systèmes, la plateforme GSLAM proposée dans cet article fournit une solution qui peut servir tout le cycle de vie de la mise en œuvre du SLAM, du développement à l'évaluation en passant par l'application. Fournit aux chercheurs des outils utiles pour développer rapidement leurs propres systèmes SLAM et développer davantage des visualisations, des évaluations et des applications basées sur une interface unifiée.

4 Architecture générale du SLAM

Aperçu du framework

Le framework du GSLAM est illustré dans la figure. Dans l'ensemble, l'interface est conçue pour gérer l'interaction de trois parties.

  1. Traitez l'entrée de la mise en œuvre du SLAM. Lors de l'exécution de SLAM, les données du capteur et certains paramètres sont requis. Pour GSLAM, utilisez la classe Svar pour la configuration des paramètres et le traitement des commandes. Toutes les données de capteur requises par la mise en œuvre SLAM sont fournies par la mise en œuvre de l'ensemble de données et transmises via Messenger. GSLAM implémente plusieurs ensembles de données SLAM visuels populaires, vous permettant d'implémenter librement vos propres plug-ins d'ensemble de données.
  2. Mise en œuvre du SLAM. GSLAM traite chaque implémentation comme une bibliothèque de plugins. Les développeurs peuvent facilement concevoir une implémentation SLAM basée sur l'interface GSLAM et les classes utilitaires. Les développeurs peuvent également utiliser des interfaces pour encapsuler les implémentations sans introduire de dépendances supplémentaires. Les utilisateurs peuvent se concentrer sur le développement d’algorithmes de base sans se soucier des entrées et des sorties qui doivent être traitées en externe lors de l’implémentation SLAM.
  3. Partie de visualisation ou application utilisant les résultats SLAM. Une fois qu'une implémentation SLAM a traité une trame d'entrée, l'utilisateur peut souhaiter afficher ou exploiter les résultats. Par souci de généralité, les résultats SLAM doivent être publiés dans un format standard. Par défaut, GSLAM utilise Qt pour la visualisation, mais les utilisateurs sont libres d'implémenter des outils de visualisation personnalisés et d'ajouter des plug-ins d'application tels que des applications d'évaluation.

GSLAM | 一个通用的SLAM架构和基准

Le framework est conçu pour être compatible avec une variété de différents types d'implémentations SLAM, y compris, mais sans s'y limiter, l'odométrie inertielle visuelle monoculaire, binoculaire, RGBD et multi-caméras avec fusion multi-capteurs. Les plates-formes d'apprentissage profond modernes et les développeurs préfèrent coder en Python, c'est pourquoi GSLAM fournit des liaisons Python, permettant aux développeurs d'implémenter SLAM en Python et de l'appeler en utilisant GSLAM, ou d'utiliser Python pour appeler une implémentation SLAM basée sur C++. De plus, JavaScript est pris en charge pour les utilisations Web.

Classes d'interface de base

Certaines structures de données couramment utilisées par les interfaces SLAM incluent le réglage/lecture des paramètres, le format d'image, la transformation d'attitude, le modèle de caméra et la structure de données cartographiques. Ce qui suit est une brève introduction à quelques classes d’interface de base.

Paramter Setting

GSLAM utilise une petite classe d'analyse et de configuration de paramètres Svar, qui contient uniquement un fichier d'en-tête, s'appuie sur C++11 et possède les fonctionnalités suivantes :

a Analyse des paramètres et chargement de la configuration. Informations d'aide. Semblables aux outils d'analyse de paramètres populaires tels que Google gflags, les configurations de variables peuvent être chargées à partir d'arguments de ligne de commande, de fichiers et de l'environnement système. Les utilisateurs peuvent également définir différents types de paramètres et fournir des informations d'introduction, qui seront affichées dans le document d'aide.

b. Un petit langage de script qui prend en charge les variables, les fonctions et les instructions conditionnelles pour rendre les fichiers de configuration plus puissants.

c. Liaison et partage de variables thread-safe. Il est recommandé de lier les variables fréquemment utilisées à des pointeurs ou des références, ce qui offre non seulement de l'efficacité mais aussi de la commodité.

d, définition de fonction simple et appel depuis C++ ou script pur. Les liaisons entre les commandes et les fonctions aident les développeurs à découpler les dépendances de fichiers.

e. Prend en charge la représentation arborescente, ce qui signifie que les configurations peuvent être facilement chargées ou enregistrées à l'aide des formats XML, JSON et YAML.

Messagerie intra-processus

Étant donné que ROS fournit une méthode de communication très pratique entre les nœuds, elle est privilégiée par la plupart des chercheurs en robotique. Inspiré de l'architecture de message ROS2, GSLAM implémente une classe d'utilitaires de communication inter-processus similaire appelée Messenger. Cela fournit une alternative au ROS dans l’implémentation SLAM tout en maintenant la compatibilité. Grâce à sa conception inter-processus, Messenger est capable de publier et de s'abonner à n'importe quel cours sans frais supplémentaires. Ce qui suit est une introduction à d'autres fonctions :

a. L'interface adopte le style ROS, qui est facile à utiliser pour les utilisateurs. Et il prend en charge tous les messages définis par ROS, ce qui signifie que le remplacement du système de messagerie ROS d'origine nécessite très peu de travail.

b. Puisqu'il n'y a pas de sérialisation ni de transfert de données, les messages peuvent être envoyés sans délai et sans frais supplémentaires. Dans le même temps, la charge utile d'un message ne se limite pas aux messages définis par ROS, mais prend également en charge toute structure de données copiable.

c. Le code source comprend uniquement des fichiers d'en-tête basés sur C++11, sans dépendances supplémentaires, ce qui le rend portable.

d.API est thread-safe et prend en charge les notifications conditionnelles multithread lorsque la taille de la file d'attente est supérieure à zéro. Avant que l'éditeur et l'abonné ne se connectent, le nom du sujet et la structure des données RTTI sont vérifiés pour garantir qu'ils sont appelés correctement.

Transformation 3D

GSLAM | 一个通用的SLAM架构和基准

GSLAM | 一个通用的SLAM架构和基准

Pour la partie rotation, vous avez le choix entre plusieurs représentations, notamment les matrices, les angles d'Euler, les quaternions unitaires et l'algèbre de Lie donc (3). Pour une transformation donnée, n’importe lequel d’entre eux peut être utilisé pour la représenter et peut être converti l’un dans l’autre. Cependant, lorsque l’on considère des transformations multiples et une optimisation multiple, une attention particulière doit être portée à la représentation choisie. La représentation matricielle est sur-paramétrée à l'aide de 9 paramètres, alors que la rotation n'a que 3 degrés de liberté (DOF). La représentation angulaire d'Euler utilise trois variables et est facile à comprendre, mais elle se heurte au problème du verrouillage universel et n'est pas pratique pour les transformations multiples. Les quaternions unitaires constituent le moyen le plus efficace d'effectuer plusieurs rotations, tandis que les algèbres de Lie sont une représentation courante pour effectuer des optimisations courantes.

GSLAM | 一个通用的SLAM架构和基准

De même, les algèbres de Lie se(3) et sim(3) des corps rigides et les transformations de similarité sont définies. GSLAM utilise des quaternions pour représenter la partie rotation et fournit des fonctions pour convertir une représentation en une autre. Le tableau 1 montre l'implémentation de la transformation et la compare à trois autres implémentations variées (Sophus, TooN et Ceres). Étant donné que l'implémentation de Ceres utilise la représentation de l'axe angulaire, l'exponentielle et le logarithme de la rotation ne sont pas requis. Comme le montre le tableau, l'implémentation de GSLAM fonctionne mieux car elle utilise des quaternions et a une meilleure optimisation, tandis que TooN utilise une implémentation matricielle et fonctionne mieux en termes de transformations de points.

GSLAM | 一个通用的SLAM架构和基准

Format d'image

Le stockage et la transmission des données d'image sont l'une des fonctions les plus importantes du SLAM visuel. Pour améliorer l'efficacité et la commodité, GSLAM utilise une structure de données GImage, compatible avec cv::Mat. Il dispose d'un compteur à pointeur intelligent pour garantir que la mémoire est libérée en toute sécurité et peut être transférée facilement sans copie de mémoire. Les pointeurs de données sont alignés pour faciliter l’accélération SIMD (Single Instruction Multiple Data). Les utilisateurs peuvent convertir entre GImage et cv::Mat de manière transparente et sécurisée sans copie de mémoire.

Modèles de caméra

GSLAM | 一个通用的SLAM架构和基准

Étant donné que SLAM peut contenir une distorsion radiale et tangentielle due à des imperfections de fabrication, ou des images capturées par des caméras fisheye ou panoramiques, différents modèles de caméra sont proposés pour décrire la projection. GSLAM fournit des implémentations comprenant OpenCV (utilisé par ORB-SLAM), ATAN (utilisé par PTAM) et OCamCalib (utilisé par MultiCol-SLAM). Les utilisateurs peuvent également facilement hériter de ces classes et implémenter d'autres modèles de caméra tels que les modèles Kannala-Brandt et panoramiques isométriques.

Structure des données cartographiques

Pour la mise en œuvre du SLAM, l'objectif est de localiser et de générer des cartes en temps réel. GSLAM recommande d'utiliser une structure de données cartographiques unifiée, composée de plusieurs fenêtres cartographiques et points cartographiques. Cette structure de données convient à la plupart des systèmes SLAM visuels existants, y compris les méthodes basées sur les fonctionnalités ou directes.

Les cadres cartographiques sont utilisés pour représenter l'état de localisation à différents moments, y compris diverses informations ou résultats d'estimation capturés par des capteurs, notamment des données brutes IMU ou GPS, des informations de profondeur et des modèles de caméra. L'implémentation SLAM estime les relations entre eux et les connexions entre eux forment un graphe de pose.

Les points de la carte sont utilisés pour représenter l'environnement tel qu'observé par les images, généralement utilisées par les méthodes basées sur les fonctionnalités. Cependant, un point de carte peut représenter non seulement un point clé, mais également un GCP (Ground Control Point), une ligne de bord ou un objet 3D. Leur correspondance avec les cadres cartographiques forme un graphe d'observation, souvent appelé graphe de faisceaux.

5 Outil d'implémentation SLAM

Pour faciliter la mise en œuvre d'un système SLAM, GSLAM fournit une classe utilitaire. Cette section présentera brièvement trois modules optimisés, à savoir Estimateur, Optimiseur et Vocabulaire.

Estimateur

Les calculs purement géométriques restent un problème fondamental qui nécessite des solutions en temps réel puissantes et précises. Les algorithmes SLAM visuels traditionnels ou les solutions visuo-inertielles modernes s'appuient sur des algorithmes de vision géométrique pour l'initialisation, la relocalisation et la fermeture de boucle. OpenCV fournit plusieurs algorithmes géométriques et Kneip fournit une boîte à outils pour la vision géométrique, OpenGV, qui se limite aux calculs de pose de caméra. L'estimateur de GSLAM vise à fournir une famille de solveurs de forme fermée couvrant tous les cas et utilise la méthode robuste de cohérence d'échantillonnage aléatoire (RANSAC).

Le Tableau 2 répertorie les algorithmes pris en charge par Estimator. Sur la base des données d'observation fournies, ils sont divisés en trois catégories. L'appariement 2D-2D est utilisé pour estimer les contraintes épipolaires ou homographiques, et les poses relatives peuvent en être décomposées. La 2D-3D correspond à l'estimation de la pose absolue centrale ou non centrale d'un système monoculaire ou multi-caméras, ce qui est le fameux problème PnP. Les fonctions de géométrie 3D telles que l'ajustement de plan et l'estimation des transformations SIM de deux nuages ​​de points sont également prises en charge. La plupart des algorithmes s'appuient sur la bibliothèque open source d'algèbre linéaire Eigen, qui est une bibliothèque d'en-tête uniquement et disponible sur la plupart des plates-formes.

GSLAM | 一个通用的SLAM架构和基准

Optimizer

L'optimisation non linéaire est la partie centrale des systèmes SLAM géométriques modernes. En raison de la latitude élevée et de la rareté de la matrice hessienne, les structures graphiques sont utilisées pour modéliser le problème d'estimation complexe du SLAM. Plusieurs frameworks, dont Ceres, G2O et GTSAM, sont proposés pour résoudre des problèmes généraux d'optimisation de graphes. Ces frameworks sont largement utilisés dans différents systèmes SLAM. ORB-SLAM et SVO utilisent G2O pour l'optimisation des BA et des graphes de pose. OKVIS et VINS utilisent Ceres pour l'optimisation des graphiques avec des facteurs IMU, et des fenêtres glissantes sont utilisées pour contrôler la complexité des calculs. Forster et al. ont proposé une méthode d'initialisation visuelle basée sur SVO et ont utilisé GTSAM pour implémenter le backend.

L'optimiseur de GSLAM vise à fournir une interface unifiée pour la plupart des problèmes SLAM non linéaires, tels que le solveur PnP, BA, l'optimisation des graphes de pose. Un plug-in universel pour ces problèmes est implémenté sur la base de la bibliothèque Ceres. Pour des problèmes spécifiques, tels que BA, certaines implémentations plus efficaces, telles que PBA et ICE-BA, sont également disponibles sous forme de plug-ins. Grâce à l'outil d'optimisation, les développeurs peuvent accéder à différentes implémentations à l'aide d'une interface unifiée, en particulier pour les systèmes SLAM basés sur l'apprentissage profond.

Vocabulaire

La reconnaissance de lieu est l'une des parties les plus importantes du système SLAM, utilisée pour la détection de relocalisation et de bouclage. La méthode Bag of Words (BoW) est largement utilisée dans les systèmes SLAM en raison de son efficacité et de ses excellentes performances. FabMap propose une méthode probabiliste pour la reconnaissance de lieux basée sur l'apparence, utilisée dans des systèmes tels que RSLAM et LSD-SLAM. Puisqu'il utilise des descripteurs à virgule flottante comme SIFT et SURF, DBoW2 crée une arborescence de vocabulaire pour la formation et la détection, prenant en charge les descripteurs binaires et à virgule flottante. Refael a proposé deux versions améliorées de DBoW2, DBoW3 et FBoW, qui simplifient l'interface et accélèrent la formation et le chargement. Par la suite, ORB-SLAM a adopté le descripteur ORB et utilisé DBoW2 pour la détection de boucles, la relocalisation et la correspondance rapide. Par la suite, une série de systèmes SLAM, tels que ORB-SLAM2, VINS-Mono et LDSO, ont utilisé DBoW3 pour la détection de bouclage. Il est devenu l'outil le plus populaire pour mettre en œuvre la reconnaissance de localisation dans les systèmes SLAM.

Inspiré par le travail ci-dessus, GSLAM a implémenté une implémentation uniquement du fichier d'en-tête du vocabulaire DBoW3, qui présente les caractéristiques suivantes :

  1. Dépendance supprimée à OpenCV, toutes les fonctions sont dans un fichier d'en-tête qui repose uniquement sur C++11. accomplir.
  2. Combine les avantages de DBoW2/3 et FBoW, avec une vitesse extrêmement rapide et une facilité d'utilisation. Fournit une interface de type DBoW3 et accélère les descripteurs binaires et à virgule flottante à l'aide des instructions SSE et AVX.
  3. Amélioration de l'utilisation de la mémoire et accélération du chargement, de la sauvegarde ou de la formation du vocabulaire et de la conversion des caractéristiques de l'image en vecteurs BoW.

Le tableau 3 montre la comparaison de quatre bibliothèques de sacs de mots. Dans l'expérience, chaque nœud parent possède 10 nœuds enfants, la détection des fonctionnalités ORB utilise ORB-SLAM et la détection SIFT utilise SiftGPU. Le vocabulaire ORB est utilisé dans les résultats d'implémentation, avec respectivement les niveaux 4 et 6, ainsi qu'un vocabulaire SIFT. FBoW et GSLAM utilisent tous deux le multithreading pour l'apprentissage du vocabulaire. L'implémentation de GSLAM surpasse les autres implémentations dans presque tous les projets, y compris le chargement et la sauvegarde de vocabulaires, la formation de nouveaux vocabulaires, la conversion de listes de descripteurs en vecteurs BoW pour la reconnaissance de lieux et en vecteurs de fonctionnalités pour une correspondance rapide des fonctionnalités. De plus, l'implémentation GSLAM utilise moins de mémoire et alloue moins de blocs de mémoire dynamique, car la principale raison pour laquelle DBoW2 nécessite beaucoup de mémoire est la fragmentation.

GSLAM | 一个通用的SLAM架构和基准

6 Benchmarks d'évaluation SLAM

Les benchmarks existants exigent que les utilisateurs téléchargent des ensembles de données de test et téléchargent les résultats pour une évaluation de la précision, ce qui n'est pas suffisant pour unifier l'environnement d'exploitation et évaluer des comparaisons équitables de performances. Grâce à l'interface unifiée de GSLAM, l'évaluation des systèmes SLAM devient plus élégante. Avec l'aide de GSLAM, les développeurs peuvent simplement télécharger un plug-in SLAM et effectuer diverses évaluations de la vitesse, du coût de calcul et de la précision dans un environnement dockerisé en utilisant des ressources fixes. Dans cette section, certains ensembles de données et plugins SLAM implémentés seront d'abord présentés. Ensuite, trois implémentations SLAM représentatives sont évaluées en termes de vitesse, de précision, de mémoire et d'utilisation du processeur. Cette évaluation vise à démontrer les possibilités d'implémentation d'un benchmark SLAM unifié avec différents plugins SLAM.

Ensembles de données

L'exécution d'un système SLAM nécessite généralement des flux de données de capteurs et les configurations correspondantes. Afin de permettre aux développeurs de se concentrer sur le développement des principaux plug-ins SLAM, GSLAM fournit une interface d'ensemble de données standard, et les développeurs n'ont pas besoin de se soucier de l'entrée SLAM. L'entrée du capteur en ligne et les données hors ligne sont fournies via différents plug-ins d'ensemble de données. Le plug-in correct sera chargé dynamiquement en fonction du suffixe de chemin d'ensemble de données donné. La mise en œuvre de l'ensemble de données doit fournir tous les flux de capteurs demandés ainsi que la configuration associée, de sorte qu'aucune configuration supplémentaire n'est requise pour les différents ensembles de données. Tous les différents flux de capteurs sont publiés via Messenger, en utilisant des noms de sujet et des formats de données standard.

GSLAM a implémenté plusieurs plugins d'ensembles de données visuels SLAM populaires, comme le montre le tableau 4. Les utilisateurs peuvent également très facilement implémenter un plugin d'ensemble de données basé sur le noyau GSLAM réservé aux en-têtes, le publier en tant que plugin et le compiler avec l'application.

GSLAM | 一个通用的SLAM架构和基准

Implémentations SLAM

La figure 2 montre quelques captures d'écran des plugins open source SLAM et SfM exécutés à l'aide du visualiseur Qt intégré. Le framework prend en charge les systèmes SLAM de différentes architectures, notamment les méthodes directes, les méthodes semi-directes, les méthodes basées sur les fonctionnalités et même les méthodes SfM. Les implémentations DSO doivent publier des résultats tels que des nuages ​​de points, des poses de caméra, des trajectoires et des cartes de pose pour une visualisation comme les implémentations basées sur ROS. Les utilisateurs peuvent utiliser un framework unifié pour accéder à différents plug-ins SLAM, et il est très pratique de développer des applications basées sur SLAM basées sur les interfaces C++, Python et Node-JS. Étant donné que de nombreux chercheurs utilisent ROS dans le développement, GSLAM fournit également un plug-in de visualisation ROS pour transmettre de manière transparente les messages définis par ROS et permettre aux développeurs d'exploiter Rviz pour l'affichage ou de continuer à développer d'autres applications basées sur ROS.

GSLAM | 一个通用的SLAM架构和基准

Évaluation

Étant donné que la plupart des benchmarks existants ne fournissent que des ensembles de données ou n'ont pas de vérité de base permettant aux utilisateurs de mener leurs propres évaluations, GSLAM fournit un plug-in intégré et des outils de script pour l'évaluation des performances informatiques et de la précision.

La séquence nostructure-texture-near-withloop dans l'ensemble de données TUM RGBD est utilisée dans l'article pour démontrer l'exécution de l'évaluation. Les expériences suivantes utilisent trois plug-ins SLAM monoculaires open source DSO, SVO et ORB-SLAM. Dans toutes les expériences, un ordinateur doté d'un processeur i7-6700, d'un GPU GTX 1060 et de 16 Go de RAM exécutant Ubuntu 16.04 64 bits a été utilisé.

L'évaluation des performances informatiques comprend l'utilisation de la mémoire, le nombre de blocs de mémoire alloués, l'utilisation du processeur et le temps statistique pris pour chaque image, comme le montre la figure 3. Les résultats montrent que SVO utilise le moins de ressources mémoire et CPU et atteint la vitesse la plus rapide. Et comme SVO n’est qu’un odomètre visuel et ne conserve qu’une carte locale au sein de l’implémentation, le coût reste stable. DSO alloue moins de blocs de mémoire, mais consomme plus de 100 Mo de mémoire et croît lentement. Un problème avec DSO est que le temps de traitement augmente considérablement lorsque le nombre d'images descend en dessous de 500. De plus, le traitement des images clés prend encore plus de temps. ORB-SLAM utilise le plus de ressources CPU, le temps de calcul est stable, mais l'utilisation de la mémoire augmente rapidement, et il alloue et libère un grand nombre de blocs mémoire car son BA utilise la bibliothèque G2O et n'utilise pas la méthode d'optimisation incrémentielle.

GSLAM | 一个通用的SLAM架构和基准

La figure 4 montre les résultats de l'évaluation de la trajectoire d'odométrie. Comme le montre la figure, SVO est plus rapide mais a une dérive plus importante, tandis qu'ORBSLAM atteint la plus grande précision en termes d'erreur d'attitude absolue (APE). Étant donné que l'évaluation complète est une application plug-in enfichable, davantage de mesures d'évaluation, telles que la précision des nuages ​​de points, peuvent être réimplémentées.

GSLAM | 一个通用的SLAM架构和基准

7 Résumé

Cet article présente une nouvelle plateforme SLAM générale appelée GSLAM, qui propose un accompagnement depuis le développement, l'évaluation jusqu'à l'application. Grâce à cette plateforme, des boîtes à outils couramment utilisées sont fournies sous forme de plug-ins, et les utilisateurs peuvent également développer facilement leurs propres modules. Pour rendre la plateforme plus facile à utiliser, rendez l'interface dépendante uniquement de C++11. De plus, des interfaces Python et JavaScript sont fournies pour mieux intégrer le SLAM traditionnel et le SLAM basé sur le deep learning, ou effectuer des opérations distribuées sur le Web.

Dans la recherche suivante, davantage d'implémentations, de documents et de codes de démonstration SLAM seront fournis pour un apprentissage et une utilisation faciles. De plus, l'intégration du SLAM traditionnel et du SLAM basé sur l'apprentissage profond sera fournie pour explorer davantage les possibilités inconnues des systèmes SLAM.

La page d'accueil de cet ouvrage est la suivante :

GSLAM : Page principale

Cela ressemble à un cadre pour apprendre les principes de chaque partie du SLAM~

GSLAM | 一个通用的SLAM架构和基准

Lien original : https://mp.weixin .qq.com/s/ PCxhqhK3t1soN5FI0w9NFw

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer