2015-11-02 207 views
0

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

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,为什么它不会让前两个数字为零?

在此先感谢

+0

这是一个错误或一个误解。在这两种情况下,您都是解决问题的最佳人选。请尝试将代码分解为较小的部分,并仔细检查每一部分。例如,定义R1的行危险地过长。 – Ratbert

回答

0

你在你的代码中的错误。如果我正确地跟踪代码,有两个地方我认为变量“al”实际上应该是“alpha”。

但是您的代码还会为这些输入生成alpha = 90和gama = 180。你所要做的就是用这些输入将轴翻转到机器精度之内,所以它不会达到你要找的结果。

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

+0

你完全正确。它不应该是1.但无论如何对于vs1的任何数字,如果我把负数(对于vs2)结果不好。 –

+0

鉴于生成的角度alpha和gama,我首先会问他们是否正确计算。你是否尝试过像vst = [1,1,1]这样的输入来查看它是否会生成一组合理的角度? – txpaulm