Why does quatrotate() produce negative rotations?

11 visualizaciones (últimos 30 días)
Dereck
Dereck el 19 de Sept. de 2014
Comentada: James Tursa el 7 de Feb. de 2020
Code
% YPR angles to rotate
yaw = pi/4;
pitch = 0;
roll = 0;
% Point to rotate
A = [ 1 0 0]
% Rotate (Negative)
Q = angle2quat(yaw, pitch, roll);
B = quatrotate(Q, A)
% Rotate (Expected result)
Q = angle2quat(-yaw, -pitch, -roll);
C = quatrotate(Q, A)
Results:
A =
1 0 0
B =
0.7071 -0.7071 0
C =
0.7071 0.7071 0

Respuesta aceptada

Mischa Kim
Mischa Kim el 19 de Sept. de 2014
Hello Dereck, there is a difference between a) rotating a reference frame (e.g. relative to a "fixed" vector) and b) rotating a vector relative to a reference frame. Check out this answer for reference.
angle2quat converts rotation angles [to quaternions]. Rotation angles in turn are used to rotate reference frames a), not vectors b). To illustrate, if you do not convert to quaternions but keep working with rotation angles and matrices you could do the same by computing the direction cosine matrix, DCM:
DCM = angle2dcm(yaw,pitch,roll)
DCM =
0.707106781186548 0.707106781186547 0
-0.707106781186547 0.707106781186548 0
0 0 1.000000000000000
rotate_Frame = DCM*A'
ans =
0.707106781186548
-0.707106781186547
0
which, as pointed out above, rotates the reference frame relative to the vector.
If you need to rotate the vector instead, use rotx and equivalent:
rotate_Vector = rotz(yaw*180/pi)*roty(pitch*180/pi)*rotx(roll*180/pi)*A'
ans =
0.707106781186547
0.707106781186547
0
  3 comentarios
Tamas Sarvary
Tamas Sarvary el 24 de En. de 2019
You could rotate your vectors by the inverse quaternion:
c = quatrotate(quatinv(Q), A)
James Tursa
James Tursa el 7 de Feb. de 2020
See also this post. The quatrotate function should probably use the phrase "coordinate system transformation" instead of the phrase "rotated vector".

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by