Algoritmo Gmapping a nivel de niñera Introducción a la recurrencia

Tabla de contenido

1. Introducción

2. Introducción al algoritmo Gmmaping

2.1 Pasado y presente de Gmapping

       2.1.1 Reducir el número de partículas

       2.1.2 Mitigación de la disipación de partículas y pérdida de diversidad

2.2 Ventajas y desventajas del algoritmo Gmapping

3. Instalación y compilación del código fuente del algoritmo Gmapping

3.1 Instalar bibliotecas dependientes

3.2 Descargar el código fuente de Gmapping

3.2.1 Método 1:

3.2.2 Método dos:

4. Descarga el conjunto de datos

 5. Pruebas de conjuntos de datos

6. El significado de cada entrada en el archivo de lanzamiento del algoritmo Gmapping

7. Apéndice: Explicación popular de los términos comunes de Gmapping

7.1 Filtrado de partículas

7.2 Degradación de partículas, remuestreo y diversidad de partículas

8. Epílogo


1. Introducción

       Este artículo es principalmente para registrar mi proceso de reproducción del algoritmo Gmapping en el proceso de aprendizaje de SLAM, incluyendo varios problemas que encontré, para poder revisarlo más adelante, y espero que pueda ser útil para todos. Aquí, también agradezco a muchos personas mayores de CSDN El artículo me ayudó mucho, gracias aquí.

2. Introducción al algoritmo Gmmaping

        Gmapping es un algoritmo SLAM basado en lidar 2D que utiliza el algoritmo RBPF para completar la construcción de un mapa de cuadrícula bidimensional En la introducción, para ser amigable con los principiantes, no hablaré demasiado sobre el conocimiento teórico y la derivación de fórmulas matemáticas relacionadas , trate de use popular y fácil Las palabras que entiende lo ayudarán a comprender. Si los lectores posteriores necesitan estudiar conocimientos teóricos relevantes, puede leer los artículos de Gmapping y las explicaciones de muchos grandes dioses en Internet.

2.1 Pasado y presente de Gmapping

El problema         completo de SLAM es la estimación simultánea de la pose del robot y el mapa dados los datos del sensor. Sin embargo, la realidad es que si necesita obtener una pose precisa, debe hacerla coincidir con el mapa, y si necesita obtener un buen mapa, debe tener una pose precisa para hacerlo. problema contradictorio.

        Para resolver este problema, el algoritmo FastSLAM adopta un enfoque único y utiliza el método RBPF para descomponer el algoritmo SLAM en dos problemas: uno es el problema del posicionamiento del robot y el otro es el problema de la construcción del mapa con poses conocidas del robot .

         El problema de estimación de la trayectoria del robot en el algoritmo FastSLAM utiliza un método de filtro de partículas (mapa primero, luego localiza) . Debido al uso del filtrado de partículas, cada partícula contiene la trayectoria del robot y el mapa de entorno correspondiente . Inevitablemente surgirán dos problemas . El primer problema es que cuando el entorno es grande o el error del odómetro del robot es grande, se necesitan más partículas para obtener una mejor estimación, lo que provocará una explosión de memoria ; el segundo problema es que el filtrado de partículas no puede evitar el uso de remuestreo para garantizar que la eficacia de las partículas actuales, sin embargo, los problemas causados ​​por el remuestreo son la disipación de partículas y la pérdida de diversidad de partículas. Debido a la aparición de estos dos problemas , el algoritmo FastSLAM es teóricamente factible, pero no se puede realizar en la práctica. Gmapping propone dos soluciones específicas para los problemas anteriores : reducir la cantidad de partículas y aliviar la disipación de partículas.

       2.1.1 Reducir el número de partículas

        Propósito: Aliviar en gran medida la explosión de la memoria al reducir la cantidad de partículas.

        Método 1: adopte directamente el método de estimación de máxima verosimilitud, de acuerdo con la distribución predicha de la pose de la partícula y el grado de coincidencia del mapa, escanee y haga coincidir los parámetros de pose óptimos de las partículas, y use los parámetros de pose directamente como pose de partículas nuevas .

        Método 2: el algoritmo Gmapping limita la distribución de Poisson a un área efectiva estrecha a través de la observación (escena) del último cuadro. Luego muestree la distribución de Poisson en la normal.

       2.1.2 Mitigación de la disipación de partículas y pérdida de diversidad

        El algoritmo Gmapping utiliza el algoritmo de filtro de partículas para estimar la trayectoria del robot móvil, y el proceso de remuestreo de partículas es inevitable. A medida que aumenta el número de muestras, todas las partículas se copian de una partícula, por lo que la diversidad de partículas se pierde por completo. Por tanto, el problema no tiene solución, y solo podemos pasar de la idea de reducir el remuestreo . Gmapping propone un método de remuestreo selectivo, que determina si se debe realizar un remuestreo de partículas de acuerdo con el grado de dispersión de todos los pesos autogenerados de partículas (es decir, la variación de peso) .

         Resumen: Gmapping se basa en el algoritmo FastSLAM para hacer realidad el método RBPF.

2.2 Ventajas y desventajas del algoritmo Gmapping

       Ventajas: Gmapping puede construir mapas de ambientes interiores en tiempo real, con menos cálculos en escenas pequeñas. Y la precisión del mapa es alta, y los requisitos para la frecuencia de escaneo del radar láser son bajos

       Desventajas: a medida que aumenta el entorno, la cantidad de memoria y cálculo necesarios para construir el mapa será enorme, por lo que Gmapping no es adecuado para la composición de escenas a gran escala.

3. Instalación y compilación del código fuente del algoritmo Gmapping

Ubuntu18.04 se usa aquí

3.1 Instalar bibliotecas dependientes

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

3.2 Descargar el código fuente de Gmapping

3.2.1 Método 1:

sudo apt-get install ros-melodic-gmapping

Nota: 1. En el comando anterior, si su versión de Ubuntu es 16.04, debe reemplazar melodic con kinetic, y la versión correspondiente de Ubuntu de melodic es 18.04.

           2. Método 1 Aunque no hay ningún problema con la instalación durante la operación, a veces habrá problemas durante la prueba de creación del mapa y será necesario volver a instalar la instalación del código fuente.

3.2.2 Método dos:

Paso 1: cree un archivo en el directorio principal, asígnele el nombre gmapping (este nombre es opcional) y luego cree un espacio de compilación src en la carpeta gmapping 

 Abra la terminal en el directorio src, cree un espacio de trabajo e ingrese

catkin_init_workspace

Paso 2: Descarga el código fuente 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

Después de la descarga, el efecto es como se muestra en la figura.

  Nota: A veces la descarga falla, como se muestra en la figura a continuación. Esto generalmente es un problema con la velocidad de la red. Puede repetir el comando de descarga varias veces.

 Paso 3: Compile, regrese al directorio gmapping, abra la terminal e ingrese

catkin_make_isolated

 Nota: La razón para no compilar con catkin_make es que los paquetes de funciones entre los códigos fuente descargados pueden tener problemas de interdependencia y se informarán errores al compilar al mismo tiempo.

4. Descarga el conjunto de datos

Recuperación automática del disco de red de Baidu

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

 Después de descargar, coloque el conjunto de datos en el directorio gmapping, como se muestra en la figura

 5. Pruebas de conjuntos de datos

Paso 1: Abra una terminal e ingrese

roscore

 Paso 2: Abre otra terminal e ingresa

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

 Nota: 1. La segunda línea de comando ~$ rosrun gmapping slam_gmapping scan:=base_scen El gmapping en el archivo no es el nombre de la carpeta que creó, sino el nombre del paquete de funciones del código fuente de gmapping que descargó. la carpeta que creaste se llama "abc (o lo que sea)", la segunda línea está escrita así.

           2. La segunda línea de comando se usa para monitorear las noticias del tema. Aún no ha ejecutado el tema relevante, por lo que es normal que no haya noticias bajo este comando. Solo cuando ejecute el paquete de funciones, se mostrará información debajo de esto.        

 Paso 3 : cree una terminal en el archivo del conjunto de datos , ingrese

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

 Nota: Este comando corresponde al conjunto de datos del enlace que envié, si es otro conjunto de datos, recuerde cambiar el nombre del paquete de datos posterior

 

 Paso 4: abre una nueva terminal y abre la interfaz visual 

 Nota: No hay imagen en la interfaz visual en este momento, y los parámetros deben ajustarse

 Paso 5: Ajuste los parámetros, abra Agregar en la esquina inferior izquierda de la interfaz de visualización, seleccione mapa, abra la opción de mapa, seleccione /mapa en la opción Tema y aparecerá la imagen.

 

 Hacer este paso se considera una reproducción exitosa del algoritmo Gmapping.

6. El significado de cada entrada en el archivo de lanzamiento del algoritmo Gmapping

        En este sentido, ha habido muchos grandes dioses del CSDN que lo han introducido en detalle, así que no me equivocaré, aquí recomiendo un artículo que he leído, que es muy completo.

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

7. Apéndice: Explicación popular de los términos comunes de Gmapping

       En el proceso de aprendizaje, descubrí que muchas personas son algo vagas acerca de los conceptos de filtrado de partículas, remuestreo, diversidad de partículas y degradación de partículas. Por esta razón, encontré en los artículos que leí que alguien hizo una analogía para esto, que es fácil de entender. Compártalo con todos aquí.

7.1 Filtrado de partículas

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

Adjunte el enlace del artículo: https://www.guyuehome.com/14967

7.2 Degradación de partículas, remuestreo y diversidad de partículas

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

Adjunte el enlace del artículo: https://www.codetd.com/article/3003143

8. Epílogo

       Al ver esto, de hecho, introduje el algoritmo Gmapping de manera muy completa y casi sinteticé todos los artículos sobre Gmapping que he visto en Internet. En el futuro, reproduciré e introduciré otros algoritmos SLAM clásicos, incluidos visión, láser y fusión de visión y láser. Si los lectores interesados ​​piensan que mi escritura no es mala, hagan clic en tres enlaces (me gusta, marcador, seguir), gracias a todos.

Supongo que te gusta

Origin blog.csdn.net/m0_63647490/article/details/123130882
Recomendado
Clasificación