先说一下我对四元数粗浅的理解,四元数是欧拉角之外的另一种三维角度的表达方式,比欧拉角表示法的好处是不存在 Gimbal Lock 问题。(如有误请指正)
假设使用了 MPU6050 6轴传感器(详见InvenSense官方Datasheet),该传感器分为 Acce 的3个轴和 Gyro 的3个轴,传感器输出的 Acce 轴的
原始数值通过简单线性转换可得到该轴向上的
加速度,传感器输出的 Gyro 轴的
原始数值通过简单的线性转换可得到该轴上的
角速度。通过角速度对时间的积分得到能得到该轴的
角度。Gyro 得到的角度会随着时间漂移,误差越来越大,所以配合 Acce 感知重力方向得到的无人机姿态,使用互补滤波进行修正,可以得到基本正确的无人机当前姿态。
得到当前姿态后,通过 PID 对执行单元(电机等)控制将当前姿态变化为期望姿态。从而完成控制过程。
根据robo
tics.stackexchange上的这个问题下,marcv81用户的回答,
控制算法只接收三个角度作为参数,也就是说,四元数和控制部分无关,四元数只是用来解算姿态的。我找到的有关使用四元数对四轴飞行器姿态控制的文献大多讲了如何将四元数转化成最后供
控制算法使用的三个当前飞行器角度 φ, θ, ψ。使用四元数的原因除了没有 Gimbal lock,还有运算量小,适合运算能力差的嵌入式平台。
我的问题是在我上述的无人机姿态控制过程中,没有涉及到四元数的部分就完成了姿态控制,从 MPU 6050 中取出的原始数据通过简单线性计算就可以得到
以角度表示的存在漂移误差的当前飞行器姿态,通过互补滤波后就可以得到可靠的
以角度表示的当前飞行器姿态,紧接着这三个角度就被送入控制算法处理了,从此和四元数再无瓜葛,那么四元数究竟被应用在了送入控制算法之前的哪一个环节了?