Руководство · Средний · 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.

Две наложенные панели. Верхняя — увеличенный участок одного поворота трассы: пунктирный заданный маршрут, маршрут pure pursuit, срезающий угол внутрь, и маршрут Stanley, выходящий за него наружу. Нижняя панель показывает абсолютную поперечную ошибку в зависимости от расстояния вдоль маршрута для обоих регуляторов на всей трассе; у Stanley на поворотах видны более высокие всплески.
Одна трасса, одна скорость, одна задержка. Pure pursuit срезает углы внутрь; Stanley выходит наружу — и платит за это 18.5 rad руления против 4.3. Скачать SVG

Измерения на одной и той же трассе при 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 слишком велик для скорости и задержки; это коэффициент, а не геометрия
Оба регулятора блуждают вместе Проблема выше по цепочке — оценка позиции, а не руление

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

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

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

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

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

Источники