Симулятор прохождения лабиринта по линии с LSRB
Запустите в браузере симулятор лабиринта на ленте: он обнаруживает перекрёстки, а правила LSRB убирают тупики и оставляют кратчайший маршрут.
- Категория
- Arduino
- Время
- 2–3 hours
- Платформа
- Браузер · Arduino
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.
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.
- 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 очень компактен, но требует лабиринта без циклов, а заливка тяжелее, но справляется с любым лабиринтом.
Дополнительные материалы
Источники
Авторитетные источники, чтобы пойти глубже ограниченной учебной модели этого симулятора.