Escrito por GuYueHome
01 ¿Qué es SLAM?
El nombre completo de SLAM significa Localización y Mapeo Simultáneos, que se traduce como localización y construcción de mapas instantánea. Hay dos palabras clave: localización y construcción de mapas, lo que significa que el robot determinará su posición en un entorno desconocido mientras construye un mapa y finalmente generará un mapa como este.
En resumen, el proceso de construcción de mapas SLAM consiste en medir la distancia entre el robot y el entorno circundante mediante sensores de profundidad para completar la construcción del mapa. Al mismo tiempo, el robot verifica la consistencia del entorno y detecta si se mueve hacia el punto donde se construyó el mapa, completando así el bucle cerrado.
El algoritmo SLAM más utilizado en ROS es Gmapping, un algoritmo SLAM común de código abierto basado en el marco SLAM filtrado, que a su vez se basa en el algoritmo de filtrado de partículas RBpf. Es decir, los procesos de localización y construcción del mapa están separados, y la localización se realiza primero y luego se construye el mapa. Si le interesa el algoritmo Gmapping, puede consultar el artículo sobre el algoritmo en: https://openslam-org.github.io/gmapping.html
02 Control de movimiento del robot móvil LIMO
2.1 Robot multimodal LIMO
Nuestros tipos de movimientos de robot móvil comunes son generalmente diferencial de cuatro ruedas, dirección Ackermann, diferencial de orugas, movimiento omnidireccional, etc., pero como dice el refrán, los adultos no eligen, Songling Robotics LIMO uno para satisfacer todas sus necesidades, cuatro tipos de movimiento a voluntad cualquier interruptor.
En el futuro, nos dedicaremos a probar tipos de movimiento multimodal. Hoy nos centramos en la implementación de las funciones de la aplicación SLAM en el estado de movimiento del robot LIMO con velocidad diferencial en las cuatro ruedas.
2.2 Conexión remota a LIMO
Puedes descargar NoMachine - Escritorio Remoto Gratuito para Todos directamente desde el sitio web oficial de LIMO: https: https://www.nomachine.com/
Una vez instalado el software, el ordenador y el carrito se conectan a la misma red wifi para que puedas conectarte al carrito de forma remota.
2.3 Descargar y compilar el código
El código del robot LIMO se actualiza constantemente, como se puede ver en la página principal de Github. Para asegurarnos de usar el código más reciente, usamos el siguiente comando para descargar el paquete de código al espacio de trabajo del sistema integrado de LIMO, reemplazando así el código original.
Luego, usa el comando catkin_make para compilar el espacio. Esta es una operación habitual en ROS, así que si no la conoces, puedes leer "21 Lecciones sobre cómo empezar con ROS" de Guyue Jun.
2.4 Hacer que el carrito funcione
Para asegurarnos de que la funcionalidad básica del robot esté lista para funcionar, probemos el control de teclado más básico para poner en movimiento el carro.
Inicie una terminal para activar el chasis y los sensores del carro.
Una vez que el chasis se haya iniciado correctamente, se suscribirá al tema cmd_vel, como si controlara una pequeña tortuga marina, e iniciará el siguiente nodo de control del teclado; puede controlar el movimiento suave de LIMO a través del teclado.
03 Análisis de configuración de la función SLAM de Gmapping
3.1 Paquete de Gmapping
Antes de usar el paquete Gmapping en ROS, debe instalarlo usando el siguiente comando, aquí está la versión Melodic, si está usando otras versiones de ROS, reemplace el nombre de la versión en el comando.
El algoritmo SLAM no es simple, pero Gmapping es un "bloque de construcción" que ha sido muy bien empaquetado, y podemos encontrar la interfaz en la wiki de ROS. La descripción se muestra en la siguiente figura.
Como se puede observar, Gmapping debe suscribirse al tema de transformación de articulaciones del robot /tf y al tema de datos de escaneo LiDAR /scan, y luego publicar el tema de mapas ráster /map.
En cuanto a /tf, que se divide en dos partes, las transformaciones TF en el paquete de características de Gmapping se muestran en la siguiente figura.
Así, podemos determinar que las condiciones necesarias para el algoritmo Gmapping (/tf, /odom, /scan) estarán listas para publicarse/mapearse mediante el algoritmo.
Tras el inicio del chasis del robot LIMO anterior, estas condiciones básicas se publicaron o actualizaron con normalidad en el nodo subyacente, por lo que nos centraremos en configurar el nodo de la función Gmapping mediante un archivo de lanzamiento.
3.2 Configuración de la función SLAM
Cree un paquete de características llamado limo_slam en el archivo src del espacio de trabajo. Allí se creará otra carpeta de inicio, donde se guardará el archivo de inicio sobre la configuración de inicio de Gmapping.
Los detalles del archivo de inicio gmapping.launch son los siguientes. Si utiliza otros robots, deberá modificar las partes comentadas en el siguiente archivo según su situación.
Si está familiarizado con el algoritmo SLAM, puede que estos parámetros no le resulten nuevos, pero si no lo conoce, no se preocupe, ya que tienen valores predeterminados y, en la mayoría de los casos, puede usar estos valores o la configuración de robots similares en ROS.
Dado que el marco del algoritmo Gmapping se muestra a continuación, los principales parámetros que debemos modificar son odom (sistema de coordenadas del odómetro, obligatorio), scan (tema LIDAR, obligatorio), base_footprint_frame (sistema de coordenadas de la base del robot, obligatorio) e imu_data (tema IMU, opcional). Los nombres y valores de estos parámetros deben coincidir con los nombres y valores de los temas publicados en el controlador del chasis del robot limo_start. De lo contrario, Gmapping no recibe estos parámetros y no puede ejecutar SALM.
04 Resultados de la operación SLAM de Gmapping
Tras realizar los preparativos pertinentes, podemos usar el LiDAR para SLAM.
Primero, se compila el código en el espacio de trabajo mediante catkin_make y, a continuación, se inicia una terminal por separado para ejecutar los siguientes comandos.
Para ver el efecto del SLAM dinámico, también necesitamos utilizar la pantalla visual Rviz abriendo una terminal e ingresando el siguiente comando.
Luego haga clic en el botón AGREGAR para agregar las configuraciones requeridas, como Mapa, LaserScan, TF, etc., suscríbase a los datos del tema correspondiente, por ejemplo, al agregar Mapa, necesitamos cambiar el Tema en Mapa a /map.
Luego, podemos controlar el movimiento lento del carro para SLAM mediante el teclado. Si movemos el carro después de iniciar SLAM, debemos repetirlo, ya que es probable que la TF del carro sea incorrecta.
Preste atención a controlar la velocidad de movimiento del automóvil, si la velocidad es demasiado rápida al girar, es fácil que aparezca el fenómeno del cambio de mapa.
Después de configurar Rviz, también podemos guardar la configuración actual en el paquete de características y luego agregar la siguiente configuración de nodos y parámetros de Rviz al archivo de inicio de Gmapping para evitar la necesidad de crear una nueva terminal cada vez para ingresar el comando rviz y volver a agregar la pantalla en Rviz.
También podemos usar el comando rqt_graph para ver las relaciones entre los nodos:
Al final de SLAM, se requiere el siguiente comando para guardar el mapa:
Debido al espacio limitado, construimos el mapa como se muestra a continuación.
En este punto, hemos implementado SLAM en un robot móvil LIMO usando el algoritmo Gmapping. Con un enfoque similar, también podemos implementar otros paquetes de funciones SLAM, como hector, cartographer y rtabmap, entre otros. Cada algoritmo tiene sus propias ventajas y desventajas, por lo que puede elegir el paquete de algoritmos adecuado según sus necesidades.