Руководство · Средний · 25 мин
Остановка у края: задержка и тормозной путь
Датчик обрыва даёт фиксированный запас в миллиметрах: сколько уходит на задержку, а сколько на тормозной путь.
Бюджет измеряется в миллиметрах, а не в миллисекундах
Робот с датчиком, направленным вниз, получает одну порцию информации — белый цвет, сейчас — и фиксированное расстояние, за которое нужно отреагировать. Мини-ринг сумо даёт 25 mm границы. Край стола даёт столько, сколько получилось из-за выноса датчика вперёд. В обоих случаях это расстояние, и робот расходует его двумя очень разными способами:
overshoot = v × t_latency + v² / (2a)
Первое слагаемое оплачено до начала торможения. Второе — то, что пол начисляет после его начала.
Они ведут себя совершенно по-разному при увеличении скорости, и понимание того, за что именно вы платите, отличает исправление за один день от бесполезного переписывания контура управления.
Куда на самом деле уходит задержка
«Задержка» — это не датчик. Это всё, что находится между изменением фотонов и тем, как шины создают силу в противоположном направлении. Почти всегда преобладает слагаемое, которое никто не измерил:
| Этап | Типичное значение |
|---|---|
| Установление инфракрасного излучателя (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 — полной задержке, измеренной линейкой.
Последний тест занимает пять минут, и его стоит выполнить до любой настройки, потому что он показывает, за какое из двух слагаемых вы действительно платите.
Когда всё идёт не так
| Симптом | Обычно |
|---|---|
| Надёжно останавливается на малой скорости и быстро падает | Всё работает по проекту — вы превысили скорость, допустимую бюджетом |
| Перелёт постоянной величины | Задержка; измерьте её от начала до конца и сократите цикл |
| Перелёт меняющейся величины | Где-то есть блокирующий вызов — период цикла не тот, о котором вы думаете |
| Видит линию слишком поздно | Датчик установлен слишком высоко или слишком далеко назад либо порог настроен для другой комнаты |
| Обнаруживает границу, которой нет | Отражающий пол или внешний ИК; защитите датчик и повторите калибровку |
| Успевает остановиться, но всё равно уезжает | Поворот выполнялся во время движения; сначала остановитесь |
| Падает назад | Нет задних датчиков |
Та же арифметика описывает остановку у края стола, пылесос, избегающий лестниц, и остановку перед препятствием — меняется только бюджет. Симулятор обхода препятствий показывает именно эту геометрию тормозного пути с датчиком, направленным вперёд, а не вниз, а проект мини-робота сумо требует работать против соперника, который пытается заставить вас остановиться неудачно.
Исследуйте граф
Входит в эти сборки
Проекты и учебные пути, в которые входит это руководство.
Дополнительные материалы