【发布时间】:2016-08-03 13:44:36
【问题描述】:
我正在使用两种方法在 3D 空间中旋转一个点 p0(一个向量)。我有以黑色显示的世界坐标系 (WCS) 和以蓝色显示的坐标系 1 (CS1),它被定义为围绕 z 轴旋转 10 度。我首先通过计算点积来计算 WCS 和 CS1 之间的方向余弦。现在我可以使用dcm2quat 和dcm2angle 轻松计算四元数和欧拉角。然后我可以使用四元数和欧拉角旋转点p0。
p0 = [1 0 0]; % point in world CS
ijk = [1 0 0;0 1 0;0 0 1];
uvw1 = [0.9848 0.1736 0;-0.1736 0.9848 0;0 0 1.0000]; % CS1
DC01 = [dot(uvw1(1,:),ijk(1,:)) dot(uvw1(1,:),ijk(2,:)) dot(uvw1(1,:),ijk(3,:))
dot(uvw1(2,:),ijk(1,:)) dot(uvw1(2,:),ijk(2,:)) dot(uvw1(2,:),ijk(3,:))
dot(uvw1(3,:),ijk(1,:)) dot(uvw1(3,:),ijk(2,:)) dot(uvw1(3,:),ijk(3,:))];
[rz, ry, rx] = dcm2angle(DC01,'ZYX');
q1 = dcm2quat(DC01);
p1_1 = quatrotate(q1,p0);
p1_2 = (rotz(rz*180/pi)*roty(ry*180/pi)*rotx(rx*180/pi)*p0').';
但最后结果不同:
p1_1 =
0.9848 -0.1736 0
p1_2 =
0.9848 0.1736 0
我知道使用欧拉角会导致云台锁定并产生歧义,但在这种情况下,使用四元数获得的结果是不正确的,而从欧拉角获得的结果是正确的。我错过了什么?
下图显示了 CS1(蓝色)、WCS(黑色)、p0(黑色)、p1_1(蓝色)、p1_2(红色)。
【问题讨论】:
标签: matlab quaternions coordinate-systems euler-angles