Руководство · Средний · 25 min
Поперечная ошибка: точность следования маршруту
Число, которое показывает качество следования маршруту, как измерить его без самообмана и почему Stanley выходит за повороты дальше, чем pure pursuit.
Одно знаковое число
Поперечная ошибка — это перпендикулярное расстояние от робота до маршрута со знаком. Положительное значение означает слева от направления движения, отрицательное — справа. Это всё определение, и это единственный честный показатель качества регулятора маршрута.
Знак важнее, чем кажется. Расстояние без знака говорит, что робот отклонён на 20 cm; знаковое говорит, с какой стороны, а именно это нужно любому регулятору и что делает график ошибки читаемым: смещение видно как сдвиг, колебание — как синусоида, поворот — как всплеск в известном направлении.
Измерение без самообмана
Три ловушки в порядке, в котором люди в них попадают.
Не измеряйте по оценке. Если робот считает, что находится на маршруте, его собственная оценка ошибки по построению равна нулю. Поперечную ошибку нужно оценивать по истинному состоянию — рулетке, тахеометру, системе оптического захвата движения или, в симуляции, истинной позе, которую интегрирует модель. В симуляторе следования маршруту регулятор видит, возможно, шумное измерение, а ошибка всегда вычисляется по истине — только поэтому штраф GPS появляется как число.
Берите знак из системы координат маршрута, а не из теста векторного произведения. Естественная реализация проверяет, с какой стороны текущего отрезка находится робот. Этот знак скачком меняется, когда проекция пересекает опорную точку, и при любой задержке исполнительного механизма команда начинает дрожать с полной амплитудой, хотя колёса едва двигаются — выглядит это как неисправный регулятор. Проецируйте на маршрут и берите боковую составляющую в собственной системе маршрута:
float h = pathHeadingAt(s); // tangent direction there
float e = -(x - px) * sinf(h) + (y - py) * cosf(h); // + is left of travel
Ищите рядом с прежним положением, а не везде. Глобальный поиск ближайшей точки на маршруте, который возвращается назад, охотно сопоставит отрезок, пройденный минуту назад. Сохраняйте последнюю длину дуги и ищите в окне вокруг неё — пара метров назад и достаточно далеко вперёд, чтобы покрыть упреждение.
Есть четвёртая, более тонкая ловушка, которая стоила мне работающего регулятора: на повороте оба соседних отрезка проецируются в одну вершину на одинаковом расстоянии. Сохраняйте входящий отрезок — и ошибка курса, и боковое смещение оказываются примерно нулевыми, поэтому регулятор, управляющий этими величинами, уверенно уходит с маршрута. Разрешайте ничью в пользу исходящего отрезка.
RMS, худший случай и место ошибки
Сообщайте три числа, потому что каждое скрывает то, что показывают другие.
- RMS-ошибка — честное среднее. По ней настраивают.
- Худший случай определяет, поместится ли робот в коридор. RMS 0.12 m с пиком 0.50 m — это другая машина по сравнению с RMS 0.12 m и пиком 0.15 m.
- Ошибка относительно расстояния вдоль маршрута показывает, где она возникает. Именно этот график говорит, есть ли проблема настройки или геометрии.
Третье число — причина, по которой его рисует симулятор. Короткое упреждение вызывает дрожание по всему маршруту; длинное даёт чистые прямые и всплески только на поворотах. RMS при этом может совпадать.
Два регулятора, две формы сбоя
Pure pursuit нацеливается на точку впереди и проходит дугу. Stanley — регулятор, победивший DARPA Grand Challenge 2005 года, — использует переднюю ось и формирует угол поворота руля по двум слагаемым:
δ = θ_e + atan(k · e / v)
Первое слагаемое выравнивает робот по направлению маршрута. Второе превращает поперечную ошибку в угол руления, а деление на скорость позволяет одному коэффициенту вести себя одинаково при 1 m/s и 10.
Измерения на одной и той же трассе при 2 m/s:
| RMS | Худший | Пройденная длина маршрута | Усилие руления | |
|---|---|---|---|---|
| Pure pursuit | 0.12 m | 0.50 m | 0.8% короче | 4.3 rad |
| Stanley | 0.17 m | 0.87 m | 2.2% длиннее | 18.5 rad |
Знак третьего столбца — вся история. Pure pursuit идёт по внутренней линии и заканчивает раньше; Stanley отказывается покинуть маршрут, перелетает через угол и возвращается, проходя больше пути, чем заданный.
Усилие руления — число, о котором забывают. В четыре раза большее перемещение исполнительного механизма означает в четыре раза больший износ сервопривода, в четыре раза больший ток и, на дифференциальном приводе, в четыре раза большее проскальзывание колёс. Stanley не бесплатен.
Выбор
Pure pursuit, когда маршрут — это рекомендация. Обход покрытия, миссии по опорным точкам, всё, что происходит на улице, где срезание угла на полметра никого не волнует. У него один геометрический параметр, он легко справляется с неточностями и занимает около двенадцати строк.
Stanley, когда маршрут — это ограничение. Полоса, ряд посадок, коридор со стенами. Он удерживает линию и не срезает углы, ценой усилия руления и коэффициента, который действительно требует настройки: упреждение определяется геометрией и переносится между роботами; k — коэффициент регулятора, и он не переносится.
Ни один отдельно на низкой скорости. Оба делят на скорость или масштабируются ею. Ниже примерно 0.3 m/s роботу с дифференциальным приводом лучше сначала повернуться на месте к нужному направлению, а затем ехать; ни один из этих регуляторов не выражает такое поведение.
Когда всё идёт не так
| Симптом | Обычно |
|---|---|
| Оценка ошибки всегда около нуля | Измерение по оценке вместо истинного состояния |
| Команда дрожит на каждой опорной точке | Знак взят из проверки векторного произведения, которая меняется в вершине |
| После поворота робот уверенно съезжает с маршрута | Ничья вершины разрешена в пользу входящего отрезка — молчаливого |
| Ошибка прыгает до огромного значения и восстанавливается | Глобальный поиск ближайшей точки сопоставил далёкий отрезок |
| RMS выглядит хорошо, но робот задевает стену | Сообщайте и худший случай; RMS скрывает отдельные всплески |
| Stanley колеблется на прямых | k слишком велик для скорости и задержки; это коэффициент, а не геометрия |
| Оба регулятора блуждают вместе | Проблема выше по цепочке — оценка позиции, а не руление |
Запустите оба регулятора на одной трассе в симуляторе следования маршруту, затем пройдите дорожную карту следования маршруту и навигации от одометрии до робота, который самостоятельно выполняет миссию.
Исследуйте граф
Входит в эти сборки
Проекты и учебные пути, в которые входит это руководство.
Дополнительные материалы