前言
最近又开始玩潜渊症了,游戏中的反应堆需要根据电网负载进行实时的输出调控,而自带的自动反应堆逻辑并不好用,所以考虑使用 PID 来实现一个自动控制逻辑。
日常的控制系统由于各种原因所以不能只靠没有反馈的开环系统来进行控制。例如你用100N的力推车,由于各种不能捕捉的摩擦力或者空气阻力等原因,最终无法到达你所计算的位置。
为此需要一个根据目标来调整控制输出的控制器,这个能够根据系统反馈调整控制器输出的便是闭环系统。
而 PID 控制算法正是作为一种闭环控制系统的大成者(虽然我觉得这个有点像插值算法)。
Vanilla PID
网上其实有很多讲原版 PID 的视频,我也懒得讲,感兴趣看相关资料自己学
原版 PID 公式如下:
其中,
位置 PID
其实就是原版 PID 的离散化版本。因为早期的PID都是模拟电路实现的,信号基本上是连续的。而数字化后(也就是上了嵌入式芯片),因为芯片的时钟设计,信号变得离散。
离散化的 PID 公式如下:
其中,
显然
此外,离散化过程,积分离散化用的是「矩形法」(从图像上理解很好理解)。而微分求导的离散,则用了「后向差分法」。当时间间隔
增量式 PID
增量式有抗积分饱和、支持手动模式等特性,详细可以自己看。
推导增量式的公式很简单,用
令
可得
同样可以合并
由此可以通过先前的误差和现在的误差来算现在的输出