Алгоритм для радиоуправляемой машины

Я ищу алгоритм, и я понятия не имею, с чего начать!

Я пытаюсь добраться из точки А в точку Б на декартовом графике. Движение ограничено движением радиоуправляемой машины: назад, вперед, вперед-влево и вперед-вправо (постоянный радиус поворота; машина либо поворачивается полностью, либо не поворачивается вообще).

Как бы я построил алгоритм, который принимает следующее:

turningRadius, initialPosition, initialOrientation, finalPosition

И дает упорядоченный набор шагов, чтобы добраться до finalPosition?

Обратите внимание, что мне все равно, какова окончательная ориентация.

Спасибо!


EDIT: обратите внимание, что это не график с дискретными узлами, а непрерывная система координат.


person loneboat    schedule 27.10.2010    source источник
comment
Вам нужно, чтобы конфигурации совпадали? (x, y, заголовок) или только позиции (x, y)?   -  person Andrew Walker    schedule 05.02.2011


Ответы (4)


Как описана ваша проблема, алгоритм прост и требует всего два простых шага: 1) двигайтесь вперед, поворачивая (влево или вправо), пока машина не укажет прямо на B, 2) двигайтесь прямо вперед, пока не нажмете B. Готово.

Единственная относительно сложная часть — это первый шаг. Если B лежит слева от продольной оси автомобиля в исходном положении, естественным подходом будет начать с поворота налево. Это будет работать, если только точка B не лежит внутри круговой траектории, созданной таким левым поворотом (радиусом turningRadius). В последнем случае машина будет бегать по кругу, но никогда не сможет целиться прямо в точку B. В таких случаях правильная стратегия состоит в том, чтобы начать с правого поворота и продолжать поворачивать, пока вы не нацелитесь на точку B. машина на Б.

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

Если вас интересует более оптимальная (более короткая) траектория, вам необходимо проанализировать положение B относительно исходного положения/ориентации автомобиля («B находится внутри круга поворота или снаружи?») и выбрать направление движения. первый поворот соответственно.

person AnT    schedule 27.10.2010
comment
но это не учитывает местность или дороги - person Parris; 27.10.2010
comment
@Parris: Какая местность? Какие дороги? В постановке задачи нет упоминания о какой-либо местности или дорогах. Задача, как сказано, состоит в том, чтобы попасть из точки А в точку В, заданную их декартовыми координатами на непрерывной и бесконечной плоской плоскости. - person AnT; 27.10.2010
comment
Ах, правда, я предполагал, что проблема была сложнее. Когда я читал радиоуправляемую машину, я предполагал игру или настоящую радиоуправляемую машину. Между прочим, в постановке задачи не говорится о бесконечной или плоской плоскости. Этот метод отлично работал бы, если бы это было действительно так или если бы это была простая анимация. Однако как часто система оказывается совершенно плоской, без препятствий и бесконечной. - person Parris; 27.10.2010
comment
Отличное описание! Большое спасибо! Тот случай, когда пункт назначения был тем, на чем я застрял до сих пор (точнее, ходить кругами - хар-хар). Спасибо! - person loneboat; 27.10.2010
comment
Что, если B перпендикулярен и относительно близок к A (аналогично парковочному маневру)? Я думаю, что тогда ваш алгоритм не сработает. - person Alejandro; 27.10.2010
comment
@ Алехандро Вайнштейн: в этом случае я не вижу никаких проблем. Если слева слишком близко, мой алгоритм говорит, что машина должна повернуть направо. Легко. Где вы видите проблему? - person AnT; 28.10.2010

В общем, это непростая проблема. Он подпадает под категорию «Планирование в условиях дифференциальных ограничений». Этому посвящены последние три главы книги ЛаВалле (доступны онлайн здесь). В частности, обратите внимание на раздел 14.4.2., в котором рассматривается «автомобиль Дабинса», который похож на ваш радиоуправляемый автомобиль, за исключением того, что он не движется назад.

Также выполните поиск по запросу «Планирование автомобильных маршрутов Dubins». Вы найдете много бумаг.

person Alejandro    schedule 27.10.2010
comment
Важно отметить, что в книге ЛаВалле объясняется, что такие пути являются оптимальными решениями для этого класса проблем. Однако, поскольку в ОП указано, что автомобиль также может двигаться назад, это должны быть кривые Ридса-Шеппа (раздел 15.3.2), а не кривые Дубинса (раздел 15.3.1). - person Andrew Walker; 05.02.2011

Пробовали ли вы a* (a-star)? также хорошо, когда вы предоставляете ему карту местности. Вы можете назначать вес разным участкам местности, что приведет к разным траекториям. Я считаю, что алгоритм по умолчанию не обеспечивает диагональные направления, но вы можете легко добавить это.

Также по умолчанию он не имеет дело с «поворотом», но звездочка даст полный путь. Что вы можете сделать, так это рассчитать радиус поворота на основе 2 точек. Текущая позиция и следующая рассчитанная позиция ИЛИ последняя позиция и текущая позиция. Затем вы можете добавить или вычесть направление взгляда с изменением угла. Возможно, вам придется немного подправить это.

person Parris    schedule 27.10.2010
comment
Извините, я сказал «сетка», что означает, что я говорю о графе с дискретными узлами. Это в непрерывной системе координат. Спасибо! - person loneboat; 27.10.2010
comment
Ну не отличаются. Невозможно не иметь сетки. Ваша сетка может содержать очень маленькие точки и в результате не выглядеть как сетка. Подумайте о пикселях на экране. Учтите, что в 3D-играх позиции определяются с помощью значений с плавающей запятой; однако сетка накладывается для расчета пути, октавных деревьев и т. д. - person Parris; 27.10.2010
comment
Пэррис: Я понимаю, что могу квантовать сетку в один гигантский граф с узлами (что позволяет мне использовать A*), но я думаю, что если сделать это с нужной мне точностью, это сделает это вычислительно запретительно на моей платформе. Спасибо хоть! - person loneboat; 27.10.2010

Звучит как интересный и увлекательный проект! Чтобы получить конкретную рекомендацию по алгоритму, вам, вероятно, следует предоставить более подробную информацию… Например, вы ожидаете буквально запустить это на каком-то встроенном контроллере, подключенном к радиоуправляемой машине? Или алгоритм запускать на рабочей станции и управлять автомобилем удаленно? (Или это чисто абстрактное упражнение, а машины нет… оууу.)

Моя общая рекомендация для получения дескриптора того, с чего начать, будет заключаться в следующем: Решатели проблем, который является отличным введением в мир методов решения проблем с помощью искусственного интеллекта. В наши дни это может быть немного устаревшим… но подождите, что я говорю! Возможно нет. :-)

[Хорошо, я должен объяснить последний комментарий: большинство «современных» методов искусственного интеллекта, которые я видел на практике, на самом деле восходят к идеям многолетней давности… Они только сейчас стали практичными благодаря неустанному прогрессу. закона Мура. Таким образом, книга, написанная в 1993 году, до сих пор обсуждает довольно современные методы, которые я лично видел. Я бы хотел, чтобы мне указали на контрпример!]

person Kaelin Colclasure    schedule 27.10.2010
comment
Да, я действительно подключаю встроенную систему к радиоуправляемой машине. Это будет весело! Спасибо за рекомендацию книги. - person loneboat; 27.10.2010