🗺️ ROS 2 y navegación
El salto del robot que reacciona al robot que sabe dónde está. Aprenderás ROS 2, describirás y simularás tu robot en Gazebo, conectarás el ESP32 a ROS con micro-ROS, crearás mapas con un LiDAR y terminarás con un robot que mapea la habitación y navega solo hasta un punto. Todo se puede hacer primero solo en simulación, en tu PC.
Cómo leer: La ruta de arriba (ámbar) se ejecuta por completo en tu computadora, sin ninguna pieza. La de abajo (cian) es el mismo trabajo en el robot real: el ESP32 se conecta a ROS mediante micro-ROS y el LiDAR real reemplaza al simulado. Ambas flechas llegan al proyecto 4.6. Puedes seguir solo la ruta de arriba y volver a la de abajo cuando tengas el hardware.
🧭 Lo que construirás en esta ruta
Un robot diferencial (dos ruedas y una rueda loca) que existe en dos lugares: como modelo en Gazebo y como el robot de las rutas anteriores, ahora con LiDAR. Publica odometría y lecturas del láser en ROS 2, construye el mapa del entorno con slam_toolbox y usa Nav2 para ir solo hasta el punto que selecciones en el mapa, esquivando lo que aparezca en el camino.
- ✓Comandos válidos en Lyrical y Jazzy
- ✓Robot descrito en URDF/xacro y simulado en Gazebo
- ✓ESP32 conectado a ROS 2 mediante micro-ROS
- ✓Mapa guardado y navegación por puntos con Nav2
💡 ¿Aún no tienes LiDAR?
Los módulos 4.1, 4.2, 4.4 y 4.5 funcionan por completo en simulación: basta con una PC con Ubuntu, una máquina virtual o un contenedor Docker. El hardware solo es obligatorio en el 4.3 y en la parte real del 4.6.
Mapa de la ruta
🧩 ROS 2 sin miedo
Nodos, tópicos y tu primer nodo en Python
🧱 Describir y simular el robot
URDF, TF, RViz2 y Gazebo
🔌 micro-ROS en el ESP32
El microcontrolador se integra a ROS
📡 LiDAR y mapas (SLAM)
Mapa y posición al mismo tiempo
🚩 Navegación con Nav2
Haz clic en el mapa y el robot irá
🏠 Proyecto: mapea y navega
De la simulación a tu habitación
Contenido detallado
🧩 ROS 2 sin miedo
Qué es ROS 2, qué distro elegir, cómo instalarlo y las piezas del grafo: nodos, tópicos, servicios, acciones y parámetros. Termina con tu primer nodo en Python.
Un conjunto de bibliotecas y herramientas que permite que varios programas del robot intercambien datos por nombre, en la misma máquina o a través de la red.
Es el estándar en investigación e industria; los mapas, la navegación y los controladores de sensores ya vienen listos.
Middleware · DDS · grafo ROS · paquete.
Lyrical Luth (LTS de mayo/2026, Ubuntu 26.04) y Jazzy Jalisco (LTS anterior, Ubuntu 24.04), cada una con su Gazebo.
Una distro incorrecta es la causa n.º 1 de que un tutorial no funcione.
LTS · compatibilidad Ubuntu ↔ ROS ↔ Gazebo · fin del soporte.
Tres opciones: paquetes en Ubuntu, un contenedor Docker listo o Raspberry Pi 5 con Ubuntu.
Docker te permite empezar en minutos, en cualquier sistema.
ros-<distro>-desktop · source · talker/listener.
Un nodo es un programa; un tópico es un canal con nombre; un mensaje es el formato de los datos que pasan por él.
Todo robot ROS es un grafo de este tipo; leerlo desde la terminal es la primera herramienta de depuración.
Publisher · subscriber · /cmd_vel · ros2 topic echo.
Pregunta y respuesta (servicio), tarea larga con progreso (acción) y ajustes del nodo (parámetro).
Elegir el patrón adecuado evita soluciones improvisadas; todo Nav2 funciona mediante acciones.
Solicitud/respuesta · objetivo/retroalimentación/resultado · ros2 param.
Un paquete Python con dos nodos completos, uno que publica y otro que escucha, compilado con colcon.
Es el modelo de todos los nodos que escribirás en el resto de la ruta.
rclpy · create_publisher · create_subscription · timer.
🧱 Describir y simular el robot
Workspace y colcon, el robot en URDF/xacro, cuadros TF, RViz2, Gazebo con ros_gz y el primer recorrido con el teclado.
La carpeta de trabajo, cómo se organizan los paquetes y cómo colcon compila e instala todo.
La mitad de los errores de principiantes se debe a un workspace sin source o a una dependencia faltante.
Underlay · overlay · rosdep · --symlink-install.
Un archivo XML con las piezas (links) y las articulaciones (joints) del robot; xacro agrega variables y macros.
RViz, Gazebo, TF y Nav2 leen la misma descripción.
Link · joint · inercia · macro.
El árbol que indica dónde está cada pieza con respecto a las demás, en cada instante.
Sin una TF correcta, el láser aparece en el lugar equivocado y el mapa se deforma.
map · odom · base_link · tf2_echo.
La ventana que muestra lo que el robot cree: modelo, cuadros, láser, mapa.
Ahí verificas el modelo antes de simular y el sensor antes de mapear.
Fixed Frame · RobotModel · LaserScan · robot_state_publisher.
El simulador con física y sensores, conectado a ROS 2 mediante el puente ros_gz.
Pruebas el mapa y la navegación sin batería, sin caídas y sin comprar un LiDAR.
Harmonic ↔ Jazzy · Jetty ↔ Lyrical · parameter_bridge · launch.
Enviar velocidad con el teclado a /cmd_vel y ver cómo responden la odometría y el láser.
Cierra el ciclo: entra un comando, el robot se mueve y los sensores cambian. Es la prueba de humo de toda la ruta.
teleop_twist_keyboard · Twist · /odom · /scan.
🔌 micro-ROS en el ESP32
El ESP32 se convierte en un nodo ROS 2: publica los encoders, escucha /cmd_vel, hace girar los motores y envía la odometría al resto del robot.
La versión de ROS 2 para microcontroladores, que se comunica con el resto del grafo por medio de un agente.
Los motores y encoders permanecen en el ESP32, en tiempo real, y aparecen en ROS como cualquier nodo.
Cliente · agente · XRCE-DDS · rclc.
El programa en la PC o en la Pi que traduce micro-ROS a DDS; se ejecuta en Docker con una sola línea.
Sin el agente, el ESP32 habla solo; es lo primero que debes verificar.
Serial · UDP · puerto 8888 · /dev/ttyUSB0.
El firmware que cuenta los pulsos de las ruedas y publica en /ticks cada 50 ms.
Los datos del sensor en ROS son la base de la odometría y del mapa.
micro_ros_arduino · publisher · timer · executor.
Convertir la velocidad lineal y angular en la velocidad de cada rueda, y detenerse si desaparece el comando.
Es el mismo /cmd_vel de teleop y Nav2: el robot real empieza a obedecer a ROS.
Cinemática diferencial · subscriber · watchdog · TB6612FNG.
Un nodo Python en la PC que transforma /ticks en /odom y en el cuadro odom → base_link.
Es lo que SLAM y Nav2 esperan recibir del robot real.
nav_msgs/Odometry · TransformBroadcaster · ticks por vuelta.
Los fallos más frecuentes: agente sin conexión, puerto ocupado, distribución equivocada, reloj desincronizado.
Una guía de diagnóstico ahorra noches de prueba y error.
Transporte · ping del agente · sincronización del tiempo · reconexión.
📡 LiDAR y mapas (SLAM)
Cómo ve el LiDAR, cómo conectarlo a ROS 2 y cómo slam_toolbox construye el mapa mientras descubre dónde está el robot.
Un láser que gira y mide la distancia en cientos de ángulos por vuelta, publicado como LaserScan.
Entender el alcance y la resolución explica por qué el mapa queda bien o mal.
ranges · angle_increment · alcance · /scan.
Driver del fabricante (RPLIDAR C1/A1 o LD19), puerto USB y el cuadro del láser en la TF.
Es el paso que lleva al robot real al mismo punto que el simulado.
Driver · regla udev · frame_id · ros2 topic hz.
Construir el mapa y localizarse en él al mismo tiempo, corrigiendo la odometría según lo que ve el láser.
Sin mapa no hay navegación autónoma de verdad.
Emparejamiento de escaneos · cierre de bucle · cuadrícula de ocupación.
El paquete estándar de SLAM en ROS 2 funcionando sobre el robot de Gazebo.
Aprendes a mapear sin hardware y ya sabes qué esperar del robot real.
Modo en línea asíncrono · parámetros · /map.
Guía para el mapeo real: velocidad baja, vueltas cerradas, superficies que confunden al láser.
Un mapa bien hecho determina si la navegación funcionará.
Vidrio y espejo · velocidad · volver a visitar lugares.
Guardar el mapa en un archivo (imagen + YAML) y volver a abrirlo después para navegar.
Mapeas una vez y navegas muchas veces.
map_saver · .pgm y .yaml · resolución · origen.
🚩 Navegación con Nav2
La pila de navegación de ROS 2: localizarse en el mapa guardado, planificar, esquivar obstáculos, recuperarse y hacer rondas por waypoints.
Los servidores que localizan, planifican, controlan y se recuperan, coordinados por un árbol de comportamiento.
Es el mismo tipo de software que usan los robots de almacén.
nav2_bringup · behavior tree · lifecycle.
Un filtro de partículas que estima dónde está el robot al comparar el láser con el mapa.
Si no sabe dónde está, el robot no sabe adónde ir.
Partículas · pose inicial · map → odom.
Mapas que indican por dónde es costoso pasar y algoritmos que trazan y siguen la ruta.
Ajustar la inflación y el radio del robot resuelve la mayoría de los casos de «no pasa por la puerta».
Costmap global y local · inflación · planner · controller.
Definir el objetivo con un clic en RViz o mediante código con la API Python de Nav2.
Con Python, la navegación se convierte en un bloque que usan otros programas.
Nav2 Goal · NavigateToPose · acción · feedback.
Los comportamientos de recuperación: limpiar el mapa de costos, girar, retroceder, esperar.
En el mundo real el robot se atascará; lo importante es cómo sale de esa situación.
Spin · BackUp · Wait · intentos.
Una lista de puntos que el robot recorre en orden, como en una ronda.
Es la base de la entrega, la inspección y la vigilancia.
followWaypoints · orden · repetición.
🏠 Proyecto: robot que mapea y navega
Integra todo en el robot real: arquitectura, launch que inicia el sistema, mapa del entorno y navegación segura entre habitaciones.
Qué se ejecuta en cada lugar: ESP32 en los motores, Pi 5 con LiDAR y ROS 2, PC para visualizar.
Una arquitectura clara facilita encontrar fallas y cambiar piezas.
División de tareas · red · ROS_DOMAIN_ID.
Un comando que inicia el agente, la descripción, el LiDAR, la odometría, SLAM o Nav2 en el orden correcto.
Abrir diez terminales cada vez no es práctico, ni siquiera en el aula.
Argumentos · include · condiciones.
Ruido, deslizamiento, retraso y tiempo real: qué oculta Gazebo y cómo compensarlo.
Aquí es donde se detienen la mayoría de los proyectos; saberlo de antemano evita frustraciones.
use_sim_time · calibración · límites de velocidad.
Crear y guardar el mapa real del espacio donde trabajará el robot.
Es el primer resultado visible del proyecto.
slam_toolbox · teleop · map_saver.
Nav2 en el mapa real, con puntos con nombre (cocina, sala) y una ronda.
Es el robot autónomo completo que prometió la ruta.
Puntos con nombre · waypoints · métricas de éxito.
Parada de emergencia, velocidad máxima, batería y el camino hacia la Ruta 5.
Un robot que se mueve solo cerca de personas necesita mecanismos de seguridad desde la primera prueba.
E-stop · límites · watchdog · registro.
🧰 Kit de la trilha
Empieza desde cero solo en simulación. Para el robot real, además del robot de la Ruta 3, el rango aproximado es de R$ 450 a R$ 1.100, casi todo corresponde al LiDAR (oct/2026, verifica antes de comprar: varía según la tienda, el envío y el tipo de cambio).
PC con Ubuntu 24.04 (Jazzy) o 26.04 (Lyrical), máquina virtual o Docker. 8 GB de RAM funcionan; con 16 GB Gazebo funciona con holgura.
El robot de la Ruta 3: Raspberry Pi 5 con fuente oficial y cooler, ESP32 y driver TB6612FNG o DRV8833, chasis de dos ruedas y rueda loca.
RPLIDAR C1 o A1 (Slamtec) o LD19 (LDRobot), con el adaptador USB incluido. Es la pieza más cara de la ruta.
Los motores con encoder de la Ruta 2 (N20 o TT con disco). Sin encoder no hay odometría y el mapa queda torcido.
Batería separada para los motores y para la Pi (o buck de 5 V y 5 A), GND común y un interruptor de parada fácil de alcanzar.
Cables USB de datos (ESP32 y LiDAR) y una red Wi-Fi local estable entre el robot y la PC.
✓ Opcional que vale la pena
IMU MPU-6050 o ICM-20948 (mejora la odometría en las curvas) y un botón de parada de emergencia que corta la alimentación de los motores.
✗ No compres para esta trilha
LiDAR 3D, cámara de profundidad costosa o una segunda computadora de a bordo. El 2D con encoders es suficiente para el mapa y la navegación en interiores.