Caminho de construçãoAvançadoAlguns fins de semana

Construa um micromouse para resolver labirintos

Um robô que explora sozinho um labirinto com paredes, constrói um mapa e depois percorre a rota mais curta do ponto de partida ao centro sem nenhum erro de trajeto.

Esquema técnico de Construa um micromouse para resolver labirintosWALL SENSING → FLOOD FILL

O que você está construindo

Um robô colocado em um labirinto que nunca viu, que encontra o centro e depois percorre de volta o caminho mais curto que consegue provar existir.

Essa segunda metade é o que diferencia um micromouse de todos os outros robôs deste site. Um robô seguidor de linha reage. Um robô com desvio de obstáculos reage. Um micromouse lembra — constrói um mapa enquanto se movimenta e então planeja entre células que ainda não visitou. É o menor problema completo de robótica: medição, movimento, mapeamento e planejamento, todos precisam funcionar ao mesmo tempo.

A estratégia de duas passagens

Os micromouses de competição fazem várias passagens e são pontuados pela mais rápida. Isso produz uma estratégia que vale copiar mesmo quando ninguém está cronometrando você:

Primeira passagem — explorar. Avance com cuidado, registre quais células têm quais paredes e chegue ao centro. A velocidade é irrelevante; o mapa é o produto.

Segunda passagem — usar o mapa. Aplique flood fill ao mapa concluído, calcule a rota mais curta e percorra-a sem parar para fazer novas medições daquilo que você já sabe.

A divisão importa porque as duas passagens querem coisas opostas. Explorar pede movimento lento e cauteloso e medição constante. Fazer a passagem rápida exige avançar com decisão. Tentar fazer as duas ao mesmo tempo produz um robô que é ruim nas duas.

Por que o algoritmo não é a parte difícil

O flood fill é realmente simples: dê distância 0 à célula objetivo, dê a cada vizinha 1 a mais que a menor vizinha alcançável e siga sempre para um número menor. São algumas dezenas de linhas e, em uma grade, ele comprova produzir o caminho mais curto.

A parte difícil é que ele pressupõe que o robô sabe em qual célula está.

Conte uma célula errado, ou vire 88° em vez de 90° algumas vezes, e o planejador estará resolvendo o labirinto para um robô que está em outro lugar. O sintoma é frustrante: o algoritmo é perfeito, a fiação está correta, e o robô avança com convicção contra uma parede.

Por isso a ordem de construção abaixo gasta a maior parte do esforço com movimento e adiciona o planejador por último. Você pode provar o planejador separadamente no simulador do solucionador de labirintos, onde a posição é exata por construção — exatamente por isso que simular primeiro vale o tempo.

Lista de materiais

Peça Qtd. Custo aproximado Observações
Arduino Uno ou Nano 1 US$ 5 A memória RAM é limitada — um labirinto de 16×16 exige cuidado. Um Mega ou ESP32 elimina a preocupação
VL53L0X 3 US$ 15 Esquerda, frente e direita. Três, não um — veja abaixo
MPU-6050 1 US$ 2 Orientação nas curvas; as rodas patinam justamente quando isso mais importa
Motores N20 com encoder 2 US$ 16 1:50 ou 1:100. O redutor metálico é essencial — a folga se acumula a cada curva
TB6612FNG 1 US$ 3
Chassi 2WD 1 US$ 10 Precisa caber em uma célula com espaço livre — menos de cerca de 90 mm de largura
Pacote de bateria 1 US$ 8 2×18650
Paredes do labirinto — US$ 10–30 Papelão rígido ou compensado. Células padrão têm 180 mm com paredes de 50 mm

Total: aproximadamente US$ 70–95, mais o labirinto.

Três sensores de distância, não um. Um único sensor frontal obriga o robô a girar para fazer a medição, o que custa tempo e — muito pior — introduz erro de orientação em cada observação. Três sensores fixos permitem ler as três paredes de uma célula de uma só vez, sem se mover. É a diferença entre um micromouse que mapeia de forma confiável e outro que acumula erro toda vez que verifica uma parede.

Lembre-se de que os três sensores VL53L0X iniciam no endereço 0x29, portanto você precisa de três GPIOs em XSHUT para ativá-los um de cada vez e reatribuir endereços — e precisa repetir isso a cada inicialização, porque a alteração é volátil.

Fique de olho na RAM. Um campo de distâncias de flood fill de 16×16 armazenado como uint8_t ocupa 256 bytes, além de um mapa de paredes e uma fila. Em 2 KB de um Uno isso cabe, mas somente se você gerenciar o espaço com cuidado — o que já é um bom exercício, e a razão pela qual muita gente migra para ESP32 aqui.

Ordem de construção

1 — Obtenha três leituras de distância limpas. Frente, esquerda e direita, usando sensores de tempo de voo VL53L0X. Eles compartilham um barramento I²C e iniciam no mesmo endereço, então ative-os um de cada vez, mantendo os outros em reset e reatribuindo endereços na inicialização. Confirme que cada um lê uma parede a uma distância conhecida antes de montar qualquer coisa.

2 — Faça-o avançar em linha reta e virar em ângulo reto. Esta é a parte principal. Siga seguimento de parede e curvas precisas: um laço PID nos sensores laterais para permanecer centralizado, curvas integradas pelo giroscópio em vez de contagens de encoder e novo ajuste do esquadro contra uma parede frontal sempre que houver uma. Não avance até o robô conseguir dar dez curvas e continuar corretamente orientado.

3 — Conte células com confiabilidade. Encoders preveem onde um limite deveria estar; a borda de descida de uma parede lateral confirma onde ele realmente está. Quando os dois discordam, acredite na parede — ela é uma referência física, não uma estimativa acumulada.

4 — Registre as paredes em um mapa. Dois bits por célula para quatro paredes, e um labirinto de 16 × 16 cabe em algumas centenas de bytes. Registre cada observação assim que a faz.

5 — Adicione o flood fill. Agora o planejador tem dados honestos. Recalcule as distâncias sempre que uma parede recém-descoberta invalidar o plano atual — esse replanejamento é a razão de usar flood fill em vez de uma busca de uma única passagem.

Observações dos componentes que importam

Pequeno vence rápido. O robô precisa girar dentro de uma célula. Um chassi compacto, com as rodas próximas ao centro de rotação, gira corretamente; um chassi longo bate nas paredes a cada curva, e nenhum ajuste conserta a geometria.

A folga é erro de orientação. Cada curva no lugar inverte os motores, e um redutor frouxo perde os primeiros poucos graus — cerca de 0,9° de orientação em uma roda de 42 mm com 4° de folga. Motores N20 com redutor metálico existem por esse motivo.

Monte os sensores laterais um pouco à frente e inclinados. Apontá-los diretamente para fora significa que eles só veem uma parede quando ela está exatamente ao lado, então o robô fica sabendo dela tarde demais. Um pequeno ângulo para a frente dá ao laço de controle uma antecipação.

Dê aos sensores uma alimentação estável. Um VL53L0X retorna números errados com aparência plausível quando o trilho cai, em vez de falhar obviamente — o pior tipo de falha, porque o mapa se enche de paredes que não existem.

Como fica um bom resultado

Medição Primeiro micromouse funcional Bem ajustado
Velocidade de exploração 0,2–0,3 m/s 0,3–0,5 m/s
Passagem rápida 0,4–0,6 m/s 1,0–2,0 m/s
Erro de centralização após 10 células 10–20 mm Menos de 5 mm
Erro de orientação após 10 curvas 8–15° Menos de 3°
Taxa de acerto na detecção de paredes Deve ser 100% 100%
Exploração completa de 16×16 3–6 minutos 1–2 minutos

Duas dessas linhas merecem ênfase.

A detecção de paredes não aceita crédito parcial. Uma parede registrada incorretamente corrompe o mapa; o flood fill então calcula um caminho que a atravessa como se estivesse livre, e a passagem rápida avança direto contra ela. Não há degradação gradual, e é por isso que a passagem de exploração é lenta.

As linhas de deriva são o verdadeiro projeto. O algoritmo não é a parte difícil — o flood fill tem cerca de quarenta linhas e pode ser testado inteiramente no simulador sem componentes. A parte difícil é que, depois de dez células, o robô não está mais onde pensa estar, e um micromouse que deriva 20 mm a cada dez células estará tocando a parede no lado oposto do labirinto. Tudo o que faz um micromouse real funcionar — correção de seguimento de parede, curvas integradas com os dados do giroscópio e calibração de encoders — existe para combater esse único número.

Quando algo dá errado

Sintoma Geralmente
Tenta atravessar uma parede A contagem de células está errada — posição, não planejamento
Termina na diagonal após várias curvas Viés do giroscópio não compensado ou curvas sem correção de esquadro
Invade aberturas laterais Falta a verificação de presença de parede no laço de seguimento
Mapeia paredes que não existem Alimentação dos sensores caindo ou interferência entre módulos
Resolve lentamente, mas colide em alta velocidade A passagem rápida está rápida demais para a camada de movimento — diminua a velocidade e depois aumente

Quase todas as entradas dessa tabela são falhas de movimento ou medição, não de algoritmo. Essa distribuição é o mais importante a saber antes de começar, porque ela indica onde dedicar seu tempo.

Se quiser as ideias de mapeamento e planejamento sem componentes, o simulador do solucionador de labirintos executa a mesma estratégia de duas fases no navegador, e o caminho de planejamento de caminho e mapeamento prossegue até A* e SLAM. Para um primeiro robô de labirinto muito mais barato, o solucionador de labirinto com fita usa fita em vez de paredes e não precisa de sensores de distância.

Roteiro do projeto

O caminho de construção

Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.

0 / 16 concluídos

100%
Componente

Adicione sensores de tempo de voo

Componente

Ver componente
Componente

Adicione motoresredutores com encoder

Componente

Ver componente
Tutorial

Fique centralizado e vire em ângulo reto

1,5 h

Abrir tutorial
Caminho de aprendizagem

Planejamento de caminho e mapeamento

Caminho de aprendizagem

Abrir caminho
Montagem

Faça-o mapear o labirinto

Construção

Objetivo

Faça-o percorrer a rota

Objetivo

Componentes

Tutoriais deste caminho

Pratique antes de fazer a fiação

Ajuste no simulador ao vivo

O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.

Perguntas frequentes

O que é um micromouse?

Um pequeno robô autônomo que resolve um labirinto com paredes. O micromouse também é o nome da competição de robótica contínua mais antiga do mundo. O labirinto padrão tem 16 por 16 células de 18 cm, com o objetivo no centro, e o robô não recebe mapa — precisa explorar, construir um e então percorrer a rota mais rápida que conseguir encontrar. É um problema completo de robótica dentro de uma caixa: medição, movimento preciso, mapeamento e planejamento precisam funcionar juntos, e a falha de qualquer um deles aparece imediatamente.

Por que usar sensores de tempo de voo em vez de ultrassônicos?

Por três motivos, e o labirinto agrava todos eles. Um feixe ultrassônico se espalha por cerca de 15 graus, então, em um corredor estreito, ele atinge as paredes dos dois lados do ponto mirado. Vários sensores ultrassônicos interferem entre si e ouvem os pulsos uns dos outros. E cada leitura leva milissegundos de tempo de voo, o que limita a velocidade do laço de controle. Um VL53L0X tem um feixe estreito, não é afetado pelos vizinhos e faz uma leitura em cerca de 20 ms.

Preciso de um giroscópio se tenho encoders?

Para um labirinto, sim. Encoders medem a rotação das rodas, não a rotação do robô, e elas diferem sempre que uma roda desliza — exatamente o que acontece durante uma curva no lugar. Um erro de 2 graus por curva é imperceptível uma vez e fatal após dez. O giroscópio mede diretamente a rotação real do robô, então as curvas continuam perfeitamente quadradas, aconteça o que acontecer com as rodas.

Como isso difere do solucionador de labirinto de linha?

São robôs diferentes que apenas compartilham uma palavra. Um labirinto de linha é fita preta sobre uma placa, lida por uma matriz de refletância apontada para baixo, e a memória de rota LSRB elimina becos sem saída de uma sequência de curvas. Um micromouse tem paredes físicas, lê-as com sensores de distância e precisa construir um mapa real do labirinto para planejar entre células que nunca percorreu. O labirinto de linha é muito mais barato de construir; o micromouse é o que ensina mapeamento.

Por que meu robô resolve o labirinto, mas bate durante a passagem rápida?

Porque a velocidade muda a física, não o algoritmo. Mover-se mais rápido significa maior deslizamento das rodas, maior distância de frenagem e menos tempo para o laço de seguimento de parede corrigir antes da próxima célula. A correção usual não é aumentar os ajustes, mas começar a passagem rápida mais devagar e aumentar a velocidade depois que a camada de movimento estiver comprovada. É também por isso que os micromouses de competição se requadram contra as paredes sempre que podem — é a única maneira de remover o erro acumulado, em vez de limitá-lo.

Posso construir um micromouse em um Arduino Uno?

Para um primeiro micromouse, sim. O Uno pode operar três sensores VL53L0X e uma IMU em I²C e manter um mapa de paredes de 16 por 16 em algumas centenas de bytes. O que ele não pode fazer é competir — micromouses de competição usam controladores de 32 bits mais rápidos para que o laço de movimento rode na faixa dos quilohertz e o planejador possa recalcular constantemente. Construa primeiro o lento; quase tudo o que você aprender será transferível.