dnotol
2016-01-09 05:27:29 UTC
我使用Arduino和9 DOF傳感器(陀螺儀,加速計和磁力計),並且我嘗試使用傳感器使我能夠統一旋轉對象的俯仰,橫搖和偏航。
我設法從加速度計正確計算俯仰和橫滾(z和x軸的單位),但似乎無法正確地完成偏航。意思是說,當我旋轉傳感器的俯仰角或滾動時,它也以一種怪異的方式旋轉了偏航角。
arduino中的代碼以獲取航向
void getHeading(void){heading = 180 * atan2(Mxyz [0],Mxyz [1])/ PI; if(heading <0)heading + = 360;} void getTiltHeading(void){//浮動音高= asin(-Axyz [0]); // float roll = asin(Axyz [1] / cos(pitch));浮點間距= atan(Axyz [0] / sqrt(Axyz [1] * Axyz [1] + Axyz [2] * Axyz [2]));浮點數= atan(Axyz [1] / sqrt(Axyz [0] * Axyz [0] + Axyz [2] * Axyz [2]));浮點xh = Mxyz [0] * cos(音高)+ Mxyz [2] * sin(音高); float yh = Mxyz [0] * sin(roll)* sin(pitch)+ Mxyz [1] * cos(roll)-Mxyz [2] * sin(roll)* cos(pitch); float zh = -Mxyz [0] * cos(roll)* sin(pitch)+ Mxyz [1] * sin(roll)+ Mxyz [2] * cos(roll)* cos(pitch);傾角= 180 * atan2(yh,xh)/ PI; if(yh<0)傾斜+ = 360;}
俯仰和滾動
float _Pitch =(float)(180 / Math.PI * Math.Atan(m_ResultX / Math.Sqrt(m_ResultY * m_ResultY + m_ResultZ * m_ResultZ))); float _Roll =(float)(180 / Math.PI * Math.Atan(m_ResultY / Math.Sqrt(m_ResultX * m_ResultX + m_ResultZ * m_ResultZ)))); float _Yaw =(float)(m_TiltHeadingResult);
請隨時詢問詳細信息。
您是否弄清楚了為什麼傾斜/滾動傳感器會改變偏航?以及如何解決?任何信息也會對我有幫助。