【论文阅读笔记】里程计ODO/INS不同融合方式的性能比较

欢迎关注个人公众号:导航员学习札记

关于里程计的融合一般用“距离增量修正”和“速度修正”两种方式。我最近在想这两种方式在性能上有什么不同,因此找了两篇论文来看。本文主要是整理了武汉大学i2Nav团队、上海交大武元新老师团队关于里程计融合的论文中的结论。

一、里程计的工作原理

里程计一般会用在机器人或者汽车上,轮子每转动一周,里程计会输出N个脉冲,因此根据脉冲个数以及轮子的半径,就可以得到轮子走过的距离。

由于在计算距离时我们只能统计整数个脉冲,因此里程计的精度和轮子转一周输出的脉冲个数有关,理论上转一周输出的脉冲越多,精度也就越高。一般融合里程计还需要考虑下面三项参数:

  • 由于轮子胎压的变化等,可能会导致里程计刻度系数变化,因此需要估计里程计的刻度系数
  • 由于里程计和IMU的安装位置不同,杆臂的存在导致转弯时两者速度、走过的距离不同,因此需要估计或者事先测量杆臂值
  • 由于实际中IMU的安装无法完全和车身坐标系重合,因此需要考虑安装误差

当然如果轮子出现打滑等情况,里程计的输出就不能真实地反映轮子走过距离,此时也会存在一定误差。

二、论文中的主要结论

1. 《INS/Odometer Land Navigation by Accurate Measurement Modeling and Multiple-Model Adaptive Estimation》 by 上海交大武元新老师 团队

论文内容及结论:如下面公式所示,文章对比了三种融合方式:脉冲累积量、脉冲增量、脉冲速度。作者经过仿真和实际测试认为用速度融合的方式性能最优。

个人观点:论文虽然用仿真和实际数据证明速度融合最优,但是似乎没有从理论的角度来探讨为何这种融合更优(也有可能我漏看了),会不会是因为在计算速度时,预先用了另一个卡尔曼滤波器来降低速度噪声?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 《轮式机器人定位中ODO/NHC的两种测量模型的精度和鲁棒性研究》 by 武汉大学i2Nav 团队

论文内容及结论:论文中针对了三种场景(载体震动测试,急停测试、过减速带测试)进行了轮式机器人的里程计融合测试。融合方式分别是速度融合和距离增量融合,如下图所示。研究表明:采用距离增量修正(包括ODO和NHC)比传统的速度修正的组合导航精度更高,稳健性也更好,尤其是对小型轮式机器人这种不精密载体[1]。主要原因是结构相对简单粗糙的轮式机器人相比于结构精密的汽车,工作时的震动和颠簸更严重,其运动学模型更容易被破坏。

个人观点:论文也是主要从测试出发来验证结论,理论上可以说是由于震动等使得车辆运动学模型破坏。不过我个人对震动如何破坏运动学模型还不是很明白。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、总结

两篇论文针对不同载体,分别得到了“速度融合更优”和“距离增量融合更优”的结果。下面是个人的观点,可能说的不对,欢迎指正:不考虑特殊情况,从理论上来看,两种融合方式应该不会有较大的精度区别,尤其是在里程计测量频率较高、精度较高的情况下。因为速度并没有比距离增量多更多的信息,两者的信息几乎是等价的。也许在某些特定的情况下(比如某种原因运动学模型破坏),某种方式可能会更优。

四、参考文献

[1]. L. Wang, X. Niu, T. Zhang, H. Tang, and Q. Chen, “Accuracy and robustness of ODO/NHC measurement models for wheeled robot positioning,”Measurement, vol. 201, p. 111720, Sep. 2022, doi: 10.1016/j.measurement.2022.111720.
[2]. W. Ouyang, Y. Wu, and H. Chen, “INS/Odometer Land Navigation by Accurate Measurement Modeling and Multiple-Model Adaptive Estimation,” IEEE Trans. Aerosp. Electron. Syst., vol. 57, no. 1, pp. 245–262, Feb. 2021, doi: 10.1109/TAES.2020.3011998.

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个简单的 MATLAB 代码示例,用于将 IMU 数据与里程计数据融合。假设你已经有了 IMU 数据和里程计数据,并且它们都以某种方式进行了校准和预处理: ```matlab % IMU 数据 imu_data = load('imu_data.mat'); % 里程计数据 odo_data = load('odo_data.mat'); % 融合参数 dt = 0.01; % 时间间隔 Q = diag([0.01 0.01 0.01 0.1 0.1 0.1]); % IMU 噪声协方差矩阵 R = diag([0.1 0.1 0.1]); % 里程计噪声协方差矩阵 % 初始化状态向量和协方差矩阵 x = [0; 0; 0; 0; 0; 0]; P = eye(6); % 预步骤(根据 IMU 数据更新状态) for i = 1:length(imu_data) [x, F] = predict_state(x, imu_data(i,:), dt); [P, Q] = predict_covariance(P, Q, F, dt); end % 更新步骤(根据里程计数据更新状态) for i = 1:length(odo_data) [x, H] = update_state(x, odo_data(i,:)); [P, R] = update_covariance(P, R, H); end % 预状态函数(根据 IMU 数据更新状态) function [x, F] = predict_state(x, imu, dt) % imu: 加速度计和角速度计数据 % x: 状态向量 % dt: 时间间隔 % 根据加速度计和角速度计计算状态变化量 ax = imu(1); ay = imu(2); az = imu(3); wx = imu(4); wy = imu(5); wz = imu(6); dx = x(4); dy = x(5); dz = x(6); x_dot = [dx; dy; dz; -ax; -ay; -az] + [0; 0; 0; -wx; -wy; -wz]; % 计算状态转移矩阵 F F = [eye(3) dt*eye(3); zeros(3) eye(3)]; % 更新状态向量 x x = x + dt * x_dot; end % 预协方差函数(根据 IMU 数据更新协方差) function [P, Q] = predict_covariance(P, Q, F, dt) % P: 协方差矩阵 % Q: IMU 噪声协方差矩阵 % F: 状态转移矩阵 % dt: 时间间隔 % 计算预协方差矩阵 P = F * P * F' + Q; end % 更新状态函数(根据里程计数据更新状态) function [x, H] = update_state(x, odo) % odo: 里程计数据 % x: 状态向量 % 根据里程计计算状态变化量 dx = odo(1); dy = odo(2); dtheta = odo(3); x_dot = [dx; dy; dtheta; 0; 0; 0]; % 计算量矩阵 H H = [eye(3) zeros(3)]; % 更新状态向量 x x = x + x_dot; end % 更新协方差函数(根据里程计数据更新协方差) function [P, R] = update_covariance(P, R, H) % P: 协方差矩阵 % R: 里程计噪声协方差矩阵 % H: 量矩阵 % 计算卡尔曼增益 K K = P * H' / (H * P * H' + R); % 计算更新后的协方差矩阵 P P = (eye(6) - K * H) * P; % 更新里程计噪声协方差矩阵 R(可以根据实际情况调整) R = diag([0.1 0.1 0.1]); % 这里假设里程计的噪声是恒定的 end ``` 这段代码只是一个简单的示例,具体的实现可能需要根据你的具体应用情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值