楼主请问下,你的代码中:初始化欧拉角和四元数解算欧拉角前的正负号为什么是不一样的,以及这个正负号的确定原理?
//陀螺仪y轴为前进方向
init_Roll = -atan2(init_ax, init_az); //算出的单位是弧度,如需要观察则应乘以57.3转化为角度
init_Pitch= asin(init_ay); //init_Pitch = asin(ay / 1);
init_Yaw = atan2(init_mx*cos(init_Roll) + init_my*sin(init_Roll)*sin(init_Pitch) + init_mz*sin(init_Roll)*cos(init_Pitch),
init_my*cos(init_Pitch) - init_mz*sin(init_Pitch));//类似于atan2(my, mx),其中的init_Roll和init_Pitch是弧度
if(init_Yaw < 0){init_Yaw = init_Yaw + 2*3.141593;}
if(init_Yaw > 360){init_Yaw = init_Yaw - 2*3.141593;}
///*由四元数计算出Pitch Roll Yaw
//乘以57.3是为了将弧度转化为角度*/
Yaw = -atan2(2*q1*q2 - 2*q0*q3, -2 * q1 * q1 - 2 * q3 * q3 + 1) * 57.3; //偏航角,绕z轴转动
if(Yaw < 0 ){Yaw = Yaw + 360;}
if(Yaw > 360 ){Yaw = Yaw - 360;}
Pitch = asin(2*q2*q3 + 2*q0*q1) * 57.3; //俯仰角,绕x轴转动
Roll = -atan2(-2*q0*q2 + 2*q1*q3, -2 * q1 * q1 - 2 * q2* q2 + 1) * 57.3; //滚动角,绕y轴转动 |