基于互补滤波的飞行器姿态解算
基于非线性互补滤波算法的四旋翼飞行器姿态信息融合处理

传 感 器世 界 2 0 1 7 . 0 4
V o1 . 2 3 NO O 4 1 b t a l 2 6 2
e S e a r C n &U e V e l O D m e n 团囝团圈
得 较 好 的 滤 波 效 果 , 使得 姿 态 解 算 误差 较大 。
此 , 本 文 在 互 补滤 波 的 基 础 上 ,通 过 对
精度 要求较低 ,是一种从 频域 角度 埘数 进 行处跚 的
姿态融合算法 。文献 [ 1 0 一 l 2 ] 分别给 … J 瞅 拉 角 、 方I h j 余 弦 形 式 下 的 互 补 滤 波 算 法 ” 1 , 虽 然 能 满 足 飞 行
飞行控 制 的 要 求 , 但 由 J 会 出 现 瞅 托 角 法 仔 奇 点 、
. .
,
¨ 。 娜
“. n/
一
、
引言
化仍 是当下研 究的’ ‘ 个热点。 成 本控制 f ,
J
近 u
翼 飞 行 器 最 为 流 I I 。
术 的 ( M 逐 E M 渐
消 费 级 无 人 机 领 域 高 精 度 惯 性 导航 器 件 4 了 丁 将遍 他 用 性 , 目前 常 刖 的 M E MS惯 导 器 什 r 1 J 1 '陀 螺 仪 会带 柬
受到噪 0
针 对这一 『 【 】 J 题 , 丈献 【 5 — 7 1 采用 K a l ma n滤 波 对 删 量 数 据 进 行融 合 I S - ? ] : 为解 决 系 统 的 I t ! 线 性 ¨题 , 更献
阴旋翼 在布局形式 上属于 非共轴式 碟形飞 行器,
个 旋 桨 按 照 不 同 的方 向 旋 转 不 仅 抵 消 了反 扭 力矩 , 并 儿 可 以通 过 调 节 四 个 旋 翼 的 转 速 实 现 各 个 方 向 的 飞
互补滤波算法姿态解算

互补滤波算法姿态解算互补滤波算法是一种常用的姿态解算方法,广泛应用于飞行控制系统、惯性导航系统和姿态测量装置等领域。
该算法通过融合加速度计和陀螺仪的测量数据,实现对目标物体的姿态估计。
下面将详细介绍互补滤波算法的原理和应用。
一、互补滤波算法原理互补滤波算法主要基于两个观察结果:加速度计测量的重力矢量与陀螺仪测量的角速度。
加速度计测量的重力矢量可以提供一个参考方向,而陀螺仪测量的角速度可以提供连续更新的姿态角度信息。
互补滤波算法通过将这两个信息进行互补,实现对目标物体的姿态解算。
互补滤波算法的核心思想是将陀螺仪测量的角速度逐步累加,计算出目标物体的旋转角度,并将该角度作为姿态角。
由于陀螺仪的测量存在漂移等误差,随着时间的增加,角度积分的误差会越来越大。
为了避免这个问题,互补滤波算法通过加速度计测量的重力矢量进行补偿。
具体地,互补滤波算法使用一个权衡参数α(取值范围为0到1)来控制加速度计和陀螺仪的权重。
在每次更新姿态角时,新的姿态角为上一次的角度加上陀螺仪积分得到的角度乘以α,再加上加速度计测量的角度乘以1-α。
姿态角更新公式如下:θ(n) = α * (θ(n-1) + Δθ(n)) + (1-α) * θ_acc(n)其中,θ(n)为当前的姿态角,θ(n-1)为上一次的姿态角,Δθ(n)为陀螺仪积分得到的角度变化,θ_acc(n)为加速度计测量的角度。
二、互补滤波算法应用飞行器的姿态控制需要实时获取飞行器的姿态信息,并根据预设的姿态稳定控制侧滑、上升/下降等动作。
互补滤波算法可以通过融合加速度计和陀螺仪的测量数据,快速准确地获取飞行器的姿态信息。
在飞行器的姿态控制中,将陀螺仪测量的角速度作为连续更新的角度信息,用于控制飞行器的姿态稳定。
同时,通过加速度计测量的重力矢量可以提供一个参考方向,以补偿陀螺仪测量的角速度的误差。
1.初始化姿态角为加速度计测量的角度。
2.按照一定的时间间隔,读取加速度计和陀螺仪的测量数据。
基于互补滤波的飞行器姿态解算

姿态解算一、主线姿态表示方式:矩阵表示,轴角表示,欧拉角表示,四元数表示。
惯性测量单元IMU(Inertial Measurement Unit):MPU6050芯片,包含陀螺仪和加速度计,分别测量三轴加速度和三轴角速度。
注意,传感器所测数据是原始数据,包含了噪声,无法直接用于飞行器的姿态解算,因此需要对数据进行滤波。
滤波算法:非线性互补滤波算法,卡尔曼滤波算法,Mahony互补滤波算法。
二、知识点补充加速度计和陀螺仪加速度计:加速度计,可以测量加速度,包括外力加速度和重力加速度,因此,当被测物体在静止或匀速运动(匀速直线运动)的时候,加速度计仅仅测量的是重力加速度,而重力加速度与R坐标系(绝对坐标系)是固连的,通过这种关系,可以得到加速度计所在平面与地面的角度关系也就是横滚角和俯仰角。
把加速度传感器水平静止放在桌子上,它的Z轴输出的是1g的加速度。
因为它Z轴方向被重力向下拉出了一个形变。
可惜的是,加速度传感器不会区分重力加速度与外力加速度。
所以,当系统在三维空间做变速运动时,它的输出就不正确了,或者说它的输出不能表明物体的姿态和运动状态。
陀螺仪:陀螺仪测量角速度。
陀螺仪模型如图1所示,陀螺仪的每个通道检测一个轴的旋转。
图1[引自网络]上图中,Rxz是R在XZ面上的投影,与Z轴的夹角为Axz。
Ryz是R在ZY面上的投影,与Z轴的夹角为Ayz。
陀螺仪就是测量上面定义角度的变化率,换句话说,它会输出一个与上面这些角度变化率线性相关的值。
加速度计工作原理介绍(摘自网络)大多数加速度计可归为两类:数字和模拟。
数字加速度计可通过I2C,SPI或USART方式获取信息,而模拟加速度计的输出是一个在预定范围内的电压值,你需要用ADC(模拟量转数字量)模块将其转换为数字值。
不管使用什么类型的ADC模块,都会得到一个在一定范围内的数值。
例如一个10位ADC模块的输出值范围在0-1023间。
假设我们从10位ADC模块得到了以下的三个轴的数据:===586,630,561AdcRx AdcRy AdcRz每个ADC 模块都有一个参考电压,假设在我们的例子中,它是3.3V 。
姿态解算方法(1)_一种互补滤波方法

姿态解算⽅法(1)_⼀种互补滤波⽅法姿态解算⽅法(1)_ ⼀种互补滤波⽅法本⽂内容主要是参考《An efficient orientation filter for inertial and inertial/magnetic sensor arrays 》此篇论⽂,由于其在普通飞控中的⼴泛运⽤,所以这⾥简单记录学习感受以期后续详细思索。
当然也是因为这篇⽐较易懂,正好可以锻炼⼀下我捉襟见肘的表述能⼒。
写到这⾥可能已经开始被骂了。
⼏个较好的博⽂链接如下:(1)(2)这是在博客园的第⼀篇博⽂,想来⾃⼰⼀直攒在电脑⾥的东西,不仅容易被弄没了,也没办法被⼤家纠错批评,故也就不在乎好坏把想到的都写下来。
⾔归正传,⾸先,需要了解下四元数的知识,这在维基(3)和(1)中都有很好的解释了,这⾥为了争取篇幅讲述算法核⼼部分就不再赘述。
(3)⾓加速度的事那么进⼊关于姿态确定的部分。
三轴陀螺仪模块可以测量传感器所在平⾯的⾓加速度,⼀般来说MPU6050模块返回的是三个⾓速度值。
如果初始姿态是已知的,时间的计量⼜是准确的,那么就可以积分出姿态了。
可惜的是⾓速度的测量准确度实在是不能积分出⼀个准确的位置值。
不过这⾥还是说⼀下这个积分过程。
sω=0ωxωyωzS E ˙q=12SEˆq⊗Sωsω为传感器获得的⾓速度值,再次提醒这⾥的值可能是不准确的。
SEˆq是表⽰传感器相对于地⾯坐标系的SO(3)变换四元数的估计,这⾥⽤于表⽰传感器姿态的估计。
⊗是四元数的⼀种运算⽅式,在上⽂的参考⽂献中可以找得到的。
差分的形式可以表⽰为:δS E qω,t=12SEˆqt−1⊗SωtSE qω,t=S E ˆqt−1+δSE qω,tΔtΔt是两次预测之间的时间差,准确的说是传感器上⼀次数据和这⼀次数据获取时间差。
其他的部分和连续的形式对应就不多说了。
基于场⽅向观测的姿态求解⾸先把姿态观测问题看做是⼀个求尽可能满⾜观测结果的姿态的优化问题。
基于改进型显性互补滤波的MENS姿态解算

基于改进型显性互补滤波的MENS姿态解算付雷;章政;余义【摘要】针对单一的传感器无法准确进行姿态估计以及低成本MENS器件易发散的问题,提出了一种改进显性互补滤波算法.该算法利用加速度计校正陀螺仪漂移引起的姿态误差,并在数据融合之前对加速度原始数据进行巴特沃斯低通滤波,同时设置缓存区保存更新后的四元数向量,减小加速度通过低通滤波器之后产生的延时对姿态估计的影响,提高姿态解算的实时性.搭建了基于STM32单片机的四旋翼飞行器试验平台,试验结果表明,该算法能减小加速度延时对姿态估计的影响,在保证了姿态解算高精度的基础上,提高了姿态解算的实时性.【期刊名称】《自动化与仪表》【年(卷),期】2018(033)011【总页数】6页(P7-12)【关键词】互补滤波;姿态解算;四元数;四旋翼无人机;加速度计校正;低通滤波器【作者】付雷;章政;余义【作者单位】武汉科技大学信息科学与工程学院,武汉 430080;武汉科技大学信息科学与工程学院,武汉 430080;武汉科技大学信息科学与工程学院,武汉 430080【正文语种】中文【中图分类】TP301.6;V279+.2对于移动机器人、飞行器和卫星通信等系统而言,实时、准确的姿态估计是实现各种载体稳定运行的有效前提之一。
目前,由低成本、小型化的微机械陀螺仪、加速度计等惯性测量单元IMU (inertial measurement unit)构成的微机电系统MEMS(micro-electro-mechanical system)姿态估计得到了广泛的研究和应用。
然而在实际应用过程中,单一的IMU易受到噪声、温度漂移及安装误差等多方面因素影响[1]。
因此,将不同的传感器进行优势互补,形成多传感器融合系统用于保证载体姿态的精度和实时性。
1 多传感器融合系统的研究现状低成本STM32处理器的四旋翼飞行器试验测试平台,将所设计的算法进行静态试验和动态试验,以验证所设计系统的有效性。
基于互补滤波器的四旋翼飞行器姿态解算

。 该过程要
用到载体坐标系到导航坐标系的旋转矩阵 R , 本文采用方
r xx r xy r xz cos θ cos ψ r r r = cos θsin ψ Rn yx yy yz b = r zx r zy r zz - sin θ
- ωx d t . 1
ωy d t
( 2)
在 d t 趋近于 0 时, 由式( 2 ) 可得旋转矩阵的导数, 即 n b Rn = R , ( 3) b b Ω nb
0 Ω = ωz ωx . 0
yx xx zy zz
互补滤波器融合这三种传感器的数据, 提高测量精度和系 统的动态性能。 ^ 表示互 R 以 R 表示飞行器真实姿态的方向余弦矩阵, R0 代表由加速度 补滤波器计算输出的姿态方向余弦矩阵, u H 表示 传感器和数字罗盘观测到的姿态方向余弦矩阵, R O 的高频观测噪声, R c 代表由陀螺仪数据 则 Ro = R + uH , u L 表示 R c 中的低频累积误差, 计算得到的姿态, 则 Rc = R + uL 。 取 GL ( s ) = C( s) , GH ( s ) = 1 - GL ( s ) = s + C( s)
与目前常用的卡尔曼滤波算法相比采用互补滤波器算法的求解器能显著降低对处理器速度和精度的要求有效融合了捷联惯性测量单元的传感器数据实现了小型四旋翼飞行器的高精度姿态解算
56
传感器与微系统( Transducer and Microsystem Technologies)
2011 年 第 30 卷 第 11 期
基于互补滤波器的四旋翼飞行器姿态解算
1 梁延德 ,程 1 1 敏 ,何福本 ,李
(转)一种常见的四轴飞行器姿态解算方法分析

(转)一种常见的四轴飞行器姿态解算方法分析全国各地已经陆续开放低空管制,北京也将在2015年全面开放低空领域,这对低空飞行器将是一个十分重大的好消息!低空飞行器也将迎来一个新的发展春天。
实际上,近年四轴飞行器发展相当迅速,国内的航拍水平越来越高,顺丰及亚马逊已在尝试将无人机用于快递行业。
越来越多的人开始关注并研究四轴飞行器。
本文将分析一种常见的四轴飞行器姿态解算方法,Mahony的互补滤波法。
此法简单有效,希望能给学习四轴飞行器的朋友们带来帮助。
关于姿态解算和滤波的理论知识,推荐秦永元的两本书,一是《惯性导航》,目前已出到第二版了;二是《卡尔曼滤波与组合导航原理》。
程序中的理论基础,可在书中寻找。
下面开始进入正题:先定义Kp,Ki,以及halfT 。
Kp,Ki,控制加速度计修正陀螺仪积分姿态的速度halfT ,姿态解算时间的一半。
此处解算姿态速度为500HZ,因此halfT 为0.001#define Kp 2.0f#define Ki 0.002f#define halfT 0.001f初始化四元数float q0 = 1, q1 = 0, q2 = 0, q3 = 0;定义姿态解算误差的积分float exInt = 0, eyInt = 0, ezInt = 0;以下为姿态解算函数。
参数gx,gy,gz分别对应三个轴的角速度,单位是弧度/秒;参数ax,ay,az分别对应三个轴的加速度原始数据由于加速度的噪声较大,此处应采用滤波后的数据void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az){float norm;float vx, vy, vz;float ex, ey, ez;将加速度的原始数据,归一化,得到单位加速度norm = sqrt(ax*ax + ay*ay + az*az);ax = ax / norm;ay = ay / norm;az = az / norm;把四元数换算成“方向余弦矩阵”中的第三列的三个元素。
互补滤波器在四元数法姿态解算中的应用

航 坐标 系为 地 理 坐 标 系。坐标 系 变换 以 刚 体 定 点 转 动 为基 础 ,
载 体 坐标 系转 换 到 导 航 坐标 系的过 程 可 以 分 解 为 绕 三 个 轴 的
三 次旋 转 。
2 四元数姿态算 法
2 . 1 四元 数
四 元 数 是 最 简单 的超 复数 ,能 够 非 常 方 便 的表 示 坐标 系
出载 体 坐标 系相 对 于 导航 坐 标 系的旋 转 。
P x Q( p 0 + p 1 i + p 2 j + P 3 k ) x ( q o + q 1 i + q 2 j + q 3 k )
=
( p 0 q o - P 1 q l — P 2 q 2 - P 3 q 3 ) + ( p 0 q l + p l q o + p 2 q 3 - P 3 q 2 ) i
+ ( p 0 q 2 + p 2 q o + P 3 q 1 一 P l q 3 ) j + ( p 0 q 3 + p 3 q o + P 1 q 2 - P 2 q 1 ) k( 4 )
2 . 2 四元数 姿态 算法
四 元 数 算 法 的 实质 是 用 四元 数 运 算表 示 载体 坐 标 系 b向
导 航 坐标 系 n的 旋 转 。载 体 坐 标 系 由导航 平 台机体 轴确 定 , 导
( 1 ) 地 理 坐标 系: 地 理 坐 标 系 的 原 点 选 在 导 航 平 台 的 质 心. Z轴 沿 当地 参 考 椭球 的 法 线指 向 天 顶 , X 轴 在 当地 水 平 面 且 沿 当地 纬 度 指 向 东 . Y 轴 沿 当地 子 午 线指 向北 。 ( 2 ) 栽 体 坐标 系 : 对 于栽 体 而 言 , 原 点在 栽 体 质 心 , X 轴 指 向栽体右方 , Y 轴指 向 栽 体前 方 , 并在载体对称面 内, Z轴垂 直
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姿态解算一、主线姿态表示方式:矩阵表示,轴角表示,欧拉角表示,四元数表示。
惯性测量单元IMU(Inertial Measurement Unit):MPU6050芯片,包含陀螺仪和加速度计,分别测量三轴加速度和三轴角速度。
注意,传感器所测数据是原始数据,包含了噪声,无法直接用于飞行器的姿态解算,因此需要对数据进行滤波。
滤波算法:非线性互补滤波算法,卡尔曼滤波算法,Mahony互补滤波算法。
二、知识点补充加速度计和陀螺仪加速度计:加速度计,可以测量加速度,包括外力加速度和重力加速度,因此,当被测物体在静止或匀速运动(匀速直线运动)的时候,加速度计仅仅测量的是重力加速度,而重力加速度与R坐标系(绝对坐标系)是固连的,通过这种关系,可以得到加速度计所在平面与地面的角度关系也就是横滚角和俯仰角。
把加速度传感器水平静止放在桌子上,它的Z轴输出的是1g的加速度。
因为它Z轴方向被重力向下拉出了一个形变。
可惜的是,加速度传感器不会区分重力加速度与外力加速度。
所以,当系统在三维空间做变速运动时,它的输出就不正确了,或者说它的输出不能表明物体的姿态和运动状态。
陀螺仪:陀螺仪测量角速度。
陀螺仪模型如图1所示,陀螺仪的每个通道检测一个轴的旋转。
图1[引自网络]上图中,Rxz是R在XZ面上的投影,与Z轴的夹角为Axz。
Ryz是R在ZY面上的投影,与Z轴的夹角为Ayz。
陀螺仪就是测量上面定义角度的变化率,换句话说,它会输出一个与上面这些角度变化率线性相关的值。
加速度计工作原理介绍(摘自网络)大多数加速度计可归为两类:数字和模拟。
数字加速度计可通过I2C,SPI或USART方式获取信息,而模拟加速度计的输出是一个在预定围的电压值,你需要用ADC(模拟量转数字量)模块将其转换为数字值。
不管使用什么类型的ADC模块,都会得到一个在一定围的数值。
例如一个10位ADC模块的输出值围在0-1023间。
假设我们从10位ADC模块得到了以下的三个轴的数据:===586,630,561AdcRx AdcRy AdcRz每个ADC 模块都有一个参考电压,假设在我们的例子中,它是3.3V 。
要将一个10位的ADC 值转成电压值,我们使用下列公式:将3个轴的值代入上式,得到:3.3586 1.8910233.3630 2.0310233.3561 1.811023VoltsRx V VoltsRy V VoltsRz V=⨯==⨯==⨯=每个加速度计都有一个零加速度的电压值,这个电压值对应于加速度为0g 。
通过计算相对0g 电压的偏移量我们可以得到一个有符号的电压值。
比方说,0g 电压值 1.65VzeroG V =,通过下面的方式可以得到相对0g 电压的偏移量:1.89 1.650.242.03 1.650.381.81 1.650.16DeltaVoltsRx V V V DeltaVoltsRy V V V DeltaVoltsRz V V V=-==-==-= 现在我们得到了加速度计的电压值,但它的单位还不是2(9.8/)g m s ,最后的转换,我们还需要引入加速度计的灵敏度,单位通常是/mV g 。
比如,加速度计的灵敏度478.5/0.4785/Sensitivity mV g V g ==。
灵敏度值可以在加速度计说明书中找到。
要获得最后的单位为g 的加速度,我们使用下列公式计算:DeltaVoltsRxRx Sensitivity=0.240.47850.50.380.47850.790.160.47850.33Rx g Ry g Rz g=÷==÷==÷= 综上,可以把以上步骤用以下公式表达1023Sensitivity 1023Sensitivity 1023SensitivityVrefAdcRx VzeroG Rx VrefAdcRy VzeroGRy VrefAdcRz VzeroGRz ⨯-=⨯-=⨯-=现在我们得到了惯性力矢量的三个分量,如果设备除了重力外不受任何外力影响,那我们就可以认为这个方向就是重力矢量的方向。
(自此明白了文献[1]中所说只使用加速度计获得的角度是基于飞行器在匀速飞行或静止的条件下得到的)图2[引自网络]我们感兴趣的角度是向量R 和X ,Y ,Z 轴之间的夹角,那就令这些角度为Axr ,Ayr ,Azr 。
观察由R 和Rx 组成的直角三角形()()()cos cos cos Rx Ry Rz Axr Ayr Azr RRR===图2中,2222R RX RY RZ =++,那么,角度即为arccosarccosarccosRx Ry Rz Axr Ayr Azr RRR=== 三、互补滤波算法加速度计是极易受外部干扰的传感器(如机械振动),但是测量值的误差不随时间的变化。
陀螺仪输出的角速度可以积分得到角度,动态性能好,受外部干扰小,但积分会造成误差累积。
可以看出,它们优缺点互补,结合起来才能有好的效果。
经典互补滤波算法(Classical Complementary Filter )经典互补滤波算法基本原理是充分利用加速度计提供的低频角度信号和陀螺仪提供的高频角速度信号,对加速度计进行低通滤波,对陀螺仪进行高通滤波,分别滤出相应的干扰信号,为两者的有效融合提供了很好的解决方案[2]。
图3 经典互补滤波算法—频域形式原理图[2]融合后姿态角估计值为ˆgp a p pK s s K s s K ωθθ=+++其中,g ω为陀螺仪测量的角速度,a θ为加速度计测量的角度值,p K 为比例系数,1()p sF s s K =+为高通滤波器,21()1()p pK F s F s s K =-=+为低通滤波器。
图4 经典互补滤波算法—时域形式原理图[2]对ˆgp a p pK s s K s s K ωθθ=+++进行反拉氏变换,可得时域微分形式为ˆˆ()p a gK θθθω=-+ 改进后的互补滤波算法(Explicit Complementary Filter )经典互补滤波算法实现简单,但是估算精度角度较低,文献[3]提出了一种改进算法(ECF ),在经典互补滤波算法的补偿环节加入积分器,以消除陀螺仪漂移常值误差,原理框图如下图。
图5 改进后的互补滤波算法[2]时域微分形式为ˆˆˆ()()Ip aa gK K sθθθθθω=-+-+ 四、四旋翼飞行器姿态解算流程四旋翼姿态解算整体流程框图如下图5 四元数表示的姿态解算整体流程框图[4]其中,Gyroscope 为陀螺仪,bΩ是陀螺仪输出的测量数据,Accelerometer是加速度计,在Airspeed 模块以及b f 作用下,加速度输出测量数据ˆbg。
第一,对加速度计测出来的数据进行归一化处理:ˆˆb gg;第二,将重力加速度旋转到机体坐标,得到重力加速度在三个轴上的加速度分量,作为标准加速度。
()222201231203021322221203012323000011c c c s s s c s s c s s 0c s c c s s s s c c s s 0s s c c c 12()2()2()2(T b n n b TC C q q q q q q q q q q q q q q q q q q q q q q q θψϕψϕθψϕψϕθψθψϕψϕθψϕψϕθψθϕθϕθ⎡⎤⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦-++⎡⎤⎡⎤⎢⎥⎢⎥=+-+⋅⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦+---+=+-+-+01222213020123012313020123222201230)02()2()12()2()T q q q q q q q q q q q q q q q q q q q q q q q q q ⎡⎤⎡⎤⎢⎥⎢⎥⋅⎢⎥⎢⎥⎢⎥⎢⎥-+--+⎣⎦⎣⎦-⎡⎤⎢⎥=+⎢⎥⎢⎥--+⎣⎦其中bn C 为世界坐标系到机体坐标系的变换矩阵。
(文献[4]图中此处原文中有错误,已经在截图中进行了修改)第三,归一化后的加速度计值与标准加速度做叉积运算,求得误差向量e ;第四,对误差进行滤波,改进后的互补滤波算法(ECF )可以表示为以下四元数形式:1ˆˆ()2q q p δ=⊗Ω+ p I k e k e δ=+⎰ ,ˆe v v=⨯ 第四,求解四元数微分方程1ˆˆ()2qq p δ=⊗Ω+,求得最新的0123,,,q q q q ; 第五,代入以下公式求得姿态角。
0123222201232()arctanq q q q q q q q ϕ+=--+ 1302arcsin 2()q q q q θ=- 1203222201232()arctanq q q q q q q q ϕ+=+--参考文献[1] 郭晓鸿,忠,喆,等. EKF和互补滤波器在飞行姿态确定中的应用[J]. 传感器与微系统,2011,30(11):149-152.[2] 傅忠云,朱海霞,金秋,等. 基于惯性传感器MPU6050 的滤波算法研究[J]. 压电与声光, 2015 (2015 年 05): 821-825,829.[3] Mahony R, Hamel T, Pflimlin J M. Nonlinear complementary filters on the special orthogonal group[J]. IEEE Transactions on automatic control, 2008, 53(5): 1203-1218.[4] Euston M, Coote P, Mahony R, et al. A complementary filter for attitude estimation of a fixed-wing UAV[C]//Intelligent Robots and Systems, 2008. IROS 2008. IEEE/RSJ International Conference on. IEEE, 2008: 340-345.附程序:void IMUupdate(float gx, float gy, float gz, float ax,float ay, float az){float norm;float vx, vy, vz;float ex, ey, ez;float q0q0 = q0*q0;float q0q1 = q0*q1;float q0q2 = q0*q2;float q1q1 = q1*q1;float q1q3 = q1*q3;float q2q2 = q2*q2;float q2q3 = q2*q3;float q3q3 = q3*q3;if(ax*ay*az==0)return;// 第一步:对加速度数据进行归一化norm = sqrt(ax*ax + ay*ay + az*az);ax = ax / norm;ay = ay / norm;az = az / norm;// 第二步:DCM矩阵旋转vx = 2*(q1q3 - q0q2);vy = 2*(q0q1 + q2q3);vz = q0q0 - q1q1 - q2q2 + q3q3 ;// 第三步:在机体坐标系下做向量叉积得到补偿数据ex = ay*vz - az*vy ;ey = az*vx - ax*vz ;ez = ax*vy - ay*vx ;// 第四步:对误差进行PI计算,补偿角速度exInt = exInt + ex * Ki;eyInt = eyInt + ey * Ki;ezInt = ezInt + ez * Ki;gx = gx + Kp*ex + exInt;gy = gy + Kp*ey + eyInt;gz = gz + Kp*ez + ezInt;// 第五步:按照四元数微分公式进行四元数更新q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT; }。