为什么3D旋转矩阵的实现会改变向量的大小?

时间:2016-03-09 17:43:16

标签: matrix vector rotation arduino rotational-matrices

当我试图将旋转矩阵应用于重力矢量(从静态加速度计获得并存储)时,当设备以一定的旋转(偏航,俯仰,滚动)移动时,我遇到了问题。旋转矩阵不应该改变向量的大小,但在我的情况下,向量的大小在每次迭代时都会改变。下面的代码显示了我使用的旋转矩阵:

averageA包含恒定的重力矢量,angleypr包含使用陀螺仪,磁力计,加速度计计算的纱线,俯仰和滚转角度。

temp[0]=averageA[0];
temp[1]=averageA[1];
temp[2]=averageA[2];
//Yaw   
temp[0]=cos(angleypr[0]*pi/180)*temp[0]+sin(angleypr[0]*pi/180)*temp[1];
temp[1]=-sin(angleypr[0]*pi/180)*temp[0]+cos(angleypr[0]*pi/180)*temp[1];
temp[2]=temp[2];   
//pitch    
temp[0]=temp[0];  
temp[1]=(cos(angleypr[1]*pi/180))*temp[1]+(sin(angleypr[1]*pi/180))*temp[2];
temp[2]=(-sin(angleypr[1]*pi/180))*temp[1]+cos(angleypr[1]*pi/180))*temp[2];    
//roll   
temp[0]=(cos(angleypr[2]*pi/180))*temp[0]-(sin(angleypr[2]*pi/180))*temp[2];
temp[1]=temp[1];  
temp[2]=(sin(angleypr[2]*pi/180))*temp[0]+(cos(angleypr[2]*pi/180))*temp[2];
gravity[0]=temp[0];
gravity[1]=temp[1];
gravity[2]=temp[2];

我现在面临的一个简单问题:

temp[0]=cos(angleypr[0]*pi/180)*20+sin(angleypr[0]*pi/180)*30;
temp[1]=-sin(angleypr[0]*pi/180)*20+cos(angleypr[0]*pi/180)*30;
temp[2]=50;

temp[0]=cos(angleypr[0]*pi/180)*temp[0]+sin(angleypr[0]*pi/180)*temp[1];
temp[1]=-sin(angleypr[0]*pi/180)*temp[0]+cos(angleypr[0]*pi/180)*temp[1];
temp[2]=temp[2];

我在矢量[20,30,50]上应用相同的偏航旋转矩阵两次,第一次旋转给我一个恒定的幅度,但第二次旋转最终每次迭代都有不同的值。

请提前告知我错误的地方!

0 个答案:

没有答案