# SLAM visual

El mapeo y localización simultáneos o SLAM es un problema general que permite a un robot móvil generar un mapa del entorno por medio de sensores, y ubicarse en él; y a un celular ubicarse en su entorno y producir imágenes de realidad aumentada. SLAM visual es una variante especializada de SLAM, en la que el sensor es una cámara o un conjunto de cámaras, y la comprensión del entorno requiere técnicas de visión artificial.

## Término

SLAM visual es una traducción aproximada del inglés visual SLAM donde el acrónimo SLAM (Simultaneous Localization And Mapping) ha cobrado significancia universal convirtiéndose en un nombre propio, de manera que se lo adopta como anglicismo y se lo prefiere frente a su versión traducida MYLS (Mapeo Y Localización Simultáneos) que nadie utiliza.
El término visual es una metonimia que se refiere al análisis de imágenes. Es una metonimia relativamente nueva, en las últimas dos décadas del siglo XX se usaba el término óptico (como en reconocimiento óptico de caracteres) para el mismo fin.
El acrónimo SLAM es un préstamo de la tecnología de la que deriva (Mapeo Y Localización Simultáneos), aunque en rigor en SLAM visual el mapeo y la localización no son simultáneos: son paralelos, no están sincronizados y sus cadencias son muy dispares. Desde los inicios en 2007 hubo intentos por imponer un acrónimo alternativo más preciso: PTAM, que significa mapeo y rastreo en paralelo, pero no logró imponerse. Se concluye que SLAM visual es un nombre propio apartado de su significado literal.

### Otros términos

En la literatura, especialmente en papers, se encuentran denominaciones alternativas en inglés, algunas ya en desuso:
* visual SLAM
* vSLAM
* monocular SLAM
* PTAM

## Historia
### 2007

El proyecto iniciador de SLAM visual fue el publicado en el paper MonoSLAM en 2007 de Andrew Davison, que describió el primer algoritmo capaz de realizar SLAM en tiempo real con las imágenes de una cámara. MonoSLAM es un acrónimo de monocular SLAM, que hace hincapié en el uso de una cámara única (monocular, contrario a estereoscopía) como único sensor. La PC requería GPU , la aplicación funcionaba como prueba de concepto pero era muy limitada para usos prácticos, pues rápidamente se quedaba sin memoria por lo que sólo podía mapear pequeñas habitaciones. Con posterioridad a la publicación y debido al creciente interés, Davidson compartió el código que se podía descargar desde su página.
En paralelo a MonoSLAM se desarrolló PTAM, publicado el mismo año apenas unos meses más tarde que MonoSLAM. Notablemente las implementaciones modernas de SLAM visual adoptan una estructura similar a la introducida por PTAM, y no emplean casi nada de MonoSLAM. Y aun así, MonoSLAM se hizo más famoso por el solo hecho de haber publicado primero. Esta forma de encarar el problema de SLAM visual recibió años más tarde el nombre de SLAM visual indirecto.

### 2010

El mismo laboratorio creador de MonoSLAM presentó DTAM: Dense Tracking and Mapping in Real-Time, el primer sistema directo que no se concentra en puntos sino que utiliza la imagen completa, denominando por oposición SLAM visual indirecto al resto de los sistemas.

### 2014 a 2017

En 2014 la Universidad Técnica de Múnich (TUM) publicó LSD-SLAM, Large Scale Direct SLAM, iniciando la categoría SLAM visual semidirecto y marcando un hito histórico: fue el primer sistema capaz de ejecutarse en tiempo real en una PC sin GPU y de los primeros en publicar su código fuente como código abierto, lo que facilitó la instalación y prueba a miles de aficionados que popularizaron las posibilidades de SLAM visual. A partir de LSD-SLAM los sistemas de SLAM visual se abocarían al uso en tiempo real sin GPU en una PC y a publicar su código fuente abierto para conseguir el apoyo de la comunidad en su depuración y mejora.
ORB-SLAM (2015) y ORB-SLAM2 (2017) publicados como código abierto y en sendos papers de Raúl Mur de la Universidad de Zaragoza marcaron el estado del arte. Con posterioridad muchos sistemas de SLAM visual se basarían en ORB-SLAM2.
En 2017 el mismo autor publicó Visual-inertial SLAM, extendiendo ORB-SLAM2, para combinar cámara con IMU, uno de los primeros sistemas de la nueva categoría SLAM visual e inercial, y sin duda el más influyente.

### Estado del arte en 2021

En 2017, a 10 años del proyecto iniciador MonoSLAM, el problema de SLAM visual se consideró resuelto. La cantidad de publicaciones y sistemas continúa en aumento, y se dedican refinamientos y mejoras incrementales por un lado, y a la exploración de un campo nuevo con el uso de deep learning.
ORB-SLAM2 y LSD-SLAM representan el estado del arte y son los grandes pilares de las categorías de sistemas indirecto y semidirecto . ORB-SLAM2 parece haber presentado mejor base para refinamientos y desarrollo de características superiores, y se usa como base para mejoras paulatinas, como lo demuestran ORB-SLAM3 (2021), SVDL (2019) y OpenVSLAM (2019), tres proyectos destacados entre muchos otros.

## Sensores

Hay esencialmente 3 tipos de cámaras usadas en SLAM visual:
* monocular: una sola cámara, tal como fue formulado el problema original
* cámara estéreo: dos cámaras de pose conocida, típicamente paralelas y alineadas
* cámara RGB-D: cámaras de profundidad, relevan un modelo 3D pero con baja resolución
Algunos sistemas complementan la cámara con un acelerómetro 3D, entrando en la categoría SLAM visual e inercial.
Además se usan 3 tipos de lente:
* modelo de cámara estenopeica, colineal (normal)
* gran angular
* omnidireccional
Los sistemas actuales suelen ser compatibles con todos los sensores y lentes y con el acelerómetro si está presente.

## Aplicaciones

Si bien esta tecnología ha madurado en laboratorio, todavía tiene un largo camino para llegar a productos. Las principales aplicaciones son:
* Navegación visual para drones y pequeños vehículos autónomos
* Realidad aumentada sin marcadores

### Características y limitantes de la tecnología

SLAM visual se originó con el objetivo de aplicarse en realidad aumentada, y las capacidades de los sistemas se demostraban sobre datasets de videos de ambientes pequeños y cerrados. En la medida que la tecnología fue madurando, sistemas más potentes que los originales comenzaron a demostrar sus capacidades sobre datasets de videos diseñados para odometría visual, con videos de recorridos largos en ámbitos abiertos, tales como caminatas por campus y circuitos urbanos en automóvil, lo que inició la exploración del uso de estos sistemas en navegación autónoma.
Los sistemas SLAM visuales tienen fuertes limitantes: requieren una escena visualmente estática, lo que implica que no tenga partes móviles ni cambios de iluminación. Las partes móviles interfieren con el proceso de mapeo. Los cambios de iluminación hacen irreconocibles los elementos mapeados. Los sistemas más modernos son robustos, diseñados para tolerar una porción de elementos visuales en movimiento siempre que no dominen la vista, y algún cambio de iluminación. Como consecuencia estos sistemas no son compatibles con estos tipos de escena:
* escenas naturales, con pasto que crece y cambia su aspecto a lo largo de los días, y árboles cuyas ramas se mueven por el viento
* ambientes con muebles que cambiarán de posición
* no reconoce la misma escena de día y de noche
Por lo expuesto, estos sistemas funcionan mejor en ambientes artificiales (construidos por el hombre), usualmente en lugares cerrados con iluminación artificial. En cuanto a navegación autónoma se distingue su uso en ámbitos privados y en la vía pública. En ámbitos privados pequeños (casas y oficinas) o grandes (countries y establecimientos industriales) SLAM visual se tiene una aplicación experimental exitosa con drones y para robots móviles (AGV). En vía pública, más específicamente en automotores autónomos, SLAM visual puede incorporarse como un sistema accesorio, pero no se lo considera como sistema de navegación principal. Estos vehículos tienden a emplear otros sistemas de SLAM más confiables, pero que emplean sensores muchos más caros que las cámaras.

## Categorías

A medida que se avanza en la investigación y desarrollo de SLAM visual, el problema se va especializando paulatinamente y surgen categorías no excluyentes que agrupan los diferentes abordajes.
* SLAM
** SLAM visual
*** SLAM visual directo
**** SLAM visual semidirecto
*** SLAM visual indirecto
*** SLAM visual e inercial
*** SLAM visual semántico
*** Spatial AI: Inteligencia artificial espacial
La taxonomía de SLAM visual está en permanente evolución y sus denominaciones cambiarán con el tiempo. Acrónimos y categorías suele ser sugeridos por los propios desarrolladores de estos sistemas, con distinto grado de adopción de parte de la comunidad involucrada. El uso de inteligencia artificial en SLAM visual abrió un campo de intensa investigación. El creador de SLAM visual Andrew Davison bautizó este campo como Spatial AI, pero la comunidad no ha adoptado esta denominación, aunque tampoco hay alternativas sugeridas. Con el tiempo se irán decantando ésta y otras categorías.

### SLAM visual indirecto

A esta categoría pertenecen los proyectos fundacionales de SLAM visual, y continúa vigente. Los sistemas indirectos se denominan así porque entre la obtención de la imagen de la cámara y su integración con el mapa intercalan una etapa de detección de puntos singulares (también llamados keypoints o características). Estos puntos son luego incorporados al mapa. Un mapa de un sistema indirecto es una nube de puntos.
Por operar sobre puntos, esta categoría también recibe el nombre de SLAM visual de partículas., o también basado en características.

### SLAM visual directo

Esta categoría corresponde a una tecnología más reciente que compite con la anterior. Emplea la imagen completa para producir un mapa de profundidad que se integra al mapa total del sistema. Su nombre proviene del hecho de evitar la detección de puntos singulares e incorporar al mapa directamente los píxeles de la imagen. Su principal ventaja reside en el hecho de aprovechar toda la información de la imagen. Su mayor desventaja es su lentitud, pues debe operar con cada uno de los píxeles.
LSD-SLAM introdujo con éxito el abordaje semidirecto, que reduce enormemente la cantidad de píxeles a considerar, convirtiéndose en el primer sistema SLAM visual directo que se ejecuta en tiempo real. Los sistemas semidirectos se concentran solamente en las zonas con alto gradiente de intensidad, que corresponden a los bordes de los elementos visuales presentes en la imagen. El argumento en favor de esta técnica sostiene que la mayor parte de la información de la imagen se encuentra en estos bordes, mientras que áreas lisas y sin texturas no contienen información relevante.

### SLAM visual e inercial

A esta categoría pertenecen los sistemas que agregan a la cámara un sensor inercial (típicamente 6D: un acelerómetro 3D y un giróscopo 3D). Estos sensores son muy baratos y proporcionan información muy relevante al sistema. Entre otras cosas brindan métrica (los sistemas monoculares no tienen noción de la escala del mapa en términos reales) y referencia vertical (los acelerómetros distinguen el vector gravedad, que marca la vertical). Si además el sensor cuenta con magnetómetro, usado como brújula completa la orientación del mapa en términos reales.

### SLAM visual semántico

La semántica es una capa de nivel superior que brinda significado a los elementos visuales. Un sistema de SLAM visual se beneficia de poder identificar objetos como puertas, ventanas y muebles, que le permiten comprender aspectos complementarios de la escena que observan y del mapa que están relevando.
La semántica usualmente se obtiene con redes neuronales convolucionales, lo que suele enmarcar esta categoría dentro de Inteligencia artificial espacial,

### Inteligencia artificial espacial

Andrew Davison bautizó Spatial AI a una nueva categoría que intenta resolver el problema de SLAM visual con aprendizaje profundo. Mientras que en 2021 los abordajes directo e indirecto se consideran maduros, el uso de aprendizaje profundo está en pleno auge, y todavía no ha alcanzado la velocidad de procesamiento ni la precisión de los otros. Sin embargo promete contribuir con características avanzadas que los sistemas clásicos no pueden tener.
Esta categoría se encuentra en desarrollo intenso y se está dividiendo en varias ramas especializadas.
En rigor, la naturaleza de las redes convolucionales utilizadas impiden categorizar estos sistemas en directos o indirectos.

## Partes de un sistema de SLAM visual

SLAM visual es un problema complejo, en el sentido que consta de varias partes de tecnología diversa. Los sistemas vigentes incorporan muchas de estas partes, pero no todas necesariamente:
* Inicialización
* Mapeo y localización en paralelo
* Localización sin mapeo
* Relocalización
* Cierre de bucle
* Fusión de mapas
* Sacrificio de elementos redundantes (map culling)

### Tecnologías involucradas

SLAM visual es un problema extremadamente complejo, que requiere el uso experto de una larga serie de tecnologías diversas que combinan geometría, informática, visión artificial y optimización numérica. Éste es un resumen no exhaustivo:
* Homografía para inicialización
* Coordenadas homogéneas
* Geometría proyectiva
* Triangulación de puntos para generar el mapa
* Descomposición en valores singulares para minimizar el error cuadrático medio
* Geometría epipolar para inicialización y reducir el dominio de macheo para triangulación
* Perspectiva desde N puntos (PnP) para localización
* Bundle adjustment
* Optimización de grafos, para organizar los elementos del mapa y cerrar bucles
* Geometría en SE(3) y Sim(3)
* Detección, descripción y macheo de puntos singulares
* Pirámides
* BoW (bags of words)
* Modelo de distorsión de lente
* Detección de bordes
* Redes convolucionales
* Segmentación semántica
* Visión artificial

### Tecnologías emparentadas

SLAM visual guarda estrecha relación con otras tecnologías similares pero con propósito diverso, entre ellas:
* Odometría visual
* Structure from motion

## Sistemas de SLAM visual

Alrededor de 2014 se hizo costumbre acompañar las publicaciones de papers de SLAM visual, con código abierto disponible usualmente en GitHub y para Linux. Es inviable confeccionar una lista exhaustiva de todos los sistemas de SLAM visual, a continuación se listan los más destacados.
| Sistema | Año | Sitio web | Método | Cámaras y sensores | Código | Video |
| MonoSLAM | 2007 | | indirecto | monocular | doc.ic.ac.uk MatLab | |
| PTAM | 2007 | robots.ox.ac.uk | indirecto | monocular | github.com | youtube.com |
| PTAMM | 2008 | robots.ox.ac.uk | indirecto | monocular | | youtube.com |
| DTAM | 2011 | | directo | monocular | | |
| LSD-SLAM | 2014 | vision.in.tum.de | semidirecto | monocular | github.com Linux | youtube.com |
| LSD-SLAM stereo | 2015 | vision.in.tum.de | semidirecto | estéreo | | youtube.com |
| LSD-SLAM omnidireccional | 2015 | vision.in.tum.de | semidirecto | gran angular omnidireccional | | youtube.com |
| ORB-SLAM | 2015 | webdiis.unizar.es | indirecto | monocular | github.com Linux | |
| ORB-SLAM2 | 2017 | webdiis.unizar.es | indirecto | monocular estéreo RGB-D | github.com Linux | youtube.com |
| Visual-Inertial Monocular SLAM With Map Reuse | 2017 | | indirecto | monocular IMU | | youtube.com |
| OpenVSLAM | 2019 | readthedocs.io Archivado el 3 de enero de 2021 en Wayback Machine. | Indirecto | monocular gran angular omnidireccional estéreo RGB-D IMU | github.com Linux Windows Mac | youtube.com |
| SVDL | 2019 | | indirecto semidirecto | | github.com | youtube.com |
| Visual-Inertial Mapping with Non-Linear Factor Recovery | 2020 | vision.in.tum.de | indirecto | monocular IMU | github.com | youtube.com |
| ORB-SLAM3 | 2021 | | Indirecto | monocular gran angular omnidireccional estéreo RGB-D IMU | github.com Linux | youtube.com |
Los primeros sistemas de SLAM visual se hicieron sobre MatLab. Al poco tiempo buscando eficiencia computacional los sistemas se comenzaron a desarrollar en C++, el lenguaje que domina la escena en la actualidad. La gran mayoría de los desarrollos se realizan sobre Linux, el código abierto se comparte para ser compilado. Con la permanente evolución de WSL nuevos sistemas de SLAM visual comienzan a incluir instrucciones para instalación en Windows.
Muchos de estos sistemas funcionan en tiempo real en una PC sin necesidad de acelerar con GPU, pero hasta 2021 ninguno se logró ejecutar en tiempo real en un celular. Algunos, como el caso de LSD-SLAM, presentan una versión limitada para celular, típicamente con capacidad de localización pero no de mapeo.