🗺️ ROS 2 e navegação
O salto do robô que reage para o robô que sabe onde está. Você aprende o ROS 2, descreve e simula o seu robô no Gazebo, liga o ESP32 ao ROS com micro-ROS, faz mapas com um LiDAR e termina com um robô que mapeia a sala e navega sozinho até um ponto. Tudo pode ser feito primeiro só em simulação, no seu PC.
Como ler: a faixa de cima (âmbar) roda inteira no seu computador, sem nenhuma peça. A de baixo (ciano) é o mesmo trabalho no robô de verdade: o ESP32 entra no ROS pelo micro-ROS e o LiDAR real substitui o simulado. As duas setas chegam ao projeto 4.6. Você pode seguir só a faixa de cima e voltar para a de baixo quando tiver o hardware.
🧭 O que você monta nesta trilha
Um robô diferencial (duas rodas e um rodízio) que existe em dois lugares: como modelo no Gazebo e como o robô das trilhas anteriores, agora com LiDAR. Ele publica odometria e leituras do laser no ROS 2, constrói o mapa do ambiente com slam_toolbox e usa o Nav2 para ir sozinho até o ponto que você clicar no mapa, desviando do que aparecer no caminho.
- ✓Comandos válidos em Lyrical e Jazzy
- ✓Robô descrito em URDF/xacro e simulado no Gazebo
- ✓ESP32 falando ROS 2 pelo micro-ROS
- ✓Mapa salvo e navegação por pontos com Nav2
💡 Sem LiDAR ainda?
Os módulos 4.1, 4.2, 4.4 e 4.5 rodam inteiros em simulação: um PC com Ubuntu, uma máquina virtual ou um contêiner Docker bastam. O hardware só é obrigatório no 4.3 e na parte real do 4.6.
Mapa da trilha
🧩 ROS 2 sem medo
Nós, tópicos e o primeiro nó em Python
🧱 Descrever e simular o robô
URDF, TF, RViz2 e Gazebo
🔌 micro-ROS no ESP32
O microcontrolador entra no ROS
📡 LiDAR e mapas (SLAM)
Mapa e posição ao mesmo tempo
🚩 Navegação com Nav2
Clique no mapa, o robô vai
🏠 Projeto: mapeia e navega
Do simulado à sua sala
Conteúdo detalhado
🧩 ROS 2 sem medo
O que é o ROS 2, qual distro escolher, como instalar e as peças do grafo: nós, tópicos, serviços, ações e parâmetros. Fecha com o seu primeiro nó em Python.
Um conjunto de bibliotecas e ferramentas que deixa vários programas do robô trocarem dados por nome, na mesma máquina ou na rede.
É o padrão de pesquisa e indústria; mapas, navegação e drivers de sensores já vêm prontos.
Middleware · DDS · grafo ROS · pacote.
Lyrical Luth (LTS de maio/2026, Ubuntu 26.04) e Jazzy Jalisco (LTS anterior, Ubuntu 24.04), cada uma com seu Gazebo.
Distro errada é a causa nº 1 de tutorial que não funciona.
LTS · par Ubuntu ↔ ROS ↔ Gazebo · fim de suporte.
Três caminhos: pacotes no Ubuntu, contêiner Docker pronto ou Raspberry Pi 5 com Ubuntu.
O Docker põe você para rodar em minutos, em qualquer sistema.
ros-<distro>-desktop · source · talker/listener.
Nó é um programa; tópico é um canal com nome; mensagem é o formato do dado que passa por ele.
Todo robô ROS é um grafo desses; lê-lo com o terminal é a primeira ferramenta de depuração.
Publisher · subscriber · /cmd_vel · ros2 topic echo.
Pergunta e resposta (serviço), tarefa longa com progresso (ação) e ajustes do nó (parâmetro).
Escolher o padrão certo evita gambiarras; o Nav2 inteiro funciona por ações.
Request/response · goal/feedback/result · ros2 param.
Um pacote Python com dois nós completos, um que publica e outro que escuta, compilado com colcon.
É o molde de todo nó que você vai escrever no resto da trilha.
rclpy · create_publisher · create_subscription · timer.
🧱 Descrever e simular o robô
Workspace e colcon, o robô em URDF/xacro, quadros TF, RViz2, Gazebo com ros_gz e o primeiro passeio com o teclado.
A pasta de trabalho, como os pacotes se organizam e como o colcon compila e instala tudo.
Metade dos erros de iniciante é workspace sem source ou dependência faltando.
Underlay · overlay · rosdep · --symlink-install.
Um arquivo XML com as peças (links) e as juntas (joints) do robô; o xacro adiciona variáveis e macros.
RViz, Gazebo, TF e Nav2 leem a mesma descrição.
Link · joint · inércia · macro.
A árvore que diz onde cada peça está em relação às outras, a cada instante.
Sem TF certa, o laser aparece no lugar errado e o mapa entorta.
map · odom · base_link · tf2_echo.
A janela que mostra o que o robô acredita: modelo, quadros, laser, mapa.
É onde você confere o modelo antes de simular e o sensor antes de mapear.
Fixed Frame · RobotModel · LaserScan · robot_state_publisher.
O simulador com física e sensores, ligado ao ROS 2 pela ponte ros_gz.
Você testa mapa e navegação sem bateria, sem tombo e sem comprar LiDAR.
Harmonic ↔ Jazzy · Jetty ↔ Lyrical · parameter_bridge · launch.
Mandar velocidade pelo teclado em /cmd_vel e ver odometria e laser responderem.
Fecha o ciclo: comando entra, robô anda, sensores mudam. É o teste de fumaça de toda a trilha.
teleop_twist_keyboard · Twist · /odom · /scan.
🔌 micro-ROS no ESP32
O ESP32 vira um nó ROS 2: publica encoders, ouve /cmd_vel, gira os motores e entrega odometria ao resto do robô.
A versão do ROS 2 para microcontroladores, que fala com o resto do grafo por meio de um agente.
Os motores e encoders ficam no ESP32, em tempo real, e aparecem no ROS como qualquer nó.
Cliente · agente · XRCE-DDS · rclc.
O programa no PC ou no Pi que traduz o micro-ROS para o DDS; roda em Docker com uma linha.
Sem agente o ESP32 fala sozinho; ele é a primeira coisa a conferir.
Serial · UDP · porta 8888 · /dev/ttyUSB0.
O firmware que conta os pulsos das rodas e publica em /ticks a cada 50 ms.
Dado do sensor no ROS é a base da odometria e do mapa.
micro_ros_arduino · publisher · timer · executor.
Converter velocidade linear e angular em velocidade de cada roda, com parada se o comando sumir.
É o mesmo /cmd_vel do teleop e do Nav2: o robô real passa a obedecer ao ROS.
Cinemática diferencial · subscriber · watchdog · TB6612FNG.
Um nó Python no PC que transforma /ticks em /odom e no quadro odom → base_link.
É o que o SLAM e o Nav2 esperam receber do robô real.
nav_msgs/Odometry · TransformBroadcaster · ticks por volta.
Os defeitos que mais aparecem: agente sem conexão, porta ocupada, distro trocada, relógio fora de sincronia.
Um roteiro de diagnóstico poupa noites de tentativa e erro.
Transporte · ping do agente · sync de tempo · reconexão.
📡 LiDAR e mapas (SLAM)
Como o LiDAR enxerga, como ligá-lo no ROS 2 e como o slam_toolbox monta o mapa enquanto descobre onde o robô está.
Um laser que gira e mede a distância em centenas de ângulos por volta, publicado como LaserScan.
Entender alcance e resolução explica por que o mapa sai bom ou ruim.
ranges · angle_increment · alcance · /scan.
Driver do fabricante (RPLIDAR C1/A1 ou LD19), porta USB e o quadro do laser na TF.
É o passo que leva o robô real ao mesmo ponto do simulado.
Driver · regra udev · frame_id · ros2 topic hz.
Construir o mapa e se localizar nele ao mesmo tempo, corrigindo a odometria pelo que o laser vê.
Sem mapa não há navegação autônoma de verdade.
Scan matching · fechamento de laço · grade de ocupação.
O pacote padrão de SLAM no ROS 2 rodando sobre o robô do Gazebo.
Você aprende a mapear sem hardware e já sabe o que esperar do real.
Modo online assíncrono · parâmetros · /map.
Roteiro de mapeamento real: velocidade baixa, voltas fechadas, superfícies que confundem o laser.
Um mapa bem feito decide se a navegação vai funcionar.
Vidro e espelho · velocidade · revisitar lugares.
Guardar o mapa em arquivo (imagem + YAML) e reabrir depois para navegar.
Você mapeia uma vez e navega muitas.
map_saver · .pgm e .yaml · resolução · origem.
🚩 Navegação com Nav2
A pilha de navegação do ROS 2: localizar no mapa salvo, planejar, desviar, se recuperar e fazer rondas por waypoints.
Os servidores que localizam, planejam, controlam e se recuperam, coordenados por uma árvore de comportamento.
É o mesmo tipo de software dos robôs de armazém.
nav2_bringup · behavior tree · lifecycle.
Um filtro de partículas que estima onde o robô está comparando o laser com o mapa.
Sem saber onde está, o robô não sabe para onde ir.
Partículas · pose inicial · map → odom.
Mapas que marcam onde é caro passar e os algoritmos que traçam e seguem o caminho.
Ajustar inflação e raio do robô resolve a maioria dos "não passa na porta".
Costmap global e local · inflação · planner · controller.
Dar o objetivo clicando no RViz ou por código com a API Python do Nav2.
Com Python, a navegação vira um bloco que outros programas usam.
Nav2 Goal · NavigateToPose · ação · feedback.
Os comportamentos de recuperação: limpar o mapa de custo, girar, recuar, esperar.
No mundo real o robô vai travar; o que importa é como ele sai.
Spin · BackUp · Wait · tentativas.
Uma lista de pontos que o robô percorre em ordem, como uma ronda.
É a base de entrega, inspeção e vigilância.
followWaypoints · ordem · repetição.
🏠 Projeto: robô que mapeia e navega
Junta tudo no robô real: arquitetura, launch que sobe o sistema, mapa do ambiente e navegação entre cômodos com segurança.
Quem roda onde: ESP32 nos motores, Pi 5 com LiDAR e ROS 2, PC para visualizar.
Uma arquitetura clara facilita achar defeitos e trocar peças.
Divisão de tarefas · rede · ROS_DOMAIN_ID.
Um comando que liga agente, descrição, LiDAR, odometria, SLAM ou Nav2 na ordem certa.
Abrir dez terminais toda vez não escala nem em sala de aula.
Argumentos · include · condições.
Ruído, deslizamento, atraso e tempo real: o que o Gazebo esconde e como compensar.
É aqui que a maioria dos projetos para; saber antes evita frustração.
use_sim_time · calibração · limites de velocidade.
Fazer o mapa real do espaço onde o robô vai trabalhar e salvar.
É o primeiro resultado visível do projeto.
slam_toolbox · teleop · map_saver.
Nav2 no mapa real, com pontos nomeados (cozinha, sala) e uma ronda.
É o robô autônomo completo que a trilha prometeu.
Pontos nomeados · waypoints · métricas de sucesso.
Parada de emergência, velocidade máxima, bateria e o caminho para a Trilha 5.
Robô que anda sozinho perto de gente precisa de travas desde o primeiro teste.
E-stop · limites · watchdog · registro.
🧰 Kit da trilha
Parte do zero só em simulação. Para o robô real, além do robô da Trilha 3, a faixa aproximada é de R$ 450 a R$ 1.100, quase tudo no LiDAR (out/2026, confira antes de comprar: varia por loja, frete e câmbio).
PC com Ubuntu 24.04 (Jazzy) ou 26.04 (Lyrical), máquina virtual ou Docker. 8 GB de RAM funcionam; 16 GB deixam o Gazebo confortável.
O robô da Trilha 3: Raspberry Pi 5 com fonte oficial e cooler, ESP32 e driver TB6612FNG ou DRV8833, chassi de duas rodas e rodízio.
RPLIDAR C1 ou A1 (Slamtec) ou LD19 (LDRobot), com o adaptador USB que vem junto. É a peça mais cara da trilha.
Os motores com encoder da Trilha 2 (N20 ou TT com disco). Sem encoder não há odometria, e o mapa sai torto.
Bateria separada para motores e para o Pi (ou buck de 5 V e 5 A), GND comum e uma chave de parada fácil de alcançar.
Cabos USB de dados (ESP32 e LiDAR) e uma rede Wi-Fi local estável entre o robô e o PC.
✓ Opcional que vale a pena
IMU MPU-6050 ou ICM-20948 (melhora a odometria em curvas) e um botão de parada de emergência que corta os motores.
✗ Não compre para esta trilha
LiDAR 3D, câmera de profundidade cara ou um segundo computador de bordo. O 2D com encoders resolve mapa e navegação dentro de casa.