✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
🎁 私信更多全部代码、Matlab仿真定制
🔥 内容介绍
在机器人导航、自动驾驶以及其他需要精确位置估计的应用领域中,可靠且准确的定位至关重要。单一的传感器往往无法提供足够鲁棒性和精度的定位信息。里程计,通过测量轮子的转动来推断车辆的位姿,虽然短期精度较高,但会随着时间的推移积累误差。全球定位系统 (GPS) 虽然能够提供绝对位置信息,但其精度易受环境因素影响,例如信号遮挡和多径效应,且更新频率较低。为了克服单一传感器的局限性,多传感器融合技术应运而生,而卡尔曼滤波作为一种经典的融合算法,在实践中得到了广泛应用。本文将重点讨论如何利用扩展卡尔曼滤波(EKF)融合里程计和 GPS 数据,以实现高精度定位。
1. 里程计和 GPS 的特点分析
在深入探讨融合算法之前,我们必须充分理解里程计和 GPS 的特性。
1.1 里程计的特性
里程计主要通过测量车辆轮子的转动次数或转速来推算车辆的相对位姿变化。其优点包括:
-
高频率: 里程计可以以较高的频率提供位置更新,使得能够实时跟踪车辆的运动轨迹。
-
短期精度高: 在短时间内,里程计能够提供相对精确的位姿估计,误差累积较慢。
-
成本较低: 里程计的硬件成本相对较低,易于集成到车辆系统中。
然而,里程计也存在一些明显的局限性:
-
累积误差: 由于轮子的滑动、打滑以及测量误差等因素,里程计的误差会随着时间的推移而累积,导致长期位置估计不准确。
-
对环境敏感: 路面状况、轮子磨损等因素都会影响里程计的精度。
-
无法提供绝对位置: 里程计只能推算相对位姿变化,需要一个初始位置作为参考。
1.2 GPS 的特性
GPS 利用卫星发送的信号来计算接收机的位置。其优点包括:
-
提供绝对位置: GPS 可以提供全球坐标系下的绝对位置信息,不受初始位置的限制。
-
不易受累积误差影响: GPS 误差相对独立,不会随着时间的推移而累积。
然而,GPS 也存在一些不足:
-
精度受环境影响: 建筑物、树木等障碍物会遮挡 GPS 信号,导致精度下降或信号丢失。
-
更新频率较低: GPS 的更新频率通常较低,无法实时捕捉车辆的运动细节。
-
易受多径效应影响: GPS 信号在传播过程中可能发生反射,导致接收机接收到多个信号,从而产生误差。
2. 扩展卡尔曼滤波(EKF)原理
扩展卡尔曼滤波是卡尔曼滤波的一种非线性扩展,主要用于解决非线性系统的状态估计问题。其核心思想是:利用系统模型和测量模型,结合系统噪声和测量噪声,递推估计系统状态。EKF 的过程主要分为两个步骤:
-
预测(Prediction): 根据上一时刻的状态估计和系统模型,预测当前时刻的状态。
-
更新(Update): 利用当前时刻的测量值,修正预测的状态,得到更精确的状态估计。
具体而言,假设系统状态向量为 x, 系统模型为 f(x, u) (其中 u 是控制输入), 测量向量为 z, 测量模型为 h(x)。 则 EKF 的基本方程可以描述如下:
2.1 预测步骤
-
状态预测:
x<sub>k|k-1</sub> = f( x<sub>k-1|k-1</sub>, u<sub>k</sub> )
其中 x<sub>k|k-1</sub> 是 k 时刻的状态预测值,x<sub>k-1|k-1</sub> 是 k-1 时刻的状态估计值。
-
误差协方差矩阵预测:
P<sub>k|k-1</sub> = F<sub>k-1</sub> P<sub>k-1|k-1</sub> F<sub>k-1</sub><sup>T</sup> + Q<sub>k-1</sub>
其中 P 是误差协方差矩阵,Q 是系统噪声协方差矩阵,F 是系统模型的雅可比矩阵。
2.2 更新步骤
-
卡尔曼增益计算:
K<sub>k</sub> = P<sub>k|k-1</sub> H<sub>k</sub><sup>T</sup> (H<sub>k</sub> P<sub>k|k-1</sub> H<sub>k</sub><sup>T</sup> + R<sub>k</sub>)<sup>-1</sup>
其中 R 是测量噪声协方差矩阵,H 是测量模型的雅可比矩阵,K 是卡尔曼增益。
-
状态更新:
x<sub>k|k</sub> = x<sub>k|k-1</sub> + K<sub>k</sub> (z<sub>k</sub> - h(x<sub>k|k-1</sub>))
其中 x<sub>k|k</sub> 是 k 时刻的状态估计值,z<sub>k</sub> 是 k 时刻的测量值。
-
误差协方差矩阵更新:
P<sub>k|k</sub> = ( I - K<sub>k</sub> H<sub>k</sub> ) P<sub>k|k-1</sub>
其中 I 是单位矩阵。
3. 基于 EKF 的里程计和 GPS 融合
现在我们应用扩展卡尔曼滤波来融合里程计和 GPS 数据,从而获得更精确的定位信息。
3.1 系统模型构建
首先需要定义系统状态向量 x。 通常,一个二维的定位系统可以包括以下状态:
x = [ x, y, θ, v ]<sup>T</sup>
其中 x 和 y 表示车辆在全局坐标系下的位置坐标,θ 表示车辆的航向角,v 表示车辆的线速度。
系统模型 f(x, u) 可以描述为:
x<sub>k</sub> = x<sub>k-1</sub> + v<sub>k-1</sub> Δt cos(θ<sub>k-1</sub>)
y<sub>k</sub> = y<sub>k-1</sub> + v<sub>k-1</sub> Δt sin(θ<sub>k-1</sub>)
θ<sub>k</sub> = θ<sub>k-1</sub> + ω<sub>k-1</sub> Δt
v<sub>k</sub> = v<sub>k-1</sub>
其中 Δt 是时间间隔,ω 是车辆的角速度,由里程计提供。控制输入 u = [ω]<sup>T</sup>。
3.2 测量模型构建
测量向量 z 包括来自 GPS 和里程计的数据。GPS 提供车辆的绝对位置,因此测量模型 h(x) 可以定义为:
z<sub>GPS</sub> = [x, y]<sup>T</sup>
里程计可以提供车辆的线速度和角速度信息,但这些信息已经在系统模型中使用了。我们还可以利用里程计的位姿变化信息,即相对位置变化来辅助更新。
3.3 雅可比矩阵计算
为了应用 EKF,我们需要计算系统模型和测量模型的雅可比矩阵。
-
系统模型雅可比矩阵 F:
F =
[1 0 - v<sub>k-1</sub> Δt sin(θ<sub>k-1</sub>) Δt cos(θ<sub>k-1</sub>) ]
[0 1 v<sub>k-1</sub> Δt cos(θ<sub>k-1</sub>) Δt sin(θ<sub>k-1</sub>) ]
[0 0 1 0 ]
[0 0 0 1]
-
GPS 测量模型雅可比矩阵 H<sub>GPS</sub>:
H<sub>GPS</sub> =
[ 1 0 0 0]
[ 0 1 0 0]
3.4 噪声协方差矩阵设置
系统噪声协方差矩阵 Q 和测量噪声协方差矩阵 R 需要根据实际情况进行设置。 Q 描述了系统模型的不确定性,而 R 描述了测量值的不确定性。合理设置这些参数对滤波效果至关重要。通常,我们会根据传感器的精度和误差特性来调整这些参数。
4. EKF 融合流程
以下是利用 EKF 融合里程计和 GPS 数据的流程:
-
初始化: 初始化状态向量 x 和误差协方差矩阵 P。
-
预测步骤:
-
利用里程计数据和系统模型,进行状态预测 x<sub>k|k-1</sub> 和误差协方差矩阵预测 P<sub>k|k-1</sub>。
-
-
更新步骤:
-
如果有 GPS 测量数据可用,则利用 GPS 测量值和测量模型,计算卡尔曼增益 K<sub>k</sub>。
-
利用 K<sub>k</sub> 更新状态估计 x<sub>k|k</sub> 和误差协方差矩阵 P<sub>k|k</sub>。
-
-
重复步骤 2 和 3: 循环执行预测和更新步骤,持续进行定位。
5. 实验结果与分析
通过仿真实验或实际环境测试,我们可以验证基于 EKF 融合里程计和 GPS 的定位效果。 通常,通过融合,我们能够获得比单独使用里程计或 GPS 更准确和更鲁棒的定位结果。 在 GPS 信号良好时,融合结果会更接近 GPS 的绝对位置;在 GPS 信号受干扰时,融合结果仍然可以依赖里程计的短期精度,避免出现大的位置跳变。
📣 部分代码
close all;
clear all;
disp('EKF Start!')
time = 0;
global endTime; % [sec]
endTime = 60;
global dt;
dt = 0.1; % [sec]
removeStep = 5;
nSteps = ceil((endTime - time)/dt);
estimation.time=[];
estimation.u=[];
estimation.GPS=[];
estimation.xOdom=[];
estimation.xEkf=[];
⛳️ 运行结果
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
👇 关注我领取海量matlab电子书和数学建模资料
🌿 往期回顾可以关注主页,点击搜索
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:
🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类
2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP
👇