¿Qué es SLAM?
3 cosas que es necesario saber
SLAM (localización y mapeo simultáneos) es un método utilizado en vehículos autónomos que permite crear un mapa y localizar el vehículo en ese mapa al mismo tiempo. Los algoritmos de SLAM permiten que el vehículo cree mapas de entornos desconocidos. Los ingenieros utilizan la información del mapa para realizar tareas como la planificación de rutas y la evasión de obstáculos.
SLAM lleva siendo objeto de la investigación técnica desde hace muchos años. Pero, con las grandes mejoras en la velocidad de procesamiento informático y la disponibilidad de sensores de bajo coste tales como cámaras y telémetros láser, SLAM ahora se utiliza para aplicaciones prácticas en un número creciente de campos.
Para comprender por qué SLAM es importante, veamos algunas de sus ventajas y ejemplos de aplicación.
Ejemplos de SLAM
Tomemos un robot de limpieza doméstico. Sin SLAM, simplemente se desplazará por una habitación al azar y es posible que no logre limpiar toda la superficie del suelo. Además, este método gasta más energía y la batería se agotará más rápidamente. Por otro lado, con SLAM, los robots pueden utilizar información como el número de revoluciones de las ruedas y los datos de las cámaras y otros sensores de imágenes para determinar la cantidad de movimiento necesaria. Esto se conoce como localización. El robot también puede utilizar simultáneamente la cámara y otros sensores para crear un mapa de los obstáculos en su entorno y evitar limpiar la misma área dos veces. Esto se conoce como mapeo.

Ventajas de SLAM para robots de limpieza
SLAM es útil en muchas otras aplicaciones, como controlar la navegación de una flota de robots móviles para organizar estantes en un almacén, estacionar un automóvil autónomo en una plaza vacía o entregar un paquete dirigiendo un dron en un entorno desconocido. MATLAB y Simulink proporcionan algoritmos, funciones y herramientas de análisis de SLAM para desarrollar diversas aplicaciones. Puede implementar localización y mapeo simultáneos junto con otras tareas, como fusión de sensores, seguimiento de objetos, planificación de rutas y seguimiento de rutas.
En términos generales, SLAM utiliza dos tipos de componentes tecnológicos. El primer tipo es el procesamiento de señales de sensores, incluido el procesamiento frontal, que depende en gran medida de los sensores utilizados. El segundo tipo es la optimización de gráficos de posición, incluido el procesamiento final, que es independiente de los sensores.

Flujo de procesamiento de SLAM
Para comprender mejor el componente de procesamiento frontal, veamos dos métodos diferentes de SLAM: SLAM visual y SLAM de LiDAR.
SLAM visual
Como su nombre indica, SLAM visual (o vSLAM) utiliza imágenes capturadas mediante cámaras y otros sensores de imagen. SLAM visual puede utilizar cámaras simples (con objetivos de gran angular, ojo de pez y esféricas), cámaras de ojo compuesto (cámaras estereoscópicas y multicámaras) y cámaras RGB-D (cámaras TOF y de profundidad).
SLAM visual se puede implementar a bajo coste con cámaras relativamente económicas. Además, dado que las cámaras proporcionan un gran volumen de información, se pueden utilizar para detectar puntos de referencia (posiciones medidas previamente). La detección de puntos de referencia también se puede combinar con la optimización basada en gráficos, lo que aporta flexibilidad en la implementación de SLAM.
Hablamos de SLAM monocular cuando vSLAM utiliza una sola cámara como único sensor, que supone un desafío a la hora de definir la profundidad. Esto se puede resolver detectando marcadores de RA, tableros u otros objetos conocidos en la imagen para realizar la localización, o bien fusionando la información de la cámara con otro sensor, como unidades de medición inercial (IMU), que pueden medir magnitudes físicas tales como la velocidad y la orientación. Entre las tecnologías relacionadas con vSLAM se encuentran la estructura a partir del movimiento (SfM), la odometría visual y el ajuste de paquetes.
A grandes rasgos, los algoritmos de SLAM visual se pueden clasificar en dos categorías. Los métodos dispersos identifican correspondencias entre los puntos de características de las imágenes y utilizan algoritmos como PTAM y ORB-SLAM. Los métodos densos usan el brillo total de las imágenes y utilizan algoritmos como DTAM, LSD-SLAM, DSO y SVO.

Estructura a partir del movimiento.

Registro de nubes de puntos para SLAM RGB-D
SLAM de LiDAR
LiDAR, detección y distancia por luz, es un método que utiliza principalmente un sensor láser (o sensor de distancia).
En comparación con las cámaras, TOF y otros sensores, los láseres son significativamente más precisos y se utilizan para aplicaciones en vehículos que se desplazan a alta velocidad, como automóviles autónomos y drones. Los valores de salida de los sensores láser son generalmente datos de nubes de puntos en 2D (x, y) o 3D (x, y, z). La nube de puntos del sensor láser proporciona mediciones de distancia de alta precisión y es muy eficaz para generar mapas con SLAM. Por lo general, el movimiento se estima de manera secuencial identificando correspondencias entre las nubes de puntos. El movimiento calculado (distancia recorrida) se emplea para localizar el vehículo. Para la identificación de correspondencias de nubes de puntos de LiDAR, se utilizan algoritmos de registro tales como los algoritmos del punto iterativo más cercano (ICP) y de la transformada de distribuciones normales (NDT). Los mapas de nubes de puntos en 2D o 3D se pueden representar como un mapa de cuadrícula o un mapa de vóxeles.
Por otro lado, las nubes de puntos no son tan detalladas como las imágenes en cuanto a densidad, y no siempre proporcionan características suficientes para identificar correspondencias. Por ejemplo, en lugares con pocos obstáculos, es difícil alinear las nubes de puntos y se puede perder noción de la ubicación del vehículo. Además, la identificación de coincidencias de nubes de puntos suele requerir una alta carga de procesamiento, por lo que es necesario optimizar los procesos para mejorar la velocidad. Debido a estos desafíos, la localización de vehículos autónomos puede requerir la combinación de otros datos de medición, como odometría de ruedas, sistema global de navegación por satélite (GNSS) y datos de IMU. En el caso de aplicaciones para robots de almacén, se suele emplear SLAM de LiDAR en 2D, mientras que para VANT y conducción autónoma se suele utilizar SLAM con nubes de puntos de LiDAR en 3D.

SLAM con LiDAR en 2D

SLAM con LiDAR en 3D
Desafíos comunes de SLAM
Aunque SLAM se utiliza para algunas aplicaciones prácticas, varios desafíos técnicos impiden que se adopte con fines más generales. Cada uno tiene una contramedida que puede ayudar a superar el obstáculo.
1. Los errores de localización se acumulan y provocan una desviación significativa respecto de los valores reales
SLAM estima el movimiento secuencial, que incluye cierto margen de error. Con el tiempo, ese error se acumula y provoca una desviación significativa respecto de los valores reales. También puede provocar que los datos de mapas dejen de tener validez o sufran distorsiones, lo que dificulta las búsquedas posteriores. Tomemos como ejemplo el desplazamiento por un espacio en forma de cuadrado. A medida que aumenta la tasa de error, los puntos de inicio y fin del robot ya no coinciden. Esto se conoce como problema de cierre de bucle. Estos errores de estimación de posición son inevitables. Es importante detectar los cierres de bucle y determinar cómo corregir o neutralizar el error acumulado.

Ejemplo de generación de un gráfico de posición y minimización de errores.
Una contramedida consiste en recordar algunas características de un lugar visitado previamente como punto de referencia y minimizar el error de localización. Los gráficos de posición se generan para ayudar a corregir los errores. Al resolver la minimización de errores como un problema de optimización, se pueden generar datos de mapas más precisos. Este tipo de optimización en SLAM visual se denomina ajuste de paquetes.

Ejemplo de generación de un gráfico de posición y minimización de errores
2. La localización falla y se pierde la posición en el mapa
El mapeo de imágenes y nubes de puntos no tiene en cuenta las características del movimiento de un robot. En algunos casos, este enfoque puede generar estimaciones de posición discontinuas, como por ejemplo, un resultado de cálculo que muestra que un robot que se mueve a 1 m/s de repente avanzó 10 metros. Este tipo de error de localización se puede evitar empleando un algoritmo de recuperación o fusionando el modelo de movimiento con múltiples sensores para realizar cálculos basados en los datos del sensor.
Existen varios métodos para utilizar un modelo de movimiento con fusión de sensores. Un método frecuente consiste en usar el filtrado de Kalman para la localización. Dado que la mayoría de los robots de tracción diferencial y los vehículos de cuatro ruedas por lo general utilizan modelos de movimiento no lineal, se suelen utilizar filtros de Kalman extendidos y filtros de partículas (localización de Montecarlo). En algunos casos, también se pueden utilizar filtros de Bayes más flexibles, como los filtros de Kalman unscented. Algunos de los sensores más utilizados son los dispositivos de medición inercial, tales como IMU, AHRS (sistema de referencia de actitud y rumbo), INS (sistema de navegación inercial), sensores acelerómetros, sensores giroscópicos y sensores magnéticos. A menudo se colocan codificadores de ruedas en el vehículo para realizar odometría.
Cuando la localización falla, una contramedida para recuperarla es recordar un punto de referencia de un lugar visitado previamente como marco clave. Al buscar un punto de referencia, se aplica un proceso de extracción de características de tal manera que pueda realizar barridos a gran velocidad. Algunos de los métodos que se basan en características de imagen son la bolsa de características (BoF) y la bolsa de palabras visuales (BoVW). Más recientemente, se utiliza el Deep Learning para comparar las distancias respecto de las características.
3. Alto coste computacional del procesamiento de imágenes, el procesamiento de nubes de puntos y la optimización
El coste del cálculo es un problema cuando se implementa SLAM en el hardware de un vehículo. El cálculo generalmente se realiza en microprocesadores integrados compactos y de baja energía cuya capacidad de procesamiento es limitada. Para lograr una localización precisa, es esencial ejecutar el procesamiento de imágenes y la identificación de correspondencias de nubes de puntos a alta frecuencia. Además, los cálculos de optimización como el cierre de bucle son procesos de alta carga computacional. El desafío consiste en averiguar cómo ejecutar un procesamiento tan costoso desde el punto de vista computacional en microordenadores integrados.
Una contramedida es ejecutar diferentes procesos en paralelo. Procesos como la extracción de características, que es el preprocesamiento del proceso de identificación de correspondencias, son relativamente adecuados para la paralelización. El uso de SIMD (instrucción única, datos múltiples), CPU multinúcleo para procesamiento y GPU integradas pueden aumentar la velocidad aún más en algunos casos. Además, dado que la optimización de gráficos de posición se puede realizar a lo largo de un ciclo relativamente largo, reducir su prioridad y realizar este proceso a intervalos regulares también puede mejorar el rendimiento.
MATLAB® ofrece prestaciones para implementar aplicaciones de SLAM en el sistema de destino y abordar muchas de las contramedidas de los desafíos técnicos conocidos de SLAM.
Procesamiento de imágenes y señales de sensores para frontal de SLAM
- Procesamiento de datos de LiDAR en 2D y 3D e identificación de correspondencias de barridos con Lidar Toolbox™ y Navigation Toolbox™
- Procesamiento de nubes de puntos en 3D y registro de nubes de puntos
- Detección de cierre de bucle con bolsa de características y bolsa de palabras visuales
- Detección de objetos y segmentación semántica con Deep Learning
- Generación de mapas con nube de puntos de LiDAR en 3D con Automated Driving Toolbox™
- Fusión de sensores para localización y seguimiento multiobjeto con Sensor Fusion and Tracking Toolbox™
Gráficos de posición en 2D/3D para procesamiento final de SLAM
- Generación de gráficos de posición en 2D/3D con Navigation Toolbox
- Optimización de un gráfico de posición en función de nodos y restricciones de bordes
- Ajuste de paquetes con Computer Vision Toolbox
Cuadrículas de ocupación con la app SLAM Map Builder
- Importación de datos de LiDAR en 2D desde archivos rosbag o del área de trabajo de MATLAB y creación de cuadrículas de ocupación
- Búsqueda y modificación de cierres de bucle, y exportación del mapa como una cuadrícula de ocupación para planificación de rutas
Uso del mapa de salida de los algoritmos de SLAM para controles y planificación de rutas
- Implementación de algoritmos de planificación de rutas tales como RRT o Hybrid A* con Navigation Toolbox
- Envío de comandos de control para seguir la ruta planificada con evasión de obstáculos
Aceleración de procesos de alta carga computacional como los relacionados con el procesamiento de imágenes ejecutándolos en paralelo con Parallel Computing Toolbox™
Despliegue de nodos ROS independientes y comunicación con un robot con ROS habilitado desde MATLAB y Simulink® con ROS Toolbox
Despliegue de algoritmos de procesamiento de imágenes y navegación desarrollados en MATLAB y Simulink en microprocesadores integrados con MATLAB Coder™ y GPU Coder™
Más información sobre SLAM
SLAM de LiDAR
- Implementación de localización y mapeo simultáneos (SLAM) con MATLAB (2:23)
- SLAM con datos de barrido de LiDAR en 2D
- Creación de un mapa a partir de datos de LiDAR con SLAM
- Creación de mapas y localización con coincidencia de segmentos
- SLAM de LiDAR aéreo con descriptores FPFH
- Mapeo para robots móviles y VTNT (10:01)
SLAM con puntos de referencia