准确来说,陀螺仪积分得到的角度也不是相对于机身坐标系的,因为机身坐标系随着转动是在不断改变的,并不是惯性参考系。
计算机身相对于大地坐标系(惯性参考系)的角度关系,称为姿态解算,是需要多个传感器共同完成的,仅用陀螺仪是不行的(积分误差累积非常快)。
姿态最直观的表示方法是欧拉角,其3个角度是与陀螺仪积分的结果相关的,可以转换,前提是你需要知道机身的初始姿态。
加速度计和磁力计一般作为辅助传感器,联合解算提供低频的姿态信息。
接下来就是讲来自陀螺仪的姿态信息和来自加计和磁力计的低频姿态信息融合,得到最终的姿态角度。
当然在具体的算法中,欧拉角不能用于姿态融合(少一个自由度,万向节锁),另一种更为常用表示姿态的方法是四元数,基于四元数解算姿态的具体步骤是:
1. 由一阶毕卡法建立输入为机身3轴角速度和积分时间的四元数更新方程。
2. 由加速度计和磁力计输出通过矢量叉乘,得到低频的姿态
3. 设定PI(比例积分)系数,将两部分融合。
以上就是鼎鼎有名的姿态解算互补滤波算法。
你google或者百度一下,示例代码非常多且容易理解。
互补滤波算法的缺点是高低频信息固定分量,难以平衡系统的快速性和稳定性。
可以选择扩展卡尔曼滤波(EKF)算法,可以做到对姿态的无偏估计,有兴趣可以使用。