Inhaltsverzeichnis
2. Einführung in den Gmmaping-Algorithmus
2.1 Vergangenheit und Gegenwart von Gmapping
2.1.1 Reduzieren Sie die Anzahl der Partikel
2.1.2 Minderung von Partikeldissipation und Diversity-Verlust
2.2 Vor- und Nachteile des Gmapping-Algorithmus
3. Installation und Kompilierung des Quellcodes des Gmapping-Algorithmus
3.1 Installieren Sie abhängige Bibliotheken
3.2 Gmapping-Quellcode herunterladen
4. Laden Sie den Datensatz herunter
6. Die Bedeutung jedes Eintrags in der Startdatei des Gmapping-Algorithmus
7. Anhang: Beliebte Erklärung der allgemeinen Begriffe von Gmapping
7.2 Partikelabbau, Resampling und Partikeldiversität
1. Einleitung
Dieser Artikel dient hauptsächlich dazu, meinen Prozess der Reproduktion des Gmapping-Algorithmus beim Erlernen von SLAM aufzuzeichnen, einschließlich verschiedener Probleme, auf die ich gestoßen bin, damit ich ihn später überprüfen kann, und ich hoffe, dass er für alle hilfreich sein kann.Auch hier danke ich vielen Senioren von CSDN Der Artikel hat mir sehr geholfen, danke hier.
2. Einführung in den Gmmaping-Algorithmus
Gmapping ist ein SLAM-Algorithmus , der auf 2D-Lidar basiert und den RBPF-Algorithmus verwendet , um die Erstellung einer zweidimensionalen Gitterkarte zu vervollständigen.In der Einführung werde ich, um für Anfänger freundlich zu sein, nicht zu viel theoretisches Wissen und die Ableitung verwandter mathematischer Formeln versuchen Beliebt und einfach verwenden Die Wörter, die Sie verstehen, helfen Ihnen beim Verstehen Wenn spätere Leser relevantes theoretisches Wissen studieren müssen, können Sie die Abhandlungen von Gmapping und die Erklärungen vieler großer Götter im Internet lesen.
2.1 Vergangenheit und Gegenwart von Gmapping
Das vollständige SLAM-Problem ist die gleichzeitige Schätzung der Roboterpose und der Karte anhand von Sensordaten. Die Realität ist jedoch, dass Sie, wenn Sie eine genaue Pose benötigen, diese mit der Karte abgleichen müssen, und wenn Sie eine gute Karte benötigen, müssen Sie dafür eine genaue Pose haben widersprüchliches Problem.
Um dieses Problem zu lösen, verfolgt der FastSLAM-Algorithmus einen einzigartigen Ansatz und verwendet die RBPF- Methode, um den SLAM-Algorithmus in zwei Probleme zu zerlegen: Das eine ist das Problem der Roboterpositionierung und das andere das Problem der Kartenkonstruktion mit bekannten Roboterposen .
Das Schätzproblem der Roboterbahn im FastSLAM-Algorithmus verwendet ein Partikelfilterverfahren (zuerst abbilden, dann lokalisieren) . Durch den Einsatz der Partikelfilterung enthält jedes Partikel die Trajektorie des Roboters und die entsprechende Umgebungskarte . Zwei Probleme werden unvermeidlich auftreten . Das erste Problem besteht darin, dass bei einer großen Umgebung oder einem großen Fehler des Roboter-Odometers mehr Partikel benötigt werden, um eine bessere Schätzung zu erhalten, was zu einer Speicherexplosion führt; das zweite Problem besteht darin, dass die Partikelfilterung die Verwendung von Resampling nicht vermeiden kann Um die Wirksamkeit der aktuellen Partikel zu gewährleisten, sind die durch das Resampling verursachten Probleme jedoch die Partikeldissipation und der Verlust der Partikeldiversität. Aufgrund der Entstehung dieser beiden Probleme ist der FastSLAM-Algorithmus zwar theoretisch machbar, aber in der Praxis nicht realisierbar. Gmapping schlägt zwei gezielte Lösungen für die oben genannten Probleme vor : Reduzierung der Partikelanzahl und Verringerung der Partikeldissipation.
2.1.1 Reduzieren Sie die Anzahl der Partikel
Zweck: Um die Speicherexplosion stark zu lindern, indem die Anzahl der Partikel reduziert wird.
Methode 1: Wenden Sie die Methode der Maximum-Likelihood-Schätzung direkt an, entsprechend der vorhergesagten Verteilung der Pose des Partikels und dem Übereinstimmungsgrad der Karte, scannen und passen Sie die optimalen Posenparameter der Partikel an und verwenden Sie die Posenparameter direkt als neue Partikelposen .
Methode 2: Der Gmapping-Algorithmus begrenzt die Poisson-Verteilung durch die Beobachtung (scen) des letzten Frames auf einen schmalen effektiven Bereich. Dann tasten Sie die Poisson-Verteilung im Normalen ab.
2.1.2 Minderung von Partikeldissipation und Diversity-Verlust
Der Gmapping-Algorithmus verwendet den Partikelfilteralgorithmus, um die Flugbahn des mobilen Roboters abzuschätzen, und der Prozess des Partikel-Resamplings ist unvermeidlich. Mit zunehmender Anzahl von Proben werden alle Partikel von einem Partikel kopiert, sodass die Vielfalt der Partikel vollständig verloren geht. Daher kann das Problem nicht gelöst werden, und wir können nur von der Idee ausgehen, das Resampling zu reduzieren . Gmapping schlägt ein selektives Resampling-Verfahren vor, das bestimmt, ob ein Partikel-Resampling gemäß dem Streuungsgrad aller selbsterzeugten Partikelgewichte (d. h. der Gewichtsvarianz) durchgeführt werden soll .
Zusammenfassung: Gmapping basiert auf dem FastSLAM-Algorithmus, um die RBPF-Methode in die Realität umzusetzen.
2.2 Vor- und Nachteile des Gmapping-Algorithmus
Vorteile: Gmapping kann Indoor-Umgebungskarten in Echtzeit erstellen, mit weniger Berechnungen in kleinen Szenen. Und die Kartengenauigkeit ist hoch, und die Anforderungen an die Abtastfrequenz des Laserradars sind gering
Nachteile: Wenn die Umgebung zunimmt, wird die Menge an Speicher und Berechnung, die zum Erstellen der Karte erforderlich ist, enorm, sodass Gmapping nicht für die groß angelegte Szenenkomposition geeignet ist.
3. Installation und Kompilierung des Quellcodes des Gmapping-Algorithmus
Hier kommt Ubuntu18.04 zum Einsatz
3.1 Installieren Sie abhängige Bibliotheken
sudo apt-get install libsdl1.2-dev
sudo apt install libsdl-image1.2-dev
3.2 Gmapping-Quellcode herunterladen
3.2.1 Methode 1:
sudo apt-get install ros-melodic-gmapping
Hinweis: 1. Wenn Ihre Ubuntu-Version 16.04 ist, müssen Sie im obigen Befehl melodisch durch kinetisch ersetzen, und die entsprechende Ubuntu-Version von melodisch ist 18.04.
2. Methode 1 Obwohl es während des Betriebs kein Problem mit der Installation gibt, treten manchmal Probleme während des Kartenaufbautests auf, und die Quellcodeinstallation muss neu installiert werden.
3.2.2 Methode zwei:
Schritt 1: Erstellen Sie eine Datei im Hauptverzeichnis, nennen Sie sie gmapping (dieser Name ist optional) und erstellen Sie dann einen src-Kompilierungsbereich unter dem gmapping-Ordner
Öffnen Sie das Terminal im src-Verzeichnis, erstellen Sie einen Arbeitsbereich und geben Sie ein
catkin_init_workspace
Schritt 2: Laden Sie den Gmapping-Quellcode herunter
git clone https://github.com/ros-perception/openslam_gmapping
git clone https://github.com/ros-perception/slam_gmapping.git
git clone https://github.com/ros-planning/navigation.git
git clone https://github.com/ros/geometry2.git
git clone https://github.com/ros-planning/navigation_msgs.git
Nach dem Herunterladen ist der Effekt wie in der Abbildung dargestellt
Hinweis: Manchmal schlägt der Download fehl, wie in der folgenden Abbildung dargestellt. Dies ist im Allgemeinen ein Problem mit der Netzwerkgeschwindigkeit. Sie können den Download-Befehl mehrmals wiederholen.
Schritt 3: Kompilieren Sie, kehren Sie zum gmapping-Verzeichnis zurück, öffnen Sie das Terminal und geben Sie es ein
catkin_make_isolated
Hinweis: Der Grund dafür, nicht mit catkin_make zu kompilieren, ist, dass die Funktionspakete zwischen den heruntergeladenen Quellcodes möglicherweise Probleme mit der gegenseitigen Abhängigkeit haben und Fehler beim gleichzeitigen Kompilieren gemeldet werden.
4. Laden Sie den Datensatz herunter
Baidu-Netzwerkfestplatte selbstabrufend
链接:https://pan.baidu.com/s/1o5n10WIBEhYXUUuioURKXQ?pwd=28jn
提取码:28jn
Legen Sie den Datensatz nach dem Herunterladen im gmapping-Verzeichnis ab, wie in der Abbildung gezeigt
5. Datensatztests
Schritt 1: Öffnen Sie ein Terminal und geben Sie es ein
roscore
Schritt 2: Öffnen Sie ein anderes Terminal und geben Sie es ein
rosparam set use_sim_time true//设置ROS 启用重放数据中的时间而非本机时间,因为在默认情况下ros使用Ubuntu系统的时间,即当前时间。由于我们重放的文件是历史文件,它记录的是历史时间,所以需要设置ROS 从现在起开始启用模拟时间。
rosrun gmapping slam_gmapping scan:=base_scan //启动gmapping,并监听scan_base topic 发来消息。
Hinweis: 1. Die zweite Befehlszeile ~$ rosrun gmapping slam_gmapping scan:=base_scen Das gmapping in der Datei ist nicht der Name des Ordners, den Sie erstellt haben, sondern der Name des Funktionspakets des gmapping-Quellcodes, den Sie heruntergeladen haben der Ordner, den Sie erstellt haben, heißt "abc (oder was auch immer)", die zweite Zeile ist so geschrieben.
2. Die zweite Befehlszeile dient zum Überwachen von Themennachrichten Sie haben das entsprechende Thema noch nicht ausgeführt, daher ist es normal, dass es unter diesem Befehl keine Nachrichten gibt. Nur wenn Sie das Feature Pack ausführen, werden darunter Informationen angezeigt.
Schritt 3 : Erstellen Sie ein Terminal unter der Datensatzdatei , geben Sie ein
rosbag play basic_localization_stage.bag //这个basic_localization_stage.bag是我的数据包里的,如果是别的数据包,只需要将名字即basic_localization_stage.bag换了即可。
Hinweis: Dieser Befehl entspricht dem Datensatz des Links, den ich gesendet habe.Wenn es sich um einen anderen Datensatz handelt, denken Sie daran, den Namen des nachfolgenden Datenpakets zu ändern
Schritt 4: Öffnen Sie ein neues Terminal und öffnen Sie die visuelle Benutzeroberfläche
Hinweis: Zu diesem Zeitpunkt befindet sich kein Bild in der visuellen Benutzeroberfläche, und die Parameter müssen angepasst werden
Schritt 5: Passen Sie die Parameter an, öffnen Sie „Hinzufügen“ in der unteren linken Ecke der Visualisierungsoberfläche, wählen Sie „Karte“, öffnen Sie die Kartenoption, wählen Sie „/map“ in der Option „Thema“ und das Bild wird angezeigt.
Dieser Schritt wird als erfolgreiche Reproduktion des Gmapping-Algorithmus angesehen.
6. Die Bedeutung jedes Eintrags in der Startdatei des Gmapping-Algorithmus
In dieser Hinsicht gab es viele große Götter auf CSDN, die es ausführlich vorgestellt haben, also werde ich keine Fehler machen. Hier empfehle ich einen Artikel, den ich gelesen habe und der sehr umfassend ist.
https://blog.csdn.net/qq_42037180/article/details/100819788
7. Anhang: Beliebte Erklärung der allgemeinen Begriffe von Gmapping
Während des Lernens stellte ich fest, dass viele Leute etwas vage mit den Begriffen Partikelfilterung, Resampling, Partikeldiversität und Partikelabbau umgehen.Aus diesem Grund fand ich in den Artikeln, die ich las, dass jemand eine Analogie dafür gemacht hat, die ist leicht verständlich. Teilen Sie es hier mit allen.
7.1 Partikelfilterung
从知乎上看到的一个有趣的解释。
简单来说,在机器人定位问题中,我们想要估计机器人的位置和姿态。
最初,我们完全不知道机器人在哪,那就索性假设机器人以同等的概
率出现在地图上的任意一个位置。比如,假如地图是整个中国,那么
机器人就等可能地出现在北京、上海、广州、哈尔滨等地。于是我们
就可以用一个粒子代表一个机器人可能出现的位置。现在,机器人说
话了,它说它感觉特别冷,雪落在了它洁白的脖子上。于是,我当即
排除了长江以南的城市,南方怎么可能下雪呢!机器人系上围脖,继
续向前走。没走几步,它又抱怨道,“今天空气质量可真不怎么样,
我的双目都要失明了。”显然,它是遇到了雾霾天,这种天气在北方某
帝都倒是挺常见的。它点亮了IR主动光探测,雾霾天上路多加小心总
没有错。转眼间,机器人来到一个庞大的建筑物面前,这里人声鼎沸,
还有遍地的商贩在叫卖着不知什么东西。它借助自身廉价的激光雷达
小心翼翼地在人群中穿梭。突然,它若有所思地停了下来,似乎发现
了一个美丽的秘密。虽然外面寒冬凌冽,这里却如春天般富有生机,
到处洋溢着绿色的海洋。人声此起彼伏,它依稀听出了五个字,“国
安是冠军”...在上面的例子中,“我”作为机器人的大脑,根据机器人
的感受,可以得出如下推理。机器人发现下雪了,那么可以确定机器
人应该在北方的某个城市。接着,机器人遇到了雾霾天,那么说明该
城市的空气质量很差,这就进一步把搜索范围缩小到了某几个重点空
气污染城市。最后,机器人听到的五个字“国安是冠军”,彻底让我锁
定了它所在的城市——“北京”。这就是一个形象的粒子滤波案例。机器
人不断地通过运动、观测的方式,获取周围环境信息,逐步降低自身
位置的不确定度,最终得到准确的定位结果。
Fügen Sie den Artikellink hinzu: https://www.guyuehome.com/14967
7.2 Partikelabbau, Resampling und Partikeldiversität
这里回答一下什么是粒子退化:
粒子退化主要指正确的粒子被丢弃和粒子多样性减小,而频繁重采样则加剧了
正确的粒子被丢弃的可能性和粒子多样性减小速率。这里先涉及一下重采样的知识,我
们知道在执行重采样之前会计算每个粒子数的权重,有时会因为环境相似度高或是由于
噪声的影响会使接近正确状态的粒子数权重较小而错误状态的粒子的权重反而会大。重
采样是依据粒子权重来重新采粒子的,这样正确的粒子就很有可能会被丢弃,频繁的重
采样更加剧了正确但权重较小粒子被丢弃的可能性。这也就是粒子退化原因之一。
另外一个原因就是频繁重采样导致的粒子多样性减小速率加大,什么是粒子多
样性呢?就是粒子的不同,就像最开始有十个粒子,如果发生重采样后其中有两个粒子
共享一个父亲,而上一次十个粒子中,其中一个粒子没有孩子则说明粒子多样性减小。
再通俗点解释,比如兔子生兔子这个问题。我们的笼子只能装十个兔子,所以在任意时
刻我们只能有十只兔子,但兔子是会繁殖的,那么怎么办呢?索性把长的不好看的兔子
干掉(这里的好看就是粒子权重,好看的权重就高不好看的权重就低,哈哈作者就是这
么任性)。让好看的兔子多生一只补充干掉的兔子。我们假设兔子一月繁殖一回,这样
的话在多年后这些兔子可能就都是一个兔子的后代。就是说兔子们的DNA都是一样的了,
也就是兔子DNA的多样性减小。为什么频繁执行重采样会使粒子多样性减小呢,这就好
比我兔子一月繁殖一会我可能五年后这些兔子的才会共有一个祖先。但如果让兔子一天
繁殖一会呢?可能一个月后这些兔子就全是最开始一只兔子的后代了,兔子们的DNA就
成一样了。因此为了防止粒子退化就要减少重采样的次数。
Fügen Sie den Artikellink hinzu: https://www.codetd.com/article/3003143
8. Epilog
In Anbetracht dessen habe ich den Gmapping-Algorithmus sehr umfassend vorgestellt und fast alle Artikel über Gmapping, die ich im Internet gesehen habe, synthetisiert. In Zukunft werde ich andere klassische SLAM-Algorithmen reproduzieren und einführen, einschließlich Vision, Laser und Fusion von Vision und Laser. Wenn interessierte Leser denken, dass mein Schreiben nicht schlecht ist, klicken Sie bitte auf drei Links (Gefällt mir, Lesezeichen, Folgen), danke Ihnen allen.