SLAM (localización y mapeo simultáneos)

Introducción a SLAM

Cómo funciona, tipos de algoritmos de SLAM y primeros pasos

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 el mapa al mismo tiempo. Los algoritmos de SLAM permiten que el vehículo cree mapas de entornos desconocidos. Los profesionales de ingeniería utilizan la información del mapa para realizar tareas de planificación de rutas y evasión de obstáculos.

Importancia de SLAM

SLAM ha sido objeto de investigación técnica durante muchos años. Con los grandes avances en velocidad de procesamiento informático y la disponibilidad de sensores de bajo coste, como cámaras y telémetros láser, los algoritmos de SLAM se utilizan en aplicaciones prácticas en una gran variedad 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 aspirador doméstico. Sin SLAM, simplemente se desplazará por un recinto al azar y tal vez no logre aspirar toda la superficie del suelo. Además, este método utiliza tanta energía que la batería se agota rápidamente. Por otro lado, los robots con un algoritmo de SLAM pueden utilizar información sobre el número de revoluciones de ruedas, y datos de cámaras y otros sensores de captura 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 aspirar la misma área dos veces. Esto se conoce como mapeo.

Ventajas de SLAM para robots aspiradores

Ventajas de SLAM para robots aspiradores

Los algoritmos de SLAM son útiles en muchas otras aplicaciones, tales como controlar la navegación de una flota de robots móviles para organizar estanterías en un almacén, estacionar un automóvil autónomo en una plaza vacía, o entregar un paquete por dron en un entorno desconocido. MATLAB® and Simulink® ofrecen 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, tales como fusión de datos de sensores, seguimiento de objetos, planificación de rutas y seguimiento de rutas.

Cómo funciona SLAM

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 grafos de pose, incluido el procesamiento posterior, que es independiente de los sensores.

Flujo de trabajo de SLAM que incluye los componentes básicos de procesamiento frontal y posterior.

Flujo de procesamiento de SLAM

Métodos de SLAM

Para obtener más información sobre el componente de procesamiento frontal, explore diferentes métodos de SLAM: SLAM visual, SLAM de LiDAR y SLAM multisensor.

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 (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 grafos, lo que aporta flexibilidad en la implementación de SLAM.

SLAM monocular es un tipo de algoritmo de SLAM en el que vSLAM utiliza una sola cámara como único sensor, lo que dificulta definir la profundidad. Esto se puede resolver detectando marcadores de RA, tableros u otros objetos reconocidos en la imagen para realizar la localización, o bien fusionando los datos de cámara con otro sensor, como unidades de medición inercial (IMU), que pueden medir magnitudes físicas 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 emplean el brillo total de las imágenes y utilizan algoritmos como DTAM, LSD-SLAM, DSO y SVO.

SLAM visual monocular con conjunto de datos TUM RGB-D.

vSLAM monocular

Reconstrucción densa con SLAM visual estéreo.

vSLAM estéreo

SLAM visual RGB-D con conjunto de datos TUM RGB-D.

vSLAM 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, el láser es mucho más preciso, y se utiliza en aplicaciones de vehículos de alta velocidad, como automóviles autónomos y drones. Los valores de salida de los sensores láser son generalmente datos de nube de puntos en 2D (x, y) o 3D (x, y, z). La nube de puntos de un sensor láser proporciona mediciones de distancias de alta precisión, y es efectiva para generar mapas con algoritmos de SLAM. El movimiento se estima registrando las nubes de puntos en secuencia. El movimiento calculado (distancia recorrida) se emplea para localizar el vehículo. Para estimar la transformación relativa entre las nubes de puntos, puede utilizar algoritmos de registro tales como el punto iterativo más cercano (ICP) y la transformada de distribuciones normales (NDT). Si lo prefiere, puede aplicar enfoques basados en características, como odometría y mapeo de LiDAR (LOAM) o registro global rápido (FGR), basado en características FPFH. Los mapas de nubes de puntos en 2D o 3D se pueden representar como mapas de cuadrícula o mapas de vóxeles.

Debido a estos desafíos, la localización de vehículos autónomos puede requerir la combinación de otras mediciones, tales como odometría de ruedas, un sistema global de navegación por satélite (GNSS) y datos de IMU. En aplicaciones de robots de almacén, es común emplear SLAM de LiDAR en 2D, mientras que para UAV y conducción autónoma se suele recurrir a SLAM con nubes de puntos en 3D.

Mapeo de un área interior con SLAM de LiDAR en 2D y grafo de factores.

SLAM con LiDAR en 2D

Creación de un mapa a partir de datos de LiDAR en 3D con SLAM.

SLAM con LiDAR en 3D

SLAM multisensor

SLAM multisensor es un tipo de algoritmo de SLAM que utiliza diversos sensores, como cámaras, IMU (unidades de medición inercial), GPS, LiDAR y radar, entre otros, para mejorar la precisión y solidez de los algoritmos de SLAM. Dado que aprovecha las ventajas y supera las limitaciones de diferentes sensores, el SLAM multisensor logra alcanzar un rendimiento superior. Si bien las cámaras proporcionan datos visuales detallados, son menos eficaces en situaciones de poca luz o alta velocidad. Por su parte, LiDAR funciona de forma sistemática en diversas condiciones de iluminación, pero puede tener dificultades con ciertas texturas. SLAM multisensor ofrece una solución más fiable que un sensor único, ya que integra datos de diversas fuentes. El grafo de factores es un marco modular y adaptable que integra varios tipos de sensores, como cámaras, IMU y GPS. Además, el grafo de factores puede admitir entradas de sensores personalizadas (tales como LiDAR y odometría) convirtiendo los datos en factores de pose. Esta capacidad permite diversas configuraciones de SLAM multisensor, como SLAM visual-inercial monocular y SLAM LiDAR-IMU.

Desafíos comunes de SLAM

Aunque se emplean algoritmos de SLAM en algunas aplicaciones prácticas, varios desafíos técnicos impiden que se adopte para usos 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

Los algoritmos de SLAM estiman movimiento en secuencia, lo 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 se deterioren o distorsionen, lo que dificulta las búsquedas posteriores. Tomemos como ejemplo el desplazamiento por un espacio cuadrado. A medida que el error se acumula, los puntos de inicio y fin dejan de coincidir. Esto se conoce como problema de cierre de bucle. Estos errores de estimación de pose son inevitables. Es importante detectar los cierres de bucle y determinar cómo corregir o anular el error acumulado.

Imposibilidad de volver al punto de partida (mapa distorsionado)

Ejemplo de generación de un grafo de pose y reducción de errores.

Para SLAM multisensor, es vital calibrar los sensores con precisión. Las discrepancias o errores de calibración pueden provocar inexactitudes en la fusión de datos de sensores y comprometer la funcionalidad general del sistema. La optimización del grafo de factores puede ayudar aún más en el proceso de calibración, incluida la alineación de sistemas de cámara-IMU.

Una posible contramedida es recordar algunas características de un lugar visitado previamente como punto de referencia y reducir el error de localización. Los grafos de pose se generan para ayudar a corregir errores. Resolver la reducción de errores como si fuera un problema de optimización ayuda a 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 grafo de pose y reducción de errores.

Ejemplo de generación de un grafo de pose y reducció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 avanza 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 datos de sensores. Un método común es usar el filtrado de Kalman para la localización. Dado que la mayoría de los robots y los vehículos de cuatro ruedas de transmisión diferencial generalmente utilizan modelos de movimiento no lineal, se suelen emplear filtros de Kalman extendidos y filtros de partículas (localización de Montecarlo). En algunos casos, también se pueden usar filtros de Bayes más flexibles, como filtros de Kalman unscented. Entre los sensores más utilizados se encuentran los dispositivos de medición inercial, como IMU, AHRS (sistema de referencia de actitud y rumbo), INS (sistema de navegación inercial), y sensores acelerómetros, giroscópicos y magnéticos. A menudo se colocan codificadores de ruedas en vehículos para realizar odometría.

Cuando la localización falla, una contramedida para recuperarla es recordar un punto de referencia como un marco clave de un lugar visitado previamente. Cuando se busca un punto de referencia, se aplica un proceso de extracción de características de modo que se pueda realizar escaneo 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 ha utilizado Deep Learning para comparar las distancias respecto de las características.

3. Alta carga computacional de optimización, y procesamiento de imágenes y nubes de puntos

La carga computacional es problemática cuando se implementan algoritmos de SLAM en hardware de vehículos. 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 cómo ejecutar un procesamiento de alta carga 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 realizar 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 grafos de pose 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.

SLAM con MATLAB

Procesamiento de imágenes y señales de sensores para procesamiento frontal de SLAM:

Grafos de pose en 2D/3D para procesamiento posterior de SLAM:

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 cuadrícula de ocupación para planificación de rutas

Despliegue de nodos ROS independientes y comunicación de robot con ROS habilitado desde MATLAB y Simulink® utilizando ROS Toolbox.

Despliegue de algoritmos de navegación y de procesamiento de imágenes desarrollados en MATLAB y Simulink en microprocesadores integrados con MATLAB Coder™ y GPU Coder™.