Руководство · Средний · 30 мин
Проскальзывание колёс: дрейф одометрии и способы борьбы
Колёса прокручиваются дальше, чем движется робот: предел сцепления, неизбежное проскальзывание при развороте и опасность систематической ошибки.
Введение
Проведите робота по квадрату один метр с четырьмя поворотами на 90° и вернитесь в начало. Он не возвращается. Откалибруйте диаметр колёс и ширину колеи, пока прямые участки не станут точными, запустите снова — и он снова не приходит, причём на ковре ошибка отличается от ошибки на плитке.
Этот сайт называет проскальзывание колёс причиной на странице об одометрии, странице об энкодерах, странице проекта Micromouse и ещё на полудюжине других страницх. Ни одна из них не объясняет, что такое проскальзывание, сколько его у вас и какие его части можно изменить.
Энкодер измеряет колесо, а не землю
Эта фраза описывает всю тему.
Энкодер считает вращение колеса. Одометрии нужно перемещение по земле. Это одно и то же число только тогда, когда пятно контакта не скользит, а разница — коэффициент проскальзывания, то есть доля вращения колеса, не превратившаяся в перемещение робота:
slip = (wheel travel − ground travel) / wheel travel
Два следствия формируют всё дальнейшее:
Проскальзывание невидимо изнутри. Никакой энкодер, даже хороший, не может его обнаружить, потому что измеряет вращение колеса. Это та же слепота, что и при люфте редуктора, и то же лечение: источник, измеряющий внешний мир.
Это не шум. Шум усредняется; проскальзывание, как правило, нет, и причина приведена в предпоследнем разделе.
Бюджет сцепления
Шина может давить только с силой, которую допускает трение:
F_max = µ × N
N — вес, который фактически приходится на приводные колёса, а не весь вес робота. Это же произведение определяет насколько сильно робот может толкать другой объект — единственную задачу, при которой предел сцепления должен быть не просто достаточно большим, а как можно большим. Типичное шасси 2WD с опорным роликом несёт на приводной оси примерно от половины до двух третей массы, а остальное не помогает сцеплению.
Разделив на массу, получите предел ускорения:
a_max = µ × (weight fraction on driven wheels) × g
Полезный вывод из верхней панели: при прямолинейном движении радиолюбительский робот редко ограничен сцеплением. Даже худшая поверхность даёт больше чем втрое больше ускорения, чем обычно требует типовая конструкция. Если робот проскальзывает на прямой, вы задаёте скачок вместо разгона — именно для этого существует профиль движения.
С поворотом всё иначе.
Разворот на месте всегда проскальзывает
У робота с дифференциальным приводом колёса закреплены неподвижно. Они могут катиться вперёд и назад, но не могут двигаться вбок, — а разворот на месте требует именно этого.
При вращении шасси вокруг центра каждая точка пятна контакта шины описывает дугу, тогда как колесо может катиться только вдоль прямой, касательной к ней. Разница называется проскальзыванием: шину тянет вбок по полу весь ход поворота. Широкое пятно контакта проскальзывает сильнее узкого, а опорный ролик, который не свободно вращается, тоже мешает повороту.
Поэтому разворот на месте — не манёвр, который может проскальзывать. Он проскальзывает по построению, и его курс, вычисленный по энкодерам, каждый раз ошибается примерно на одну и ту же величину в одном направлении.
Именно последняя фраза и составляет проблему.
Систематическое проскальзывание — опасный вид
Возьмите ширину колеи 90 mm. При развороте на 90° каждое колесо проходит 70.7 mm. Пусть одно колесо потеряет на проскальзывание 2%, и курс будет на 0.9° меньше — число достаточно малое, чтобы быть незаметным на одном повороте.
Теперь запустите лабиринт. Нижняя панель рисунка показывает два будущих сценария:
- Случайный знак — некоторые повороты короче, некоторые длиннее. Ошибка растёт как √N. После 50 поворотов она составляет около 6°, и это действительно случайное блуждание, которое можно моделировать.
- Систематическое — каждый левый поворот проскальзывает одинаково по одной и той же причине. Ошибка растёт как N. После 50 поворотов она составляет 45°, и робот едет по коридору, который, по его мнению, находится в другом месте.
Реальные роботы гораздо ближе ко второму варианту. Проскальзывание вызывается геометрией, которая не меняется от поворота к повороту, поэтому не меняется и ошибка. Именно поэтому «немного дрейфует» превращается в «потерялся» за один проход, и именно поэтому Micromouse нужен гироскоп, а не более точные энкодеры.
Как узнать, сколько проскальзывания есть
Три теста, от самого дешёвого к самому точному.
Проедьте прямо и измерьте. Отметьте пол, задайте ровно 1000 mm и измерьте результат. Повторите на двух поверхностях. Постоянная ошибка масштаба — это калибровка; ошибка, изменяющаяся с поверхностью, — проскальзывание.
Развернитесь 10 раз и посмотрите. Задайте десять поворотов на 90° — это 900°, или два с половиной полных оборота. Отметьте начальный курс и измерьте конечный. Разделите ошибку на десять. Это усиливает погрешность одного поворота, которая иначе не измерима, и это самое полезное, что есть на странице.
Сравните энкодеры с гироскопом. Если есть MPU-6050, интегрируйте его скорость по оси Z во время поворота и сравните с курсом от энкодеров. Их расхождение и есть проскальзывание, измеренное напрямую и в реальном времени без разметки пола. Там, где значения расходятся, неправы энкодеры: гироскопу всё равно, что делали колёса.
Всплеск тока без соответствующего ускорения — другой признак в реальном времени: двигатель работает, а робот не движется.
Что действительно помогает
Разгоняйте всё. Скачок заданной скорости колёс требует бесконечного ускорения, а шина даёт то, что может, и скользит всё остальное. Профилирование команды бесплатно и даёт самое большое отдельное улучшение.
По возможности поворачивайте дугой. Дуга катит оба колеса вперёд с разными скоростями и проскальзывает намного меньше, чем разворот на месте. Там, где позволяет карта, предпочитайте её. Это также исправление люфта, потому что при движении по дуге не требуется реверс ни одного колеса.
Перенесите вес на приводные колёса и оставьте опорный ролик свободным. Вес на неприводном ролике не участвует в сцеплении.
Сужайте пятно контакта, если часто поворачиваете на месте. Широкие цепкие шины помогают ускорению и мешают разворотам; компромисс реален, и его следует выбирать осознанно.
Не пытайтесь решить проблему одной только шиной с большим сцеплением. Больше трения означает, что проскальзывание начнётся позже, а не то, что одометрия станет правильной. Это запас, а не исправление.
Что не помогает ничего
Одометрия колёс — это счисление от пройденного пути. У неё нет внешнего ориентира, поэтому проскальзывание, люфт и ошибка диаметра накапливаются и никогда не исправляются. Это то же неограниченное накопление, о котором предупреждает путь управления двигателями, и это свойство метода, а не дефект конструкции.
Нужен внешний источник коррекции:
- Гироскоп исправляет курс, то есть ошибку, которая наносит больше всего вреда, и стоит недорого.
- Ориентиры стен или линии уточняют боковую координату робота при каждом обнаружении — именно так робот, следующий вдоль стены, сохраняет точность в коридоре.
- Карта — сопоставление сканов или SLAM — исправляет обе оценки, но требует лидара и значительно большей вычислительной нагрузки.
Одометрия отлична на расстоянии метра и бесполезна на сотне. Проектируйте с учётом этого, а не пытайтесь исправить.
Когда всё идёт не так
| Симптом | Обычно |
|---|---|
| Квадрат не замыкается при идеальных прямых | Проскальзывание при развороте; измерьте тестом десяти поворотов |
| На плитке расстояние верное, на ковре короткое | Проскальзывание, а не калибровка: ошибка зависит от поверхности |
| Ошибка курса устойчиво растёт в одну сторону | Систематическое проскальзывание; дешёвое решение — гироскоп |
| Ошибка сначала быстро растёт, затем выходит на плато в коридоре | Стена исправляет вас — ориентир работает |
| Робот проскальзывает только при старте | Задан скачок вместо разгона |
| Гироскоп и энкодеры расходятся при повороте | Всё правильно: расхождение и есть измерение |
| Более цепкие шины не исправили одометрию | Сцепление повысило порог проскальзывания, но не сделало энкодеры честными |
| Проскальзывает только одно колесо | Распределение веса или заклинивший опорный ролик, а не двигатель |
Полезная привычка — тест десяти поворотов. Он превращает невидимую ошибку в число, а после этого можно понять, нужен ли гироскоп, профиль разгона или вообще ничего.
Там, где проскальзывание является механизмом
Всё выше рассматривает проскальзывание как отказ. На базе mecanum оно является конструктивным решением: ролики обеспечивают скольжение в поперечном направлении, и именно так робот вообще движется вбок. Последствия стоит назвать прямо, потому что они меняют то, что следует измерять, а не то, как усердно пытаться.
- Боковая одометрия — самая ненадёжная оценка на роботе, а не проблема настройки. Энкодер прикреплён к колесу, а колесо намеренно не является полом.
- Есть одна бесплатная проверка, и она наполовину слепа. Четыре колеса и три степени свободы оставляют одно лишнее уравнение —
FL + FR = RL + RRдля любой жёсткой базы mecanum, имеющей сцепление, — поэтому остаток ловит проскальзывание одного колеса и не видит, когда проскальзывают все четыре. Вывод приведён здесь. - Исправление — неприводные колёса. Омни-колёса без привода на пружинных креплениях не передают момент, поэтому не проскальзывают по команде и превращают худшее число робота в лучшее.
Уменьшите ползунок сцепления и посмотрите, как энкодеры продолжают настаивать, что робот прибыл.
Исследуйте граф
Входит в эти сборки
Проекты и учебные пути, в которые входит это руководство.
- ПроектСоберите робота на колёсах Mecanum, который едет боком
- ПроектСоберите робота-ровера для путевых точек GPS
- Учебный путьОмнидирекционный привод: движение вбок без поворота
- Учебный путьСледование по траектории для роботов: дорожная карта обучения
- Учебный путьУправление двигателями роботов: дорожная карта обучения
Дополнительные материалы