Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Апрель 18, 2011, 20:05



Название: Движение по заданному маршруту
Отправлено: Igors от Апрель 18, 2011, 20:05
Добрый день

Есть некоторый объект "машина" который движется в пространстве шаг за шагом. Пользователь управляет движением с помощью таких ручек:

- газ (ускорение)
- тормоз (гашение)
- повороты руля (угол)

Но это только управление со стороны пользователя, конечная скорость зависит от многих др. факторов (гладкость дороги, трение и.т.п.). В любом случае на каждом шаге известно

- текущее положение машины
- вектор скорости 1/сек

Теперь пользователь хочет чтобы машина двигалась по заданному пути, т.е. по кривой которую он нарисовал. Сложность в том что кривая никак не привязана ко времени и скорости - это просто "маршрут" а с какой скоростью где ехать - то он желает управлять газом/тормозом. На первом (начальном) шаге позиция машины совпадает с первой точкой маршрута.

Задача: на каждом шаге вычислять такое положение руля (угла поворота) которое бы обеспечивало максимально приближенное движение по маршруту.

Спасибо


Название: Re: Движение по заданному маршруту
Отправлено: m_ax от Апрель 21, 2011, 01:56
Вот вечно у Вас какая то размытая формулировка задачи))

Попробую переформулировать условие.
Задана траектория. Тело (машина) движется по этой заданной траектории.
Фактически пользователь меняет силу, действующую на тело. В случае газа сила увеличивается и направлена параллельно вектору скорости в данный момент, в случае тормоза - увеличивается сила, направленная противоположно вектору скорости.
Вектор скорости всегда направлен по касательной к траектории.

Текущее положение машины и вектор скорости, судя по всему и нужно найти. Они не могут быть заданы изначально, поскольку определяются из уравнения:
mvt=F(t)
Откуда следует, что нужно знать ещё масу тела.

Если известен вектор скорости в каждый момент времени и положение тела на траектории то положение руля должно быть пропорционально углу между вектором скорости в данный момент t и вектором скорости в момент t+dt.
Так?     


Название: Re: Движение по заданному маршруту
Отправлено: Igors от Апрель 21, 2011, 10:20
Вот вечно у Вас какая то размытая формулировка задачи))
Постановки когда "все всем сразу понятно" возможны только в учебных примерах (и то в относительно простых)  :)

..
Так?      
Нет, не так. Вектор скорости зависит не только от руля, но и от множества др. факторов и в общем случае направлен как угодно на каждом шаге. Поэтому вовлекать их все нет никакого смысла - просто запутаемся. Также и величиной скорости пользователь управляет как хочет. Задача "рулить" таким образом чтобы машина стремилась/выезжала на заданную траекторию/маршрут. Понятно что это не всегда возможно. Напр. если машина уткнулась в препятствие, то пусть уже пользователь рулит и объезжает как хочет. Или если скорость слишком велика - то как ни рули, по маршруту не проедешь. Мы полагаем что пользователь дает разумные данные, и наша задача - простой "автопилот".




Название: Re: Движение по заданному маршруту
Отправлено: MoPDoBoPoT от Апрель 21, 2011, 19:56
Что-то мне это напоминает ТАУ (конкретней, регулятор с обратной связью)... Более конкретного ничего не могу подсказать, ибо знания давно пропиты и забыты, к сожалению.


Название: Re: Движение по заданному маршруту
Отправлено: Igors от Апрель 22, 2011, 11:04
Ну ничего особо фантастического в задаче нет. Сделал, работает, правда слабенько  :)

На каждом шаге проецирую позицию машины на путь, т.е. на маршруте нахожу условную точку. Если машина достигла конца пути - то все, путь пройден, оставляю руль как есть (ушла в свободный полет). Иначе нахожу угол между вектором скорости и вектором "текущая позиция машины - следующая точка маршрута" - это и есть угол поворота руля.

Все это так-сяк работает, но я получил полный классический букет "неустойчивости градиентного метода" - результат зависит от "следующей точки маршрута". Когда она далеко - все очень неплохо, направление на цель устойчиво. Но вот когда она близко - руль начинает "вилять" туда-сюда :) Подлатал кое-как damping'ом (угол руля может быть изменен не более чем на 5 градусов за 1 шаг).

А вообще-то странно - я полагал здесь много людей с верхним образованием (не чета моему политеху) - ну или на пути к нему. Слышал даже названия ВУЗов которые в моем представлении элитарны. Мдааа...


Название: Re: Движение по заданному маршруту
Отправлено: Waryable от Апрель 22, 2011, 12:23
Метод оптимизации - тяжелый шарик. Наверняка выручит.