Симулятор планирования пути покрытия для роботов-пылесосов
Сравните случайный отскок, спираль и змеевидное покрытие в браузерной лаборатории, измеряющей путь каждой стратегии относительно идеального прохода.
- Категория
- Автономные роботы
- Время
- 20–40 min
- Платформа
- Браузер · Arduino · Raspberry Pi
01 / Начните здесь
Введение
Покрытие пола отличается от достижения точки: планировщик пути строит один маршрут к цели, а планировщик покрытия должен посетить каждую достижимую клетку. Честная мера — расстояние на очищенный квадратный метр. Лаборатория сравнивает случайный отскок, расширяющуюся спираль и плановый змеевидный проход в одной комнате и сопоставляет их с теоретическим результатом.
Live lab / Coverage path planning
Coverage path planning simulator
Three ways to cover a floor — random bounce, expanding spiral, and a planned boustrophedon sweep — measured against the one number that matters: the distance a perfect robot would need.
Shaded floor is covered. The thin line is where the robot has driven, the circle is its brush. Below, the same run plotted as coverage against distance — the dashed straight line is a perfect sweep, the dashed curve is the theory for random sweeping. Drag furniture to rebuild the room.
- Covered floor
- Furniture (drag it)
- Path driven
- Perfect sweep
- Covered
- 0%
- Distance
- 0.00× optimal
- Half the floor
- —
- 90% covered
- —
- 99% covered
- —
- Bumps
- 0
Keyboard: focus the room, then Space to run/pause, N to step, R to reset, M for a new room, F for full screen. Press 1–4 to pick a piece of furniture and the arrow keys to move it.
Управление
Стратегия переключает между тремя вариантами. Комната перестраивается, а запуск немедленно начинается заново, потому что показатель покрытия имеет смысл только рядом с комнатой, в которой он измерен.
Перетащите любой предмет мебели указателем или нажмите 1–4, чтобы выбрать предмет и перемещать его стрелками. При перетаскивании запуск начинается заново. Поставьте стол в середину пола и следите, как расстояние планового прохода растёт, а покрытие падает.
Новая комната снова расставляет мебель. Скорость выполнения меняет плавность на терпение: случайной стратегии для завершения нужны несколько тысяч ходов, поэтому сначала включите быстрый режим.
Теория
Планировщик пути отвечает на вопрос как добраться туда. Планировщик покрытия отвечает на вопрос как охватить всю площадь, и у этих двух задач почти ничего нет общего.
Единственная честная мерка — расстояние, которое понадобилось бы идеальному роботу. Для пола площадью A и щётки шириной w проход по каждой клетке ровно один раз без повторов требует:
d_optimal = A / w
Всё, что показывает лаборатория, кратно этому числу. Стратегия со значением 1.2× тратит 20% времени на повторное прохождение уже обработанного пола; стратегия со значением 8× — семь восьмых времени.
Случайный отскок имеет замкнутую формулу, и она неутешительна. Робот без карты покрывает новый пол пропорционально доле ещё не покрытого пола, поэтому непокрытая площадь убывает экспоненциально:
covered(d) ≈ 1 − e^(−d / d_optimal)
Именно это пунктирная кривая на графике. Снимите с неё три точки: 63% пола после одного идеального расстояния, 90% после 2.3 и 99% после 4.6. Последняя десятая часть комнаты стоит вдвое больше, чем первые три четверти, — задача о сборщике купонов, теперь со щёткой.
Систематическое покрытие линейно, поэтому оно заканчивается на 1× плюс накладные расходы от расстояния между рядами и поворотов. В этой лаборатории они составляют около 35%.
Измеренные запуски близки к теории, а отклонения идут в ожидаемую сторону: настоящее случайное блуждание возвращается к близкому полу, а не телепортируется, поэтому результат немного хуже, чем предполагает кривая независимой выборки.
Алгоритм
Случайный отскок. Ехать прямо. При касании выбрать случайное новое направление и проверить, что оно свободно. Вот и всё, для чего нужен один бит данных датчика и никакой памяти.
Спираль, затем перенос. Поворачивать на угол, обратно пропорциональный расстоянию, пройденному от центра, что очерчивает расширяющуюся спираль. При касании двигаться прямо на фиксированное расстояние и начинать новую спираль. Отлично на открытом полу — у спирали почти нет перекрытия — и бессильно в загромождённой комнате, где каждая спираль обрывается после нескольких оборотов.
Плановый змеевидный проход. Три шага, и второй пропускают чаще всего:
- Расширить. Увеличить каждый объект на радиус робота и запас безопасности. Оставшаяся область — место, где может находиться центр робота.
- Разрезать. Пройти раздутую карту рядами с расстоянием в одну ширину щётки. Каждый ряд становится одним или несколькими свободными отрезками.
- Соединить. Обойти отрезки в змеевидном порядке и строить маршрут между соседними отрезками по кратчайшему пути через свободное пространство, чтобы робот объезжал вокруг дивана, а не въезжал в него.
Именно шаг 3 создаёт накладные расходы по расстоянию, поэтому в загромождённой комнате затраты на пройденный путь выше, чем в пустой.
Исходный код
Случайную стратегию стоит первой реализовать на настоящем роботе, потому что она работает с теми датчиками, которые у вас уже есть:
// Random-bounce coverage. Two bump switches, no map, no encoders.
const uint8_t BUMP_L = 2, BUMP_R = 3;
const uint16_t CRUISE = 170; // PWM
unsigned long turnUntil = 0;
int turnDir = 1;
void loop() {
bool left = digitalRead(BUMP_L) == LOW; // switches are active-low with pull-ups
bool right = digitalRead(BUMP_R) == LOW;
if (millis() < turnUntil) { // still executing a bounce
drive(turnDir * CRUISE, -turnDir * CRUISE);
return;
}
if (left || right) {
// Back off first — turning while wedged against a chair leg does nothing.
reverseFor(320);
// A random turn between 90 and 270 degrees. The randomness is what stops the
// robot tracing the same closed loop around the room forever.
turnDir = right ? -1 : 1;
turnUntil = millis() + random(420, 1250);
return;
}
drive(CRUISE, CRUISE);
}
Угол отскока должен быть случайным. Фиксированное отражение превращает комнату в бильярдный стол, а бильярдный шар на прямоугольном столе бесконечно очерчивает замкнутый путь, который пропускает большую часть поверхности.
Плановому проходу нужен описанный выше проход inflate-slice-join, а также одометрия, достаточно точная, чтобы удерживать прямой ряд; это уже другой класс роботов. Сначала создайте прототип здесь, где положение точно по построению, а затем решайте, сможет ли ваше оборудование его обеспечить.
Допущения и отличия от реального оборудования
Лаборатория даёт роботу идеальную одометрию, идеально известную карту, мгновенные повороты на месте и щётку, покрывающую чистый круг. У настоящей машины нет ни одного из этих свойств.
Проскальзывание колёс и дрейф гироскопа разводят ряды примерно через десять рядов, поэтому коммерческие роботы заново локализуются по стенам, ориентирам на потолке или маяку. Повороты требуют времени, за которое лаборатория не начисляет расстояние. А щётка покрывает не круг, а прямоугольник за роботом, поэтому движение назад по уже обработанному полу ничего не очищает.
Разрыв между стратегиями сохраняется несмотря на всё это. Если планировщик здесь обыгрывает случайный отскок в 3×, на настоящем оборудовании он, возможно, обыграет его примерно в 2×; порядок не изменится.
Схема соединений
Датчики здесь чисто разделяются на три задачи, и обязательна только первая.
Касание. Два микровыключателя на пружинном переднем бампере, подключённые с активным низким уровнем к выводам с поддержкой прерываний, со включёнными внутренними подтягивающими резисторами. Именно эти датчики делают возможным случайный отскок, и именно они выходят из строя последними.
Обрыв. Датчики отражения вниз в передних углах, считываемые на каждом проходе цикла. За покрытием робот посещает все места, включая начало лестничного марша; арифметика расстояния, которое робот проходит после края до остановки, разобрана здесь.
Положение. Квадратурные энкодеры на обоих колёсах и гироскоп, если ряды должны оставаться параллельными. Это нужно только плановой стратегии, и именно поэтому существуют две другие.
Описание сборки стратегий покрытия см. в проекте робота для покрытия комнаты; о реактивном слое под всеми ними рассказывает симулятор обхода препятствий, где рассматриваются пороги остановки и сканирование.
Список оборудования
Компоненты
- Шасси с дифференциальным приводом, ширину щётки которого можно измерить
- Обнаружение касаний, сохраняющее работоспособность при столкновении с мебелью
- Энкодеры, если робот будет планировать, а не блуждать
- Датчик обрыва, поскольку покрытие заканчивается у лестниц
Исследуйте граф
Где используется этот симулятор
Проекты, учебные пути и руководства, которые опираются на эту лабораторию.
Продолжайте сборку
Материалы для загрузки
Пользуйтесь этими справочными материалами на странице, пока работаете над проектом. Загружаемые пакеты проекта появятся только после публикации их исходников и версии.
Частые вопросы
Часто задаваемые вопросы
Почему дешёвые роботы-пылесосы двигаются случайными отскоками?
Потому что случайному отскоку не нужны карта, энкодеры и локализация: вся стратегия сводится к движению прямо и повороту на случайный угол при столкновении. Это помещается в восьмибитный микроконтроллер с двумя концевыми выключателями. Лаборатория показывает цену: первая половина пола покрывается так же быстро, как плановый проход, но 90 процентов требует примерно трёхкратного идеального расстояния, а 99 процентов — шести и более. Робот в конце добирается, поэтому стратегия и сохраняется, — просто тратит час на двадцать минут работы.
Почему покрытие в конце такое медленное, а в начале быстрое?
Потому что робот, проходящий без карты, покрывает новый пол пропорционально доле ещё не покрытого пола. В начале почти всё, по чему он проезжает, новое; в конце почти всё повторяется. Это даёт классическое экспоненциальное приближение: покрытие примерно один минус e в степени минус d, делённое на оптимальное значение; лаборатория показывает его пунктирной опорной кривой. Это та же математика, что и в задаче о сборщике купонов, и означает, что последняя десятая часть комнаты стоит больше первых трёх четвертей.
Если систематический проход так намного лучше, почему лаборатория останавливает его на 90 процентов?
Потому что планировщик должен оставлять корпус робота свободным от всего, поэтому он планирует путь с запасом от каждой стены и каждой ножки стола и никогда не покрывает то, до чего нельзя доехать. В этой лаборатории 130 из 133 клеток, пропущенных плановым проходом, находятся не дальше двух клеток от стены или предмета мебели. Именно поэтому у настоящих роботов-пылесосов есть боковая щётка, выступающая за корпус, и отдельный проход вдоль стен. Случайный отскок рано или поздно достигает этих краёв, но чисто случайно.
Что нужно плановому проходу, но не нужно случайному?
Ему нужно знать, где он находится. Змеевидный маршрут имеет смысл, только если робот может ехать по прямой, поворачивать на известный угол и сдвигаться вбок на ширину щётки, то есть выполнять одометрию, а одометрия дрейфует. Лаборатория планирует на идеальной карте с идеальным роботом, поэтому её 1.35 от оптимального следует считать нижней границей результата настоящей машины, а не целью. При проскальзывании колёс и дрейфе гироскопа ряды перестают быть параллельными примерно через десять рядов.
Насколько широкими должны быть ряды?
Одна ширина щётки минус выбранное намеренно перекрытие. Если расположить их ровно на одну ширину, любая ошибка направления оставит между рядами незачищенную полосу, которую последующий проход уже не найдёт. Перекрытие от 10 до 20 процентов закрывает полосы ценой увеличения расстояния на тот же процент. Лаборатория располагает ряды по наибольшему целому числу клеток, которое покрывает щётка, поэтому расстояние получается в 1.35 раза больше оптимального, а не 1.0: накладные расходы реальны, и каждый робот для покрытия платит свою версию этой цены.
Это применимо к чему-то, кроме пылесосов?
Та же задача возникает у робота-газонокосилки, очистителя бассейна, поломоечной машины, опрыскивателя посевов и дрона для съёмки. У всех есть рабочая ширина, область покрытия и энергетический бюджет, который делает расстояние величиной, которую нужно минимизировать. Стратегии различаются главным образом тем, может ли машина позволить себе датчики, чтобы знать своё положение: дрон для съёмки имеет GPS и всегда планирует, а очиститель бассейна ничего не имеет и всегда блуждает.
Дополнительные материалы
Источники
Авторитетные источники, чтобы пойти глубже ограниченной учебной модели этого симулятора.