Кватернионная интерполяция с сопоставлением скорости

У меня есть объект с ориентацией и скоростью вращения вокруг каждой оси тела. Мне нужно найти плавный переход из этого состояния во второе состояние с другим набором ставок. Кроме того, у меня есть ограничения на скорость вращения/ускорения вокруг каждой из осей.

Я изучил slerp Quaternion, и хотя я могу использовать их для плавной интерполяции между состояниями, я не вижу простого способа получить в нем соответствие скорости.

Это похоже на упражнение в дифференциальных уравнениях и планировании пути, но я точно не знаю, как сформулировать задачу, чтобы с ней могли работать существующие алгоритмы.

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

[Изменить - вот пример проблемы, над которой я работаю]

Представьте себе стрелка на вертолете, которому нужно отслеживать цель во время полета вертолета. Ради аргумента, ему нужно быть на цели с момента, когда она поднимается над горизонтом, до того момента, когда она больше не видна. Относительная скорость этой цели непостоянна, но я предполагаю, что путем агрегирования нескольких маневров «согласования скоростей» я могу достаточно хорошо аппроксимировать это отслеживание. Я могу рассчитать ориентацию оружия и скорость отслеживания, необходимые в любой момент, это просто создание профиля из некоторых дискретных ориентаций и скоростей, что ставит меня в тупик.

Спасибо!


person fbl    schedule 06.12.2010    source источник
comment
Возможно, стоит описать проблему менее абстрактно. Какие объекты вы вращаете?   -  person Gareth Rees    schedule 06.12.2010


Ответы (1)


Прежде всего, ваши скорости вращения вокруг каждой оси должны составлять вектор скорости вращения (т. е. w = [w_x w_y w_z]^T). Затем вы можете отделить величину вращения от оси вращения. Величина w_mag = w/|w|. Тогда ось представляет собой единичный вектор u = w/w_mag. Затем вы можете обновить свое общее вращение, составив инкрементное вращение, используя ваше любимое представление (например, матрицы вращения, кватернионы). Если ваша начальная ротация равна R_0, а ваша инкрементальная ротация определяется как R_inc(w_mag*dt, u), то вы следуете следующим правилам композиции:

R_1 = R_0 * R_inc

R_k+1 = R_k * R_inc

наслаждаться.

person Commodore63    schedule 07.12.2010
comment
Я знаю 'w' (и компоненты) в начале и в конце маневра, а также ориентацию. Я могу использовать кватернионы, чтобы довольно легко найти кватернион перехода, который дает мне угол и ось для поворота, который приведет меня из начального состояния в конечное состояние. Что меня смущает, так это сопоставление ставок в начале и в конце маневра. Я что-то пропустил в вашем первоначальном ответе? - person fbl; 07.12.2010
comment
Итак, вы знаете начальную и конечную ориентацию. Также указаны начальная и конечная ставки. Имеют ли начальная и конечная скорости один и тот же угол и ось? Мой ответ выше подразумевает, что они делают. - person Commodore63; 07.12.2010
comment
Их нет... если бы они были, было бы намного проще, не так ли ;) - person fbl; 07.12.2010
comment
Подумайте о стрелке на вертолете, которому нужно отслеживать цель во время полета вертолета. Ради аргумента, ему нужно быть на цели с момента, когда она поднимается над горизонтом, до того момента, когда она больше не видна. Относительная скорость этой цели непостоянна, но я предполагаю, что путем агрегирования нескольких маневров «согласования скоростей» я могу достаточно хорошо аппроксимировать это отслеживание. Я могу рассчитать ориентацию оружия и скорость отслеживания, необходимые в любой момент, это просто создание профиля из некоторых дискретных ориентаций и скоростей, что ставит меня в тупик. Это помогает? - person fbl; 07.12.2010
comment
Таким образом, при t=0 вы знаете ориентацию, R_i, и скорость вращения w_i, а при t=T вы знаете ориентацию, R _f и скорость вращения w_f. Вы хотите знать, как представить ориентацию при каждом t=i*dt между 0 и T. Предполагаем ли мы, что угловое ускорение постоянно на этом интервале? - person Commodore63; 07.12.2010
comment
В финальном приложении нет. Конечно, для разработки решения и идей прямо сейчас! - person fbl; 07.12.2010