Tutorial · Intermediário · 21 min de leitura

SLAM, mapeamento, localização e deriva da odometria

Entenda como robôs móveis combinam odometria e dados de alcance em SLAM, distinguem localização de mapeamento e diagnosticam deriva e fechamento de loop.

Um robô móvel precisa de duas respostas relacionadas: como é o ambiente e onde o robô está dentro dele. A localização e o mapeamento simultâneos (SLAM) estimam as duas enquanto o robô explora. Depois que existe um mapa estável, um sistema de localização pode estimar a pose em relação a esse mapa fixo sem reconstruí-lo.

O SLAM não substitui a odometria. Ele usa estimativas locais de movimento para conectar observações dos sensores e corrige a deriva acumulada quando o ambiente oferece evidência suficiente.

Separe as quatro tarefas

Os termos ficam mais fáceis quando cada um tem uma saída clara:

  • Odometria: movimento local e suave, estimado a partir de encoders de roda, sensores inerciais, movimento visual ou da fusão dessas fontes, relativo a uma pose anterior. Deriva ao longo do tempo e não fornece, por si só, uma posição global.
  • Mapeamento: construir uma representação, como uma grade de ocupação, a partir de observações dos sensores e poses.
  • Localização: estimar a pose do robô em um mapa existente.
  • SLAM: construir o mapa enquanto estima poses e revisa estimativas anteriores.

A navegação adiciona planejamento e controle a tudo isso. Um bom mapa não gera sozinho um comando de velocidade seguro.

Duas rotas fechadas desenhadas uma sobre a outra. Uma elipse cinza tracejada mostra o percurso que o robô realmente fez, retornando ao início. Uma curva vermelha sólida mostra o mesmo percurso reconstruído apenas com odometria, girada e ampliada progressivamente pelo erro de orientação acumulado, de modo que termina longe de onde começou. Uma seta de dupla ponta cobre a distância entre o ponto inicial verdadeiro e onde a odometria acredita que o robô terminou, rotulada como fechamento de loop reconhecendo o mesmo lugar uma segunda vez.
Cada passo adiciona um pouco de erro e nada o remove. Reconhecer um lugar onde você já esteve é a medição que puxa o mapa inteiro de volta ao formato. Baixar SVG

Acompanhe a informação pelo sistema

Para SLAM 2D em ambientes internos, um fluxo de dados comum é:

  1. Encoders de roda e uma unidade de medida inercial estimam o movimento local.
  2. Um LiDAR publica varreduras de distância com carimbos de data/hora e um referencial do sensor.
  3. O TF2 relaciona o sensor a base_link e a pose local a odom.
  4. A correspondência de varreduras alinha novas observações com varreduras recentes ou com o mapa em crescimento.
  5. O módulo de otimização ajusta um grafo de poses e restrições.
  6. Uma grade de ocupação é atualizada a partir das poses corrigidas e dos dados de distância.

A odometria fornece uma estimativa inicial útil. Sem ela, a correspondência de varreduras pode procurar um espaço muito maior ou alinhar-se à estrutura repetida errada. Sem observações externas, os erros de odometria permanecem ilimitados. Esse limite é o que determina se um robô pode varrer um piso em fileiras paralelas: as fileiras deixam de ser paralelas depois de cerca de dez, e por isso uma máquina que planeja sua cobertura também leva um giroscópio, uma câmera no teto ou um farol. Ao ar livre, a mesma função fica com o GPS, usado para corrigir a estimativa.

Entenda a correspondência de varreduras e o fechamento de loop

A correspondência de varreduras encontra a pose relativa que alinha melhor as medições de distância atuais à estrutura existente. Ela pode corrigir pequenos erros de patinação das rodas e de escala, mas precisa de características geométricas. Um corredor longo e sem características, uma parede de vidro, uma multidão em movimento ou prateleiras altamente repetitivas podem fazer várias poses parecerem igualmente plausíveis.

Um fechamento de loop ocorre quando o sistema reconhece um lugar previamente visitado e adiciona uma restrição entre a pose atual e uma pose mais antiga. Otimizar essa restrição pode distribuir o erro acumulado pela trajetória e fazer as paredes se alinharem novamente.

Um fechamento de loop não é automaticamente correto. Uma correspondência falsa em dois corredores semelhantes pode dobrar ou rasgar o mapa. Sistemas robustos usam verificações geométricas, pontuações e limiares de aceitação configuráveis. Revise correções grandes e suspeitas em vez de comemorar cada fechamento de loop.

Prepare o robô antes de ajustar o SLAM

O SLAM não pode compensar uma interface de entradas defeituosa. Verifique primeiro:

  • direção, escala e carimbos de data/hora dos encoders;
  • odometria local razoável durante testes de movimento reto e de rotação;
  • transformações corretas odom → base_link → sensor;
  • dados de distância nas unidades corretas, com leituras inválidas identificadas;
  • concordância de relógio entre os nós;
  • suporte rígido para o sensor;
  • alcance e campo de visão suficientes para o ambiente.

Dirija lentamente enquanto estabelece a linha de base. A distorção de movimento e a escassez de observações nas varreduras pioram conforme a velocidade angular aumenta. Se o sensor ou o software oferecer compensação de temporização, configure-a com base no comportamento medido, em vez de assumir que ela é desnecessária.

Construa um mapa deliberadamente

Comece em um local rico em características e faça percursos fechados, em vez de usar apenas trajetos longos de ida e volta. Gire suavemente para que o sensor de varredura observe as mesmas estruturas a partir de pontos de vista sobrepostos. Evite transportar ou mover objetos grandes ao lado do robô durante o mapeamento.

Monitore o mapa ao vivo em busca de paredes duplicadas, cantos borrados, saltos e salas desconectadas. Esses são sinais de diagnóstico, não problemas cosméticos:

  • paredes paralelas duplicadas sugerem erro de pose ou temporização;
  • paredes curvas durante a rotação sugerem transformações ruins ou distorção de movimento;
  • deriva gradual de escala sugere calibração das rodas ou restrições fracas de varredura;
  • reorganização global súbita sugere fechamento de loop, correto ou falso.

Salve o mapa somente depois de verificar que os corredores importantes continuam atravessáveis na resolução escolhida. Uma grade mais fina custa memória e pode preservar ruído do sensor; uma grade mais grossa pode fechar passagens estreitas.

Localize-se no mapa salvo

Depois do mapeamento, mude para o modo de localização em relação ao mapa salvo. Um localizador por filtro de partículas, como o Adaptive Monte Carlo Localization (AMCL), estima a pose a partir de observações de distância e movimento. Ele ainda precisa de um modelo de sensor razoável, transformações e odometria.

Forneça uma pose inicial próxima o suficiente para que o sistema identifique o local correto, especialmente em ambientes simétricos. Teste a recuperação começando com pequenos erros de pose e depois com erros maiores. A recuperação do “robô sequestrado” é um requisito separado e não deve ser presumida apenas porque o rastreamento normal funciona.

No modelo padrão de referenciais, a odometria local publica odom → base_link, enquanto o SLAM ou a localização publica map → odom. A transformação global corrige a deriva sem forçar o referencial de controle local e suave a dar um salto.

Meça a precisão e a repetibilidade

Use pontos de referência físicos com posições levantadas topograficamente ou cuidadosamente medidas. Registre a pose estimada quando o robô para em cada ponto, com o robô chegando ao ponto por diferentes direções. Separe:

  • repetibilidade no mesmo local;
  • deriva local de curto prazo;
  • consistência global do mapa após um percurso fechado;
  • tempo de recuperação após perda temporária do sensor.

Compare o mapa com distâncias conhecidas, mas não o julgue apenas por uma imagem visualmente agradável. A navegação precisa de espaço livre correto, limites de obstáculos e estabilidade de pose mais do que de uma espessura de parede bonita.

Registre varreduras, odometria, transformações e saídas do SLAM para que uma falha possa ser reproduzida. Um problema que só ocorre ao vivo é muito mais difícil de diagnosticar.

Diagnose falhas comuns do SLAM

  • As paredes duplicam durante o movimento reto: a escala da odometria, a temporização do sensor ou a correspondência de varreduras está inconsistente.
  • O mapa dobra durante a rotação: a transformação do sensor, a odometria angular ou a distorção de movimento está errada.
  • A pose salta em corredores repetitivos: a correspondência de varreduras ou o fechamento de loop aceitou um alinhamento ambíguo.
  • Nenhum fechamento de loop ocorre: a rota não tem sobreposição, as observações são esparsas ou os limiares de aceitação estão rígidos demais.
  • A localização funciona apenas perto da pose inicial: o ambiente é simétrico ou a recuperação global não está configurada.
  • O mapa parece correto, mas a navegação corta paredes: o envelope, a inflação ou a configuração do mapa de custos está errada.
  • Ajustar todos os parâmetros de SLAM não muda nada: a interface de entrada de odometria/TF/sensor ainda está defeituosa.

Comece pela calibração de encoders em quadratura e pela odometria de acionamento diferencial, depois use referenciais de coordenadas TF2 do ROS 2 para verificar a cadeia geométrica. O Simulador de Sensores mostra por que viés e deriva não podem ser removidos apenas por suavização.

Explore o grafo

Faz parte destas montagens

Projetos e caminhos de aprendizagem que incluem este tutorial.

Leitura complementar

Referências