IMU特性参数、误差模型及卡尔曼滤波参数设置

本文主要总结了IMU的两种常用误差模型,以及如何通过IMU的指标对卡尔曼滤波中的参数进行设置。总体参考了严恭敏老师的博客以及秦永元老师的经典书籍《卡尔曼滤波与组合导航原理》。

还在学校的时候就会看严老师写的博客,我觉得写得非常“实在”,也向他提过一些问题,感觉他人也特别真诚和实在。他将自己的导航算法开源出来,并且建立了个人网站以及一些讨论群,是一个非常棒的“宝藏”老师,感兴趣的同学可以去关注他。

IMU指标参数与卡尔曼滤波参数设置

关于如何使用IMU的指标参数对卡尔曼滤波器参数进行设置,严恭敏老师在博客Allan方差分析的使用要点 中提到:

Allan方差分析的另一个用途是获得噪声参数,用于组合导航的Kalman滤波噪声参数设置。不是所有的Allan方差噪声系数都有用,主要有用的是角度随机游走系数(用于设置Q阵)和零偏不稳定性系数(用于设置一阶马氏过程的方差),其实这两个系数量级大小差不多就行了,太精细也没用。毕竟Allan方差分析的只是一个样本,你再采一个样本试试,肯定会有差异的;此外采集的是陀螺的静态性能数据,鬼知道实际动态应用的时候陀螺误差会变化多大,存在数量级差别都很有可能。例如某陀螺的角度随机游走为 1.38 d e g r e e / h o u r 1.38degree/\sqrt{hour} 1.38degree/hour ,则表示过了一个小时后,角度不确定度,即1sigma std为1.38度。可用来设置IMU的噪声协方差Q阵。

上面所提到的利用allan方差得到的两个指标参数为:

零偏不稳定性bias instability:Allan 方差法数据处理得到的陀螺仪输出噪声特性参数之一,是由陀螺仪自身参数的不稳定性或由环境噪声(如环境温度波动等)引起的低频零偏波动。我们可以先把它理解为零偏随时间的缓慢变化。

角度随机游走 angle random walk:Allan方差法处理得到的陀螺仪输出噪声特性参数之一,是由白噪声产生的随时间累积的陀螺仪输出误差系数。随机游走就是白噪声的积分

两种IMU误差模型

严恭敏老师在博客陀螺漂移误差的马尔科夫+白噪建模中提到:

大多数实际系统中,我觉得还是将光学陀螺漂移误差建成角速率随机常值+角速率白噪声(即角度随机游走)就足够用了。老外的文献中认为可将角度随机游走(和角速率随机常值误差)近似成长相关时间(相关时间从几10-100h)的马尔科夫过程,或者可将随机常值引入遗忘功能即弱化旧观测的作用,综合这两种观点,最后均可将陀螺漂移误差建模成马尔科夫+白噪声模型。我觉得这也是非常有道理的,特别在长时间组合导航Kalman滤波时,马尔科夫模型不会象常值模型那样出现方差过度收敛问题(即经过多次载体机动后,随机常值模型滤波器中对应的方差可能变得非常小,当实际常值漂移稍有波动时会失去滤波调整作用)。当然,一小时量级的短时导航随机常值+白噪声还是合适的。

大多数实际系统中,陀螺漂移误差建成角速率随机常值+角速率白噪声(即角度随机游走)就足够用了。实际应用中不会将白噪声、相关漂移、随机常值三者同时建模的,一般选择’随机常值+白噪声’或者’相关漂移’就够了。

在《卡尔曼滤波与组合导航原理》书中对IMU的各种随机误差模型也有更加细致的介绍,下面内容参考了书中3.1.3节和8.4.3节。

1. 角速率随机常值+角速率白噪声
在这里插入图片描述
2. 一阶马尔可夫过程+角速率白噪声
在这里插入图片描述
关于一阶马尔可夫相关时间设置,一般取allan方差图中的获取零偏不稳定性的时间作为相关时间。

另外,在文献[4]中也讨论了不同相关时间对组合导航结果的影响,结论如下(供参考):

  1. 当零偏相关时间参数接近其真值时,组合导航结果在通体上趋于最优表现;
  2. 对中高等级IMU,加速度计零偏相关时间设得接近真值会给组合导航结果带来相对较大的小幅改善。
  3. 总体来说,相关时间对组合导航结果影响较弱,在基于一阶高斯马尔可夫过程中对IMU误差建模的组合导航算法中,一般可不必将其作为参数优化的主要考虑因素。

PSINS代码中的IMU误差生成

参见严恭敏老师的PSINS开源代码中的imuerrset和imuadderr函数可以学习如何仿真生成以上IMU误差。

参考文献

[1]. 陀螺漂移误差的马尔科夫+白噪建模
[2]. Allan方差分析的使用要点
[3]. 《卡尔曼滤波与组合导航原理》
[4]. 胡远迁, 张全, and 牛小骥. “基于一阶高斯-马尔科夫模型的 IMU 零偏相关时间对 GNSS/INS 组合导航结果的影响.” 科学技术与工程 34 (2018).

  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
【资源说明】 基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip 基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip 基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip 基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip 基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip基于迭代误差状态卡尔曼滤波(IESKF)的Livox-IMU车载SLAM系统C++源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
以下是一个基于MATLAB的IMU与Lidar不同频率位置卡尔曼滤波融合的示例程序: ``` % IMU位置卡尔曼滤波融合程序 % IMU频率为100Hz,Lidar频率为10Hz % 初始化变量 dt_imu = 0.01; % IMU采样时间 dt_lidar = 0.1; % Lidar采样时间 t = 0:dt_imu:10; % 总时间 n = length(t); % 时间步数 % 系统模型 A = [1, dt_imu; 0, 1]; % 状态转移矩阵 B = [0; dt_imu]; % 输入矩阵 C = [1, 0]; % 观测矩阵 Q = [0.001, 0; 0, 0.01]; % 过程噪声协方差矩阵 R = 1; % 观测噪声协方差矩阵 % 初始化状态 xhat = [0; 0]; % 位置和速度 P = eye(2); % 状态协方差矩阵 % Lidar测量 z = zeros(1, n); % Lidar测量值 z(1:10:end) = 10*sin(2*pi*0.2*t(1:10:end)); % 每隔1秒测量一次 % IMU输入 u = 0.5*sin(2*pi*2*t); % IMU输入值 % 卡尔曼滤波 for i = 1:n % 预测 xhat = A*xhat + B*u(i); P = A*P*A' + Q; % 更新 if mod(i, 10) == 0 % Lidar测量更新 K = P*C'/(C*P*C' + R); xhat = xhat + K*(z(i) - C*xhat); P = (eye(2) - K*C)*P; end end % 画图 figure; plot(t, xhat(1,:), 'b', t, z, 'r--'); legend('卡尔曼滤波融合', 'Lidar测量'); xlabel('时间 (秒)'); ylabel('位置 (米)'); title('IMU与Lidar不同频率位置卡尔曼滤波融合'); ``` 该程序中,我们使用了一个简单的一维系统模型,其中IMU频率为100Hz,Lidar频率为10Hz。程序中将IMU输入和Lidar测量融合在一起,使用卡尔曼滤波对位置进行预测和更新。最后,我们将卡尔曼滤波融合结果和Lidar测量进行比较。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值