卡尔曼滤波的简单理解
当然可以,我们用这个控制汽车的例子,一步一步把“状态观测器”讲清楚,不需要你懂太多数学,只要理解因果关系就能明白。
🚗 背景设定:汽车运动建模
假设我们有一辆汽车,在一条直线上运动。
我们关注的变量有三个:
| 变量 | 含义 | 能否直接测量 |
|---|---|---|
| 位置 \(x\) | 汽车在哪儿 | ❌ 无法测量 |
| 速度 \(v\) | 汽车跑多快 | ✅ 有传感器 |
| 加速度 \(a\) | 汽车在加速/减速多快 | ❌ 没有传感器 |
汽车的动力来自油门,油门决定加速度(当然现实中更复杂,但现在我们简化为:油门 = 加速度 = 输入 \(u\))。
🎯 目标
虽然我们只有一个速度传感器能测量 \(v\),但我们希望也能知道:
- 当前汽车的 位置 \(x\),
- 当前汽车的 加速度 \(a\)。
但我们没有这两个传感器怎么办?这时候就要用状态观测器来“聪明地猜”出来。
🧠 核心想法:利用已知推未知
我们已知:
- 当前速度 \(v\)
- 当前油门(加速度) \(u\)
- 汽车的运动规律(物理公式)
我们不知道:
- 位置 \(x\)
但是根据物理知识:
\[\frac{dx}{dt} = v,\quad \frac{dv}{dt} = a = u
\]
我们可以用这些关系,设计一个“计算器”来实时估计 \(x\)、\(v\)、\(a\)。
📐 观测器的工作方式(直观版)
- 你知道你刚刚给了多少油门(加速度)
- 你测到现在车速是多少
- 你估算过去1秒钟可能走了多少米(位置)
- 你猜测下一秒车速可能是多少
- 你将这个猜测与真正测得的车速一对比
- 发现你猜偏了,就用这个差值去修正你对位置的估计
这种“测一下 → 预测一下 → 修正一下”的过程,就是状态观测器在做的事。
📊 一个简单数值例子(离散时间)
我们用离散的1秒步长来看这个过程:
假设:
- 初始时刻我们什么也不知道,估计车在0米、速度是0
- 实际情况是车一开始在5米,速度2 m/s
- 每秒你输入的油门(即加速度)是 \(u = 1\) m/s²
状态变量:
- \(x\):位置(未知,要估)
- \(v\):速度(可以测量)
- \(a = u\):加速度(已知)
我们用观测器来估计状态。
第0秒:
- 你估的位置:\(\hat{x}_0 = 0\)
- 实际速度测得:\(v_0 = 2\)
- 加速度 \(u = 1\)
你用加速度和过去的速度、位置来“猜”下一时刻的速度和位置:
\[\hat{v}_1 = \hat{v}_0 + u \cdot 1 = 0 + 1 = 1 \text{ m/s}
\]
\[\hat{x}_1 = \hat{x}_0 + \hat{v}_0 \cdot 1 = 0 + 0 = 0 \text{ m}
\]
但你马上发现:你估的速度是1,传感器测的是2!
→ 有误差,你就可以用这个差值来修正对位置的估计,比如:
\[\hat{x}_1 = \hat{x}_1 + 0.5 \cdot (v_{\text{measured}} - \hat{v}) = 0 + 0.5 \cdot (2 - 1) = 0.5 \text{ m}
\]
你就“聪明地”调整了你的估计。
下一秒继续:
再重复这个过程 —— 预测 → 对比 → 修正。
🧩 所以状态观测器到底做了什么?
它其实就是做了下面这几件事:
| 步骤 | 描述 |
|---|---|
| 预测 | 用系统模型(比如速度 = 上一秒速度 + 加速度)去预测新的状态 |
| 测量 | 用传感器读到某些输出(比如速度) |
| 对比 | 看预测值和实际测量值差了多少 |
| 修正 | 用差值去纠正你的预测值(尤其是你无法测的部分,比如位置) |
这个过程持续进行,每秒都在调整,这样你就能在无法测量状态的情况下,始终知道它大概是多少。
📌 总结(直觉记忆法)
- 你测不到什么?→ 状态
- 你测得到什么?→ 输出(比如速度)
- 你知道系统是怎么动的?→ 有模型(比如运动方程)
- 你就能“推”出来你测不到的!→ 这就是状态观测器!
我可以给你画一个示意图来可视化整个观测器的工作流程 —— 你需要吗?

浙公网安备 33010602011771号