基于EKF的航线轨迹预测(完整代码)

基于 LSTM 的船舶轨迹预测,单步预测 阅读详情
AI摘要

本文介绍了卡尔曼滤波器(KF)和扩展卡尔曼滤波器(EKF)在追踪问题中的应用,重点阐述了EKF的来源、算法流程以及在实际仿真实验中的效果。通过一个二维平面物体跟踪的例子,展示了EKF如何处理非线性状态方程并进行噪声滤波,同时也指出了EKF在复杂情况下的局限性。,

前言

        在许多路线追踪实例中,所采用的追踪算法大多是卡尔曼滤波器(KF)或者是扩展的卡尔曼滤波器(EKF),亦或者是基于EKF的优化算法。因此,理解并掌握EKF的思路并熟练运用便成为了涉足追踪领域的基础,本文就是记录笔者在学习EKF后的一些感想及仿真实现。

一、EKF的来源

        在信号处理中,我们总是假设一个变量遵循着一个确定的表达式进行随时间的变化,比如最简单的一个表达式之一

x=2t

        这个式子就表示对于任意一个时刻t,x的值永远是t的2倍。但在实际生活中,这样理想的情况几乎是不存在的,总会有一些干扰项影响我们最终得到的x,那么我们现在便有了两种情况,一是理想的状态方程,如下(由矢量高斯马尔可夫方程简化而来):

s[n] = s[n-1] + u[n]

        二则是实际的观测方程:

x[n] = s[n] + w[n]

        其中的u和w都表示对应的噪声,都是为了模拟真实情况而引入的,其中u应该尽可能小。我们的目的就是通过已知的观测量x去推导出对应的状态量s,因此我们所求得的s并不是理想状态的s,而只是它的一个估计量,这种估计方法我们便成为卡尔曼滤波(KF),估计值与理想值之间的偏差我们用最小均方误差(MSE)去衡量。

        以上是一般的一阶高斯马尔可夫状态方程的情况,当状态方程变为多阶时,情况略有不同,但思路类似,依旧可以用KF的方法进行计算。但在实际中,我们经常面对的状态方程和观测方程都是非线性的,这个时候KF的方法就不太准确了,我们需要将其转换为线性方程再用KF的方法,这个转换过程就是一阶泰勒近似,所求得的矩阵(也可为向量)便称为雅可比矩阵,这种操作也让KF摇身一变为EKF,也就是扩展的卡尔曼滤波,这便是EKF来源的简单介绍。

二、EKF的算法流程

        接下来就是如何建立观测值与估计值之间的联系了,鉴于推导过程异常复杂,这里就不展开解释了,只讲解大致思路。

        首先我们有两个方程,含义见上文:

s[n] = As[n-1] + Bu[n]

x[n] = H[n]s[n] + w[n]

        A和H均是对应的状态转移矩阵,其与s的乘积我们可以将其简化,写成s的函数,即a(s[n-1])和h(s[n]),此时的函数不一定是线性函数,而为了将其变为线性函数,我们需要用到泰勒展开并忽略高阶项,如下:

a(s[n-1]) \approx a(\hat{s}[n-1]|n-1) + A[n-1](s[n-1]-\hat{s}[n-1]|n-1)

h(s[n]) \approx h(\hat{s}[n|n-1]) + H[n] (s[n]-\hat{s}[n|n-1])

        这样我们便换成了线性高斯马尔可夫状态方程的形式,再用KF的方法进行估计就可。也就是先估计状态量和MSE矩阵,得到卡尔曼增益,再根据观测量对用卡尔曼增益对估计的状态量和MSE进行修正,作为下一时刻的初始值,循环往复,这样便完成了整个预测流程。

三、仿真实现

        完成EKF的建模后,我们代入具体的场景对其进行仿真测试。

        我们这里假设有一个飞行物或者任何什么运动的物体,它本身遵循一定的状态方程在二维平面内进行运动,我们只能观测到他在二维平面中与原点的距离和对应的角度,根据这些观测量预测出他在二维平面内的运动轨迹,尽可能的减弱各种噪声的影响从而实现跟踪。

        我们先设定物体的一些运动参数:

%% 参数设置


Vx = -0.2;
Vy = 0.2;
Ay = -0.005;
deltau = 0.01;
Ux = normrnd(0,deltau,[1,length(n)]);
Uy = normrnd(0,deltau,[1,length(n)]);
for t = 2:length(n)
    Vx(t) = Vx(t-1);
    Vy(t) = Vy(t-1) + Ay ;
end

        画图即为:

        接下来我们对该理想轨迹加入噪声即为我们的观测值:

for t = 2:length(n)
    rx(t) = rx(t-1) + Vx(1)*delta;
    ry(t) = ry(t-1) + Vy(t)*delta;
    R(t) = sqrt(rx(t)^2+ry(t)^2);

    beta(t) = atan(ry(t)/rx(t));

    Rhat(t) = R(t) + wR(t);
    betahat(t) = beta(t) + wbeta(t);

    if rx(t)<=0 && ry(t)<=0
    rx_hat(t) = -Rhat(t)*cos(betahat(t));
    ry_hat(t) = -Rhat(t)*sin(betahat(t));
    else if rx(t)>0 && ry(t)<=0
    rx_hat(t) = Rhat(t)*cos(betahat(t));
    ry_hat(t) = -Rhat(t)*sin(betahat(t));
        end
    rx_hat(t) = Rhat(t)*cos(betahat(t));
    ry_hat(t) = Rhat(t)*sin(betahat(t));
    end
end

        画图即为:

        可以看到加入噪声后轨迹明显扭曲了起来,虽然x、y坐标的尺度都比较小,但我们仍然希望能将轨迹进行去噪,使轨迹尽可能的平滑,于是我们便用这些观测值带入我们的EKF算法,获得轨迹的估计值:

%% 算法过程
for t= 2:length(n)
   s_temp(:,t) = A*s_hat(:,t-1);
   MM_temp =  A*MM*A.'+Q;
   
   rx_hat_t = s_temp(1,t);
   ry_hat_t = s_temp(2,t);
   R_temp = sqrt(rx_hat_t^2 + ry_hat_t^2);
   HH_temp = [rx_hat_t/R_temp,ry_hat_t/R_temp,0,0;
            -ry_hat_t/(R_temp^2),rx_hat_t/(R_temp^2),0,0];
        
   KK = MM_temp*HH_temp.'*inv(CC + HH_temp*MM_temp*HH_temp.');%KK:4x2

   h_temp = [R_temp;
             atan(ry_hat_t/rx_hat_t)];%h_temp:2x1
         
   s_hat(:,t) = s_temp(:,t)+KK*(xx(:,t)-h_temp);
   MM = (eye(4,4)-KK*HH_temp)*MM_temp;
end

        画图即为:

        可以看到,由于估计的初始值与理想的状态值区别较大,亦即MSE较大,估计轨迹并不能与理想值近似重合,但在经过一段时间的观测后,估计值明显好很多,达到了直接观测所没有的效果。接下来我们再做一组对比实验,进一步直观的分析EKF:

        由此即可明显的看到观测值经过EKF的滤波后与理想值极为接近,在一定程度上可以作为预测依据,至此我们的实验也做完了,也可以画一些mse的图进一步分析,整个就交给读者自己完成了。

        遗憾的是,当观测值与状态量之间的非线性程度增加时,EKF的效果急速下降:

        且观测值本身的误差也会影响EKF的精度,随着时间的积累,这样的误差会越来越大,导致EKF的效果已经微乎其微,当然这也为了我们提供了一些优化EKF的思路,在追踪算法领域已有不少学者进行了更为深入的研究,以后有机会笔者也将对他们的成果进行分析和复现。

四、小结

        本次实验我们简单地分析了EKF的由来和计算流程,也用简单的例子做了仿真实现,发现了EKF的些许不足,为将来的深入分析和改进提供了思路。

ps:笔者又来求打赏啦,看在笔者辛苦看了好几天书外加敲了好几天代码再加调了好久的bug份上,读者大大们可以点击下方链接慷慨解囊一下嘛~谢谢支持啦~打赏截图发邮箱后可获得源码一份哦~

https://i.postimg.cc/k5zrzb26/20230703172512.jpg

船舶轨迹预测技术:从AIS数据处理到深度学习应用 轨迹预测作为时空数据分析的核心技术,通过处理时序位置数据推断移动物体未来状态。其技术原理结合了运动学建模与机器学习方法,在卡尔曼滤波、LSTM等算法基础上,现代方案更注重物理规律与数据驱动的融合。该技术在智能交通领域具有重要价值,特别适用于船舶AIS数据这类具有强时空相关性的场景。针对船舶轨迹预测特有的数据噪声大、运动规律性强等特点,混合架构通过深度学习处理短期预测,结合运动学模型校验长期轨迹,在港口调度、碰撞预警等海事应用中展现出显著优势。随着Transformer等新架构的引入,模型对长序列依赖的捕捉能 阅读详情

相关推荐

二维或者三维时序行驶轨迹预测(简单的时序预测 附代码)

实际的思路和做法很简单粗暴,就是做一维线性插值,但是不是通常使用的内插值,而是使用线性外插值,之所以使用线性外插值而不是二次方或者三次方插值是因为外插值的情况下,后二者的表现很差,与实际情况相差很大。因为是线性插值的原因,在轨迹直线的位置预测效果较好,但是在拐弯度比较大的地方会出现和实际下一个轨迹略微偏离的情况;也就是每个时间戳对应的xyz坐标,需要预测它在下一个或者下N个时间戳的XYZ位置。也就是每个时间戳对应的xyz坐标,需要预测它在下一个或者下N个时间戳的XYZ位置。

三维点云技术探索 1667

扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)

参考 扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)_gangdanerya的博客-优快云博客_扩展卡尔曼滤波matlab

努力努力努力 1万+

(二)多传感器拓展卡尔曼滤波(EKF)算法

本文介绍了一种用于多传感器的拓展卡尔曼滤波(EKF)算法。首先,介绍了EKF中运用到的一阶泰勒展开技术,介绍了EKF的本质,展示了滤波过程。之后,对于多传感器状态值估计中用到的简单凸组合技术进行了讲解。最后,结合一个实例和matlab程序对算法的具体实现过程进行了讲解。仿真结果证明了滤波融合算法的有效性和实用性。(可在资源中下载)

h320130的博客 5041

【无人机航线轨迹】模拟基于 3DRobotics ArduPilot 的四旋翼飞行器附Matlab代码

随着无人机技术的飞速发展及其在各领域的广泛应用,对无人机飞行性能的精准预测和优化显得尤为重要。本文旨在深入探讨基于 3DRobotics ArduPilot 开源飞控系统的四旋翼飞行器航线轨迹模拟技术。通过对 ArduPilot 架构、姿态解算、导航控制等核心模块的分析,结合仿真平台的使用,实现对无人机在不同环境和任务下的飞行轨迹、姿态变化、速度控制等关键参数的精确模拟。研究成果不仅有助于工程师在实际飞行前验证和优化控制算法,降低试飞风险,还能为无人机系统的设计、开发和应用提供理论支持和实践指导。

matlab_daizuo的博客 756

卡尔曼滤波运动轨迹预测:MATLAB实现与参数整定实战

运动轨迹预测是目标跟踪与智能驾驶的关键技术,传统多项式外推与低通滤波在噪声和滞后间难以取舍。卡尔曼滤波通过状态方程与量测方程分别描述模型推演与传感器观测,利用协方差矩阵动态分配信任权重,成为雷达跟踪、无人机导航等场景中的主流算法。在MATLAB中,无需依赖工具箱即可用五十行左右循环实现核心预测-更新闭环,并结合CV/CA模型快速评估滤波边界。过程噪声Q与量测噪声R的整定直接决定收敛速度与平滑程度,可通过新息序列在线估计R或残差统计调整比例。针对转弯等非线性运动,扩展卡尔曼滤波与CTRV模型利用数值雅可比逼近

weixin_28366353的博客 121

基于卡尔曼滤波的飞行轨迹预测与MATLAB工程实现详解

在目标跟踪与状态估计领域,传感器量测数据往往被噪声污染,尤其对于高速运动目标,GPS或雷达输出的经纬度序列会呈现剧烈抖动,直接连线无法得到可靠轨迹。卡尔曼滤波作为最优线性状态估计方法,通过融合动力学模型预测与带噪观测修正,能够有效平滑噪声并前向外推轨迹。其核心在于状态空间建模、五大递推公式以及过程噪声协方差Q与量测噪声协方差R的合理配置。在工程实践中,基于MATLAB对飞行数据进行滤波处理,能够完成轨迹平滑、未来位置预测、野值剔除和模型失配诊断等任务。该方法可广泛应用于航空管制、自动驾驶、无人机导航等需要高

weixin_29248653的博客 90

【无人机控制】基于模型预测控制(MPC)的自动驾驶仪的无人机模拟器附Matlab代码

随着无人机应用领域的不断拓展,对其飞行控制的精确性和稳定性提出了更高要求。模型预测控制(MPC)作为一种先进的控制策略,能够有效处理多变量、有约束的复杂系统控制问题,在无人机自动驾驶仪设计中具有显著优势。构建基于 MPC 自动驾驶仪的无人机模拟器,不仅有助于深入研究和优化无人机控制算法,还能为实际飞行提供可靠的理论支持与技术验证。

Matlab245的博客 241

扩展EKF和ukf无迹卡尔曼滤波代码

扩展EKF和ukf无迹卡尔曼滤波代码压缩包 有一个共同的简单例子 进行对比 两个卡尔曼滤波分别写成两个函数 需要的欢迎下载

MATLAB例程:GNSS+预定轨迹EKF融合滤波,解决单点定位漂移

GNSS单点定位利用伪距观测解算接收机位置,但受多径、星历误差和几何分布影响,水平误差常达数米,高程误差更甚,且逐历元独立解算导致轨迹跳变。扩展卡尔曼滤波(EKF)通过运动模型与量测更新逐历元融合,可压制噪声、维持连续性;若将预定轨迹作为虚拟观测引入,还能对弱观测方向施加有效约束,大幅提升三维定位精度。这一思路在组合导航、无人车、无人机等动态定位场景中极具价值。基于MATLAB的一个完整例程,涵盖了坐标系转换、伪距观测方程构建、噪声参数整定、轨迹约束设计及RTS平滑,最终输出平滑、收敛、可验证的高精度位置序

weixin_29284201的博客 295

EKF正弦曲线跟踪代码.docx

EKF跟踪正弦曲线

【仿真】Carla Python API实战:从零搭建自动驾驶测试环境

本文详细介绍了如何使用Carla Python API从零搭建自动驾驶测试环境。通过Carla仿真平台,开发者可以构建高度逼真的城市环境和车辆物理模型,利用Python API实现传感器配置、数据采集、场景构建及自动驾驶算法集成。文章还分享了实际项目中的调试技巧和性能优化经验,帮助读者快速掌握自动驾驶仿真测试的核心技术。

weixin_29050513的博客 213
上一篇: 基于stm32f103C8T6的智能门锁设计
下一篇: 随机过程学习心得
大胆无敌
博客等级 码龄5年 49粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胆无敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值