Интерактивный симуляторСредний

Симулятор робота для лабиринта: заливка по расстоянию

Запустите робота для лабиринта в браузере: он исследует коридоры и тупики, затем заливкой по расстоянию находит кратчайший путь и проходит его на скорости.

Категория
ESP32
Время
2–4 hours
Платформа
Браузер · ESP32
Техническая схема: Симулятор робота для лабиринта: заливка по расстояниюWALL SENSING → FLOOD FILL

01 / Начните здесь

Введение

Роботы сначала исследуют лабиринт, затем оптимизируют маршрут. Лаборатория показывает обе фазы: обход в глубину по коридорам и тупикам с возвратом, затем заливку от цели, которая находит единственный кратчайший путь, и его быстрый проход. Наблюдайте, как робот пробует неверные пути и выбирает правильный — это принцип, который использует настоящий ESP32 Micromouse.

Live lab / Maze exploration & flood-fill shortest path

Maze solver simulator

Watch a robot explore a real maze — down every corridor, into dead ends, backtracking out — then flood-fill the map and speed-run the one shortest path to the centre.

Browser native
A twelve-by-twelve maze solver lab. A robot starts in the bottom-left corner, explores the maze depth-first — backtracking out of dead ends — then flood-fills to find and run the shortest path to the centre. Use the controls below to run it one move at a time.

Bold lines are maze walls. The shaded corridors are everywhere the robot explored (including dead ends it backtracked out of); the bold line is the shortest path found by flood fill; the triangle is the robot and its heading.

  • Wall
  • Explored (wrong paths)
  • Shortest path
  • Goal
Simulation

Ready. Press Start to explore the maze, or Step one move at a time.

Phase
Ready
Explored
1 / 144
Exploration
— moves
Shortest path
— moves
Saved
—
Maze
—

Keyboard: focus the maze, then use Space to run/pause, N to step, R to reset, M for a new maze, and F for full screen.

Управление

Выберите режим — Исследовать, затем пройти на скорости или Только быстрый проход — и нажмите «Пуск», чтобы посмотреть, как робот решает задачу, или «Шаг», чтобы выполнять по одному ходу. Новый лабиринт создаёт новый случайный лабиринт; Сброс повторяет тот же. Три скорости, сочетания клавиш и полноэкранный режим позволяют управлять запуском. Жирными линиями обозначены стены лабиринта, затенённые коридоры — все места, где побывал робот, включая тупики, а жирная линия — кратчайший путь, найденный заливкой по расстоянию.

Теория

Лабиринт на сетке состоит из клеток, соединённых открытыми рёбрами, а между остальными находятся стены. Чтобы найти кратчайший маршрут, робот сначала должен узнать лабиринт, поэтому в этой лаборатории выполняются две фазы.

Исследование. Робот обходит лабиринт в глубину по правилу левой руки: на каждом перекрёстке поворачивает налево, если может, иначе едет прямо, а затем направо. При попадании в тупик он возвращается к последнему перекрёстку и выбирает следующую ветвь. Повторение до посещения каждой клетки составляет карту всего лабиринта, включая все неверные пути, которые пришлось исключить.

Оптимизация. Когда карта готова, заливка по расстоянию назначает цели расстояние ноль и распространяет увеличивающиеся значения через каждое открытое ребро. Теперь в каждой клетке хранится расстояние до цели, поэтому кратчайший путь просто таков: из старта всегда переходить в соседнюю клетку с меньшим числом. Робот проходит этот путь на скорости — он намного короче бесцельного исследования.

Сетка восемь на восемь, окрашенная по значениям заливки относительно центральных целевых клеток. Четыре центральные клетки цели выделены и обозначены нулём, а в каждой окружающей клетке указано увеличивающееся число, равное расстоянию в шагах от цели, образующее плавный градиент до шести в углах.
Заливка по расстоянию обозначает каждую клетку её расстоянием до цели. Робот всегда переходит в соседнюю клетку с меньшим числом, поэтому само поле кодирует маршрут. Скачать SVG

Алгоритм

  1. Исследуйте лабиринт в глубину по правилу левой руки, выходя из каждого тупика с возвратом, пока не будут посещены все клетки.
  2. Запишите каждое открытое ребро с обеих сторон, чтобы готовая карта знала о каждой стене.
  3. Выполните заливку по расстоянию от цели: обозначьте её 0 и распространяйте увеличивающиеся расстояния через каждое открытое ребро.
  4. Считайте кратчайший путь с поля: из старта каждый раз переходите в соседнюю клетку, расстояние до которой на единицу меньше.
  5. Пройдите этот путь к цели на скорости.
  6. Сравните длину исследования с длиной кратчайшего пути, чтобы увидеть, насколько карта сократила блуждание.

Исходный код

Разделите исследование, построение карты, планирование и движение на отдельные функции:

// Phase 1 — map the whole maze, backtracking out of dead ends
exploreDepthFirst(map, robot);        // left-hand rule until every cell is visited

// Phase 2 — flood-fill the finished map and run the shortest path
map.floodFill(goal);                  // goal = 0, distances ripple outward
for (Cell c = start; c != goal; c = map.lowerNeighbor(c))
  robot.driveTo(c);                   // always step one distance lower

Такая граница позволяет проверить один и тот же планировщик в этой браузерной лаборатории, на настольном компьютере и на итоговом контроллере ESP32.

Допущения и отличия от реального оборудования

Лаборатория делает построение карты чистым, убирая сложную часть настоящего Micromouse — одометрию. Смоделированный робот перемещается ровно на одну клетку за шаг без проскальзывания колёс, смещения гироскопа и ошибки поворота на 90°, а его три датчика расстояния идеально сообщают о стенах без ложных срабатываний. Физическая конструкция на ESP32 накапливает ошибку курса и расстояния при каждом ходе, должна выравниваться по стенам и фильтровать показания ToF с учётом солнечного света и просадки питания, — поэтому руководство по точным поворотам и руководство по заливке уделяют больше времени движению, чем планированию. Используйте этот симулятор, чтобы понять, зачем заливке перепланировать, а не чтобы доказать работу слоя движения.

Схема соединений

Используйте внешний стабилизатор, рассчитанный на ток остановки двигателя. ESP32 и датчикам нужен стабильный логический источник даже при реверсе двигателей.

Блок-схема соединений робота для прохождения лабиринта. Датчики расстояния слева, спереди и справа подключаются к ESP32 по I²C или GPIO, колёсные энкодеры — к GPIO с поддержкой прерываний, а ESP32 управляет драйвером двигателей по PWM и линиям направления, а драйвер питает двигатели.
ESP32 считывает три датчика расстояния и энкодеры, затем управляет двигателями через драйвер с источником питания, рассчитанным на ток остановки. Скачать SVG

Список оборудования

Компоненты

  • Отладочная плата ESP32
  • Три датчика расстояния по времени полёта или в инфракрасном диапазоне
  • Два редукторных двигателя с энкодерами
  • Двойной драйвер двигателей и стабилизированный аккумуляторный источник питания
  • Компактное шасси с приводом на дифференциальном принципе

Исследуйте граф

Где используется этот симулятор

Проекты, учебные пути и руководства, которые опираются на эту лабораторию.

Продолжайте сборку

Материалы для загрузки

Пользуйтесь этими справочными материалами на странице, пока работаете над проектом. Загружаемые пакеты проекта появятся только после публикации их исходников и версии.

Частые вопросы

Часто задаваемые вопросы

Какой алгоритм прохождения лабиринта лучше всего подходит для первого робота?

Исследуйте лабиринт в глубину, чтобы составить его карту, а затем используйте заливку по расстоянию для поиска кратчайшего пути. Заливка по расстоянию — сильный учебный выбор, потому что каждой достижимой клетке присваивается значение расстояния, и каждый ход можно проверить. Этот симулятор сначала исследует лабиринт, а затем выполняет заливку по расстоянию на готовой карте, поэтому и построение карты, и планирование кратчайшего пути остаются понятными.

Как робот для прохождения лабиринта находит кратчайший путь?

Он не может узнать кратчайший путь, пока не увидит лабиринт, поэтому сначала исследует его. Этот симулятор, как и настоящий Micromouse, использует две фазы: этап исследования, который проходит каждый коридор и тупик для построения карты всего лабиринта, затем быстрый проход по единственному кратчайшему пути, который находит заливка по расстоянию на готовой карте. Первая фаза тщательная и медленная; вторая — короткая и оптимальная.

Чем заливка по расстоянию отличается от BFS или A*?

BFS и A* планируют на уже известном графе. Заливка по расстоянию предназначена для лабиринта, который ещё исследуется: она назначает цели расстояние ноль и распространяет увеличивающиеся значения через каждое ребро, не известное как заблокированное, а затем пересчитывает их, когда новая обнаруженная стена меняет карту. Само поле расстояний кодирует маршрут, поэтому роботу достаточно переходить в любую соседнюю клетку с меньшим значением.

Чем отличаются фазы исследования и быстрого прохода?

Исследование составляет карту лабиринта: робот обходит его в глубину, заходит в каждый коридор и тупик, выходит из неверных ветвей с возвратом, пока не узнаёт о каждой стене, — именно здесь видно, как он пробует все неверные пути. Быстрый проход использует готовую карту: заливка по расстоянию превращает её в поле расстояний, а робот следует единственному кратчайшему пути от старта к цели. Исследование медленное и тщательное; быстрый проход короткий и оптимальный.

Какие датчики нужны Micromouse или роботу для прохождения лабиринта?

Как минимум нужны датчики расстояния, направленные влево, вперёд и вправо, чтобы определить стены текущей клетки, а также колёсные энкодеры для точного перемещения на заданное число клеток и выравнивания по стенам после поворотов. Распространены датчики расстояния по времени полёта или в инфракрасном диапазоне; энкодеры важны, потому что только определение стен не позволяет узнать, на сколько переместился робот.

Почему использовать заливку по расстоянию, а не следование вдоль стены?

Следование вдоль стены — всё время держать одну руку на стене — просто, но не позволяет достичь цели, не соединённой с внешней стеной, например центра лабиринта Micromouse, и редко находит короткий маршрут. Заливка по расстоянию строит карту расстояний всего известного лабиринта, поэтому может достичь внутренней цели и улучшать маршрут по мере исследования.

Дополнительные материалы

Источники

Авторитетные источники, чтобы пойти глубже ограниченной учебной модели этого симулятора.