GSLAM |. Eine allgemeine SLAM-Architektur und ein Benchmark

王林
Freigeben: 2023-10-20 11:37:01
nach vorne
727 Leute haben es durchsucht

Plötzlich einen 19 Jahre alten Artikel entdeckt

GSLAM: A General SLAM Framework and Benchmark

Offener Quellcode: https://github.com/zdzhaoyong/GSLAM

Gehen Sie direkt zum Volltext, um die Qualität zu spüren Diese Arbeit ~

1 Abstract

Die SLAM-Technologie hat in letzter Zeit viele Erfolge erzielt und die Aufmerksamkeit von High-Tech-Unternehmen auf sich gezogen. Es bleibt jedoch eine Frage, wie eine Schnittstelle zu bestehenden oder neuen Algorithmen hergestellt werden kann, um ein Benchmarking hinsichtlich Geschwindigkeit, Robustheit und Portabilität effizient durchzuführen. In diesem Artikel wird eine neue SLAM-Plattform namens GSLAM vorgeschlagen, die nicht nur Bewertungsfunktionen bietet, sondern Forschern auch nützliche Werkzeuge zur schnellen Entwicklung ihrer eigenen SLAM-Systeme an die Hand gibt. Der Kernbeitrag von GSLAM ist universell. Plattformübergreifende, vollständig Open-Source-SLAM-Schnittstelle zur Abwicklung der Interaktion von Eingabedatensätzen, SLAM-Implementierungen, Visualisierungen und Anwendungen in einem einheitlichen Framework. Über diese Plattform können Benutzer ihre eigenen Funktionen in Form von Plug-Ins implementieren, um die Leistung von SLAM zu verbessern und die Anwendung von SLAM weiter in praktische Anwendungen voranzutreiben.

2 Einführung

Seit den 1980er Jahren ist Simultaneous Localization and Mapping (SLAM) ein beliebtes Forschungsthema im Bereich Computer Vision und Robotik. SLAM bietet wesentliche Funktionalität für viele Anwendungen, die Echtzeitnavigation erfordern, wie etwa Robotik, unbemannte Luftfahrzeuge (UAVs), autonomes Fahren sowie virtuelle und erweiterte Realität. In den letzten Jahren hat sich die SLAM-Technologie rasant weiterentwickelt und es wurden verschiedene SLAM-Systeme vorgeschlagen, darunter monokulare SLAM-Systeme (basierend auf Merkmalspunkten, direkte und halbdirekte Methoden) und Multisensor-SLAM-Systeme (RGBD, binokulare und trägheitsunterstützte Methoden). ) und lernbasierte SLAM-Systeme (überwachte und unüberwachte Methoden).

Mit der rasanten Entwicklung der SLAM-Technologie konzentrieren sich jedoch fast alle Forscher auf die Theorie und Implementierung ihrer eigenen SLAM-Systeme, was den Austausch von Ideen erschwert und die Migration auf andere Systeme nicht einfach umsetzt. Dies behindert die schnelle Anwendung der SLAM-Technologie in verschiedenen Industriebereichen. Darüber hinaus gibt es derzeit viele verschiedene Implementierungen von SLAM-Systemen, und es bleibt ein Problem, wie Geschwindigkeit, Robustheit und Portabilität effektiv gemessen werden können. Kürzlich haben Nardi et al. und Bodin et al. ein einheitliches SLAM-Benchmark-System vorgeschlagen, um quantitative, vergleichbare und überprüfbare experimentelle Studien durchzuführen und auch die Kompromisse zwischen verschiedenen SLAM-Systemen zu untersuchen. Diese Systeme erleichtern die Durchführung von Bewertungsexperimenten mithilfe von Datensätzen und metrischen Bewertungsmodulen.

Da bestehende Systeme nur Bewertungsbenchmarks bereitstellen, ist dieses Papier davon überzeugt, dass es möglich ist, eine Plattform einzurichten, die den gesamten Lebenszyklus von SLAM-Algorithmen, einschließlich Entwicklungs-, Bewertungs- und Anwendungsphasen, abdeckt. Darüber hinaus hat Deep-Learning-basiertes SLAM in den letzten Jahren erhebliche Fortschritte gemacht, sodass eine Plattform geschaffen werden muss, die nicht nur C++, sondern auch Python unterstützt, um die Integration von Geometrie- und Deep-Learning-basierten SLAM-Systemen besser zu unterstützen. Daher wird in diesem Artikel eine neuartige SLAM-Plattform vorgestellt, die nicht nur Evaluierungsmöglichkeiten bietet, sondern Forschern auch nützliche Werkzeuge zur schnellen Entwicklung ihrer eigenen SLAM-Systeme an die Hand gibt. Über diese Plattform werden häufig verwendete Funktionen in Form von Plug-Ins bereitgestellt, sodass Benutzer sie direkt verwenden oder für eine bessere Leistung eigene Funktionen erstellen können. Es besteht die Hoffnung, dass diese Plattform die praktische Anwendung von SLAM-Systemen weiter vorantreiben kann. Zusammenfassend sind die Hauptbeiträge dieses Papiers wie folgt:

  1. Dieses Papier schlägt eine allgemeine, plattformübergreifende, vollständig Open-Source-SLAM-Plattform vor, die für Forschung und kommerzielle Nutzung konzipiert ist und frühere Benchmarking-Systeme übertrifft. Die SLAM-Schnittstelle besteht aus mehreren kompakten, abhängigkeitsfreien Header-Dateien, was die Interaktion mit verschiedenen Datensätzen, SLAM-Algorithmen und Anwendungen in Form von Plug-Ins in einem einheitlichen Framework erleichtert. Darüber hinaus werden JavaScript und Python zur Unterstützung web- und Deep-Learning-basierter SLAM-Anwendungen bereitgestellt.
  2. In der vorgeschlagenen GSLAM-Plattform werden drei optimierte Module als Hilfsklassen eingeführt, darunter Estimator, Optimizer und Vocabulary. Estimator zielt darauf ab, eine Reihe geschlossener Löser mit starker Stichprobenkonsistenz bereitzustellen (RANSAC zielt darauf ab, eine einheitliche Schnittstelle für gängige nichtlineare SLM-Probleme bereitzustellen). Threaded und SIMD-optimierte Ortserkennung.
  3. Diese Arbeit nutzt die oben genannten Schnittstellen und implementiert und evaluiert Plug-Ins für bestehende Datensätze, SLAM-Implementierungen und Visualisierungsanwendungen in einem einheitlichen Framework. Auch in der Zukunft entstehende Benchmarks oder Anwendungen können problemlos weiter integriert werden.

Im Folgenden wird zunächst die Schnittstelle des GSLAM-Frameworks vorgestellt und das Funktionsprinzip von GSLAM erläutert. Zweitens werden drei praktische Komponenten vorgestellt, nämlich Estimator, Optimizer und Vocabulary. Anschließend werden verschiedene gängige SLAM-Implementierungen mithilfe des GSLAM-Frameworks unter Verwendung mehrerer typischer öffentlicher Datensätze evaluiert. Abschließend fassen wir diese Arbeiten zusammen und freuen uns auf zukünftige Forschungsrichtungen.

3 Verwandte Arbeit

Simultane Lokalisierung und Kartierung

SLAM-Technologie wird verwendet, um Karten in unbekannten Umgebungen zu erstellen und Sensoren in der Karte zu positionieren, wobei der Schwerpunkt hauptsächlich auf Echtzeitoperationen liegt. Frühes SLAM basierte hauptsächlich auf der erweiterten Kalman-Filterung (EKF). Die Bewegungsparameter von 6 Freiheitsgraden und 3D-Landmarken werden probabilistisch als ein einzelner Zustandsvektor dargestellt. Die Komplexität des klassischen EKF steigt quadratisch mit der Zunahme der Anzahl von Orientierungspunkten, was seine Skalierbarkeit einschränkt. In den letzten Jahren hat sich die SLAM-Technologie rasant weiterentwickelt und es wurden viele monokulare visuelle SLAM-Systeme vorgeschlagen, darunter merkmalspunktbasierte, direkte Methoden und halbdirekte Methoden. Allerdings mangelt es monokularen SLAM-Systemen an Skaleninformationen und sie können reine Rotationssituationen nicht bewältigen. Daher wurden einige andere Multisensor-SLAM-Systeme entwickelt, darunter RGBD-, binokulare und trägheitsunterstützte Methoden, um die Robustheit und Genauigkeit zu verbessern.

Obwohl eine große Anzahl von SLAM-Systemen vorgeschlagen wurde, gab es wenig Arbeit zur Vereinheitlichung der Schnittstellen dieser Algorithmen und keinen umfassenden Vergleich ihrer Leistung. Darüber hinaus werden Implementierungen dieser SLAM-Algorithmen häufig als eigenständige ausführbare Dateien und nicht als Bibliotheken veröffentlicht und entsprechen häufig keiner Standardstruktur.

Kürzlich hat die überwachte und unüberwachte visuelle Odometrie (VO), die auf Deep Learning basiert, im Vergleich zu herkömmlichen geometriebasierten Methoden neue Ideen vorgeschlagen. Allerdings ist es immer noch nicht einfach, die Konsistenz mehrerer Keyframes weiter zu optimieren. GSLAM bietet Tools, die zu einer besseren globalen Konsistenz beitragen können. Durch dieses Framework ist es einfacher, die Ergebnisse zu visualisieren oder auszuwerten und sie weiter auf verschiedene Branchen anzuwenden.

Plattform für Computer Vision und Robotik

Im Bereich Robotik und Computer bietet Robotic System (ROS) eine sehr praktische Kommunikationsmethode zwischen Knoten und wird von den meisten Robotikforschern bevorzugt. Viele SLAM-Implementierungen bieten ROS-Wrapper zum Abonnieren von Sensordaten und zum Veröffentlichen von Visualisierungsergebnissen. Es vereinheitlicht jedoch nicht die Eingabe und Ausgabe der SLAM-Implementierung, was die weitere Bewertung verschiedener SLAM-Systeme erschwert.

Inspiriert von der ROS-Nachrichtenarchitektur implementiert GSLAM eine ähnliche Dienstprogrammklasse für die prozessübergreifende Kommunikation namens Messenger. Dies stellt eine Alternative zu ROS innerhalb der SLAM-Implementierung dar und gewährleistet die Kompatibilität, d. h. alle ROS-definierten Nachrichten werden innerhalb des Frameworks unterstützt und ROS-Wrapper werden auf natürliche Weise implementiert. Dank des In-Process-Designs werden Nachrichten ohne Serialisierung und Datenübertragung zugestellt und Nachrichten können ohne Verzögerung und zusätzliche Kosten versendet werden. Gleichzeitig ist die Nutzlast einer Nachricht nicht auf ROS-definierte Nachrichten beschränkt, sondern kann auch eine beliebige kopierbare Datenstruktur sein. Darüber hinaus werden nicht nur Auswertungsmöglichkeiten bereitgestellt, sondern Forschern werden auch nützliche Werkzeuge zur Verfügung gestellt, mit denen sie schnell ihre eigenen SLAM-Algorithmen entwickeln und integrieren können.

SLAM-Benchmarks

Es gibt derzeit mehrere SLAM-Benchmark-Systeme, darunter den KITTI-Benchmark, den TUM RGB-D-Benchmark und den ICL-NUIM RGB-D-Benchmark-Datensatz. Diese Systeme bieten nur Bewertungsfunktionen. Darüber hinaus erweitert SLAMBench2 diese Benchmarks auf Algorithmen und Datensätze, sodass Benutzer veröffentlichte Implementierungen zur Evaluierung mit SLAMBench2 kompatibel machen müssen, was sich nur schwer auf weitere Anwendungsbereiche ausdehnen lässt. Im Gegensatz zu diesen Systemen bietet die in diesem Dokument vorgeschlagene GSLAM-Plattform eine Lösung, die den gesamten Lebenszyklus der SLAM-Implementierung abdecken kann, von der Entwicklung über die Evaluierung bis hin zur Anwendung. Bietet Forschern nützliche Werkzeuge, um schnell eigene SLAM-Systeme zu entwickeln und Visualisierungen, Auswertungen und Anwendungen auf Basis einer einheitlichen Schnittstelle weiterzuentwickeln.

4 Allgemeine SLAM-Architektur

Framework-Übersicht

Das Framework von GSLAM ist in der Abbildung dargestellt. Insgesamt ist die Schnittstelle darauf ausgelegt, das Zusammenspiel dreier Teile zu bewältigen.

  1. Verarbeiten Sie die Eingabe der SLAM-Implementierung. Beim Ausführen von SLAM sind Sensordaten und einige Parameter erforderlich. Verwenden Sie für GSLAM die Svar-Klasse für die Parameterkonfiguration und Befehlsverarbeitung. Alle für die SLAM-Implementierung erforderlichen Sensordaten werden von der Dataset-Implementierung bereitgestellt und über Messenger übertragen. GSLAM implementiert mehrere beliebte visuelle SLAM-Datensätze, sodass Sie Ihre eigenen Datensatz-Plug-Ins frei implementieren können.
  2. SLAM-Implementierung. GSLAM behandelt jede Implementierung als Plugin-Bibliothek. Entwickler können problemlos eine SLAM-Implementierung basierend auf der GSLAM-Schnittstelle und den Dienstprogrammklassen entwerfen. Entwickler können Schnittstellen auch zum Umschließen von Implementierungen verwenden, ohne zusätzliche Abhängigkeiten einzuführen. Benutzer können sich auf die Entwicklung von Kernalgorithmen konzentrieren, ohne sich um die Ein- und Ausgaben kümmern zu müssen, die außerhalb der SLAM-Implementierung verarbeitet werden müssen.
  3. Visualisierung eines Teils oder einer Anwendung mithilfe von SLAM-Ergebnissen. Nachdem eine SLAM-Implementierung einen Eingaberahmen verarbeitet hat, möchte der Benutzer möglicherweise die Ergebnisse anzeigen oder nutzen. Der Allgemeinheit halber sollten SLAM-Ergebnisse in einem Standardformat veröffentlicht werden. Standardmäßig verwendet GSLAM Qt zur Visualisierung, es steht Benutzern jedoch frei, benutzerdefinierte Visualisierungstools zu implementieren und Anwendungs-Plug-Ins wie Evaluierungsanwendungen hinzuzufügen.

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

Das Framework ist so konzipiert, dass es mit einer Vielzahl verschiedener Arten von SLAM-Implementierungen kompatibel ist, einschließlich, aber nicht beschränkt auf, monokulare, binokulare, RGBD- und visuelle Inertialodometrie mit mehreren Kameras und Multisensorfusion. Moderne Deep-Learning-Plattformen und Entwickler bevorzugen die Programmierung in Python, daher stellt GSLAM Python-Bindungen bereit, die es Entwicklern ermöglichen, SLAM in Python zu implementieren und mit GSLAM aufzurufen oder Python zum Aufrufen einer C++-basierten SLAM-Implementierung zu verwenden. Darüber hinaus wird JavaScript für webbasierte Zwecke unterstützt.

Grundlegende Schnittstellenklassen

Einige Datenstrukturen, die häufig von SLAM-Schnittstellen verwendet werden, umfassen Parametereinstellung/-lesen, Bildformat, Lagetransformation, Kameramodell und Kartendatenstruktur. Im Folgenden finden Sie eine kurze Einführung in einige grundlegende Schnittstellenklassen.

Parametereinstellung

GSLAM verwendet eine kleine Parameteranalyse- und Parametereinstellungsklasse Svar, die nur eine Header-Datei enthält, auf C++11 basiert und über die folgenden Funktionen verfügt:

a Hilfeinformationen. Ähnlich wie bei gängigen Parameter-Parsing-Tools wie Google gflags können Variablenkonfigurationen aus Befehlszeilenargumenten, Dateien und der Systemumgebung geladen werden. Benutzer können auch verschiedene Arten von Parametern definieren und einführende Informationen bereitstellen, die im Hilfedokument angezeigt werden.

b. Eine kleine Skriptsprache, die Variablen, Funktionen und bedingte Anweisungen unterstützt, um Konfigurationsdateien leistungsfähiger zu machen.

c. Thread-sichere Variablenbindung und -freigabe. Es wird empfohlen, häufig verwendete Variablen an Zeiger oder Referenzen zu binden, was nicht nur Effizienz, sondern auch Komfort bietet.

d, einfache Funktionsdefinition und Aufruf aus C++ oder reinem Skript. Bindungen zwischen Befehlen und Funktionen helfen Entwicklern, Dateiabhängigkeiten zu entkoppeln.

e. Unterstützt die Darstellung der Baumstruktur, was bedeutet, dass Konfigurationen einfach in den Formaten XML, JSON und YAML geladen oder gespeichert werden können.

Intra-Process Messaging

Da ROS eine sehr praktische Kommunikationsmethode zwischen Knoten bietet, wird es von den meisten Robotikforschern bevorzugt. Inspiriert von der ROS2-Nachrichtenarchitektur implementiert GSLAM eine ähnliche Dienstprogrammklasse für die prozessübergreifende Kommunikation namens Messenger. Dies stellt eine Alternative zu ROS innerhalb der SLAM-Implementierung dar und gewährleistet gleichzeitig die Kompatibilität. Aufgrund seines prozessübergreifenden Designs ist Messenger in der Lage, jede Klasse ohne zusätzliche Kosten zu veröffentlichen und zu abonnieren. Im Folgenden finden Sie eine Einführung in weitere Funktionen:

a Die Benutzeroberfläche übernimmt den ROS-Stil, der für Benutzer einfach zu verwenden ist. Und es unterstützt alle ROS-definierten Nachrichten, was bedeutet, dass das Ersetzen des ursprünglichen ROS-Nachrichtensystems nur sehr wenig Aufwand erfordert.

b. Da keine Serialisierung und Datenübertragung erfolgt, können Nachrichten ohne Verzögerung und zusätzliche Kosten gesendet werden. Gleichzeitig ist die Nutzlast einer Nachricht nicht auf ROS-definierte Nachrichten beschränkt, sondern unterstützt auch jede kopierbare Datenstruktur.

c. Der Quellcode enthält nur Header-Dateien auf Basis von C++11, ohne zusätzliche Abhängigkeiten, wodurch er portierbar ist.

d.API ist Thread-sicher und unterstützt bedingte Multithread-Benachrichtigungen, wenn die Warteschlangengröße größer als Null ist. Bevor sich Herausgeber und Abonnent miteinander verbinden, werden der Themenname und die RTTI-Datenstruktur überprüft, um sicherzustellen, dass sie korrekt aufgerufen werden.

3D-Transformation

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

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

Für den Rotationsteil stehen mehrere Darstellungen zur Auswahl, darunter Matrizen, Euler-Winkel, Einheitsquaternionen und Lie-Algebra so(3). Für eine bestimmte Transformation kann jede von ihnen zur Darstellung verwendet und ineinander umgewandelt werden. Bei der Betrachtung mehrerer Transformationen und Mannigfaltigkeitsoptimierungen muss jedoch besonderes Augenmerk auf die gewählte Darstellung gelegt werden. Die Matrixdarstellung ist mit 9 Parametern überparametrisiert, während die Rotation nur 3 Freiheitsgrade (DOF) hat. Die Euler-Winkeldarstellung verwendet drei Variablen und ist leicht zu verstehen, weist jedoch das Problem der universellen Sperre auf und ist für mehrere Transformationen unpraktisch. Einheitsquaternionen sind die effizienteste Methode zur Durchführung mehrerer Rotationen, während Lie-Algebren eine gängige Darstellung zur Durchführung gängiger Optimierungen sind.

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

In ähnlicher Weise werden die Lie-Algebren se(3) und sim(3) starrer Körper und Ähnlichkeitstransformationen definiert. GSLAM verwendet Quaternionen zur Darstellung des Rotationsteils und bietet Funktionen zum Konvertieren einer Darstellung in eine andere. Tabelle 1 zeigt die Transformationsimplementierung und vergleicht sie mit drei anderen vielfältigen Implementierungen (Sophus, TooN und Ceres). Da die Ceres-Implementierung eine Winkelachsendarstellung verwendet, sind Exponential und Logarithmus der Drehung nicht erforderlich. Wie in der Tabelle gezeigt, ist die Leistung der GSLAM-Implementierung besser, da sie Quaternionen verwendet und über eine bessere Optimierung verfügt, während TooN eine Matriximplementierung verwendet und hinsichtlich der Punkttransformationen eine bessere Leistung erbringt.

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

Bildformat

Die Speicherung und Übertragung von Bilddaten ist eine der wichtigsten Funktionen im Visual SLAM. Um die Effizienz und den Komfort zu verbessern, verwendet GSLAM eine Datenstruktur GImage, die mit cv::Mat kompatibel ist. Es verfügt über einen intelligenten Zeigerzähler, um sicherzustellen, dass der Speicher sicher freigegeben wird und problemlos übertragen werden kann, ohne dass der Speicher kopiert werden muss. Datenzeiger sind für eine einfachere Single Instruction Multiple Data (SIMD)-Beschleunigung ausgerichtet. Benutzer können nahtlos und sicher zwischen GImage und cv::Mat konvertieren, ohne den Speicher zu kopieren.

Kameramodelle

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

Da SLAM aufgrund von Herstellungsfehlern oder von Fischaugen- oder Panoramakameras aufgenommenen Bildern radiale und tangentiale Verzerrungen enthalten kann, werden zur Beschreibung der Projektion unterschiedliche Kameramodelle vorgeschlagen. GSLAM bietet Implementierungen einschließlich OpenCV (verwendet von ORB-SLAM), ATAN (verwendet von PTAM) und OCamCalib (verwendet von MultiCol-SLAM). Benutzer können diese Klassen auch problemlos erben und andere Kameramodelle wie Kannala-Brandt und isometrische Panoramamodelle implementieren.

Kartendatenstruktur

Bei der SLAM-Implementierung besteht das Ziel darin, Karten in Echtzeit zu lokalisieren und zu generieren. GSLAM empfiehlt die Verwendung einer einheitlichen Kartendatenstruktur, die aus mehreren Kartenrahmen und Kartenpunkten besteht. Diese Datenstruktur eignet sich für die meisten vorhandenen visuellen SLAM-Systeme, einschließlich merkmalsbasierter oder direkter Methoden.

Kartenrahmen werden verwendet, um den Standortstatus zu verschiedenen Zeiten darzustellen, einschließlich verschiedener Informationen oder Schätzergebnisse, die von Sensoren erfasst werden, einschließlich IMU- oder GPS-Rohdaten, Tiefeninformationen und Kameramodellen. Die SLAM-Implementierung schätzt die Beziehungen zwischen ihnen und die Verbindungen zwischen ihnen bilden ein Posendiagramm.

Kartenpunkte werden verwendet, um die Umgebung darzustellen, wie sie durch Frames beobachtet wird, die normalerweise von merkmalsbasierten Methoden verwendet werden. Ein Kartenpunkt kann jedoch nicht nur einen Schlüsselpunkt, sondern auch einen GCP (Ground Control Point), eine Kantenlinie oder ein 3D-Objekt darstellen. Ihre Entsprechung zu Kartenrahmen bildet einen Beobachtungsgraphen, der oft als Bündelgraph bezeichnet wird.

5 SLAM-Implementierungstool

Um die Implementierung eines SLAM-Systems zu erleichtern, stellt GSLAM eine Utility-Klasse bereit. In diesem Abschnitt werden drei optimierte Module kurz vorgestellt, nämlich Estimator, Optimizer und Vocabulary.

Estimator

Rein geometrische Berechnungen bleiben ein grundlegendes Problem, das leistungsstarke und genaue Echtzeitlösungen erfordert. Herkömmliche visuelle SLAM-Algorithmen oder moderne visuelle Inertiallösungen basieren auf geometrischen Bildverarbeitungsalgorithmen für die Initialisierung, Verschiebung und Schleifenschließung. OpenCV bietet mehrere geometrische Algorithmen und Kneip bietet eine Toolbox für geometrisches Sehen, OpenGV, die auf die Berechnung der Kameraposition beschränkt ist. Der Estimator von GSLAM zielt darauf ab, eine Familie geschlossener Löser bereitzustellen, die alle Fälle abdecken, und verwendet die Robust Random Sampling Consistency Method (RANSAC).

Tabelle 2 listet die von Estimator unterstützten Algorithmen auf. Basierend auf den gegebenen Beobachtungsdaten werden sie in drei Kategorien eingeteilt. 2D-2D-Matching wird verwendet, um epipolare oder homografische Einschränkungen abzuschätzen, und relative Posen können daraus zerlegt werden. 2D-3D entspricht der Schätzung der zentralen oder nichtzentralen absoluten Pose eines Monokular- oder Mehrkamerasystems, dem berühmten PnP-Problem. 3D-Geometriefunktionen wie die Ebenenanpassung und die Schätzung von SIM-Transformationen zweier Punktwolken werden ebenfalls unterstützt. Die meisten Algorithmen basieren auf der Open-Source-Bibliothek Eigen für lineare Algebra, bei der es sich um eine reine Header-Bibliothek handelt, die auf den meisten Plattformen verfügbar ist.

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

Optimierer

Nichtlineare Optimierung ist der Kernbestandteil moderner geometrischer SLAM-Systeme. Aufgrund des hohen Breitengrads und der geringen Dichte der Hesse-Matrix werden Graphstrukturen zur Modellierung des komplexen Schätzproblems von SLAM verwendet. Zur Lösung allgemeiner Graphoptimierungsprobleme werden mehrere Frameworks vorgeschlagen, darunter Ceres, G2O und GTSAM. Diese Frameworks werden häufig in verschiedenen SLAM-Systemen verwendet. ORB-SLAM und SVO verwenden G2O für die BA- und Pose-Graph-Optimierung. OKVIS und VINS verwenden Ceres zur Diagrammoptimierung mit IMU-Faktoren, und Schiebefenster werden zur Steuerung der Rechenkomplexität verwendet. Forster et al. schlugen eine SVO-basierte visuelle Initialisierungsmethode vor und verwendeten GTSAM zur Implementierung des Backends.

GSLAMs Optimierer zielt darauf ab, eine einheitliche Schnittstelle für die meisten nichtlinearen SLAM-Probleme bereitzustellen, wie z. B. PnP-Löser, BA und Pose-Graph-Optimierung. Basierend auf der Ceres-Bibliothek ist ein universelles Plug-In für diese Probleme implementiert. Für spezifische Probleme wie BA stehen auch einige effizientere Implementierungen wie PBA und ICE-BA als Plug-Ins zur Verfügung. Mithilfe des Optimierungstools können Entwickler über eine einheitliche Schnittstelle auf unterschiedliche Implementierungen zugreifen, insbesondere für Deep-Learning-basierte SLAM-Systeme.

Vokabular

Die Ortserkennung ist einer der wichtigsten Teile des SLAM-Systems und wird zur Standortwechsel- und Loopback-Erkennung verwendet. Die Bag of Words (BoW)-Methode wird aufgrund ihrer Effizienz und hervorragenden Leistung häufig in SLAM-Systemen verwendet. FabMap schlägt eine probabilistische Methode zur erscheinungsbasierten Ortserkennung vor, die in Systemen wie RSLAM und LSD-SLAM verwendet wird. Da es Gleitkomma-Deskriptoren wie SIFT und SURF verwendet, erstellt DBoW2 einen Vokabularbaum für Training und Erkennung, der Binär- und Gleitkomma-Deskriptoren unterstützt. Refael schlug zwei verbesserte Versionen von DBoW2, DBoW3 und FBoW vor, die die Schnittstelle vereinfachen und das Training und Laden beschleunigen. Anschließend übernahm ORB-SLAM den ORB-Deskriptor und verwendete DBoW2 zur Schleifenerkennung, -verschiebung und zum schnellen Abgleich. Anschließend nutzten eine Reihe von SLAM-Systemen wie ORB-SLAM2, VINS-Mono und LDSO DBoW3 zur Loopback-Erkennung. Es hat sich zum beliebtesten Tool zur Implementierung der Standorterkennung in SLAM-Systemen entwickelt.

Inspiriert von der oben genannten Arbeit implementierte GSLAM eine reine Headerdatei-Implementierung des DBoW3-Vokabulars, die die folgenden Merkmale aufweist:

  1. Abhängigkeit von OpenCV entfernt, alle Funktionen befinden sich in einer Headerdatei, die nur auf C++11 basiert erreichen.
  2. Kombiniert die Vorteile von DBoW2/3 und FBoW mit extrem hoher Geschwindigkeit und Benutzerfreundlichkeit. Bietet eine DBoW3-ähnliche Schnittstelle und beschleunigt Binär- und Gleitkomma-Deskriptoren mithilfe von SSE- und AVX-Anweisungen.
  3. Verbesserte Speichernutzung und beschleunigtes Laden, Speichern oder Trainieren von Vokabeln und Konvertieren von Bildfunktionen in BoW-Vektoren.

Tabelle 3 zeigt den Vergleich von vier Wortbeutelbibliotheken. Im Experiment verfügt jeder übergeordnete Knoten über 10 untergeordnete Knoten, die ORB-Feature-Erkennung verwendet ORB-SLAM und die SIFT-Erkennung SiftGPU. In den Implementierungsergebnissen wird das ORB-Vokabular mit den Ebenen 4 und 6 sowie ein SIFT-Vokabular verwendet. Sowohl FBoW als auch GSLAM verwenden Multithreading für das Vokabeltraining. Die Implementierung von GSLAM übertrifft andere Implementierungen in fast allen Projekten, einschließlich des Ladens und Speicherns von Vokabularien, des Trainierens neuer Vokabulare, der Konvertierung von Deskriptorlisten in BoW-Vektoren zur Ortserkennung und Merkmalsvektoren für den schnellen Merkmalsabgleich. Darüber hinaus verbraucht die GSLAM-Implementierung weniger Speicher und weist weniger dynamische Speicherblöcke zu, da der Hauptgrund für den hohen Speicherbedarf von DBoW2 Fragmentierungsprobleme sind.

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

6 SLAM-Bewertungsbenchmarks

Bestehende Benchmarks erfordern, dass Benutzer Testdatensätze herunterladen und Ergebnisse zur Genauigkeitsbewertung hochladen, was nicht ausreicht, um die Betriebsumgebung zu vereinheitlichen und faire Leistungsvergleiche zu bewerten. Dank der einheitlichen Schnittstelle von GSLAM wird die Evaluierung von SLAM-Systemen eleganter. Mit Hilfe von GSLAM können Entwickler einfach ein SLAM-Plug-in hochladen und verschiedene Bewertungen von Geschwindigkeit, Rechenkosten und Genauigkeit in einer Docker-Umgebung unter Verwendung fester Ressourcen durchführen. In diesem Abschnitt werden zunächst einige Datensätze und implementierte SLAM-Plugins vorgestellt. Anschließend werden drei repräsentative SLAM-Implementierungen hinsichtlich Geschwindigkeit, Genauigkeit, Speicher und CPU-Auslastung bewertet. Ziel dieser Evaluierung ist es, die Möglichkeiten einer einheitlichen SLAM-Benchmark-Implementierung mit verschiedenen SLAM-Plugins aufzuzeigen.

Datensätze

Der Betrieb eines SLAM-Systems erfordert normalerweise Sensordatenströme und entsprechende Konfigurationen. Damit sich Entwickler auf die Entwicklung zentraler SLAM-Plug-Ins konzentrieren können, stellt GSLAM eine Standard-Datensatzschnittstelle bereit, und Entwickler müssen sich nicht um die SLAM-Eingabe kümmern. Online-Sensoreingabe und Offline-Daten werden über verschiedene Datensatz-Plug-Ins bereitgestellt. Das richtige Plug-In wird entsprechend dem angegebenen Datensatz-Pfad-Suffix dynamisch geladen. Die Datensatzimplementierung sollte alle angeforderten Sensorströme und die zugehörige Konfiguration bereitstellen, sodass für verschiedene Datensätze keine zusätzliche Einrichtung erforderlich ist. Alle verschiedenen Sensorströme werden über Messenger unter Verwendung standardmäßiger Themennamen und Datenformate veröffentlicht.

GSLAM hat mehrere beliebte visuelle SLAM-Datensatz-Plugins implementiert, wie in Tabelle 4 gezeigt. Benutzer können auch sehr einfach ein Datensatz-Plugin basierend auf dem Nur-Header-GSLAM-Kern implementieren, es als Plugin veröffentlichen und mit der Anwendung kompilieren.

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

SLAM-Implementierungen

Abbildung 2 zeigt einige Screenshots der Open-Source-SLAM- und SfM-Plugins, die mit dem integrierten Qt-Visualizer ausgeführt werden. Das Framework unterstützt SLAM-Systeme verschiedener Architekturen, einschließlich direkter Methoden, halbdirekter Methoden, merkmalsbasierter Methoden und sogar SfM-Methoden. DSO-Implementierungen müssen wie ROS-basierte Implementierungen Ergebnisse wie Punktwolken, Kameraposen, Flugbahnen und Posenkarten zur Visualisierung veröffentlichen. Benutzer können ein einheitliches Framework verwenden, um auf verschiedene SLAM-Plug-Ins zuzugreifen, und es ist sehr praktisch, SLAM-basierte Anwendungen basierend auf C++-, Python- und Node-JS-Schnittstellen zu entwickeln. Da viele Forscher ROS in der Entwicklung verwenden, bietet GSLAM auch ein ROS-Visualisierungs-Plug-in zur nahtlosen Übertragung von ROS-definierten Nachrichten und ermöglicht es Entwicklern, Rviz für die Anzeige zu nutzen oder mit der Entwicklung anderer ROS-basierter Anwendungen fortzufahren.

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

Bewertung

Da die meisten existierenden Benchmarks nur Datensätze bereitstellen oder keine Grundwahrheit haben, mit der Benutzer ihre eigenen Bewertungen durchführen können, bietet GSLAM ein integriertes Plug-in und einige Skripttools für die Bewertung der Rechenleistung und -genauigkeit.

Die Sequenz nostructure-texture-near-withloop im TUM RGBD-Datensatz wird in der Arbeit verwendet, um die Durchführung der Auswertung zu demonstrieren. Die folgenden Experimente verwenden drei Open-Source-Monokular-SLAM-Plug-Ins DSO, SVO und ORB-SLAM. In allen Experimenten wurde ein Computer mit i7-6700-CPU, GTX 1060-GPU und 16 GB RAM mit 64-Bit-Ubuntu 16.04 verwendet.

Die Berechnungsleistungsbewertung umfasst die Speichernutzung, die Anzahl der zugewiesenen Speicherblöcke, die CPU-Auslastung und die statistische Zeit, die für jeden Frame benötigt wird, wie in Abbildung 3 dargestellt. Die Ergebnisse zeigen, dass SVO die geringsten Speicher- und CPU-Ressourcen verbraucht und die höchste Geschwindigkeit erreicht. Und da SVO nur ein visueller Kilometerzähler ist und innerhalb der Implementierung nur eine lokale Karte verwaltet, bleiben die Kosten stabil. DSO weist weniger Speicherblöcke zu, verbraucht jedoch mehr als 100 MB Speicher und wächst langsam. Ein Problem bei DSO besteht darin, dass die Verarbeitungszeit dramatisch ansteigt, wenn die Anzahl der Frames unter 500 sinkt, außerdem dauert die Verarbeitung von Keyframes noch länger. ORB-SLAM nutzt die meisten CPU-Ressourcen, die Berechnungszeit ist stabil, aber die Speichernutzung steigt schnell an und es weist eine große Anzahl von Speicherblöcken zu und gibt sie frei, da sein BA die G2O-Bibliothek verwendet und nicht die inkrementelle Optimierungsmethode verwendet.

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

Abbildung 4 zeigt die Auswertungsergebnisse der Odometrietrajektorie. Wie in der Abbildung gezeigt, ist SVO schneller, hat aber eine größere Drift, während ORBSLAM die höchste Genauigkeit in Bezug auf den absoluten Fluglagenfehler (APE) erreicht. Da es sich bei der umfassenden Auswertung um eine steckbare Plug-in-Anwendung handelt, können weitere Auswertungsmetriken, wie z. B. die Punktwolkengenauigkeit, neu implementiert werden.

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

7 Zusammenfassung

In diesem Artikel wird eine neue allgemeine SLAM-Plattform namens GSLAM vorgestellt, die Unterstützung von der Entwicklung über die Evaluierung bis zur Anwendung bietet. Über diese Plattform werden häufig verwendete Toolkits in Form von Plug-Ins bereitgestellt, und Benutzer können auch problemlos eigene Module entwickeln. Um die Nutzung der Plattform zu vereinfachen, machen Sie die Schnittstelle nur von C++11 abhängig. Darüber hinaus werden Python- und JavaScript-Schnittstellen bereitgestellt, um traditionelles SLAM und Deep-Learning-basiertes SLAM besser zu integrieren oder verteilte Vorgänge im Web durchzuführen.

In der folgenden Recherche werden weitere SLAM-Implementierungen, Dokumente und Demonstrationscodes zum einfachen Erlernen und Verwenden bereitgestellt. Darüber hinaus wird die Integration von traditionellem SLAM und Deep-Learning-basiertem SLAM bereitgestellt, um die unbekannten Möglichkeiten von SLAM-Systemen weiter zu erkunden.

Die Homepage dieser Arbeit lautet wie folgt:

GSLAM: Hauptseite

Es fühlt sich an wie ein Rahmen zum Erlernen der Prinzipien jedes Teils von SLAM~

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

Originallink: https://mp.weixin .qq.com/s/ PCxhqhK3t1soN5FI0w9NFw

Das obige ist der detaillierte Inhalt vonGSLAM |. Eine allgemeine SLAM-Architektur und ein Benchmark. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!