Руководство · Средний · 25 мин

Остановка у края: задержка и тормозной путь

Датчик обрыва даёт фиксированный запас в миллиметрах: сколько уходит на задержку, а сколько на тормозной путь.

Бюджет измеряется в миллиметрах, а не в миллисекундах

Робот с датчиком, направленным вниз, получает одну порцию информации — белый цвет, сейчас — и фиксированное расстояние, за которое нужно отреагировать. Мини-ринг сумо даёт 25 mm границы. Край стола даёт столько, сколько получилось из-за выноса датчика вперёд. В обоих случаях это расстояние, и робот расходует его двумя очень разными способами:

overshoot = v × t_latency  +  v² / (2a)

Первое слагаемое оплачено до начала торможения. Второе — то, что пол начисляет после его начала.

Они ведут себя совершенно по-разному при увеличении скорости, и понимание того, за что именно вы платите, отличает исправление за один день от бесполезного переписывания контура управления.

Два наложенных графика. Верхний показывает перелёт за линию в миллиметрах в зависимости от скорости в виде двух наложенных закрашенных полос: нижняя янтарная полоса — расстояние реакции, растущее линейно, верхняя голубая — тормозной путь, растущий как квадрат. Пунктирные горизонтальные линии отмечают 25 миллиметров одной границы и 65 миллиметров с датчиком, установленным на 40 миллиметров впереди; стрелка отмечает 0.98 метра в секунду, где суммарная кривая пересекает 65 миллиметров. Нижний график показывает, как максимальная безопасная скорость уменьшается при росте полной задержки от считывания до торможения от нуля до 60 миллисекунд, для силиконовой шины с трением 1.2 и пластикового колеса с трением 0.7.
Сверху: при задержке 25 ms и µ 1.2 робот со скоростью 1 m/s проезжает 67 mm за линию — 25 mm на реакцию и 42 mm на торможение. Полосы сравниваются при 0.59 m/s; выше этого преобладает торможение. Снизу: при 25 ms силикон даёт 0.98 m/s, а жёсткий пластик — только 0.79 m/s. Скачать SVG

Куда на самом деле уходит задержка

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

Этап Типичное значение
Установление инфракрасного излучателя (IR) и фототранзистора ~1 ms
Ожидание следующего прохода цикла до 20 ms
Решение и запись ШИМ <1 ms
Фактическая смена направления тока двигателя ~3 ms
Прохождение люфта редуктора до передачи момента колесу ~1 ms
Всего, в худшем случае ~25 ms

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

Датчик, который вы опрашиваете с частотой 50 Hz, игнорируется на 20 ms за раз. Обычная причина — не медленный процессор, а блокирующий вызов. Один pulseIn() ультразвукового датчика означает до 30 ms полной слепоты, а delay(20) для сервопривода — то же самое другими словами. Чтение датчика края на каждом проходе неблокирующего цикла ничего не стоит и убирает большую часть расстояния реакции.

Последняя строка удивляет людей. Смена направления двигателей не меняет направление колёс, пока шестерни не пересекут свой люфт, поэтому люфт редуктора — это свободный ход в худший возможный момент: 4° выходного люфта на колесе 32 mm дают 1.1 mm свободного движения до подачи тормозного момента.

Торможение — задача трения, а не двигателя

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

Те же двигатели, которые обеспечивают 25 N силы толкания, замедляли бы робота массой 500 g с ускорением 50 m/s². Пол разрешает только µg — 11.8 m/s² на силиконе и 6.9 m/s² на жёстком пластике. Привод имеет в четыре раза больше полномочий, чем ему разрешено использовать, поэтому тормозной путь полностью определяется шинами, а более мощный двигатель не уменьшает его ни на сколько.

Именно поэтому на нижней панели две кривые, а не одна. При задержке 25 ms переход от пластика к силикону повышает безопасную скорость с 0.79 до 0.98 m/s — прирост 24% от компонента, который одновременно даёт на 72% больше силы толкания.

Одна честная поправка: µ, измеренный перемещением неподвижного робота, — это статический коэффициент, а при резкой смене направления колёса скользят, и вы получаете кинетический коэффициент — обычно на 10–20% ниже. Считайте вычисленную скорость оптимистичной границей и работайте примерно на 80% от неё.

Какое слагаемое преобладает и что исправлять

Приравняйте слагаемые, и точка перехода получается ясной:

v × t = v² / 2a   →   v = 2at

При 25 ms и µ 1.2 это 0.59 m/s.

  • Ниже неё вы ограничены задержкой. Уменьшение периода цикла вдвое даёт больше, чем любой выбор шин. Здесь работает робот в режиме поиска, и это хорошие новости: исправление заключается в изменении программного обеспечения.
  • Выше неё вы ограничены сцеплением. Сцепление и распределение массы важнее частоты цикла, а после определённой точки единственный оставшийся ответ — ехать медленнее.

Большинство роботов, падающих с краёв, находятся в первом режиме, но настраиваются так, будто находятся во втором.

Дайте себе больше миллиметров

Бюджет не фиксирован. Это ширина границы плюс расстояние, на которое датчик вынесен перед колёсами, и второе слагаемое — свободная проектная переменная:

budget = border + sensor lead

Датчик на 40 mm перед приводной осью превращает 25 mm границы в 65 mm места для торможения, что означает разницу между 0.60 m/s и 0.98 m/s. Когда задана целевая скорость, решайте уравнение наоборот:

budget = v·t + v²/(2a)

Практические ограничения на вынос вперёд:

  • Он должен видеть границу, а не пространство снаружи неё. Слишком сильно вынесенный вперёд датчик смотрит за линию, когда робот ещё безопасен, и вы теряете скорость без причины.
  • Установите его низко и защитите. ИК-датчик отражения на высоте 3 mm читает поверхность, а на высоте 15 mm — поверхность плюс освещение комнаты. Это та же задача порога и калибровки, что и у робота, следующего по линии, но с гораздо более опасным отказом.
  • Поставьте по одному на каждый передний угол. Один центральный датчик сообщает, что край где-то впереди. Два сообщают, в какую сторону от него отворачиваться, не добавляя задержки.
  • Не забывайте про заднюю часть. Робот, который толкают назад, пересекает границу в неправильном направлении, и передние датчики её никогда не увидят.

Сначала задний ход, потом поворот

При фиксированном бюджете порядок действий важнее настройки.

Сразу полный задний ход. Не холостой ход: робот, движущийся накатом, замедляется только из-за сопротивления качению, которое составляет малую долю µg, а перелёт примерно утроится. И не мягкое торможение: это единственный момент, когда профиль движения является неверной идеей, поскольку ограничение задано расстоянием, а не плавностью.

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

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

Измерение собственной задержки

Число в таблице — начальная оценка. Вашу задержку можно измерить примерно за пятнадцать минут.

Изнутри. Запишите micros() при пересечении порога датчиком и ещё раз в строке, которая записывает изменение направления ШИМ (PWM). Это захватывает программную половину, то есть ту, которую можно исправить. Выведите худшее значение за сотню обнаружений, а не среднее: именно худший случай решает, упадёт ли робот.

Снаружи. Снимите видео со скоростью 240 fps на телефон. Считайте кадры между пересечением датчиком линии и видимым изменением направления колёс; один кадр равен 4.2 ms. Это выявляет электрическую и механическую задержку, которых не видит программное обеспечение, и единственный способ подтвердить полную величину.

От начала до конца. Проедьте с известной скоростью до наклеенной ленты и измерьте, насколько далеко за ней робот остановится. Вычтите вычисленный тормозной путь v²/2a; остаток равен v × t — полной задержке, измеренной линейкой.

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

Когда всё идёт не так

Симптом Обычно
Надёжно останавливается на малой скорости и быстро падает Всё работает по проекту — вы превысили скорость, допустимую бюджетом
Перелёт постоянной величины Задержка; измерьте её от начала до конца и сократите цикл
Перелёт меняющейся величины Где-то есть блокирующий вызов — период цикла не тот, о котором вы думаете
Видит линию слишком поздно Датчик установлен слишком высоко или слишком далеко назад либо порог настроен для другой комнаты
Обнаруживает границу, которой нет Отражающий пол или внешний ИК; защитите датчик и повторите калибровку
Успевает остановиться, но всё равно уезжает Поворот выполнялся во время движения; сначала остановитесь
Падает назад Нет задних датчиков

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

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

Входит в эти сборки

Проекты и учебные пути, в которые входит это руководство.

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

Источники