2013-04-13 1 views
1

На следующем рисунке показаны две системы координат А и В, расположенный в глобальной раме G: coordinate systems configurationВращение в локальной системе координат, выраженное в виде кватерниона

мне нужно найти кватернион, который вращается от А до B, но выражается в кадр местного А.

Первая часть легко, B.conjugate()*A (вычитая вращение B от вращения A), что дает я/2 вращение вокруг (-1,0,0). Это, очевидно, верно, поскольку вращение A вокруг глобальной оси -x на 90 ° дает B.

Теперь мне нужно выразить этот результат в A; желаемый результат - π/2 около (вот что глобально -x находится в A), но я не могу попасть туда только с ротационной композицией.

Я могу преобразовать кватернион в представление угловой оси (π/2 вокруг (-1,0,0)), повернуть ось как A*(-1,0,0)=(0,0,-1) и преобразовать обратно в кватернион, но я хотел бы избежать этого преобразования, если это возможно.

Как получить вращение, используя только умножение кватернионов?


Сам код C++, но я проверить, что в Python с minieigen:

from minieigen import * 
from math import * 
A=Quaternion((0,-1,0),pi/2) 
B=Quaternion((sqrt(3)/3,-sqrt(3)/3,sqrt(3)/3),(2/3.)*pi) 
# rotation in global frame: 
rg=B.conjugate()*A   # is Quaternion((-1,0,0),pi/2) 
# rotation in local frame: 
# ?? what now?! hack around with angle-axis 
aa=rg.toAngleAxis() 
rl=Quaternion(A*aa[1],aa[0]) # is Quaternion((0,0,-1),pi/2) 

for q in A,B,rg,rl: print q 

, который дает:

Quaternion((0,-1,0),1.5707963267948966) 
Quaternion((0.5773502691896257,-0.5773502691896257,0.5773502691896257),2.0943951023931953) 
Quaternion((-1,-7.850462293418876e-17,-7.850462293418876e-17),1.5707963267948968) 
Quaternion((-1.1102230246251568e-16,-7.850462293418877e-17,-1),1.5707963267948968) 

ответ

0

Это было легким, но я оставлю это здесь для записи:

A*B.conjugate() 
0

Ваши уравнения не совсем сидят прямо со мной.

Я буду использовать Q ' для Q.conjugate. Теперь мы знаем, что Q '* Q является личностью и поэтому Q * Q'. Поэтому, если вы хотите знать, кватернион, превращающий в В (в глобальной системе координат, так как и B оба в глобальной системе координат), то вы начинаете с этим уравнением (при условии, что эти кватернионы представляет собой вращение, примененное к векторам-столбцов):

Q * A = B

то переместить на другую сторону

Q * A * A '= B * A' = Q

Это, мы можем видеть, правильно, потому что B * A '* A = B. Уравнение в ваших вопросах говорит, что B '* A * A = B. Я думаю, это не справедливо.

Теперь, если вы хотите, чтобы вращение, чтобы быть в А «кадра s вместо глобальной системы координат, это равносильно тому, что вы хотите B, в A» s кадра. То же самое, что и удаление A от B. Например: A '* B. Таким образом, если вы вращаетесь с Рамка к глобальной рамке, вы получите B: A * A '* B = B.

 Смежные вопросы

  • Нет связанных вопросов^_^