> 技术文档 > 程序代码篇---卡尔曼滤波与PID

程序代码篇---卡尔曼滤波与PID

卡尔曼滤波和 PID 控制都是嵌入式、自动化领域的常用技术,但它们解决的问题完全不同,就像 “温度计” 和 “恒温器” 的区别 —— 一个负责 “测准”,一个负责 “调好”。

一、核心功能:一个 “估计状态”,一个 “控制过程”

  • 卡尔曼滤波:本质是 “状态估计器”。
    作用是从充满噪声的数据中,算出系统真实的状态(比如 “物体实际位置”“电机真实转速”)。
    举例:GPS 信号跳来跳去,卡尔曼滤波能算出你真实在哪;加速度计数据抖动,它能估计出真实的加速度。

  • PID 控制:本质是 “控制器”。
    作用是根据 “目标值” 和 “当前状态” 的差距,计算出控制量,让系统稳定在目标(比如 “让温度保持 25℃”“让电机转速稳定在 1000 转”)。
    举例:空调设定 25℃,当前 23℃,PID 会算出发热量,让温度升到 25℃并保持稳定。

二、原理:一个 “猜了又改”,一个 “错了就调”

  • 卡尔曼滤波的原理
    核心是 “预测 - 更新” 循环,解决 “数据不准” 的问题。
    比如用陀螺仪测角度,数据会慢慢漂移(误差累积),卡尔曼滤波会:

    1. 先根据上一时刻的角度 “猜” 现在的角度(预测);
    2. 再用新的传感器数据(比如加速度计测的角度)修正这个猜测(更新);
    3. 反复循环,让结果越来越接近真实角度(过滤噪声和漂移)。
  • PID 控制的原理
    核心是 “根据误差算控制量”,解决 “系统不稳定” 的问题。
    比如让小车保持 1 米 / 秒的速度,当前只有 0.8 米 / 秒(误差 0.2),PID 会:

    1. 看当前误差多大(P:比例项,误差越大,控制越狠);
    2. 看误差累积了多久(I:积分项,消除长期小误差,比如一直慢 0.1,就慢慢加大控制);
    3. 看误差变化快不快(D:微分项,防止控制过头,比如速度突然飙升就减速);
    4. 把这三项加起来,得到电机的输出功率,让速度稳定在 1 米 / 秒。

三、应用场景:一个 “为测量服务”,一个 “为控制服务”

对比维度 卡尔曼滤波 PID 控制 典型场景 传感器数据处理、状态估计 闭环控制系统、稳定输出 具体例子 - 无人机定位(融合 GPS + 陀螺仪数据)
- 汽车导航(修正 GPS 噪声)
- 手机计步(过滤加速度计抖动) - 水温控制(热水器保持 50℃)
- 机械臂定位(让爪子精准抓到物体)
- 平衡车保持直立(歪了就调整电机) 依赖的输入 带噪声的传感器数据(比如 “当前角度测量值”) 目标值和当前状态的误差(比如 “目标角度 30°,当前 28°,误差 2°”) 输出结果 更准确的状态估计值(比如 “真实角度 29.8°”) 具体的控制量(比如 “电机输出电压 12V”)

四、关系:经常 “合作” 但不 “替代”

实际系统中,两者经常一起用:卡尔曼滤波给 PID 提供准确的状态,PID 用这个状态做控制
比如无人机悬停:

  1. 无人机的高度传感器(气压计)数据波动大,卡尔曼滤波先算出真实高度(状态估计);
  2. PID 控制器根据 “目标高度(比如 10 米)” 和 “卡尔曼估计的真实高度(比如 9.5 米)” 的误差,计算出电机的转速(控制量),让无人机稳定在 10 米。

总结:一句话区分

  • 卡尔曼滤波:“我帮你把不准的数据变准,告诉你系统现在到底啥样。”
  • PID 控制:“我根据目标和现状的差距,帮你把系统调到你想要的样子。”

一个是 “看清现实” 的工具,一个是 “改变现实” 的工具,分工不同,但经常组队解决问题。