037、松耦合与紧耦合导航架构

037、松耦合与紧耦合导航架构 037 松耦合与紧耦合导航架构从一次炸机说起去年夏天,我在调试一款四旋翼的室内定位系统。光流传感器和IMU的数据融合用的是经典的松耦合方案——EKF分别处理位置和姿态,两个滤波器各管各的。飞起来看着挺稳,悬停误差能控制在10厘米以内。直到有一天,我故意把光流传感器用黑胶带遮住一半,想看看系统的容错能力。结果飞机在3秒内直接翻了个跟头,砸在地上。事后分析日志,发现IMU的加速度计数据在光流失效后出现了明显的漂移,但松耦合架构下的姿态滤波器完全不知道位置估计已经崩了,还在用错误的加速度数据修正姿态。这就是松耦合最典型的死穴——信息单向流动,上游的误差会像多米诺骨牌一样往下传,下游却浑然不觉。松耦合:各扫门前雪松耦合导航架构,说白了就是“分而治之”。姿态估计用一个滤波器(通常是互补滤波或EKF),位置/速度估计用另一个滤波器。两个模块之间只交换少量信息,比如姿态滤波器把姿态角传给位置滤波器用于坐标变换,位置滤波器把加速度计数据传给姿态滤波器用于重力补偿。这种架构最大的好处是模块解耦。调试的时候可以分别调姿态和位置,哪个环节出问题就修哪个。代码结构也清晰,姿态滤波器和位置滤波器可以写成两个独立的函数,甚至放在不同的线程里跑。对于初学者来说,松耦合是入门最友好的方案,因为你可以先搞定姿态估计,再慢慢加位置融合。但代价也很明显——信息利用率低。姿态滤波器只用了陀螺和加速度计,位置滤波器只用了光流或GPS。实际上,加速度计的数据里同时包含姿态和运动信息,GPS的多普勒频移也能辅助姿态