math - 比例积分导数中的 I

标签 math robotics

PID(比例积分微分)中的 I 是最后几个先前误差的总和,仅通过其增益进行加权。

使用 error(-1) 表示前一个错误,使用 error(-2) 表示之前的错误等等...“I”可以描述为:

I = (错误(-1) + 错误(-2) + 错误(-3) + 错误(-4) 等...) * I_gain

为什么 PID 设计时不是将“I”设计为将重要性倾斜到过去,例如:

I = (错误(-1) + (错误(-2) * 0.9) + (错误(-3) * 0.81) + (错误(-4) * 0.729) + 等等...) * I_gain

编辑:改写

最佳答案

积分项是过去所有误差的总和。您只需在每个时间步将误差添加到“积分器”即可。如果需要限制此值,则在超出范围时将其限制为最小值或最大值。然后将此累积值复制到输出中,并添加比例项和导数项,并在必要时再次钳位输出。

导数项是当前误差与之前误差的差值(误差的变化率)。 P当然与误差成正比。

err = reference - new_measurement
I += kI * err
Derivative = err - old_err
output = I - kD * Derivative + kP * err
old_err = err

这就是你想要的。当然省略限制。

一旦 Controller 达到引用值,误差将变为零,积分器将停止变化。噪声自然会使其稍微反弹,但它将保持在满足目标所需的稳态值,而 P 和 D 项则完成了减少 transient 的大部分工作。

请注意,在稳态条件下,I 项是唯一提供任何输出的项。如果控制已达到引用值并且需要非零输出,则它仅由积分器提供,因为误差为零。如果 I 项使用加权误差,它将开始衰减回零并且无法维持所需的输出。

关于math - 比例积分导数中的 I,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372117/

相关文章:

math - 多边形数学

javascript - JavaScript 中的解析可能吗?

robotics - 如何在机器人之外使用 CCR、DSS、VPL(又名 Microsoft Robotics Development Studio)?

java - 如何在 KUKA LBR iiwa 上激活重力补偿

math - Sinc的反函数是什么

algorithm - 如何在 Java 中将纬度和经度转换为 x,y?

java - 如何编写一个程序将java中的列表中的度数转换为弧度

math - 是否有任何 x 的 SHA1(x) 等于 x?

python - OpenCV 消除机器人相机的视角

OpenCV 地板分割检测