首页/文章/ 详情

2-12目标一会直行、一会转弯,如何持续跟踪:CV / CT / IMM 交互多模型目标跟踪

2小时前浏览2
一句话介绍: 这套程序用 CV(匀速直线)和 CT(匀速转弯)两个运动模型共同跟踪一个会发生机动的二维目标,并利用 IMM(交互多模型)根据测量数据动态调整两个模型的概率,最终得到比固定单一运动模型更适合“直行—转弯—再直行”目标的状态估计结果。

先看它解决什么问题

目标跟踪最麻烦的地方,不是目标一直匀速直线运动,而是它可能突然改变运动方式。

例如一个目标可能:

先直线匀速 → 中间进入转弯 → 后面重新直线运动

如果整个过程始终只使用 CV 模型,那么转弯阶段容易出现模型失配;如果始终只使用 CT 模型,直线阶段又可能并不合适。

这个程序采用的思路是:

真实运动 + 测量噪声 → CV Kalman 跟踪 + CT Kalman 跟踪 → IMM 根据残差动态计算模型概率 → 融合两个模型结果 → 输出目标位置估计

它的核心不是“提前知道目标什么时候转弯”,而是根据每一时刻的测量结果,判断当前哪个运动模型更符合目标状态。

1. 这个程序真正实现了什么?

工程的主线非常清楚,理解下面几个文件即可。

文件

作用

IMM_TEST.m

主程序,完成 Monte Carlo 仿真、CV/CT 单模型滤波、IMM 融合和误差统计

produce_data.m

生成“直线—转弯—直线”的真实二维运动轨迹

kalman.m

标准 Kalman 滤波预测和更新

CreatCTF.m / CreatCTT.m

建立 CT 模型状态转移矩阵和噪声输入矩阵

data.mat

已生成的 400 个时刻真实轨迹及模型参数

程序实际完成四类比较:

只使用 CV 模型进行 Kalman 跟踪;

只使用 CT 模型进行 Kalman 跟踪;

使用 CV + CT 两模型构成 IMM 跟踪;

通过 50 次 Monte Carlo 仿真比较位置误差、RMSE 和模型概率。

2. 程序跟踪的目标状态是什么?

程序使用四维状态:

X = [x, vₓ, y, vᵧ]ᵀ

其中:

x:X 方向位置;vₓ:X 方向速度;

y:Y 方向位置;vᵧ:Y 方向速度。

初始状态为:

X₀ = [1000, 10, 1000, 10]ᵀ

也就是目标初始位于约 (1000, 1000),两个方向的初始速度均为 10。

程序的测量矩阵 H 只直接观测 x 和 y,因此传感器获得的是位置测量,速度需要由动态模型和 Kalman 滤波共同估计。

3. 自带真实轨迹是怎样运动的?

produce_data.m 共生成 400 个时刻的数据,采样周期 T = 1。

运动过程非常适合用来测试 IMM:




时间段

运动模型

持续时间

1~150

CV 匀速直线

150 个时刻

151~270

CT 匀速转弯

120 个时刻

271~400

CV 匀速直线

130 个时刻

所以整个测试目标会经历一次明显的模型切换:

CV → CT → CV

这正是交互多模型滤波器需要处理的典型问题。

4. 测量数据为什么比真实轨迹“乱”很多?

主程序不会直接把真实位置送给滤波器,而是在 x、y 测量中加入高斯噪声。

测量噪声协方差为:

R = diag(2500, 2500)

因此两个方向的测量标准差均为:

σ = √2500 = 50

也就是说,即使真实目标轨迹很平滑,每次位置测量仍可能在真实值周围发生几十米级波动。

程序真正要做的是:

从带噪位置测量中恢复更加平滑、更加接近真实目标状态的位置和速度估计。

5. CV 模型负责什么?

CV 是 Constant Velocity,也就是匀速运动模型。

它假设一个采样周期内速度基本不变,因此:

xₖ = xₖ₋₁ + T·vₓ,ₖ₋₁

yₖ = yₖ₋₁ + T·vᵧ,ₖ₋₁

速度则近似保持:

vₓ,ₖ ≈ vₓ,ₖ₋₁,vᵧ,ₖ ≈ vᵧ,ₖ₋₁

这类模型非常适合目标基本沿直线稳定运动的阶段。

在本程序中,真实轨迹前 150 个时刻和最后 130 个时刻就是由 CV 模型产生的。

6. CT 模型为什么能描述转弯?

CT 是 Constant Turn,也就是程序注释中的“匀速转弯模型”。

与 CV 不同,CT 状态转移矩阵中包含:

sin(ωT);cos(ωT)

(1 - cos(ωT)) / ω

其中 ω 是转弯角速度。

这些三角函数使 X、Y 两个方向的速度不再完全独立,而是会随着转弯发生耦合,因此能够描述二维平面上的连续转弯运动。

真实数据生成时使用的转弯角速度为:

ω = -π / 360 rad/s

负号代表转向方向。

需要注意,主跟踪程序中的 CT 滤波模型重新设置为:

ω = -π / 270 rad/s

所以滤波器使用的 CT 模型与生成真实轨迹时并不完全一致。这意味着当前 Demo 不只是“完全已知模型条件下跟踪”,还存在一定的转弯模型失配。

7. Kalman 滤波在两个模型中做什么?

无论 CV 还是 CT,程序最终都使用 Kalman 滤波完成状态估计。

它的核心过程可以压缩成两步。

先预测

x̂ₖ⁻ = F x̂ₖ₋₁

Pₖ⁻ = F Pₖ₋₁ Fᵀ + GQGᵀ

其中:

x̂ₖ⁻:根据运动模型预测的当前状态;

Pₖ⁻:预测状态的不确定性;

F:CV 或 CT 的状态转移矩阵;

Q:过程噪声协方差。

再利用测量修正

Kₖ = Pₖ⁻Hᵀ(HPₖ⁻Hᵀ + R)⁻¹

x̂ₖ = x̂ₖ⁻ + Kₖ(zₖ - Hx̂ₖ⁻)

其中 zₖ 是当前带噪位置测量。

简单来说:

运动模型告诉程序“目标大概会走到哪里”,测量值告诉程序“传感器现在看到了哪里”,Kalman 增益 Kₖ 决定两者应该各相信多少。

8. 为什么只用一个 Kalman 模型还不够?

Kalman 滤波本身并不会自动知道目标的运动模式已经改变。

如果始终使用 CV:直线阶段通常比较合适;

目标进入转弯后,CV 的预测方向会逐渐偏离真实轨迹。

如果始终使用 CT:转弯阶段更适合;

长时间直线运动时,固定转弯假设又可能引入不必要的偏差。

所以问题不在于 Kalman 滤波“不好”,而在于:

单个 Kalman 滤波器必须依赖某一种运动模型,而机动目标的模型可能随时间改变。

IMM 就是为了解决这个问题。

9. IMM 到底做了什么?

IMM 全称 Interacting Multiple Model,即交互多模型。

当前程序同时维护两个 Kalman 滤波器:

CV 模型 + CT 模型

每一个时刻,IMM 会完成:

模型概率预测 → 两个模型状态混合 → 分别进行 Kalman 滤波 → 根据测量残差计算模型似然 → 更新模型概率 → 加权融合状态

所以它不是简单地把 CV 和 CT 各算一遍再平均,而是:

当前哪个模型更符合测量数据,哪个模型在最终结果中就占更大权重。

10. 模型概率是怎样变化的?

程序的模型转移概率矩阵为:




当前模型

下一时刻 CV

下一时刻 CT

CV

0.99

0.01

CT

0.01

0.99

这意味着程序假设:

当前运动模型大概率会在下一时刻继续保持,但仍然允许以 1% 的概率切换到另一种模型。

两个模型初始概率均为 0.5。

当新的测量到来后,程序根据两个模型的预测残差和残差协方差计算似然 Λ,再更新模型概率。

两模型情况下可以理解为:

μⱼ(k) = Λⱼ(k)cⱼ / [Λ₁(k)c₁ + Λ₂(k)c₂]

其中:

μⱼ(k):第 j 个模型更新后的概率;

Λⱼ(k):当前测量在第 j 个模型下出现的可能性;

cⱼ:根据上一时刻模型概率和转移概率得到的先验模型概率。

如果某段时间 CT 模型明显比 CV 更能解释测量数据,那么 CT 的概率就会提高;重新进入直线运动以后,CV 概率又有机会重新占优。

11. 最终 IMM 结果怎样得到?

两个模型完成各自 Kalman 更新后,程序不会硬选其中一个,而是按照当前模型概率进行融合:

x̂_IMM = μ₁x̂_CV + μ₂x̂_CT

其中:

μ₁:CV 模型概率;

μ₂:CT 模型概率;

x̂_CV:CV 模型当前状态估计;

x̂_CT:CT 模型当前状态估计。

而且:

μ₁ + μ₂ = 1

因此 IMM 的本质可以理解成:

模型概率高的结果多占一些,模型概率低的结果少占一些。

这使滤波器能够在不同运动阶段之间平滑切换,而不是突然把一个模型完全关闭。

12. 为什么 IMM 特别适合这个任务?

优势一:它允许运动模型随时间改变

真实机动目标并不会永远遵守一个固定模型。

这份测试数据本身就经历 CV → CT → CV。如果只选一个模型,那么至少有一段时间一定会发生失配。

IMM 同时保留多个候选模型,因此更适合这种运动状态会切换的目标。

优势二:它不是提前规定“第 151 秒开始转弯”

程序虽然使用真实轨迹做仿真评价,但 IMM 滤波器并没有直接读取“现在进入 CT 阶段”这样的标签。

模型概率主要由测量残差驱动。

所以它体现的是:

根据观测数据判断当前哪个模型更可信。

这比人工提前写死模型切换时间更接近实际目标跟踪问题。

优势三:模型切换不是硬切换

如果直接在某一时刻从 CV 突然切换到 CT,一旦切换判断错误,状态估计可能出现明显跳变。

IMM 使用概率加权,使 CV 和 CT 在一段时间内可以同时存在,只是权重不同,因此模型过渡更加平滑。

优势四:能够同时利用“模型结构”和“测量证据”

CV、CT 提供不同的运动先验,Kalman 滤波负责结合测量,IMM 再利用测量似然决定模型概率。

整个结构形成:

运动模型 → 状态预测 → 测量修正 → 模型判断 → 状态融合

所以它不是只依靠轨迹几何,也不是只依靠瞬时测量,而是把多种信息结合起来。

13. 为什么不直接把测量轨迹平滑一下?

简单滑动平均确实可以降低测量噪声,但它只知道:

“附近几个位置取平均。”

它并不知道目标当前具有怎样的速度,也不知道目标可能正在转弯。

Kalman + IMM 则显式维护:

位置;速度;状态不确定性;

CV/CT 运动模型;模型切换概率。

因此它解决的不只是“曲线变平滑”,而是一个完整的动态状态估计问题

14. 为什么不始终使用 CT 模型?

CT 看起来比 CV 更复杂,但“更复杂”并不等于始终更合适。

如果目标长期直线运动,而滤波器始终假设存在固定转弯角速度,模型反而可能产生系统性偏差。

所以多模型方法的价值恰恰在于:

不是寻找一个万能模型,而是在不同阶段让不同模型发挥作用。

15. 50 次 Monte Carlo 仿真有什么意义?

主程序设置:

MC = 50

也就是使用相同真实轨迹,但每次重新生成一组随机测量噪声,然后重复运行 CV、CT 和 IMM。

这样可以减少“某一次噪声刚好特别幸运或特别差”带来的偶然影响。

程序统计:

X、Y 方向平均位置误差;

X、Y 方向 RMSE;

两个模型的平均概率。

RMSE 的基本含义是:

RMSE = √[Σ(error²) / MC]

误差越小,说明多次随机测量条件下的跟踪结果总体越接近真实轨迹。

16. 运行后能够得到什么?

程序会把真实轨迹、带噪测量以及 CV、CT、IMM 三种跟踪结果放在一起比较,同时统计 X、Y 方向的位置误差和 RMSE。

更重要的是,它还会记录 CV、CT 两个模型概率随时间的变化。因此除了知道“跟得准不准”,还可以观察:

当目标运动方式发生变化时,IMM 是否会逐渐提高更合适模型的权重。

这比只输出一条滤波曲线更能体现 IMM 的工作机制。

17. 它适合用在哪里?

雷达机动目标跟踪

目标可能先稳定飞行,再进行转弯机动。单一 CV 模型容易在转弯阶段失配,而 IMM 可以同时维护直线和转弯模型。

车辆轨迹估计

车辆会经历直行、转向、重新直行等过程。CV + CT 是这类二维运动的经典基础组合。

无人机或移动机器人定位

当位置传感器含有明显噪声,同时运动方式又会改变时,可以利用类似的多模型状态估计思路提高轨迹连续性。

Kalman / IMM 教学实验

这个工程同时给出了数据生成、单模型 Kalman、模型概率更新和最终状态融合,比较适合理解“单模型滤波为什么会失配,以及 IMM 怎样改善”。

18. 这个程序本身有哪些优势?

对比完整: 同时实现 CV、CT 和 IMM,能够直观看到单模型和多模型之间的差别。

运动场景明确: 自带 CV → CT → CV 的 400 时刻机动轨迹,特别适合验证模型切换。

具有统计评价: 使用 50 次 Monte Carlo,而不是只展示一次随机测量结果。

模型概率可观察: 不只输出状态估计,还能看到两个运动模型的可信度变化。

代码结构清楚: Kalman 滤波、CT 矩阵和主 IMM 流程分开实现,便于学习和修改。

19. 怎么运行?

工程已经带有 data.mat,所以最直接的运行方式是:

将整个 CV_CT_IMM 文件夹放到 MATLAB 当前目录;

直接运行 IMM_TEST.m;

程序自动加载 data.mat;

自动生成带噪测量;

运行 CV、CT 和 IMM 跟踪;

完成 50 次 Monte Carlo 统计并输出结果。

如果希望重新生成真实运动轨迹,可以先运行 produce_data.m,它会重新生成并保存 data.mat,然后再运行 IMM_TEST.m

由于 produce_data.m 中本身包含随机过程噪声,因此重新生成 data.mat 后,真实轨迹也会发生变化。

20. 哪些参数最值得修改?




参数

当前值

作用

MC

50

Monte Carlo 次数

Pi 对角概率

0.99

模型保持当前状态的概率

Pi 非对角概率

0.01

CV/CT 相互切换概率

初始模型概率

0.5 / 0.5

两模型初始可信度

R

2500

位置测量噪声方差

CV 过程噪声

0.1²

CV 模型状态扰动

CT 过程噪声

0.0144²

CT 模型状态扰动

CT 角速度

-π/270

跟踪程序使用的转弯模型

可以通过这些参数研究:

测量变差后 IMM 是否仍能稳定跟踪;

模型切换概率如何影响响应速度;

CT 模型角速度不准确时跟踪结果如何变化;

不同过程噪声对模型概率和状态估计有什么影响。

21.需要注意

当前模型只包含 CV 和 CT

真实机动目标还可能出现:

加速;减速;更复杂的转弯率变化;停止;三维运动。

当前 IMM 只有两个模型,因此它适合研究“直线 + 固定转弯”类型的基础多模型跟踪,不代表已经覆盖所有机动形式。

22. 一句话看懂这个项目

这是一个 MATLAB 交互多模型目标跟踪程序:它用 CV 模型描述直线匀速运动,用 CT 模型描述二维转弯运动,再通过 Kalman 滤波分别估计目标状态,并根据测量残差实时更新两个模型的概率,最终按模型概率融合状态结果,从而适应“直线—转弯—直线”这类运动模式会发生变化的机动目标。


来源:MATLAB学习与应用
ACTMATLABUM机器人无人机
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-08-26
最近编辑:2小时前
explicit-z
硕士 工种号:MATLAB学习与应用
获赞 212粉丝 78文章 297课程 5
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈