基于飞控的姿态估计算法作用及原理

2023-11-13

  姿态估计的作用? 姿态估计是飞控算法的一个基础部分,而且十分重要。为了完成飞行器平稳的姿态控制,首先需要精准的姿态数据作为控制器的反馈 
飞控姿态估计的难点? 姿态估计的一个难点主要是一般选用的惯性传感器,都是MEMS器件,精度相对较差;此外,实际工作中很难准确的判定姿态估计的是否准确  姿态估计的指标? 一般考虑三个性能,收敛性、精确性、准确性
收敛性:即估计出的姿态角数据不会轻易发散,在动态变化时,能很快的收敛到对应的角度;,精确性:比如飞行器放置不动,此时得到的姿态角在0度左右波动,这个波动范围即考虑的精确性;,准确性:这个比较难以考究,即没办法确定所得到的角度的精确程度。一般用外部参考的方法测量,比如飞机上同时挂载自己的飞控以及高精度的IMU设备(比如xsens、sbg等),飞行完成后,对比自己飞控所解算的角度和外部设备的误差;又或者,在室内装vicon设备来给出外部参考。注意,验证算法的时候,最好还是用实际飞行的数据,否则加速度噪声对算法的影响无法验证。
  需要什么基础?即在进行姿态估计前需要做什么? 主要对传感器数据进行校准、滤波。本文主要从工程角度去实现姿态估计算法。   姿态估计如何做? 根据陀螺仪的角度数据高频特性好,而加速度计和地磁计得到的角度数据低频特性好,从而进行互补,得到最优角度。无论什么算法,本质都是陀螺仪积分得到角度,然后根据加速度计和地磁计修正积分的漂移误差。   工程上每个算法的引入都是为了解决问题的,所以下面将从简单的互补开始,逐步解释每个算法的优缺点。 1、  记录实际飞行数据,需要保存陀螺仪、加速度、地磁计数据; 如图所示>
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第1张
笔者这里采用了现成的模块,所以有参考的角度数据。
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第2张
2、对好数据坐标系 即调整数据的正负号,初学者往往会忽略这一点,这个在姿态估计算法中非常重要,很多人经常有疑问,为什么自己移植别人的代码,一模一样,但是自己就得不到正确的结果,往往原因都在这里。另外,有时候通过调参会掩盖这类问题,从而导致算法性能不能达到最优。这里笔者以前右下(xyz)为机体系,另外如果飞行数据噪音很大,可以在仿真中做滤波处理。   3、分析单独的陀螺仪积分角度与加速度计计算得到的角度数据 方法: 角速度数据直接积分; 加速度数据: 基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第3张 代码>
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第4张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第5张
如上图所示,蓝色的陀螺积分角度随着时间会有漂移,而加速度计得到的角度则噪声很大,都无法使用(这里的数据不是飞行数据,所以噪声很小)。所以,既然单独的角度都各自有缺陷,而恰好一个有漂移一个没有漂移,一个噪音大一个噪音小,很自然能联想到用互补的办法,每个周期的最优角度为两者加权得到。   4、线性互补滤波 通过设置一个权重值,让每个周期得到的角度由两个数据源共同作用,还可以通过调节权重值,选择是更相信陀螺仪还是加速度。 代码>
 
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第6张
首先我们可以看出互补滤波的结果不再像陀螺仪角度那样,随着时间漂移。实际飞行时,固定的权重值很难找到理想值,要不陀螺仪的权重大了,动态性能还可以,大致能跟上角度,但是不能静态保持;加速度权重大了,噪音大,另外动态性能差,原地来回摆动时,得到的角度幅值会很小,这里的数据很难看出这个问题。 所以最好是当飞行器在动态过程时,我们更相信陀螺仪,反之,飞行器静止时,又更相信加速度计。即参数进行自适应调整。判定角速度数据,大于一定阈值,认为在运动,所以加大陀螺仪权重。   5、卡尔曼滤波 作为状态估计常用的算法,卡尔曼滤波的卡尔曼增益是动态调整的,所以这一点比固定权重的线性互补滤波要好,此外要注意的是卡尔曼的效果好坏与所选用的状态变量,建立的模型有很大关系,不可一概而论卡尔曼就一定很好,具体情况具体分析。 因卡尔曼滤波的使用条件是针对线性模型,且状态分布为高斯分布,所以这里建立两种线性模型,对比仿真结果。 模型一: 状态量为角度和角速度偏移,这里认为角速度偏移为常值,即角度是上一时刻的角度加(减)角速度偏移的角度,再加上角速度积分的增量。 基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第7张 转换成状态空间形式>
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第8张
代码>
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第9张
放大图像>
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第10张
可以看出,此算法基本能得到正确结果,除了在某些地方跟踪不好,具体原因后面再讲。 模型二: 状态量分别是俯仰角、滚转角以及对应的角速度偏移。与上面的模型相比,这里我们将水平方向的两轴姿态合并在一起,这样易于代码实现,否则在软件中需针对三个轴进行三次调用。 基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第11张 模型如下>
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第12张
代码>
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第13张
目前为止,我们介绍的都是线性模型的姿态估计。以卡尔曼为例,这两种算法基本能满足使用要求,但存在不足。由于线性模型的关系,在只有一个轴向运动的时候,效果还不错,所以如果一个运动同时包含了两个轴,这时候得到的结果就不准确了,上述的一些跟踪不好的地方就是因为此时yaw有运动,所以计算的结果受到了影响。 所以,实际飞行器的运动为非线性模型,我们也要考虑非线性模型的姿态估计。   6、mahony算法 实际在飞控应用时,以上所描述的线性互补很难满足使用要求,因此要求更佳的算法。常见的有mahony,属于非线性互补滤波。算法原理:根据加速度计和地磁计的数据,转换到地理坐标系后,与对应参考的重力向量和地磁向量进行求误差,这个误差用来校正陀螺仪的输出,然后用陀螺仪数据进行四元数更新,再转换到欧拉角。 具体步骤如下>
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第14张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第15张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第16张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第17张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第18张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第19张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第20张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第21张
代码>
 
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第22张
图中可以看出,算法结果基本能跟踪参考角度,性能较好。实际工程中,我们也常常使用mahony算法进行姿态估计。   7、扩展卡尔曼滤波 由于是非线性模型,所以在卡尔曼的基础上,我们进行改进,采用扩展卡尔曼滤波算法。 模型一: PX4飞控早期的attitude_estimator_ekf版本。
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第23张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第24张
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第25张
此为开源代码,读者可自行进行移植测试。   模型二: 参考书目 Nonami K, Kendoul F, Suzuki S, et al.Autonomous Flying Robots: Unmanned Aerial Vehicles and Micro AerialVehicles[M]. Springer Publishing Company, Incorporated, 2010. 第10章,基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第26张
这里笔者进行了修改,将7状态量缩减成4状态量,只更新四元数。 代码>
 
 
 
基于飞控的姿态估计算法作用及原理 (https://ic.work/) 传感器 第27张
Yaw部分是因为参考角度去掉了偏移,只有相对角度,所以实际是正确的跟踪。上图表明,EKF能达到较好的效果,满足使用要求。   至此,我们已经总结了在姿态估计中常用的几种算法,每个算法的不足与优点也大概介绍了。实际在应用时,并不一定是理论越复杂就一定好用,比如EKF,如果模型维数过多,则计算量大大增加,且增加了算法发散的风险,所以工程应用,只选用满足要求的最佳算法。  
总结一下: 1、  坐标系对应是姿态估计非常重要的一环,特别是移植; 2、  如何调参?工程上进行算法开发时,笔者建议的流程是先分析问题,选用相应的算法,并进行设计,取飞行数据,然后在matlab仿真环境下进行仿真调试,最后转换成嵌入式代码实现功能。这样做的好处是,如果在嵌入式环境下进行大量的调参时,非常繁琐,不方便以及不直观。当然,现在有基于模型的开发方式,这里不做过多叙述。具体如何调参,可参见视频教程; 3、  工程应用时,要考虑震动对数据以及算法的影响,动加速度对重力参考的影响,外界地磁干扰对地磁参考的影响,如何在算法中避免这些情况,或者说出现这些情况下如何保证算法不崩溃,即鲁棒性; 4、  没有绝对的最好的算法。

文章推荐

相关推荐