004、四元数基础与运算
004、四元数基础与运算从一次炸机说起去年夏天,我在调试一架自组四轴时遇到了一个诡异的问题:飞机在悬停状态下每隔十几秒就会突然剧烈抖动,然后毫无征兆地翻倒。地面站日志显示,姿态解算输出的欧拉角在抖动瞬间出现了从+179度到-179度的跳变——典型的万向锁现象。当时我用的还是传统的欧拉角表示法,俯仰角接近90度时,航向角和横滚角完全失去了独立性。那次炸机让我彻底放弃了欧拉角。如果你还在用欧拉角做飞控姿态解算,我建议你趁早换掉——不是因为它不能用,而是因为它在某些边界条件下会要了你的飞机命。四元数虽然理解起来有点反直觉,但它是目前飞控领域最可靠的姿态表示工具。四元数到底是什么别被“四元数”这个名字吓到。说白了,它就是用一个四维向量来表示三维空间中的旋转。数学上写成:q = w + xi + yj + zk其中w是实部,x、y、z是虚部。i、j、k是三个互相正交的虚数单位,满足i²=j²=k²=ijk=-1。这里有个容易搞混的地方:很多人以为四元数的四个分量分别对应旋转轴和旋转角,其实不是。w分量和旋转角度有关,而(x,y,z)和旋转轴方向有关,但关系不是简单的线性对应。具体来说,绕单位向量(u_x, u_y, u_z)旋转θ角对应的四元数是:q = cos(θ/2) + sin(θ/2)(u_x·i + u_y·j + u_z·k)注意那个θ/2——这是新手最容易忽略的地方。如果你直接用θ而不是θ/2,姿态解算出来的结