调整控制器增益可能很困难,哪种通用策略能很好地工作以使系统稳定收敛到正确的解决方案?

评论

针对更具体问题的问题将更有用。否则,您应该只阅读PID文章,其中包含有关调整的部分

我一直发现调整PID非常依赖于系统的特性,这就是为什么我从未发现自动调整系统非常有用的原因。它们对于初次通过,性能低下的参数集是很好的选择,但是它们远非最优,对于任何未针对给定系统的机械,电气和控制方面进行优化的通用策略,您都会遇到相同的问题。 br />

#1 楼

对于齿轮很少或没有齿轮的小型,低扭矩电动机,您可以使用一种方法来获得良好的基线调整,以检测其对干扰的响应。 br />

将所有增益设置为零。
增加P增益,直到对干扰的响应稳定振荡为止。
增加D增益,直到振荡消失(即,已严重衰减)。
重复步骤2和3,直到增加D增益不会停止振荡。
将P和D设置为最后一个稳定值。
增加I增益,直到达到期望的振荡次数(通常为零,但如果您不介意出现过冲的振荡,则响应速度就会更快)。 >您使用哪种干扰取决于控制器所连接的机制。通常,用手将机械装置移离设定点并放开就足够了。如果振荡越来越大,则需要降低P增益。

如果将D增益设置得太高,系统将开始颤动(振动频率高于P增益振荡) 。如果发生这种情况,请减小D增益直至停止。

我相信这项技术很有名。找到的时候我会放在这里。

评论


$ \ begingroup $
听起来像Ziegler-Nichols:en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
$ \ endgroup $
–Throwback1986
2012年11月30日在16:40

$ \ begingroup $
@ Throwback1986,绝对不是Ziegler-Nichols,它仅使用P增益,然后从振荡的P增益和振荡周期相应地计算I和D增益
$ \ endgroup $
– dm76
2014年1月15日15:03

$ \ begingroup $
您是否还有其他建议专门针对具有多个关节需要调整的机械臂进行调整?您是从基地开始,然后向外延伸到末端执行器,还是相反?这是否重要?
$ \ endgroup $
–adamconkey
17-10-21在21:20

$ \ begingroup $
在学术或工业环境中,您将需要更复杂的控制方法。最喜欢的重力具有阻尼作用,因此请调整每个关节的角度,使重力对电动机影响最小。例如,手臂伸直,使重力作用在轴承上而不是电动机上。顺序无所谓。如果您无法获得所需的性能,则在控制中添加前馈重力补偿项可能是最简单的改进(将递归牛顿-欧拉用于串行臂)。
$ \ endgroup $
–hauptmech
17-10-21在22:12

$ \ begingroup $
与Ziegler-Nichols方法相比,pidtuner.com工具给我带来了更好的结果,该方法具有几个已知的缺点。 civil.ntnu.no/skoge/publications/2003/tuningPID/more/…
$ \ endgroup $
–胡安·冈萨雷斯·布尔戈斯(Juan Gonzalez Burgos)
19-10-9在8:42

#2 楼

我在大学里曾教过一种类似于hauptmech答案的实验方法:


将所有增益设为0。
增加Kd直到系统振荡。系数的2-4。到Kp的大约1%。
将Ki增大到开始振荡。
将Ki减小2-4倍。

如果可以的话,齐格勒-尼科尔斯方法更为精确获得振荡周期的准确数字。通常使用给定的“经典PID”数字会引起振荡,因此它并不总是最优的。

对于每个术语对上升时间,超调,稳定时间,稳态误差的影响的一般规则以及稳定性,请参阅IEEE Con​​trol Systems Magazine的Li,Ang和Chong撰写的“ PID控制系统分析和设计”表1。

评论


$ \ begingroup $
Kd首先?我一直认为最好从Kp开始。
$ \ endgroup $
– Rocketmagnet
2012年11月9日23:48



$ \ begingroup $
我正在从旧的演讲幻灯片中转录,如果有充分的理由不这样做,我很想听到它。
$ \ endgroup $
–乔·贝克(Joe Baker)
2012年11月10日,0:13

$ \ begingroup $
这就是我提倡的“调整裤子”的算法。它可以使您尽可能地接近,而无需对系统建模或测量其响应。 (如果您确实需要正确的调整,则建模和/或测量是唯一的方法)。
$ \ endgroup $
– TimWescott
13年7月3日在21:46

$ \ begingroup $
首先调整Kd对我来说没有任何意义,因为在我实施的每个PID中,Kd的符号都是负数。它用于在发生非常大的错误变化时减少控制信号,从本质上抑制系统的运行。如果只有Kd,则系统将向相反方向移动,从而增加了误差并使问题更加复杂。如果Kd为正,则每当在正确的方向上发生较大的误差变化时,您都将使它的变化更快,并超出目标。
$ \ endgroup $
–安德鲁·卡波迪奇(Andrew Capodieci)
2014年2月19日在16:06



$ \ begingroup $
实际上,首先调整D增益是有道理的,但是我假设“增加” D增益意味着增加绝对值,而只是增加阻尼。 D增益的最大问题是,它会放大高频噪声,并且很高兴看到没有P增益的效果。因此,从本质上来说,您首先要寻找增益,使其停止像阻尼一样表现并开始放大噪声和滞后误差信号。我假设要进行第2步,您需要戳一下植物以查看其是否振荡。
$ \ endgroup $
– DrRobotNinja
2014年3月2日在7:38

#3 楼

Embedded.com再次移动了我的文章,但这是现在的地方。这不仅向您展示了如何编写PID循环(弄清楚如何在浮点数之外的其他地方做它,这是读者的一项练习)以及如何对其进行调整。

没有博士学位的PID

最好的方法很大程度上取决于您的能力。假设您是经验丰富的控制系统专家,获得最佳调整的方法通常是测量工厂的响应(“工厂” ==“您正在控制的事物”),然后根据您的操作方式测量可以提取工厂的模型并对其进行设计,或者直接针对测量进行设计。

对于某些困难的工厂,您会发现无法进行令人满意的测量,在这种情况下,必须独自走模特。这些很少见,但是让您满意时会满意。

#4 楼

塞巴斯蒂安·特伦(Sebastian Thrun)在他的“如何对机器人汽车编程”课程中介绍了一种用于调节PID的简单算法。它被称为“旋转”,他在这里对其进行了描述。

旋转很容易找到局部最小值-这意味着您可以提出一组三个常数,这三个常数是可以的,但对于情况。调整PID常数的问题是更通用的搜索问题的一个子集,该问题会寻找某些参数以最大化实用性(在这种情况下,将PID算法的误差最小化)。您可以研究此问题的其他一般解决方案,例如爬山,模拟退火,遗传算法等,这些最终可能会找到更多的最佳解决方案。

#5 楼

与其他两个答案相反,我会说一种很好的手动调整PID的方法是忽略Kd​​。因此,从0开始,增加Kp直到达到目标为止,然后增加Ki消除稳态误差。

Kd可能会混淆该问题,因为它对噪声的响应较差,然后开始添加对模拟输入进行过滤,然后质疑除了减慢控制速度外,还会使整个事情变得更难解决...

还有另一件事使我感到困惑:标准形式或独立形式(在Wikipedia中平行)。当形式是您认为的错误方式时,Ki的作用似乎相反。两种类型都用于自动化中,有时可以选择在它们之间进行切换。

#6 楼

系统建模

当然可以按照其他答案中的说明进行实验性调整,但是如果您能够为要控制的对象定义合理的动态模型并能够识别其参数,则可以应该能够基于明确定义的标准(例如过冲,上升时间,建立时间,稳态误差等)来设计控制器。

MATLAB中甚至还有一些工具可以调整您的控制器以优化这些标准的组合,从而使其更易于使用。

了解控制器

了解PID控制器中的每个参数的作用也非常有帮助。所有的实验算法都基于某种知识。如果您不仅遵循说明,而且能够自我感觉到,您可能会发现手动调整控制器更容易。

现实世界中的问题

有机会其中之一,尤其是在调整控制器时会遇到麻烦:饱和,采样率不足,饱和度。关于您可以对系统进行的实际操作,以获取有关其工作方式以及可以进行哪种实验的知识。最好的方法是实际了解有关IMO的PID控制器和控制理论的更多信息,但我有偏见:)

评论


$ \ begingroup $
我不明白为什么人们总是建议使用启发式方法来调整PID,而如今,我们为工厂识别和控制器设计提供了大量自动工具,这些工具不需要深入的理论背景。然后竖起大拇指来回答这个问题。
$ \ endgroup $
– Ugo Pattacini
2015年1月23日在21:50



#7 楼

我将尝试从我的经验中扩展一些可能感兴趣的人。我认为问题在于我们有很多控制理论,这些理论有些难以理解(有时没有用),然后我们有了经验法则,对系统往往不准确进行假设。

稳定性

让我们先谈谈为什么控制循环变得不稳定。在此讨论中,我将假设一个线性系统。非正式地,这意味着,如果您的控制信号是给定频率下的正弦波,则您观察到的输出将处于相同频率,并且如果您更改控制系统的幅度,则您的输出将以相同的比率响应。这个假设非常适合许多现实世界的系统,可以让我们隔离地查看不同的频率。

如果您查看控制路径,则有一个设定点,PID控制器,您的系统( aka“植物”),然后是您的传感器。想象一个固定的设定点和来自传感器的正弦波(这等于传感器上的真实干扰,并被反馈)。在不稳定的系统中,您的反馈会导致控制回路放大误差而不是减小误差,从而随着时间的增加您的振幅也会增加。发生这种情况的原因是由于延迟,或者对于此特定频率,输入和输出之间存在相移。对于给定的频率,我们可以查看输出的开环(即无反馈)偏移和幅度,当在图表上绘制所有这些偏移和幅度时,我们会得到类似于波特图的图。如果在此开环图中出现了误差不断增大的情况,那么我们的系统将不稳定。如果延迟小于波长的1/2或增益小于x1,则系统将稳定。实际上,我们希望从那一点开始获得一定的余量(增益余量和相位余量),这就是为什么您会在许多手动/启发式方法中看到这种“退缩”的原因。这些手动方法的主要问题是您盲目飞行,并且可以保证获得较差的控制系统。

还要记住,P,I和D的含义是相关的您的传感器正在测量什么以及您正在应用什么控制。家用控制器的一个常见错误是,人们实际上认为自己没有使用P。电机控制器通常具有一个位置环,在速度环和转矩环之间运行。 (级联)

好,但这对我们有什么帮助?

我想说的第一点是,如果您要构建自己的PID控制器,则还应该构建一种测量开环响应的方法。在控制器的输入处进行扫频,并在断开反馈的情况下测量传感器的输出。然后,您可以绘制开环Bode图,并查看系统为什么稳定并能够权衡各种控件的原因。测量闭环响应也很有用,您可以在闭环时对设定点进行频率扫描,从而在任何系统中进行测量。这两个都不难,不需要很多理论知识。

如果只是在不了解幕后情况的情况下调整控件,就无法优化您的系统。建立关于这些系统的直觉并不难。例如。比例增益对相位没有影响,只是增加了所有频率上的开环增益。因此,当您在所有这些手动调整方法中增加比例增益时所要做的就是找到相位达到-180的频率。请查看此内容,以了解各种控件对频率响应的影响。

经常要获得最佳的闭环性能涉及调整系统,而不仅仅是调整控制器的增益。您想要的是使系统尽可能“僵硬”。这样可以增加控制参数并获得最佳的开环和闭环带宽。根据我在电机控制应用中的经验,比例增益是应该完成大部分“功”的工作,积分器应该是“休息”的工作。我认为您根本不需要D词。在您可能会有一些机械共振的情况下,使用低通滤波器和陷波滤波器会很有帮助,但是在没有波德图的情况下设置它们非常困难(在闭环下观察到的振荡频率可能与开环不同)。

如果出于安全考虑(非常强大的电机或可能因电机失控而损坏的系统),则需要在开始调整之前设置一些限制(例如电流限制,最大位置错误)以保护系统。然后,您需要对参数范围有所了解。如果您的反馈每转40个计数或每转4000个计数,则对于给定系统,参数将为100。我的方法是首先找到一个可控性较差的范围,然后从P开始,然后从I开始逐渐增加(尽管您再次盲目飞行)。退缩会产生这种稳定性裕度。

超越闭环

闭环尝试从系统中排除错误。总是会有一些有限的性能。您想要做的是最大程度地减少闭环控制器看到的错误,而做到这一点的一种方法是通过一种称为前馈的技术。在前馈中,您绕过控制器并直接向系统发出命令。加速前馈就是一个例子。如果您知道自己是电动机的转矩常数,并且知道了负载,那么您几乎可以说出要达到负载的一定加速度需要驱动多少电流。您只需将命令输入加速度乘以一个常数,然后将其添加到控制器的驱动命令中即可。如果没有控制器,则基本上就是在做驱动系统所需的工作,并且越接近,您得到的循环所要消除的错误就越少,系统的性能就越好。在实践中有很大的不同。

评论


$ \ begingroup $
“以我在电机控制应用中的经验,比例增益是应该完成大部分“工作”的比例增益,积分器应该是“休息”的积分。我认为根本不需要D项。我同意典型的电机控制应用。 P做主要工作,I补偿长期漂移/误差。但是在这里,四轴飞行器会受到许多外部湍流的影响,因此D项对于获得快速响应很重要。至于第一个术语,除非四边形处于自动导航模式,否则它并不是那么关键。
$ \ endgroup $
– dm76
2014年1月15日15:57

$ \ begingroup $
@ dm76:我的大部分经验是关于电机控制的,我对此表示否认;-)我的直觉虽然说我在四轴飞行器应用中仍有空间,我认为如果P很高,则可以处理外部干扰(就像在电机控制中一样)。我真的需要仔细研究一下这些系统,以说出关于四旋翼飞行器的确切信息。我想我在这里说的很多内容都适用(尤其是在频域中进行调整,并具有系统的开环响应) )。
$ \ endgroup $
– Guy Sirton
2014年1月15日20:34

$ \ begingroup $
@ dm76:确实,这些“经验法则” PID调节的结果是,电动机的性能非常中等,大概与四旋翼飞机的性能相同。有时放置良好的陷波滤波器会产生一个数量级的差异。
$ \ endgroup $
– Guy Sirton
2014年1月15日20:36

#8 楼

Ziegler-Nichols是一种简便的手动方法。还存在更强大的方法-这些方法通常依赖于数学解决方案(解析,迭代优化等)。除此之外,对于某些自动化技术,谷歌“自调整PID”。我最喜欢的是将神经网络应用于PID调节。

#9 楼

如果要获得准确的PID系数:

获取统计的执行器数据(即,以0.01sec x 20secs矩阵的频率频繁地(3)收集输入电压+编码器脉冲的时间为2000) />获取执行器的传递函数(TF)(使用MATLAB中的Ident工具箱)。最后,使用MATLAB中的PIDTool工具箱并上传您的变换函数。


或在一种快速简单的方法:
有一种更快的方法叫做Ziegler–Nichols:

在此图像中演示PID参数的影响: