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

Симулятор прохождения лабиринта по линии с LSRB

Запустите в браузере симулятор лабиринта на ленте: он обнаруживает перекрёстки, а правила LSRB убирают тупики и оставляют кратчайший маршрут.

Категория
Arduino
Время
2–3 hours
Платформа
Браузер · Arduino
Техническая схема: Симулятор прохождения лабиринта по линии с LSRBJUNCTIONS → L S R B → ROUTEBB

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

Введение

Робот для прохождения лабиринта по линии умеет не только следовать, но и выбирать. Лаборатория ведёт его по чёрной ленте, классифицирует перекрёстки и записывает один символ на ход. После финиша правила LSRB по очереди убирают обходы тупиков, пока не останется строка без B — кратчайший маршрут, который робот проходит снова.

Live lab / Junction detection & LSRB route memory

Line maze simulator

A line follower drives a taped maze, recording every turn as L, S, R or B. Watch it back out of dead ends, then watch the substitution rules collapse that string into the shortest route — and drive it again.

Browser native
A line maze lab. A robot starts at the bottom-left of a taped maze and follows the left-hand rule to the finish at the top-right, recording one turn symbol per junction and backing out of every dead end. The LSRB substitution rules then collapse that record into the shortest route, which the robot drives again as a speed run. Use the controls below to run it or step one move at a time.

The dark lines are the tape. The orange trail is everywhere the robot drove while exploring, dead ends included; the teal line is the simplified route it speed-runs. The bar above the robot is its eight-channel reflectance array — a whole side lights up when a branch opens there.

  • Tape
  • Explored (dead ends included)
  • Simplified route
  • Finish

Route memory

The robot writes one symbol per move. Every B is a dead end it had to reverse out of.

Press Start — the string builds as the robot drives.

Simulation

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

Phase
Ready
Junction
—
Explored turns
— moves
Simplified turns
— 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.

Управление

Режим выбирает между полным запуском из трёх актов — исследование, упрощение и быстрое прохождение — и переходом сразу к готовому маршруту. Скорость выполнения задаёт скорость движения робота. Пуск, Пауза и Шаг запускают его непрерывно или по одному ходу, Сброс повторяет тот же лабиринт, а Новый лабиринт создаёт новый. Установите фокус на холсте и используйте Space, N, R, M и F для тех же элементов управления с клавиатуры.

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

Теория

Робот для прохождения лабиринта по линии состоит из двух слоёв, и именно их разделение делает задачу управляемой.

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

Верхний слой просыпается только тогда, когда лента ветвится. Он классифицирует перекрёсток — левая ветвь, правая ветвь, T-образный перекрёсток, крестовина, тупик или финиш — выбирает ветвь по правилу левой руки и добавляет один символ к строке. Линейка, нарисованная поперёк передней части корпуса робота в этом симуляторе, — это массив датчиков; вы можете видеть, как при ветвлении загорается целая его сторона.

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

Алгоритм

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

Каждый ход добавляет символ. L, S и R — повороты; B появляется только там, где робот выходил задним ходом из тупика. Поэтому каждый B в готовой строке отмечает ошибку вместе с поворотом перед ним и после него.

Это трёхсимвольное окно всегда можно заменить одним поворотом, потому что три поворота в сумме дают угол. Если считать поворот налево как −90°, прямо как 0°, направо как +90°, а назад как 180°, то L B L даёт 0°, то есть S: проехать прямо, вообще не заходя в боковую ветвь. Шесть правил подстановки — это та же арифметика, представленная таблицей.

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

Исходный код

// Repeat until a full pass changes nothing: collapsing one detour
// can push two turns together that are themselves reducible.
void simplify(String& route) {
  bool changed = true;
  while (changed) {
    changed = false;
    for (int i = 1; i + 1 < route.length(); i++) {
      if (route[i] != 'B') continue;          // windows centre on a turn-back
      route = route.substring(0, i - 1)
            + fold(route[i - 1], route[i + 1])
            + route.substring(i + 2);
      changed = true;
      break;
    }
  }
}

fold — это таблица подстановок, и она короткая, поскольку представляет собой только арифметику углов: складываются два поворота по обе стороны от разворота на 180°, результат переносится в диапазон ±180° и сопоставляется с символом.

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

Лента отображается идеально чёрной на идеально белом фоне без заломов, бликов и теней, а массив датчиков отражения сообщает идеальные двоичные значения на фиксированной высоте. Реальный массив IR видит отражения в оттенках серого, которые меняются вместе с освещением, высотой датчиков и износом ленты, поэтому перед каждым реальным запуском необходимо откалибровать белый и чёрный цвета, как указано в разделе о соединениях. Симулятор также запускает контур ПИД-регулятора с идеальным периодом и продвигает одну чистую клетку за одно решение; на Arduino появляются дрожание цикла, проскальзывание колёс и смещение при монтаже 2 mm, которые приводят к неверной классификации перекрёстков. Переносите сюда коэффициенты и строку LSRB, а не числа.

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

Робот, моделируемый в этой лаборатории, соответствует пути сборки робота для прохождения лабиринта по линии: Arduino Nano считывает восьмиканальную линейку датчиков отражения через аналоговые входы и управляет двумя редукторными двигателями через TB6612FNG.

Главное правило соединений касается разделения питания. Аккумулятор двигателей подключается только к выводу VM драйвера; 5 V Arduino питает только логику; все общие провода — плата, драйвер, массив датчиков и отрицательный вывод аккумулятора — должны быть соединены, иначе управляющие сигналы не имеют общей точки отсчёта, а отказ будет незаметным.

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

Компоненты

  • Arduino Nano или Uno
  • Восьмиканальная линейка ИК-датчиков отражения
  • Двойной драйвер двигателя TB6612FNG
  • Два редукторных двигателя постоянного тока (DC) на шасси 2WD
  • Чёрная электроизоляционная лента на светлой подложке

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

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

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

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

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

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

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

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

Что такое робот для прохождения лабиринта по линии?

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

Чем лабиринт по линии отличается от лабиринта Micromouse?

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

Что означает LSRB?

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

Почему робот не может решить в момент обнаружения перекрёстка?

Потому что показания датчиков неоднозначны. Т-образный (T) перекрёсток, перекрёсток четырёх направлений и метка финиша одновременно активируют весь массив, а левая ветвь читается одинаково независимо от того, продолжается ли линия прямо. Робот должен записать, какие ветви появились, проехать вперёд примерно на одну длину робота и считать показания ещё раз, чтобы узнать, есть ли путь прямо. Решение по первому показанию — самая частая причина уверенных неверных поворотов.

Работает ли LSRB на каждом лабиринте?

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

Сколько памяти это занимает на Arduino?

Почти никакой — в этом и заключается привлекательность. Вся карта представлена одним массивом символов: для соревновательного лабиринта это несколько десятков байтов, потому что робот не хранит сам лабиринт, а только сделанные повороты. Робот с заливкой по расстоянию, напротив, хранит значение расстояния для каждой клетки сетки. Это компромисс: LSRB очень компактен, но требует лабиринта без циклов, а заливка тяжелее, но справляется с любым лабиринтом.

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

Источники

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