程序代码篇---卡尔曼滤波与PID
卡尔曼滤波和 PID 控制都是嵌入式、自动化领域的常用技术,但它们解决的问题完全不同,就像 “温度计” 和 “恒温器” 的区别 —— 一个负责 “测准”,一个负责 “调好”。
一、核心功能:一个 “估计状态”,一个 “控制过程”
-
卡尔曼滤波:本质是 “状态估计器”。
作用是从充满噪声的数据中,算出系统真实的状态(比如 “物体实际位置”“电机真实转速”)。
举例:GPS 信号跳来跳去,卡尔曼滤波能算出你真实在哪;加速度计数据抖动,它能估计出真实的加速度。 -
PID 控制:本质是 “控制器”。
作用是根据 “目标值” 和 “当前状态” 的差距,计算出控制量,让系统稳定在目标(比如 “让温度保持 25℃”“让电机转速稳定在 1000 转”)。
举例:空调设定 25℃,当前 23℃,PID 会算出发热量,让温度升到 25℃并保持稳定。
二、原理:一个 “猜了又改”,一个 “错了就调”
-
卡尔曼滤波的原理:
核心是 “预测 - 更新” 循环,解决 “数据不准” 的问题。
比如用陀螺仪测角度,数据会慢慢漂移(误差累积),卡尔曼滤波会:- 先根据上一时刻的角度 “猜” 现在的角度(预测);
- 再用新的传感器数据(比如加速度计测的角度)修正这个猜测(更新);
- 反复循环,让结果越来越接近真实角度(过滤噪声和漂移)。
-
PID 控制的原理:
核心是 “根据误差算控制量”,解决 “系统不稳定” 的问题。
比如让小车保持 1 米 / 秒的速度,当前只有 0.8 米 / 秒(误差 0.2),PID 会:- 看当前误差多大(P:比例项,误差越大,控制越狠);
- 看误差累积了多久(I:积分项,消除长期小误差,比如一直慢 0.1,就慢慢加大控制);
- 看误差变化快不快(D:微分项,防止控制过头,比如速度突然飙升就减速);
- 把这三项加起来,得到电机的输出功率,让速度稳定在 1 米 / 秒。
三、应用场景:一个 “为测量服务”,一个 “为控制服务”
- 汽车导航(修正 GPS 噪声)
- 手机计步(过滤加速度计抖动)
- 机械臂定位(让爪子精准抓到物体)
- 平衡车保持直立(歪了就调整电机)
四、关系:经常 “合作” 但不 “替代”
实际系统中,两者经常一起用:卡尔曼滤波给 PID 提供准确的状态,PID 用这个状态做控制。
比如无人机悬停:
- 无人机的高度传感器(气压计)数据波动大,卡尔曼滤波先算出真实高度(状态估计);
- PID 控制器根据 “目标高度(比如 10 米)” 和 “卡尔曼估计的真实高度(比如 9.5 米)” 的误差,计算出电机的转速(控制量),让无人机稳定在 10 米。
总结:一句话区分
- 卡尔曼滤波:“我帮你把不准的数据变准,告诉你系统现在到底啥样。”
- PID 控制:“我根据目标和现状的差距,帮你把系统调到你想要的样子。”
一个是 “看清现实” 的工具,一个是 “改变现实” 的工具,分工不同,但经常组队解决问题。