Matlab中的旋转矩阵

Rotation matrix in Matlab

我将使用旋转矩阵从一帧旋转到另一帧。程序的目标是让我的陀螺仪与地球平行,这意味着输出向量应该有前两个数字零和第三个 -9.81。 代码:

vs1 = 1;
vs2 = -0.003;
vs3 = -9.808;

vst = [vs1 vs2 vs3]';

alpha = (acosd(vs1/sqrt(vs1^2+vs2^2)));

gama = (acosd(vs2/sqrt(vs1^2+vs2^2)));

beta  = (acosd(vs3/sqrt(vs1^2+vs2^2+vs3^2)));
R1 = [(cosd(gama)*cosd(beta)*cosd(alpha))-(sind(gama)*sind(alpha)) (cosd(gama)*cosd(beta)*sind(al)+sind(gama)*cosd(al)) (-cosd(gama)*sind(beta));((-sind(gama)*cosd(beta)*cosd(alpha))-cosd(gama)*sind(alpha)) ((-sind(gama)*cosd(beta)*sind(alpha))+(cosd(gama)*cosd(alpha))) sind(gama)*sind(beta);sind(beta)*cosd(alpha) sind(beta)*sind(alpha) cosd(beta)];
disp (R1*vst)

vs1、vs2 和 vs3 的结果是:-0.00599、0.0000359 和 9.858845622079866。首先,我不明白为什么程序给我正 Z 以及为什么它不使前两个数字为零?

提前致谢

您的代码中有错误。如果我正确地遵循您的代码,我认为有两个地方变量 "al" 实际上应该是 "alpha"。

但是您的代码还会为这些输入生成 alpha = 90 和 gama = 180。您要做的就是使用这些输入将轴翻转到机器精度范围内,因此它不会达到您想要的结果。

1) 你确定输入的向量是正确的吗?如果你几乎垂直 (Z = -9.808),为什么重力的值接近 X=1?