Реактивная навигация: научите робота обходить препятствия
Вы сможете научить робота самостоятельно обнаруживать препятствия и выбирать направление движения: без карты, только на достоверных измерениях и цикле поведения.
Реактивная навигация — первый подход, который обычно применяют при разработке роботов: вместо хранения карты и планирования маршрута робот просто реагирует на текущие показания датчиков. Измеряет пространство впереди, принимает решение, перемещается и повторяет цикл много раз в секунду. Это недорого, надёжно и достаточно, чтобы робот блуждал в загромождённой комнате, ни во что не врезаясь: именно такое поведение лежит в основе каждого робота для обхода препятствий начального уровня.
Этот путь развивает навык слой за слоем. Сначала вы преобразуете исходный ультразвуковой сигнал в достоверное расстояние, затем узнаете, почему показания датчика скачут и как их фильтровать. Вы сравните ультразвуковой и лазерный датчики времени пролёта, чтобы понимать, с каким датчиком и в каких условиях показания недостоверны, добавите сканирование сервоприводом, чтобы робот видел свободное направление, объедините всё в конечный автомат поведения и завершите настройкой полного контура в симуляторе.
Проходите узлы по порядку: каждый открывает следующий после выполнения, а прогресс сохраняется на этом устройстве. Когда будете готовы создать настоящую систему, этот путь непосредственно приведёт к проекту робота для обхода препятствий.
Прежде чем начать
Вам нужно уметь считывать датчик и управлять двумя двигателями; управляющая часть рассмотрена в пути по управлению двигателями. Здесь намеренно не используются карта, локализация и алгоритм планирования; именно это делает реактивную навигацию подходящим первым подходом.
Чему вы сможете научиться
- Преобразовать ультразвуковой сигнал в расстояние, на которое можно опереться, с тайм-аутом, не позволяющим отсутствующему echo остановить цикл, и медианным фильтром, не дающим от одного ошибочного показания увести робот в сторону.
- Назвать датчик, которому следует доверять для конкретной поверхности, и объяснить, почему лазерный датчик времени пролёта и ультразвуковой датчик полностью по-разному реагируют на материалы.
- Провести датчиком по дуге и выбрать наиболее свободный азимут по показаниям.
- Представить поведение явными состояниями вместо вложенных условных конструкций, чтобы на вопрос «что робот делает прямо сейчас?» всегда был ответ.
Где обычно возникают трудности
Считывание датчика, пока сервопривод ещё движется. Результат относится к объекту, на который датчик смотрел в середине прохода, поэтому робот уверенно направляется к стене. После команды на угол и до отправки сигнала добавьте задержку на стабилизацию.
Отсутствие тайм-аута для echo. Если сигнал не возвращается, а на мягкой поверхности или
при большом угле это происходит часто, наивный pulseIn блокирует весь цикл. Робот иногда
выглядит зависшим.
Доверие одному измерению. Ультразвуковые датчики иногда выдают резко ложные значения. Одно ошибочное показание 20 cm в открытом пространстве достаточно для аварийного поворота. Снимите три показания и используйте медиану.
Наклонные и мягкие поверхности. Звук, падающий на стену под крутым углом, отражается от неё в сторону от датчика, поэтому стену под 45° можно принять за свободное пространство. Подушки и шторы полностью поглощают сигнал. Это физическое ограничение, а не ошибка; поведение должно быть рассчитано на него.
Колебания у порога. С одним порогом остановки робот возле него многократно переключается между движением и поворотом в секунду. Используйте два порога: останавливайтесь ближе и возобновляйте дальше, чтобы поведение имело гистерезис и принимало решение.
Что понадобится
| Что | Зачем это нужно пути | Примечания |
|---|---|---|
| HC-SR04 или VL53L0X | Измерение расстояния, на котором построен весь путь | Соответственно ~$2 и ~$5 |
| Любительский сервопривод | Чтобы датчик мог смотреть не только прямо перед собой | Для навески датчика достаточно SG90 |
| Один или два рычажных микропереключателя | Единственный датчик, который никогда не лжёт о столкновении | Дешёвая страховка от любых перечисленных ниже сбоев измерения дальности |
| Шасси робота с приводом | Два двигателя и уже управляемый драйвер | Путь по управлению двигателями подготовит вас |
| Загромождённый пол | Среда испытаний, в которой должны быть мягкая и наклонная поверхности | Подушка и открытая дверь — две лучшие испытательные преграды |
Почему путь устроен именно так
Сначала измерение, потом решение — всегда. Почти каждое неправильное поведение при обходе действует правильно на неверные данные. Пока измерению расстояния нельзя доверять: тайм-аут для отсутствующего echo, медиана из трёх значений для выбросов, никакая логика поведения не создаст правильно работающего робота. Отладка в обратном порядке заставит подозревать конечный автомат в неисправности, находящейся в датчике.
Сначала сравнение датчиков, затем выбор одного. Узел сравнения существует, потому что ультразвуковой и лазерный датчики полностью по-разному реагируют на разные материалы, а выбор зависит от комнаты, в которой едет робот. Один осознанный выбор намного дешевле обнаружения ошибки после сборки шасси вокруг неправильного датчика.
Сначала фильтрация, затем сканирование. Проход сервоприводом умножает частоту ошибок датчика на число опрашиваемых углов. Если одно измерение ненадёжно, девятиточечное сканирование даёт девять шансов выбрать неверное направление, и робот уверенно направляется к стене.
Сначала сканирование, затем решение. Робот, видящий только вперёд, имеет ровно два варианта: остановиться или повернуться, не имея данных. Возможность измерить несколько азимутов превращает обход из рефлекса в выбор — именно здесь поведение начинает выглядеть интеллектуальным.
Сначала конечный автомат, затем алгоритм. Алгоритм обхода препятствий является конечным автоматом; отдельное изучение структуры означает, что последний узел посвящён робототехнике, а не распутыванию потока управления.
Регистрация касаний используется на протяжении всего пути. Датчик касания намеренно не оставлен напоследок. У каждого датчика дальности на этом пути есть невидимые поверхности, поэтому робот без датчика касания может упереться в занавеску и толкать её до поломки. Это самый дешёвый способ повысить надёжность всего робота.
Контрольные точки: как проверить усвоение этапа
| Этап | Проверка | Признак успешного прохождения |
|---|---|---|
| Измерение расстояния | Наведите датчик на стену на 30 cm и выводите значение одну минуту | Стабильно с точностью до сантиметра или двух, без нулей и зависаний при наведении в потолок |
| Тайм-аут | Наведите датчик в открытое пространство и наблюдайте частоту цикла | Цикл сохраняет интервал: отсутствие echo не должно означать замерший робот |
| Медианный фильтр | Многократно проводите рукой через луч | Случайные резкие значения исчезают на выходе, а реальное приближение остаётся видимым |
| Сравнение датчиков | Измерьте подушку, стену под 45° и тёмную матовую поверхность | До измерения можете предсказать, какой датчик на чём даст сбой |
| Сканирование сервоприводом | Проведите сканирование и выведите расстояние для каждого угла в открытом дверном проёме | Максимум отчётливо виден на проёме, а показания повторяются от прохода к проходу |
| Задержка на стабилизацию | Намеренно удалите задержку на стабилизацию | Показания размазываются по углам; теперь вы знаете, как выглядит этот сбой |
| Конечный автомат | Выводите текущее состояние на каждом проходе цикла | Всегда можно назвать, что делает робот, и для каждого перехода видна причина |
| Датчик касания | Медленно нажмите и посчитайте события | Одно нажатие создаёт ровно одно событие, а не девять, создаваемые исходным переключателем |
| Полное поведение | Запустите в загромождённой комнате на пять минут | Робот справляется, а при застревании можно назвать состояние |
Где заканчивается этот путь
У реактивной навигации есть жёсткий предел, и его стоит назвать прямо: реактивного робота нельзя отправить в конкретное место. У него нет памяти, поэтому он не может пойти на кухню, не может гарантировать покрытие всего пола и не может избежать угла, в котором застрял в прошлый раз. Это не пробелы реализации; именно так выглядит отсутствие карты.
Путь также не рассматривает две следующие темы. Следование за стеной — естественное продолжение и первое поведение, начинающееся выглядеть как план, поскольку робот, удерживающий фиксированное расстояние от стены с одной стороны, детерминированно обходит всю комнату. А покрытие, то есть целенаправленный обход области вместо бесцельного блуждания, — место, где отсутствие памяти наконец становится неприемлемым.
Когда это произойдёт, ответом будет планирование пути и построение карт, а этот путь — правильная подготовка, поскольку каждому роботу для построения карты по-прежнему нужны выработанные здесь рефлексы на случай, когда карта окажется неверной.
Дорожная карта обучения
Путь
Проходите узлы по порядку — каждый открывает следующий, когда вы его выполните. Ваш прогресс сохраняется на этом устройстве.
0 / 11 выполнено
Частые вопросы
Часто задаваемые вопросы
Что такое реактивная навигация в робототехнике?
Навигация без карты и без плана. Робот измеряет, что находится перед ним прямо сейчас, решает, как поступить, перемещается и повторяет цикл, часто пятьдесят раз в секунду. Он никогда не спрашивает, где находится, потому что ему это знать не нужно. Такой подход дешёв, надёжен и невосприимчив к ошибкам локализации, которые ломают навигацию по карте, но не позволяет выполнять действия, требующие памяти: робот не может пойти в заданное место, гарантировать покрытие всей комнаты и может бесконечно попадать в ловушку вогнутого угла.
Почему мой робот, обходящий препятствия, направляется прямо в стены?
Почти всегда причина в датчике, а не в логике, и обычно это одна из трёх причин. Ультразвуковой сигнал, падающий на стену под крутым углом, отражается в сторону, а не обратно, поэтому стена под 45° читается как свободное пространство; это физика, а не неисправность. Мягкие поверхности, например шторы и подушки, полностью поглощают сигнал. Если считать показание датчика до окончания поворота сканирующего сервопривода, измеренное расстояние относится к объекту, на который он смотрел в середине сканирования. После команды на угол добавьте задержку на стабилизацию, а также установите датчик касания, чтобы контакт всегда обнаруживался даже при сбое измерения дальности.
Почему мой робот начинает метаться у препятствия?
Из-за единственного порога остановки. Когда робот находится рядом с ним, небольшие изменения измерения многократно меняют решение в секунду, и робот мечется вместо того, чтобы принять решение. Используйте два порога с промежутком: останавливайтесь на 20 cm и возобновляйте движение только на 30 cm. Этот промежуток называется гистерезисом и заставляет поведение сделать выбор. Тот же приём устраняет почти все колебания в коде робота, вызванные порогами, а не только этот случай.
Ультразвуковой датчик или лазерный датчик времени пролёта для обхода препятствий?
Они ломаются на противоположных материалах, поэтому выбор прост, если знать своё окружение. У ультразвукового датчика широкий конус с полууглом примерно 15°, поэтому он обнаруживает ножку стола, но не может определить её положение, и не видит мягкие и круто наклонённые поверхности. У лазерного датчика VL53L0X узкий луч, поэтому он точно определяет положение, но может полностью пропустить тонкое препятствие, а при ярком внешнем освещении испытывает трудности с тёмными, матовыми и зеркальными поверхностями. Для блуждания в загромождённой комнате широкий ультразвуковой конус действительно является преимуществом. Для измерения расстояния до конкретного объекта выигрывает лазер.
Нужен ли конечный автомат для обхода препятствий?
Он нужен, как только у поведения становится больше двух состояний, а обход препятствий почти сразу достигает этой границы: движение, остановка, сканирование, поворот, откат, восстановление. В виде вложенных условных конструкций он становится нечитаемым за полдня, а кроме того, вы теряете возможность ответить на вопрос «что робот делает прямо сейчас?», с которого начинается каждая отладка. Явный конечный автомат превращает ответ в одну переменную, которую можно вывести.
Может ли реактивный робот застрять?
Да, и это свойство подхода, а не ошибка, которую можно устранить. Робот без памяти в вогнутом углу или тупиковой зоне U-образной формы повернётся в наиболее свободную сторону, проедет и вернётся в исходную точку, повторяя это бесконечно. Обычные меры — случайная составляющая при выборе направления поворота и детектор застревания, запускающий более крупный манёвр выхода после нескольких неудачных попыток. Настоящее решение — память, то есть карта, а это уже другой путь.