由于采样时间(计算 PID 之后的时间)始终相同,因此是否将积分项除以采样时间并不重要,因为该采样时间将仅充当 Ki 常数,但最好将积分项除以采样时间,因此如果您更改采样时间,PID 会随采样时间而变化,但这不是强制性的。
这是我在 python 中为我的无人机机器人竞赛编写的 PID_Calc 函数。忽略“[index]”,这是我为使我的代码通用而制作的数组。
def pid_calculator(self, index):
#calculate current residual error, the drone will reach the desired point when this become zero
self.Current_error[index] = self.setpoint[index] - self.drone_position[index]
#calculating values req for finding P,I,D terms. looptime is the time Sample_Time(dt).
self.errors_sum[index] = self.errors_sum[index] + self.Current_error[index] * self.loop_time
self.errDiff = (self.Current_error[index] - self.previous_error[index]) / self.loop_time
#calculating individual controller terms - P, I, D.
self.Proportional_term = self.Kp[index] * self.Current_error[index]
self.Derivative_term = self.Kd[index] * self.errDiff
self.Intergral_term = self.Ki[index] * self.errors_sum[index]
#computing pid by adding all indiviual terms
self.Computed_pid = self.Proportional_term + self.Derivative_term + self.Intergral_term
#storing current error in previous error after calculation so that it become previous error next time
self.previous_error[index] = self.Current_error[index]
#returning Computed pid
return self.Computed_pid
这里如果链接到我在 git hub 中的整个 PID 脚本。看看这是否对你有帮助。按向上按钮 ig=fu 喜欢答案,然后像 github 中的脚本一样为我的 Github 存储库加注星标。谢谢你。