Algorithme Gmapping au niveau de la nounou Introduction à la récurrence

Table des matières

1. Introduction

2. Introduction à l'algorithme Gmmaping

2.1 Passé et présent de Gmapping

       2.1.1 Réduire le nombre de particules

       2.1.2 Atténuation de la dissipation des particules et de la perte de diversité

2.2 Avantages et inconvénients de l'algorithme Gmapping

3. Installation et compilation du code source de l'algorithme Gmapping

3.1 Installer les bibliothèques dépendantes

3.2 Télécharger le code source de Gmapping

3.2.1 Méthode 1 :

3.2.2 Deuxième méthode :

4. Téléchargez le jeu de données

 5. Test des ensembles de données

6. La signification de chaque entrée dans le fichier de lancement de l'algorithme Gmapping

7. Annexe : Explication populaire des termes communs de Gmapping

7.1 Filtrage des particules

7.2 Dégradation des particules, rééchantillonnage et diversité des particules

8. Épilogue


1. Introduction

       Cet article est principalement pour enregistrer mon processus de reproduction de l'algorithme Gmapping dans le processus d'apprentissage du SLAM, y compris divers problèmes que j'ai rencontrés, afin que je puisse le revoir plus tard, et j'espère qu'il pourra être utile à tout le monde. Ici, je remercie également beaucoup seniors du CSDN L'article m'a beaucoup aidé, merci ici.

2. Introduction à l'algorithme Gmmaping

        Gmapping est un algorithme SLAM basé sur un lidar 2D utilisant l'algorithme RBPF pour compléter la construction d'une carte en grille bidimensionnelle . Dans l'introduction, afin d'être amical avec les novices, je ne parlerai pas trop des connaissances théoriques et de la dérivation des formules mathématiques associées , essayez de utiliser populaire et facile Les mots que vous comprenez vous aideront à comprendre.Si les lecteurs suivants ont besoin d'étudier des connaissances théoriques pertinentes, vous pouvez lire les articles de Gmapping et les explications de nombreux grands dieux sur Internet.

2.1 Passé et présent de Gmapping

        Le problème SLAM complet est l'estimation simultanée de la pose et de la carte du robot à partir des données du capteur. Cependant, la réalité est que si vous avez besoin d'une pose précise, vous devez la faire correspondre à la carte, et si vous avez besoin d'une bonne carte, vous devez avoir une pose précise pour le faire. problème contradictoire.

        Afin de résoudre ce problème, l'algorithme FastSLAM adopte une approche unique et utilise la méthode RBPF pour décomposer l'algorithme SLAM en deux problèmes : l'un est le problème de positionnement du robot, et l'autre est le problème de la construction de cartes avec des poses de robot connues .

         Le problème d'estimation de la trajectoire du robot dans l'algorithme FastSLAM utilise une méthode de filtre à particules (cartographier d'abord, puis localiser) . Grâce à l'utilisation du filtrage particulaire, chaque particule contient la trajectoire du robot et la carte d'environnement correspondante . Deux problèmes se poseront inévitablement . Le premier problème est que lorsque l'environnement est grand ou que l'erreur de l'odomètre du robot est grande, il faut plus de particules pour obtenir une meilleure estimation, ce qui provoquera une explosion de la mémoire ; le deuxième problème est que le filtrage des particules ne peut pas éviter l' utilisation du rééchantillonnage pour s'assurer que L'efficacité des particules actuelles, cependant, les problèmes causés par le rééchantillonnage sont la dissipation des particules et la perte de diversité des particules. En raison de l'émergence de ces deux problèmes , l'algorithme FastSLAM est théoriquement réalisable, mais il ne peut pas être réalisé en pratique. Gmapping propose deux solutions ciblées aux problèmes ci-dessus : réduire le nombre de particules et atténuer la dissipation des particules.

       2.1.1 Réduire le nombre de particules

        But : Atténuer considérablement l'explosion de la mémoire en réduisant le nombre de particules.

        Méthode 1 : adoptez directement la méthode d'estimation du maximum de vraisemblance, en fonction de la distribution prévue de la pose de la particule et du degré de correspondance de la carte, numérisez et faites correspondre les paramètres de pose optimaux des particules, et utilisez les paramètres de pose directement lorsque de nouvelles particules posent .

        Méthode 2 : L'algorithme Gmapping limite la distribution de Poisson à une zone effective étroite à travers l'observation (scen) de la dernière image. Échantillonnez ensuite la distribution de Poisson dans la normale.

       2.1.2 Atténuation de la dissipation des particules et de la perte de diversité

        L'algorithme Gmapping utilise l'algorithme du filtre à particules pour estimer la trajectoire du robot mobile, et le processus de rééchantillonnage des particules est inévitable. Au fur et à mesure que le nombre d'échantillons augmente, toutes les particules sont copiées à partir d'une particule, de sorte que la diversité des particules est complètement perdue. Par conséquent, le problème ne peut pas être résolu, et nous ne pouvons que partir de l'idée de réduire le rééchantillonnage . Gmapping propose une méthode de rééchantillonnage sélectif, qui détermine s'il faut effectuer un rééchantillonnage des particules en fonction du degré de dispersion de tous les poids auto-générés des particules (c'est-à-dire la variance de poids) .

         Résumé : Gmapping est basé sur l'algorithme FastSLAM pour concrétiser la méthode RBPF.

2.2 Avantages et inconvénients de l'algorithme Gmapping

       Avantages : Gmapping peut créer des cartes d'environnement intérieur en temps réel, avec moins de calculs dans de petites scènes. Et la précision de la carte est élevée et les exigences relatives à la fréquence de balayage du radar laser sont faibles

       Inconvénients : à mesure que l'environnement augmente, la quantité de mémoire et de calculs nécessaires pour construire la carte deviendra énorme, de sorte que Gmapping n'est pas adapté à la composition de scènes à grande échelle.

3. Installation et compilation du code source de l'algorithme Gmapping

Ubuntu18.04 est utilisé ici

3.1 Installer les bibliothèques dépendantes

sudo apt-get install libsdl1.2-dev
sudo apt install libsdl-image1.2-dev

3.2 Télécharger le code source de Gmapping

3.2.1 Méthode 1 :

sudo apt-get install ros-melodic-gmapping

Remarque : 1. Dans la commande ci-dessus, si votre version Ubuntu est 16.04, vous devez remplacer mélodique par cinétique, et la version Ubuntu correspondante de mélodique est 18.04.

           2. Méthode 1 Bien qu'il n'y ait aucun problème avec l'installation pendant le fonctionnement, il y aura parfois des problèmes lors du test de construction de la carte et l'installation du code source doit être réinstallée.

3.2.2 Deuxième méthode :

Étape 1 : Créez un fichier dans le répertoire principal, nommez-le gmapping (ce nom est facultatif), puis créez un espace de compilation src sous le dossier gmapping 

 Ouvrez le terminal dans le répertoire src, créez un espace de travail et entrez

catkin_init_workspace

Étape 2 : Téléchargez le code source de Gmapping

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

Après le téléchargement, l'effet est comme indiqué sur la figure

  Remarque : Parfois, le téléchargement échoue, comme illustré dans la figure ci-dessous. Il s'agit généralement d'un problème lié à la vitesse du réseau. Vous pouvez répéter la commande de téléchargement plusieurs fois.

 Étape 3 : Compilez, retournez dans le répertoire gmapping, ouvrez le terminal et entrez

catkin_make_isolated

 Remarque : La raison de ne pas compiler avec catkin_make est que les packages de fonctions entre les codes sources téléchargés peuvent avoir des problèmes d'interdépendance, et des erreurs seront signalées lors de la compilation en même temps.

4. Téléchargez le jeu de données

Autorécupération du disque réseau Baidu

链接:https://pan.baidu.com/s/1o5n10WIBEhYXUUuioURKXQ?pwd=28jn 
提取码:28jn 

 Après le téléchargement, placez le jeu de données dans le répertoire gmapping, comme indiqué sur la figure

 5. Test des ensembles de données

Étape 1 : Ouvrez un terminal et entrez

roscore

 Étape 2 : Ouvrez un autre terminal et entrez

rosparam set use_sim_time true//设置ROS 启用重放数据中的时间而非本机时间,因为在默认情况下ros使用Ubuntu系统的时间,即当前时间。由于我们重放的文件是历史文件,它记录的是历史时间,所以需要设置ROS 从现在起开始启用模拟时间。
rosrun gmapping slam_gmapping scan:=base_scan	//启动gmapping,并监听scan_base topic 发来消息。

 Remarque : 1. La deuxième ligne de commande ~$ rosrun gmapping slam_gmapping scan:=base_scen Le gmapping dans le fichier n'est pas le nom du dossier que vous avez créé, mais le nom du package de fonctions du code source de gmapping que vous avez téléchargé. Même si le dossier que vous avez créé s'appelle "abc (ou autre)", la deuxième ligne est écrite comme ceci.

           2. La deuxième ligne de commande est utilisée pour suivre l'actualité du sujet. Vous n'avez pas encore lancé le sujet concerné, il est donc normal qu'il n'y ait pas d'actualité sous cette commande. Ce n'est que lorsque vous exécutez le pack de fonctionnalités que des informations s'affichent sous celui-ci.        

 Étape 3 : Créez un terminal sous le fichier de jeu de données , entrez

rosbag play basic_localization_stage.bag //这个basic_localization_stage.bag是我的数据包里的,如果是别的数据包,只需要将名字即basic_localization_stage.bag换了即可。

 Remarque : Cette commande correspond au jeu de données du lien que j'ai envoyé. S'il s'agit d'un autre jeu de données, pensez à changer le nom du paquet de données suivant.

 

 Étape 4 : Ouvrez un nouveau terminal et ouvrez l'interface visuelle 

 Remarque : Il n'y a pas d'image dans l'interface visuelle pour le moment, et les paramètres doivent être ajustés

 Étape 5 : Ajustez les paramètres, ouvrez Ajouter dans le coin inférieur gauche de l'interface de visualisation, sélectionnez carte, ouvrez l'option carte, sélectionnez / carte dans l'option Sujet et l'image sortira.

 

 Cette étape est considérée comme une reproduction réussie de l'algorithme Gmapping.

6. La signification de chaque entrée dans le fichier de lancement de l'algorithme Gmapping

        À cet égard, il y a eu beaucoup de grands dieux sur CSDN qui l'ont présenté en détail, donc je ne ferai pas d'erreur.Ici, je vous recommande un article que j'ai lu, qui est très complet.

https://blog.csdn.net/qq_42037180/article/details/100819788

7. Annexe : Explication populaire des termes communs de Gmapping

       Au cours de l'apprentissage, j'ai constaté que beaucoup de gens sont quelque peu vagues sur les concepts de filtrage de particules, de rééchantillonnage, de diversité de particules et de dégradation de particules.Pour cette raison, j'ai trouvé dans les articles que j'ai lus que quelqu'un avait fait une analogie pour cela, ce qui est facile à comprendre. Partagez-le avec tout le monde ici.

7.1 Filtrage des particules

从知乎上看到的一个有趣的解释。
简单来说,在机器人定位问题中,我们想要估计机器人的位置和姿态。
最初,我们完全不知道机器人在哪,那就索性假设机器人以同等的概
率出现在地图上的任意一个位置。比如,假如地图是整个中国,那么
机器人就等可能地出现在北京、上海、广州、哈尔滨等地。于是我们
就可以用一个粒子代表一个机器人可能出现的位置。现在,机器人说
话了,它说它感觉特别冷,雪落在了它洁白的脖子上。于是,我当即
排除了长江以南的城市,南方怎么可能下雪呢!机器人系上围脖,继
续向前走。没走几步,它又抱怨道,“今天空气质量可真不怎么样,
我的双目都要失明了。”显然,它是遇到了雾霾天,这种天气在北方某
帝都倒是挺常见的。它点亮了IR主动光探测,雾霾天上路多加小心总
没有错。转眼间,机器人来到一个庞大的建筑物面前,这里人声鼎沸,
还有遍地的商贩在叫卖着不知什么东西。它借助自身廉价的激光雷达
小心翼翼地在人群中穿梭。突然,它若有所思地停了下来,似乎发现
了一个美丽的秘密。虽然外面寒冬凌冽,这里却如春天般富有生机,
到处洋溢着绿色的海洋。人声此起彼伏,它依稀听出了五个字,“国
安是冠军”...在上面的例子中,“我”作为机器人的大脑,根据机器人
的感受,可以得出如下推理。机器人发现下雪了,那么可以确定机器
人应该在北方的某个城市。接着,机器人遇到了雾霾天,那么说明该
城市的空气质量很差,这就进一步把搜索范围缩小到了某几个重点空
气污染城市。最后,机器人听到的五个字“国安是冠军”,彻底让我锁
定了它所在的城市——“北京”。这就是一个形象的粒子滤波案例。机器
人不断地通过运动、观测的方式,获取周围环境信息,逐步降低自身
位置的不确定度,最终得到准确的定位结果。

Joindre le lien de l'article : https://www.guyuehome.com/14967

7.2 Dégradation des particules, rééchantillonnage et diversité des particules

这里回答一下什么是粒子退化:
       粒子退化主要指正确的粒子被丢弃和粒子多样性减小,而频繁重采样则加剧了
正确的粒子被丢弃的可能性和粒子多样性减小速率。这里先涉及一下重采样的知识,我
们知道在执行重采样之前会计算每个粒子数的权重,有时会因为环境相似度高或是由于
噪声的影响会使接近正确状态的粒子数权重较小而错误状态的粒子的权重反而会大。重
采样是依据粒子权重来重新采粒子的,这样正确的粒子就很有可能会被丢弃,频繁的重
采样更加剧了正确但权重较小粒子被丢弃的可能性。这也就是粒子退化原因之一。
       另外一个原因就是频繁重采样导致的粒子多样性减小速率加大,什么是粒子多
样性呢?就是粒子的不同,就像最开始有十个粒子,如果发生重采样后其中有两个粒子
共享一个父亲,而上一次十个粒子中,其中一个粒子没有孩子则说明粒子多样性减小。
再通俗点解释,比如兔子生兔子这个问题。我们的笼子只能装十个兔子,所以在任意时
刻我们只能有十只兔子,但兔子是会繁殖的,那么怎么办呢?索性把长的不好看的兔子
干掉(这里的好看就是粒子权重,好看的权重就高不好看的权重就低,哈哈作者就是这
么任性)。让好看的兔子多生一只补充干掉的兔子。我们假设兔子一月繁殖一回,这样
的话在多年后这些兔子可能就都是一个兔子的后代。就是说兔子们的DNA都是一样的了,
也就是兔子DNA的多样性减小。为什么频繁执行重采样会使粒子多样性减小呢,这就好
比我兔子一月繁殖一会我可能五年后这些兔子的才会共有一个祖先。但如果让兔子一天
繁殖一会呢?可能一个月后这些兔子就全是最开始一只兔子的后代了,兔子们的DNA就
成一样了。因此为了防止粒子退化就要减少重采样的次数。

Joindre le lien de l'article : https://www.codetd.com/article/3003143

8. Épilogue

       Voyant cela, en fait, j'ai présenté l'algorithme Gmapping de manière très complète et presque synthétisé tous les articles sur Gmapping que j'ai vus sur Internet. À l'avenir, je reproduirai et introduirai d'autres algorithmes SLAM classiques, notamment la vision, le laser et la fusion de la vision et du laser. Si les lecteurs intéressés pensent que mon écriture n'est pas mauvaise, veuillez cliquer sur trois liens (comme, signet, suivre), merci à tous.

Je suppose que tu aimes

Origine blog.csdn.net/m0_63647490/article/details/123130882
conseillé
Classement