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



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

我真正想要的是一些高级功能,可以根据手臂的行为谨慎地调整参数。例如,如果发现手臂在摆动,则可能会减小P并增加D。或者如果注意到手臂没有达到其目标,则可能会增加I。
存在?即使算法没有立即完善参数,我也会很高兴。例如。在将参数调整为新值之前,手臂可能会振荡几次。

#1 楼

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

或者,在维基百科中说:


让我们给出一个线性程序通过规范的画面。 simplex
算法通过执行连续的枢轴运算进行,每个枢轴运算都给出了一种改进的基本可行解决方案;在每个步骤中选择
元素主要取决于
该透视图确实可以改善解决方案的要求。


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



Nedler-Mead在我们的情况下效果最好,因为它可以追逐一个设定点。这很重要,因为我们当前的目标设定点会随着扭矩需求的增加而改变。


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

评论


$ \ begingroup $
如果可以的话,您可以将您的方法和结果联系起来吗?
$ \ endgroup $
– pra骨
15年6月26日在13:07

$ \ begingroup $
@SPRajagopal抱歉,没有。我不再为该公司工作,也无法访问任何数据。
$ \ endgroup $
–embedded.kyle
15年6月29日在19:08

#2 楼

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

根据@Rocketmagnets查询进行编辑:

简而言之,您必须具有系统的数学模型,即描述系统的方程式强制或以其他方式随着时间的推移会发生变化,但是您无需了解动态参数,例如各个组件的质量,惯性等。自适应控制器的工作就是估算这些参数。但是,您必须对每个未知参数都进行初步猜测。然后,在系统运行时,它将使用控制信号,输出信号以及诸如线性回归或梯度下降之类的方法来更新未知参数值。随着时间的流逝,参数可能会收敛到将导致稳态的值,尽管它们可能与实际参数不匹配,即可能会导致质量错误,但该值仍然有效。我建议参考讨论该方法的文本。例如,我刚刚注意到Marc Bodson博士在他的网站上以PDF格式提供了他的文本“自适应控制:稳定性,鲁棒性和收敛性”的副本。

评论


$ \ begingroup $
您能解释一下该方法吗?
$ \ endgroup $
– Rocketmagnet
2012年10月29日在17:01

$ \ begingroup $
鉴于我只是最近才知道这种方法,所以我怀疑我是否可以这样做。此外,这不是单一的方法,而是过去50年来开发的一系列技术。但是,我将编辑我的回复以详细说明。
$ \ endgroup $
– DaemonMaker
2012年10月31日,下午3:20

#3 楼

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

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

评论


$ \ begingroup $
这些不仅仅是外部干扰。这些都是关节特征的变化。例如,使机器人的质量加倍会导致过冲。
$ \ endgroup $
– Rocketmagnet
2012年10月29日在7:14