Russian Qt Forum
Май 15, 2024, 14:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Движение по заданному маршруту  (Прочитано 4105 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 18, 2011, 20:05 »

Добрый день

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

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

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

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

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

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

Спасибо
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #1 : Апрель 21, 2011, 01:56 »

Вот вечно у Вас какая то размытая формулировка задачи))

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

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

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

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 21, 2011, 10:20 »

Вот вечно у Вас какая то размытая формулировка задачи))
Постановки когда "все всем сразу понятно" возможны только в учебных примерах (и то в относительно простых)  Улыбающийся

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


Записан
MoPDoBoPoT
Гость
« Ответ #3 : Апрель 21, 2011, 19:56 »

Что-то мне это напоминает ТАУ (конкретней, регулятор с обратной связью)... Более конкретного ничего не могу подсказать, ибо знания давно пропиты и забыты, к сожалению.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 22, 2011, 11:04 »

Ну ничего особо фантастического в задаче нет. Сделал, работает, правда слабенько  Улыбающийся

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

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

А вообще-то странно - я полагал здесь много людей с верхним образованием (не чета моему политеху) - ну или на пути к нему. Слышал даже названия ВУЗов которые в моем представлении элитарны. Мдааа...
« Последнее редактирование: Апрель 22, 2011, 11:06 от Igors » Записан
Waryable
Гость
« Ответ #5 : Апрель 22, 2011, 12:23 »

Метод оптимизации - тяжелый шарик. Наверняка выручит.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.