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

Симулятор обхода препятствий для мобильных роботов

Изучите реактивную навигацию, датчики расстояния и безопасную остановку с помощью симулятора обхода препятствий для проектов на Raspberry Pi.

Категория
Raspberry Pi
Время
2–3 hours
Платформа
Браузер · Raspberry Pi
Техническая схема: Симулятор обхода препятствий для мобильных роботовCLEARANCE FIELD

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

Введение

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

Live lab / Reactive range-sensing navigation

Obstacle avoidance simulator

Drive a mobile robot toward the goal while a fan of range sensors keeps it clear of obstacles. Reposition the scene by dragging or with the coordinate controls, add noise, and compare two steering rules.

Browser native
A top-down obstacle-avoidance robot simulator. Use the controls below to run it, or read the full theory and algorithm after this lab.

Lines are sensor rays; a brighter ray marks the nearest reading. The dashed line ahead is the predicted stopping distance. The green ring is the goal. Drag a scene item or use the position controls below.

Simulation

Paused. Press Start or Step to begin.

Robot & sensing
Scene position
Status
Seeking
Distance to goal
630 px
Min clearance
170 px
Stopping distance
24 px
Elapsed
0.0 s

Keyboard: focus the workspace, then use Space to run/pause, N to step, R to reset, D to add an obstacle, and F for full screen.

Управление

Рабочая область включает перемещаемые препятствия, скорость робота, дальность датчиков, поле зрения, шум измерений и порог безопасной дистанции. Лучи датчиков и предсказуемая безопасная дистанция остаются видимыми. Режим шага показывает, какое именно наблюдение вызвало каждое решение руления.

Теория

Робот должен остановиться или повернуть прежде, чем его очищаемая область пересечётся с препятствием. Безопасная дистанция зависит от текущей скорости, задержки регулятора, тормозной способности, неопределённости измерения и физического радиуса робота, а не только от последнего показания расстояния.

График необходимой безопасной дистанции в зависимости от скорости робота. Составляющая реакции растёт линейно со скоростью, но общая необходимая дистанция изгибается вверх, потому что тормозной путь растёт пропорционально квадрату скорости. Горизонтальная базовая линия отмечает фиксированный радиус робота плюс запас безопасности.
Необходимый запас растёт быстрее скорости: дистанция реакции линейна, но тормозной путь растёт как v², поэтому небольшое увеличение скорости требует значительно большего безопасного промежутка. Скачать SVG

Реактивные регуляторы, такие как потенциальные поля, превращают близкие препятствия в отталкивающие векторы, а цель — в притягивающий вектор. Они реагируют быстро, но могут попасть в ловушку локальных минимумов. Практический стек объединяет реактивную безопасность с глобальным или локальным планировщиком.

Алгоритм

  1. Отбрасывайте устаревшие и физически невозможные отсчёты расстояния.
  2. Преобразуйте действительные наблюдения в систему координат робота.
  3. Увеличивайте каждое препятствие на радиус робота и запас безопасности.
  4. Вычисляйте безопасную дистанцию до препятствия из скорости и оценённого замедления.
  5. Останавливайтесь, когда передний коридор небезопасен; иначе рулите к наиболее свободному сектору, ориентированному на цель.
  6. Ограничивайте ускорение и угловую скорость перед отправкой команд двигателям.

Исходный код

Сделайте решение в аварийной ситуации достаточно маленьким, чтобы его можно было исчерпывающе проверить:

def safe_velocity(target, ranges, stop_distance):
    front = [r for angle, r in ranges if abs(angle) < 0.35]
    if not front or min(front) <= stop_distance:
        return 0.0, choose_clear_turn(ranges)
    return limit_acceleration(target), steer_toward_clearance(ranges)

В настоящей системе сохраняйте время получения измерений и переходите в безопасное состояние с остановленными двигателями, когда необходимые данные становятся недоступными.

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

Мир здесь двумерный и показан сверху: лучи датчиков мгновенны, идеально тонки и никогда не перекрываются корпусом робота, а робот представляет собой диск, который может затормозить до нуля без инерции. На роботе Raspberry Pi ультразвуковые лучи расходятся на 15°, показания времени полёта зависят от поверхности и солнца, а безопасная дистанция до препятствия определяется реальной массой, моментом двигателя и задержкой цикла «восприятие — решение — действие» — всё это рассматривается в дорожной карте реактивной навигации. Симулятор также игнорирует дрожание цикла и просадку питания, поэтому рассматривайте кривую безопасной дистанции как форму, которую нужно усвоить, а не как число для копирования.

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

Перед подачей сигнала эха 5 V на GPIO Raspberry Pi преобразуйте уровни. Питайте двигатели отдельно и соедините общие провода в намеренно выбранной общей точке.

Блок-схема архитектуры датчиков обхода препятствий. Датчики расстояния по GPIO или I²C, камера по CSI и колёсные энкодеры по GPIO подают данные в Raspberry Pi. Pi управляет драйвером двигателей по PWM и линиям направления, а драйвер питает двигатели.
Восприятие, вычисления и исполнительные механизмы остаются разделёнными: несколько каналов датчиков питают Pi, а он управляет двигателями через изолированный драйвер и собственное питание. Скачать SVG

Управляемые эксперименты

1. Выведите порог остановки вместо того, чтобы угадывать его

Установите низкую скорость и уменьшайте порог остановки, пока робот не начнёт задевать препятствия. Запишите значение. Теперь удвойте скорость и повторите.

Нужный порог не удваивается, потому что он является суммой члена, масштабируемого со скоростью, и члена, масштабируемого с её квадратом:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Скорость Член задержки (80 ms) Тормозной путь (1 m/s²) Всего с радиусом 90 mm и запасом 50 mm
0.15 m/s 12 mm 11 mm 16 cm
0.30 m/s 24 mm 45 mm 21 cm
0.60 m/s 48 mm 180 mm 37 cm
0.90 m/s 72 mm 405 mm 62 cm

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

2. Добейтесь дрожания вокруг порога, затем исправьте его

Расположите робота так, чтобы он завис ровно на безопасной дистанции. С одним порогом он несколько раз в секунду переключается между движением и поворотом.

Теперь разделите их: останавливайтесь на 20 cm и не возобновляйте движение до 30 cm. Дрожание исчезает, потому что поведение становится гистерезисным. Этот зазор — гистерезис, и тот же приём устраняет почти все колебания вокруг порога в коде робота.

3. Намеренно загоняйте робота в ловушку

Постройте вогнутый угол — подкову — и позвольте роботу въехать внутрь. При детерминированном правиле «поворачивать в самую открытую сторону» он будет поворачивать, ехать и возвращаться туда же, где начал, бесконечно.

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

4. Сравните разрешение сканирования со временем сканирования

Увеличьте число углов сканирования и посмотрите, как две величины движутся в противоположных направлениях: решения о повороте становятся лучше, а робот дольше стоит на месте.

Сканирование — это слепой момент: робот остановлен и не продвигается. Обычный оптимальный диапазон — от трёх до пяти углов, а после него дополнительная информация редко оправдывает дополнительное время.

Что следует наблюдать

Поведение Причина
Задевает препятствия на скорости Порог не масштабирован под квадратичный тормозной член
Дрожит на фиксированном расстоянии Один порог и отсутствие гистерезиса
Мечется влево-вправо на месте Решение принимается повторно до того, как поворот что-то изменит
Бесконечно ходит кругами в углу Детерминированный выход из симметричной ловушки
Везде останавливается слишком рано Порог задан для худшего случая, а не для текущей скорости
Поворачивается к краю проёма Выбирается максимальный угол, а не взвешенный центроид

Переход к реальному оборудованию

Лучи симулятора мгновенны, без шума и бесконечно тонки. Настоящий ультразвуковой датчик не обладает ни одним из этих свойств, и именно различия составляют всю работу на реальном роботе:

Эта лаборатория HC-SR04 на настоящем роботе
Тонкий луч Конус примерно 15° шириной около 53 cm на расстоянии 1 m
Отражает каждая поверхность Мягкие и крутые поверхности могут вообще ничего не возвращать
Мгновенные показания До 25 ms на один импульс, между ними около ~60 ms
Нет сервопривода 100–200 ms — время установления для каждого угла сканирования
Нет шума Иногда возникают экстремальные значения, требующие медианного фильтра
Видит всё Занавес невидим — поэтому устанавливают концевые выключатели

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

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

Компоненты

  • Raspberry Pi с поддерживаемым источником питания
  • Два или более датчиков времени полёта или ультразвуковых датчиков
  • Необязательный модуль камеры для визуального обнаружения
  • Драйвер двигателей с отдельным питанием двигателей
  • Шасси с дифференциальным приводом и энкодеры

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

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

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

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

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

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

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

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

Почему одного датчика спереди недостаточно?

Одиночный луч оставляет слепые зоны рядом с роботом и не позволяет отличить узкий объект от стены. Несколько точек обзора или сканирующий датчик дают достаточно геометрии, чтобы выбрать более безопасный поворот.

Заменяет ли обход препятствий планирование пути?

Нет. Реактивный обход решает непосредственную опасность, а планировщик выбирает движение к цели. Надёжные роботы объединяют оба подхода и позволяют слою безопасности переопределить небезопасное запланированное движение.

Ультразвуковой датчик или датчик времени полёта — что лучше для обхода препятствий?

Ультразвуковые датчики дешёвы и работают на большинстве поверхностей, но имеют плохое угловое разрешение и слепую зону рядом с датчиком. Датчики времени полёта (ToF) дают более быстрое и точное измерение на короткой дистанции и узкий луч, но могут сбиваться от яркого солнечного света, тёмных или зеркальных поверхностей и отражений от углов. Многие роботы используют ультразвук для грубого покрытия, а ToF — там, где важна точная дистанция на коротком расстоянии.

Что такое слепая зона датчика и почему она важна?

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

Как рассчитать безопасную дистанцию до препятствия?

Безопасная дистанция складывается из дистанции реакции, тормозного пути, радиуса робота и запаса. Дистанция реакции равна скорости, умноженной на задержку цикла «восприятие — решение — действие», и растёт линейно со скоростью. Тормозной путь растёт пропорционально квадрату скорости, поэтому необходимый запас растёт быстрее самой скорости. Поэтому небольшое увеличение скорости может потребовать значительно большего безопасного промежутка.

Почему мой робот застревает перед препятствием?

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

Как фильтровать зашумлённые показания расстояния?

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

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

Источники

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