Capa de Percepción: SLAM¶
La capa de percepción basada en SLAM es la responsable de construir un mapa métrico del entorno y estimar en tiempo real la posición del robot sobre ese mapa. En este proyecto se utiliza una estrategia 2D LiDAR SLAM orientada a interiores domésticos y pensada para ejecutarse en una Raspberry Pi con integración directa con ROS2 y Nav2.
Objetivo dentro del proyecto
Esta capa transforma las medidas del LiDAR en tres salidas fundamentales para navegación: mapa de ocupación, localización global y árbol de transformaciones tf2 (map → odom → base_link).
1. Fundamentos del SLAM¶
SLAM (Simultaneous Localization and Mapping) resuelve de forma simultánea dos problemas acoplados:
- Localización: estimar el estado del robot
xa lo largo del tiempo. - Mapeado: construir el mapa
mdel entorno a partir de las observacioneszy del movimiento aplicadou.
De forma formal, el problema consiste en estimar la probabilidad conjunta:
Donde:
x₁:ₜes la trayectoria del robotmes el mapaz₁:ₜson las observaciones de sensoresu₁:ₜson los comandos o incrementos de movimiento
El reto principal es cíclico:
- para localizarse bien hace falta un mapa fiable
- para construir bien el mapa hace falta conocer la posición del robot
Cierre de bucle
El concepto más importante en una implementación práctica es el loop closure o cierre de bucle: detectar que el robot ha vuelto a una zona ya visitada para corregir el drift acumulado y reajustar el mapa global.
Enfoques modernos¶
Los enfoques más habituales en robótica móvil son:
- Filtros de partículas como FastSLAM
- EKF-SLAM basado en filtro de Kalman extendido
- Optimización gráfica mediante pose graphs
En este TFM interesa especialmente el tercer grupo, porque los sistemas modernos orientados a ROS2 y navegación suelen combinar:
- estimación local rápida para mantener la pose en tiempo real
- optimización global cuando aparecen cierres de bucle
2. Tipos de SLAM y comparativa¶
La elección del tipo de SLAM depende del sensor principal, del entorno y del presupuesto computacional.
| Tipo | Sensores principales | Referencias | Ventajas | Limitaciones | Adecuación al proyecto |
|---|---|---|---|---|---|
| Visual SLAM (VSLAM) | Cámaras monoculares o estéreo | ORB-SLAM3, RTAB-Map | Hardware barato, mucha información visual | Sensible a iluminación, reflejos y falta de textura | Media |
| LiDAR SLAM | LiDAR 2D/3D por ToF o triangulación | Cartographer, LOAM, FAST-LIO2 | Medida métrica precisa, robusto a cambios de luz | Sensor más específico y coste mayor que una cámara | Muy alta |
| Visual-Inertial SLAM | Cámara + IMU | VINS-Mono, ORB-SLAM3-VI | Mejor respuesta ante movimientos rápidos | Mayor complejidad de calibración y sincronización | Media |
| RGB-D SLAM | Cámara RGB-D | RTAB-Map, soluciones con RealSense | Información geométrica y semántica más rica | Sensor más caro y sensible al rango útil | Media |
| Híbrido multi-sensor | LiDAR + cámaras + IMU | LVI-SAM, R3LIVE | Máxima robustez | Integración y cómputo elevados | Baja |
Comparativa resumida¶
| Enfoque | Tasa de éxito típica en interiores | Observación práctica |
|---|---|---|
| Visual SLAM | 60–70 % | Penalizado por paredes lisas, zonas oscuras y cambios de iluminación |
| LiDAR SLAM | 90–95 % | Muy consistente en interiores domésticos y pasillos |
| Visual-Inertial | Superior a VSLAM puro | Mejora estabilidad, pero sigue dependiendo de la calidad visual |
Decisión de diseño
Para este proyecto se selecciona LiDAR SLAM 2D porque ofrece mejor robustez en interiores domésticos con paredes lisas, iluminación variable y necesidad de una geometría métrica fiable para Nav2.
Motivos concretos de la elección¶
- Robustez frente a la iluminación: el mapa no depende de textura ni de luz ambiente.
- Precisión métrica: el dato de distancia del LiDAR es directamente utilizable para ocupación y planificación.
- Integración ROS2: la salida encaja de forma natural con
nav_msgs/OccupancyGrid,sensor_msgs/LaserScanytf2. - Simplicidad de la pila: evita calibraciones visuales complejas en una plataforma embebida.
- Compatibilidad con Nav2: la navegación consume exactamente los productos típicos de un SLAM LiDAR 2D.
3. Cartographer¶
Cartographer es el sistema de SLAM desarrollado por Google y uno de los referentes para mapeado y localización en ROS. Soporta modos 2D y 3D, aunque en este proyecto se emplea la variante 2D por adecuación al hardware y al entorno.
Arquitectura funcional¶
Cartographer se apoya en dos módulos complementarios:
3.1 Seguimiento local¶
Mantiene la pose del robot dentro de un submapa local combinando:
- integración temporal de movimiento
- filtrado tipo Kalman para estabilizar la estimación local
- scan matching entre el escaneo actual y la geometría ya observada
Su objetivo es mantener una estimación estable a corto plazo incluso aunque el mapa global aún no esté optimizado.
3.2 Optimización global y cierre de bucle¶
Cuando el robot vuelve a una zona conocida, Cartographer detecta la correspondencia y optimiza el grafo global de poses. Para ello utiliza una búsqueda branch-and-bound sobre una rejilla jerárquica y reajusta la trayectoria completa para reducir el error acumulado.
El resultado es un mapa coherente a escala global y una mejor consistencia entre exploraciones separadas en el tiempo.
Qué publica en ROS2
Cartographer genera exactamente los mensajes que necesita la capa de navegación:
- Mapa de ocupación (
nav_msgs/OccupancyGrid) - Transformaciones
tf2(map → odom → base_link) - Trayectoria estimada del robot
Flujo de datos en el proyecto¶
RPLidar C1 → /scan (sensor_msgs/LaserScan)
→ Cartographer
→ /map (nav_msgs/OccupancyGrid)
→ tf: map → odom → base_link
→ pose estimada / trayectoria
→ Nav2 (costmaps, localización y planificación)

Parámetros de configuración relevantes¶
En una Raspberry Pi no interesa usar una configuración agresiva. Los parámetros más sensibles son:
| Parámetro | Impacto en el sistema |
|---|---|
| Frecuencia del LiDAR | Determina la cadencia de actualización del SLAM |
| Resolución del mapa / submapas | Más resolución mejora detalle, pero aumenta CPU y memoria |
| Umbrales de scan matching | Ajustan la tolerancia a emparejamientos incorrectos |
| Frecuencia de loop closure | Afecta al coste de la optimización global |
| Tamaño y duración de submapas | Cambia el equilibrio entre detalle local y coste computacional |
Ajustes recomendados para Raspberry Pi
Para mantener ejecución en tiempo real se prioriza:
- resolución moderada de submapas
- frecuencia contenida de optimización global
- límites conservadores en scan matching para evitar falsas asociaciones
Motivo de la elección de Cartographer¶
Frente a otras alternativas, Cartographer encaja bien en este TFM porque:
- es una referencia consolidada para SLAM 2D indoor
- trabaja directamente sobre
LaserScan - produce
map,tfy trayectoria sin capas intermedias adicionales - su salida se integra de forma natural con Nav2
4. Hardware: RPLidar C1¶
El sensor seleccionado para la percepción SLAM es el RPLidar C1 de Slamtec, conectado por USB-UART y publicado en ROS2 mediante el paquete rplidar_ros.
| Especificación | Valor |
|---|---|
| Fabricante | Slamtec |
| Tecnología | DTOF (Direct Time-of-Flight) |
| Cobertura | 360° |
| Rango máximo | 12 m |
| Frecuencia de muestreo | 5.000 puntos/s |
| Frecuencia de rotación | 7–15 Hz |
| Precisión | ±1 cm |
| Peso | < 100 g |
| Interfaz | USB-UART |
| Driver ROS2 | rplidar_ros |
| Topic | /scan (sensor_msgs/LaserScan) |
Por qué DTOF es relevante en este proyecto¶
El uso de tecnología DTOF aporta una ventaja práctica frente a sensores basados en triangulación láser:
- mejor comportamiento ante superficies reflectantes
- menor degradación frente a materiales negros o absorbentes
- mayor consistencia en interiores domésticos reales
Esto es importante porque el robot debe operar en un entorno no controlado, con muebles, esquinas, variaciones de acabado y paredes de textura pobre.
Integración directa
El flujo de percepción no requiere preprocesado complejo: el LiDAR publica /scan, y esa misma información alimenta tanto a Cartographer como a los costmaps de Nav2.
5. Integración en la arquitectura ROS2 del proyecto¶
Dentro de la pila de software del TFM, la capa SLAM se sitúa entre el sensor de distancia y la navegación global:
rplidar_rosadquiere el barrido y publica/scan- Cartographer estima la pose y construye el mapa
- Nav2 consume el mapa y las transformaciones para localizar y planificar
- El resto de nodos de control ejecutan la maniobra resultante
Interfaces ROS2 implicadas¶
| Elemento | Tipo | Función |
|---|---|---|
/scan |
sensor_msgs/LaserScan |
Entrada principal del SLAM |
/map |
nav_msgs/OccupancyGrid |
Mapa global para navegación |
tf: map → odom → base_link |
tf2 |
Marco espacial completo del robot |
| Trayectoria estimada | Mensajes internos/publicados por Cartographer | Seguimiento de pose y optimización global |
6. Decisiones de implementación¶
Selección final¶
La solución elegida para la capa de percepción es:
Razones principales¶
- Más fiable que una cámara en interiores con iluminación variable
- Menor complejidad que una solución visual-inercial o multi-sensor
- Mejor relación entre precisión y coste computacional en una Raspberry Pi
- Salida directamente consumible por Nav2
Límites asumidos¶
También se aceptan varias restricciones de diseño:
- el mapa es 2D, por lo que no modela alturas ni obstáculos suspendidos
- la calidad del SLAM depende de la estructura geométrica del entorno
- una frecuencia de optimización global demasiado alta penaliza la ejecución embebida
Alcance del TFM
La prioridad no es maximizar complejidad algorítmica, sino disponer de una solución estable, reproducible y desplegable en el vehículo real. Por eso se descartan alternativas 3D y fusiones multi-sensor pesadas como FAST-LIO2, LVI-SAM o R3LIVE.
7. Resumen¶
La capa de percepción SLAM del TFM adopta una estrategia LiDAR 2D por ser la opción más sólida para un robot móvil pequeño que trabaja en interiores domésticos. La combinación de RPLidar C1 y Cartographer permite:
- construir un mapa de ocupación utilizable por Nav2
- localizar el robot de forma consistente en el entorno
- corregir deriva mediante loop closure
- mantener un coste computacional compatible con Raspberry Pi
Con esta decisión, la percepción deja de depender de condiciones visuales y pasa a apoyarse en una representación geométrica directamente útil para navegación autónoma.