如何动态地自动调整PID参数?


15

我有一个简单的伺服系统,该系统使用在MCU中实现的PID控制器执行反馈。但是,系统的属性会动态更改,因此永远无法在所有情况下调整PID参数。

我的机器人是一个轻巧的手臂,带有可向后驱动的电动机,类似于此机器人:

轻巧的机器人手臂

手臂执行多项任务,包括捡起重物,在桌子上推拉物体。这些任务中的每一个都需要不同的PID调整参数,而这些参数我很难预测。

我真正想要的是一些高级功能,该功能可以根据手臂的行为谨慎地调整参数。例如,如果注意到手臂在摆动,则可能会减小P并增加D。或者如果注意到手臂没有达到目标,则可能会增加I。

是否存在这样的算法?即使算法没有立即完善参数,我也会很高兴。例如,在将参数调整到新值之前,手臂可能会摆动几次。

Answers:


10

我和我的一位同事曾经实现了一种单纯形算法,用于动态调整电动机电流控制回路的PID参数。从本质上讲,该算法将一次修改一个参数,然后收集一些反馈参数的数据,这是我们的良好程度。我们的是与当前目标设定值的百分比偏差。根据反馈参数的好坏,相应地修改了下一个参数。

或者,在Wikipedia中说:

让线性程序由规范表给出。单纯形算法通过执行连续的枢轴运算来继续进行,每个枢轴运算都提供了一种改进的基本可行解;每个步骤中枢轴元件的选择在很大程度上取决于该枢轴确实可以改善解决方案的要求。

从技术上讲,我们使用了Nelder-Mead方法,这是一种单纯形。如果您观察它在搜索最佳输出参数时如何修改输入参数,也可以将其描述为爬山算法

Nelder-Mead动画

Nedler-Mead在我们的案例中效果最好,因为它可以追踪设定值。这很重要,因为我们当前的目标设定值随扭矩需求的增加而改变。

Nelder-Mead技术是一种启发式搜索方法,可以收敛到非平稳点


如果可以,您可以将您的方法和结果联系起来吗?
SPRajagopal

@SPRajagopal对不起,但没有。我不再为该公司工作,也无法访问任何数据。
Embedded.kyle

4

解决此类问题的一种好方法称为自适应控制。简而言之,它是一种控制方法,它假定模型是已知的,但模型的参数(质量,惯性等)未知。它的工作是估计未知参数。可以在Wikipedia上找到简要介绍。Siciliano等人的文章《机器人:建模,规划和控制》。更全面地介绍该主题。

编辑以响应@Rocketmagnets查询:

简而言之,您必须具有系统的数学模型,即描述受迫或其他情况下系统随时间变化的方程式,但是您无需了解动力学参数,例如各个组件的质量,惯性等..自适应控制器的工作是估算这些参数。但是,您必须对每个未知参数都进行初步猜测。然后,在系统运行时,它将使用控制信号,输出信号以及诸如线性回归或梯度下降之类的方法来更新未知参数值。随着时间的流逝,参数可能会收敛到将导致稳态的值,尽管它们可能与实际参数不匹配,即,可能会导致质量错误,但该值仍然有效。

从这里开始,我建议参考讨论该方法的文本。例如,我刚刚注意到Marc Bodson博士在他的网站上以PDF格式提供了他的文本“自适应控制:稳定性,鲁棒性和收敛性”的副本。


您能解释一下该方法吗?
Rocketmagnet 2012年

1
考虑到我只是最近才知道这种方法,所以我怀疑我是否可以做到这一点。此外,这不是单一的方法,而是过去50年来开发的一系列技术。但是,我将编辑我的回复以详细说明。
DaemonMaker

2

您描述的过程称为自适应PID。

不过,这似乎有些矫kill过正。我发现PID在处理外部干扰时非常强大,您描述的任务似乎并没有超出一组增益的能力。


这些不仅仅是外部干扰。这些都是关节特征的变化。例如,使机器人的质量加倍会导致过冲。
Rocketmagnet 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.