Соберите робота для покрытия помещения
Робот, который самостоятельно покрывает помещение с помощью всего лишь двух концевых выключателей, и измеренное обоснование того, стоит ли добавлять одометрию и планировщик.
Что вы собираете
Робота, задача — не добраться до определённого места, а побывать везде. Это звучит проще, чем навигация, но на самом деле задача сложнее: нет цели, к которой можно направляться, и из текущего положения нельзя понять, насколько успешно идёт работа.
Это также проект, который больше всего вознаграждает измерения до сборки. Вся первая половина — робот с двумя выключателями, не знающий, где находится, — и он работает. Это по-настоящему неудобное открытие, если вы собирались потратить выходные на карту.
Число, определяющее проект
Площадь пола, делённая на ширину щётки, — расстояние, которое прошёл бы идеальный робот:
d_optimal = A / w
Помещение 20 m² и щётка 250 mm дают 80 m. Каждая стратегия оценивается как кратное этому значению, и кратные сильно различаются:
| Стратегия | Расстояние до 90% | В этом помещении при 0.25 m/s |
|---|---|---|
| Идеальный проход | 1.0× | 5 мин |
| Плановое покрытие змейкой | 1.35× | 7 мин |
| Случайное отражение | 2.9× | 15 мин |
| Спираль с переносами | 5.5× | 30 мин |
Эти значения получены запуском симулятора покрытия в пяти помещениях. До покупки чего-либо запустите его самостоятельно и переставляйте мебель во время работы: числа меняются вместе с помещением, и в этом состоит большая часть урока.
Перечень компонентов
| Компонент | Кол-во | Примерная стоимость | Примечания |
|---|---|---|---|
| Arduino Uno | 1 | $5–8 | Режиму случайного блуждания почти ничего не нужно; плановому покрытию нужны энкодеры |
| Концевые выключатели | 2 | $1 | Левый и правый за изогнутой оболочкой. Основные датчики здесь |
| массив ИК-датчиков отражения (IR) | 1 | $5 | Обнаружение обрыва — направлен вниз на край пола, а не вперёд на линию |
| Двигатели N20 с энкодерами | 2 | $16 | Нужны для планового покрытия; случайное движение работает без них |
| TB6612FNG | 1 | $3 | |
| Шасси 2WD | 1 | $10 | Здесь круглое шасси лучше квадратного: оно не застревает в углах |
| Аккумулятор | 1 | $8 | Покрытие занимает много времени, поэтому ёмкость важнее, чем в других сборках |
Итого: примерно $50–65.
Это единственный проект на сайте, где самый дешёвый датчик является основным. Два концевых выключателя и случайный поворот при достаточном времени покрывают всё помещение — именно так работали роботы-пылесосы первого поколения, и такую основу стоит построить прежде, чем переходить к чему-либо более сложному.
ИК-массив (IR) здесь используется необычно: направлен вниз на пол как датчик обрыва, а не вперёд на линию. Робот, покрывающий помещение, обязательно найдёт верхнюю площадку лестницы.
Порядок сборки
1 — Сравните стратегии в симуляторе. Час здесь экономит выходные. Следите, как выравнивается кривая покрытия, и заметьте, что все три стратегии одинаковы на первой половине пола.
2 — Соберите привод и бампер, и больше ничего. Два рычажных микросвыключателя за пружинной оболочкой, охватывающей с каждой стороны не менее 45°, подключённые нормально разомкнутым контактом к «земле» с включёнными внутренними подтягивающими резисторами. Правильно устраните дребезг: одно нажатие даёт девять фронтов, и прерывание, считающее их, сообщит о столкновении девять раз.
3 — Добавьте датчики обрыва до первого автономного запуска. Направленные вниз отражательные датчики на передних углах, считываемые на каждом проходе. Затем определите допустимую скорость: произведение задержки на скорость плюс тормозной путь v²/2µg должно помещаться в расстояние между обнаружением обрыва и достижением его колёсами.
4 — Напишите случайное блуждание и дайте роботу поработать час. Едьте прямо; при столкновении немного отступайте и поворачивайте на случайный угол от 90° до 270°. Случайность здесь принципиальна: фиксированный угол отражения превращает помещение в бильярдный стол, и робот бесконечно вычерчивает замкнутую траекторию.
5 — Измерьте результат. Нарисуйте на полу сетку мелом или лентой, запустите на фиксированное время и посчитайте клетки. Это базовая линия и единственный честный способ узнать, стоит ли вам этапа 6.
6 — Только теперь добавьте одометрию. Энкодеры и одометрия дифференциального привода дают оценку положения. Запланируйте ряды змейкой на расстоянии ширины щётки с перекрытием 10–20% и обходите мебель, а не врезайтесь в неё.
7 — Наблюдайте, как ряды перестают быть параллельными. Это произойдёт примерно после десяти рядов из-за дрейфа одометрии. Это не ошибка планировщика: именно поэтому коммерческие машины используют гироскоп, потолочную камеру или маяк. Решение о добавлении такого устройства и составляет настоящее завершение проекта.
Важные замечания по оборудованию
Круглое шасси, колёса по диаметру. Круглый робот всегда может освободиться при столкновении поворотом. Квадратный может диагонально застрять в углу, и для выхода ему нужны задний бампер и дополнительная логика.
Щётка должна быть шире робота. Это не украшение. Планировщик сохраняет корпус на расстоянии от каждой стены, поэтому участки пола, до которых не достаёт корпус, остаются непокрытыми: в симуляторе 130 из 133 пропущенных планировщиком клеток находятся не дальше двух клеток от стены или ножки стола. Выступающая вперёд щётка возвращает эти участки.
Две половины бампера, а не одна. Один выключатель сообщает, что робот во что-то упёрся. Два сообщают с какой стороны, а именно эта информация нужна для выбора направления поворота; дополнительно нужен только один вывод.
Рассчитывайте аккумулятор в метрах, а не в минутах. Час при 0.25 m/s — это 900 m. Одно помещение при случайном блуждании занимает около 540 m для покрытия 99%. Три помещения не получится, и именно эта арифметика, а не какой-либо алгоритмический вывод, подтолкнула всю категорию продуктов к построению карт.
Как выглядит хороший результат
Покрытие — одно из немногих поведений робота, для которого существует одно наглядное числовое значение, и разница между стратегиями весьма заметна:
| Стратегия | Покрытие после прохождения 1× площади помещения | После 3× | После 10× |
|---|---|---|---|
| Случайное отражение | ~35% | ~70% | ~93% |
| Спираль, затем отражение | ~45% | ~78% | ~95% |
| Плановое покрытие змейкой | ~85% | ~99% | ~99% |
Форма этих столбцов — весь урок. Случайное отражение асимптотически приближается к полному покрытию, но никогда не достигает его: последние несколько процентов занимают больше времени, чем первые девяносто. Плановое покрытие достигает цели примерно за один проход, после чего ему больше нечего делать.
Это разница между наличием памяти и её отсутствием, выраженная числом.
| Измерение | Типичное значение |
|---|---|
| Шаг между линиями прохода | 80–90% эффективной ширины робота, чтобы проходы перекрывались |
| Дрейф курса за один проход 4 m | 3–8° без гироскопа, менее 2° с ним |
| Ошибка положения после десяти проходов | 15–40 cm только по одометрии |
| Практический размер помещения для чистой одометрии | До примерно 4 × 4 m, прежде чем покрытие заметно перекашивается |
Последняя строка показывает честный предел проекта. Плановое покрытие зависит от знания положения, а одометрия неограниченно накапливает ошибку, поэтому примерно после 4 m параллельные проходы перестают быть параллельными и появляются пропуски. Это не вопрос настройки; именно поэтому существует построение карт.
Когда что-то идёт не так
| Симптом | Обычная причина |
|---|---|
| Бесконечно вычерчивает один и тот же контур | Угол отражения задаётся детерминированно; сделайте его случайным |
| Быстро покрывает 90%, затем словно останавливается | Так и задумано: это экспоненциальная кривая покрытия |
| Одно столкновение учитывается несколько раз | Нет устранения дребезга или окно короче дребезга 5 ms |
| Съезжает со ступени | Слишком быстро для допустимой задержки датчиков обрыва либо контур блокируется |
| Ряды перестают быть параллельными | Одометрия, а не планировщик. Добавьте источник курса |
| Пропускает полосы между рядами | Шаг задан ровно шириной щётки без перекрытия |
| Застревает в углу | Квадратное шасси или отсутствует задний бампер |
| Никогда не попадает за диван | Переходы между отрезками рядов не были спланированы |
Шесть из этих восьми проблем относятся к измерениям, механике или арифметике, а не к алгоритму. То же распределение, что и у робота Micromouse, и по той же причине.
Для реактивного уровня, общего со всеми другими мобильными роботами, робот для обхода препятствий является более простой сборкой с почти тем же оборудованием, а план обучения реактивной навигации раскрывает измерения и поведение, лежащие в основе обеих систем.
Дорожная карта проекта
Путь сборки
Следуйте по дереву технологий от деталей к работающему роботу. Каждый узел открывается, когда выполнены его предварительные условия, а ваш прогресс сохраняется на этом устройстве.
0 / 18 выполнено
Компоненты
- КонтроллерArduino UnoПрощающая 8-битная плата, с которой большинство знакомится с робототехникой.
- ДатчикРычажный микропереключательЕдинственный бит данных, который сообщает роботу, что он уже столкнулся с препятствием.
- ДатчикМассив ИК-датчиков отражения (IR)Ряд инфракрасных «глаз», который сообщает роботу, где находится линия.
- Исполнительный механизмРедукторный двигатель N20 с энкодеромКомпактный двигатель с металлическим редуктором и энкодером: робот знает, насколько продвинулся.
- ДрайверДрайвер двигателей TB6612FNGMOSFET H-мост, сохраняющий то напряжение, за которое вы действительно заплатили.
- ШассиШасси робота 2WDПлатформа, к которой крепятся два двигателя, свободный опорный ролик и вся электроника.
- ПитаниеБатарейный блок питания роботаРазница между работающим роботом и роботом, который постоянно перезагружается.
Руководства на этом пути
- Средний · 30 minПланирование покрытия: обход всего полаПочему роботу без карты нужно в семь раз больше расстояния, чтобы закончить одну и ту же комнату.
- Начальный · 25 minДатчики удара и устранение дребезга при столкновениях роботаОдно нажатие, девять переходов — и прерывание считает каждый из них.
- Средний · 25 минОстановка у края: задержка и тормозной путьНасколько робот проезжает дальше только что увиденной линии и какая скорость позволяет ему остановиться вовремя.
- Начальный · 17 мин чтенияЧтение квадратурных энкодеров для измерения расстояния и скоростиПреобразование импульсов квадратурного энкодера в надёжные измерения направления, расстояния и скорости колеса.
- Средний · 20 min readОдометрия дифференциального привода по энкодерам колёсИнтегрируйте движение левого и правого колёс в позу мобильного робота, затем выявите и откалибруйте дрейф.
Попрактикуйтесь до сборки схемы
Настройте его в интерактивном симуляторе
Путь сборки проходит через лабораторию в браузере. Добейтесь правильного поведения здесь, а затем перенесите настройки на реального робота.
Часто задаваемые вопросы
Это робот-пылесос?
Это навигационная половина пылесоса, то есть интересная половина. Добавление всасывания — механическая задача: вентилятор, щётка, пылесборник и значительно больший аккумулятор, — и оно не научит ничему сверх задачи покрытия. Соберите его с сухой тканью или щёткой снизу: он действительно очистит твёрдый пол, и каждый алгоритм будет тем же, что использует коммерческий робот.
Почему начинать со случайного блуждания, если плановое покрытие лучше?
Потому что случайное блуждание работает с датчиками, которые можно собрать за послеобеда, и даёт измеренную базовую линию, которую должен превзойти планировщик. В симуляторе случайный режим покрывает половину пола за то же расстояние, что и планировщик, — разрыв появляется только после этого. Если сначала построить планировщик, вы проведёте выходные в борьбе с дрейфом одометрии, так и не узнав, что он дал.
Какой выигрыш даёт планировщик?
По результатам измерений в пяти помещениях лаборатории: плановое покрытие достигает 90% покрытия за 1.35 от теоретически минимального расстояния, случайное блуждание требует 2.9, а спиральная стратегия — 5.5. В помещении площадью 20 квадратных метров со щёткой 250 mm при 0.25 m/s это 7 мин против 15 и 30. Оговорка в том, что планировщик вообще не достигает 99%, поскольку сохраняет безопасный запас от каждой стены и ножки стола.
Нужны ли энкодеры?
Для первого робота они не нужны. Они указаны в списке компонентов, потому что нужны для второй половины проекта и потому что установить энкодеры на уже собранное шасси намного сложнее, чем предусмотреть их сразу. Купите двигатели с энкодерами, оставьте провода неподключёнными и используйте их при переходе к плановому покрытию.
Что не даст роботу упасть с лестницы?
Направленные вниз отражательные датчики на передних углах, считываемые на каждом проходе контура, и ограничение скорости, полученное расчётом, а не выбором наугад. До начала торможения робот проходит расстояние, равное произведению собственной задержки на скорость, а затем ещё тормозной путь, равный v в квадрате, делённому на удвоенное μg. Оба слагаемых должны помещаться в расстояние между местом, где датчик видит обрыв, и местом, куда доедут колёса.
Почему круглое шасси?
Потому что занимаемая круглым роботом площадь не меняется при вращении, поэтому он всегда может освободиться при столкновении поворотом на месте. Квадратный робот, застрявший в углу по диагонали, сначала обязан отступить, для чего нужны задний бампер и дополнительная логика. По той же причине почти каждый коммерческий робот для уборки пола имеет круглую форму.