来自系列:控制系统在实践中
布莱恩道格拉斯
通常,最好的控制系统是最简单的。当你试图控制的系统是高度非线性的,这就会导致非常复杂的控制器。本视频通过讨论非线性控制的一种简单形式:增益调度,继续我们在实践中对控制系统的讨论。
增益调度是一种基于系统当前状态调整线性控制器增益的方法。通过这种方法,增益调度控制器可以将系统的整个工作范围分割成更小的线性可控区域,从而对整个工作范围产生足够的控制。然而,在控制器增益之间切换可能会产生一些意想不到的影响。除了提供对增益调度的直观理解,本视频还介绍了一些实现这些控制器的方法,以及选择的实现如何最小化开关增益的一些负面影响。
增益调度在实践中经常使用,所以值得通过这个视频学习这种方法的基础知识。然而,没有什么比坐下来自己练习更好的了。这里有一些其他的教程和例子,将帮助你开始在MATLAB中设计增益调度控制器®和仿真软金宝app件®.
让我们通过讨论非线性控制的一种形式:增益调度来继续我们在实践中控制系统的讨论。当我从大学毕业的时候,我就有了这样的想法,我将花大量的时间应用最先进的非线性控制理论,并构建非常漂亮的控制器。但我发现,在大多数情况下,您都试图使用尽可能简单的设计,因为这些设计通常更便宜,更容易实现、理解和故障排除。有一些简单的非线性控制器,室内恒温器的开关控制器就是其中之一,但一般来说,非线性控制背后的数学更复杂,只能应用于狭窄的系统类别。因此,有时,最好的解决方案就是坚持使用可靠的线性控制器,即使对于高度非线性的系统也是如此。这就是我们要做的增益调度。我是Brian,欢迎来到MATLAB技术讲座。
假设你被要求为一架商用飞机的自动驾驶仪开发一个俯仰控制器。当自动驾驶仪要求某一俯仰角度时,控制器需要将该命令与当前俯仰角度进行比较,然后驱动电梯控制面相应地调整俯仰。你已经为设备推导出一个线性传递函数,并验证了系统的行为足够线性,你可以使用这个模型来设计和调整控制器。如果你所需要做的只是设计你的系统在飞机处于巡航高度和保持飞行速度时工作,那么你可能可以设计一个工作良好的线性控制器。
但是,有一个问题。该模型仅代表飞机在单一工况下的动力学。飞机不是在单一的操作条件下飞行。马赫数改变,动压,襟翼位置,重心和质量随着燃料消耗而改变,攻角改变,等等。操作条件总是在变化的。每个运行条件都有自己的一组参数,因此是线性模型的不同实例。这种非线性系统称为线性参数变系统(LPV)。其中模型本身是线性的,但参数随时间或运行条件而变化。你的线性控制器在一个运行条件下运行得很好,可能在其他运行条件下运行得很好在不同的模型实例中。
所以,我们能做些什么?我们可以尝试设计一个复杂的非线性控制器,它将在整个工作范围内工作,我们可以尝试设计强大的线性控制器,该控制器将工作 - 虽然这几乎肯定会下降,但甚至可能甚至不可能,我们可以限制机组人员在非常严格的条件下仅在巡航中互动,或者我们可以使用一个线性控制器,并根据我们定义的时间表更改该控制器的增益。让我们选择这个选项。
让我们在反馈间距控制系统的简化框图中更接近。对于这个思想练习,我们正在使用PID控制器,但任何基于增益的控制架构都将起作用。PID控制器有3个可调化的收益,KP,KI和KD,并说我们表示我们已经为特定的马赫号开发了一组增益。也许是较低的马赫号,如大约0.3。
假设这些是我们得到的收益。在这一点上,我们已经确定,当飞机加速到更高的马赫数时,这些增益不再足以满足我们想要的性能,我们重新调整PID,以适应新的操作条件。现在我们又有了一些收获。
我们有两组独立的增益,所以直观地测量飞机的实时速度是有意义的,当飞机飞行缓慢时选择一组增益,当它飞行快速时选择另一组增益。这是一个非常简单的增益计划。我们根据调度变量选择增益,在我们的例子中是马赫数。
一旦我们选择了我们想要的增益,我们需要能够用这些新增益更新控制器。这就是PID控制器顶部的箭头要表示的。在Simuli金宝appnk中,有许多控制器块,允许您将增益定义为外部输入。我在下面的描述中留下了一个链接,如果你想看看,并练习开发你自己的增益计划器。
到目前为止,我们只有一个调度变量,马赫数。但是现在让我们来看看操作范围,或者是飞机可以在两个调度变量的范围内飞行:马赫数和动态压力,我们的增益时间表图看起来是这样的——仍然是两个不同的增益集分裂成两半。然而,我们可能会发现,在整个动态压力范围内,增益并不起作用,我们也想在这个变量的基础上增加一个新的时间表。现在我们有四个增益集,每个增益集由PID控制器的三个增益组成。通过这种方法,我们可以划分工作包络线,分别克服随着马赫数和动压变化而在增益集之间跳跃的各种情况。我们还可以添加第三个调度变量,CG location,来制作一个三维地图。还有一个有攻角的四维空间等等。你可以看到变量矩阵增长得有多快,这是增益调度的一个缺点。您希望对操作信封进行足够的分割,以便在所有地方都获得良好的性能,但又不能分割得太大,以便在您面前有一个重大的调优任务。
大增益矩阵的另一个缺点是你必须存储它们然后有效地在其中搜索控制器值。所以我们想让它们尽可能小。
附注:此图很好地演示了术语角用例。当你有多个极端条件时,从图形上看,它在信封的角落里。通常情况下,这些极端情况是设计中的异常值,因为您必须考虑两种或两种以上的极端情况。因此,当你调整控制器时,你可能会发现它在操作包络线中间是相对容易和快速的,然而,你要花更多的时间和精力让角落的情况工作。
所以现在我们有一个解释有什么增益计划,让谈谈如何实现它。一般来说,四个步骤和我认为您可能已经猜到的前两个步骤:
第一步,在每个设计运行条件下线性化工厂。基本上,我们想要开发一个线性控制器,我们需要确保我们有一个线性植物。让我们回顾一下我们的简单计划,它只有两个增益集:一个用于高马赫数,一个用于低马赫数。在本例中,您将选择两个操作点,每个区域一个。你会想要找到一个点来平均整个区域的植物变化,这样当你调整控制器时,它仍然有最好的机会在整个区域产生足够的性能。之后,如果您发现有一个区域的性能不是很好,那么您可以将其从一个新的区域中剥离出来,并设置相应的增益集。
这里重要的部分是,至少您涵盖了关键操作点。这可能是系统的稳态操作点,也可能是模型的结构或稳定性发生变化的地方。了解你的系统将帮助你确定这些临界点在哪里。
对于像我们一样的LPV系统,您已经有一个线性模型。然后,对于此步骤,您只需选择设计点并找到关联的参数。
现在我们有了线性模型,第二步是为每个模型调整控制器增益。基本上,我们不是将其扩展为一个单一的设计问题,而是将其扩展为设计操作点所包含的许多设计问题。在我们的例子中,我们使用一个PID控制器,所以我们会像调整其他PID控制器一样调整每个PID控制器。有许多不同的较小的控制问题的好处是,每个设计点的需求不必相同。您可能因为可行性考虑而选择不同的需求,也可能只是因为您希望行为有所不同。
这里值得一提的是,使用这种方法,我们只能保证设计点的性能,在同样的情况下,稳定性。我将向你们展示我们要么在整个区域使用一组增益,要么在点之间插入增益。不管怎样,我们实际上只是在少数地方进行了调优,并期望性能能够满足整个信封。因此,在设定控制器要求时,你可以考虑到这一点,通过增加设计裕度或其他一些技术,使控制器更鲁棒,以便它有最好的机会与大范围的操作包络线一起工作。您将在步骤4中评估性能,因此您应该能够捕获任何异常值,并将收益更改为有效或将其分割为两个更小的区域。
在这一点上,我们有一些设计操作点和它们相关的增益集,所以有趣的部分开始了。第三步是实现一个基于调度变量在这些增益集之间切换的架构。这里一个非常简单的方法是实现一个简单的开关。如果调度变量小于某个值,使用增益设置,如果是大于或等于该值,然后使用增益集b,这是一个有吸引力的建筑,因为它是多么简单思考和实施,然而,它会产生一些意想不到的瞬态切换。
要了解如何发生这种情况,请想象以下情况。而不是PID控制器,让我们说我们可以逃脱只有比例控制器,那就是只有一个增益值。我们的增益计划中有两个设计点,当Mach数量高于或等于0.5时,当Mach数量低于0.5时,3时的增益为3.最初,飞机处于零度的音调,我们命令自动驾驶仪以音高高达10度。飞机在马赫0.6马赫飞行,随着飞机开始倾斜,它是利用3的增益。随着飞机继续倾斜,速度开始掉落。Right at Mach 0.5, we’ll say the pitch error is 5 degrees, we’re not at 10 degrees yet, and so the output of the controller is 15 since there is a gain of 3. At the next time step, the Mach number is 0.499, the gain set switches instantly to 2. The error hasn’t changed much in this amount of time and so it’s still about 5 degrees, therefore the output of the controller jumps down to 10. This would cause a quick motion of the elevator and the aircraft would change its pitch quickly at that point, startling the passengers and spilling their drinks. Not a great design.
解决此问题的一种方法是通过实现无瞬态开关。这种类型的开关不会立即跳跃控制器的输出,因为它在两个增益集之间产生平滑的转换,例如,在某个指定的时间段内将3到2平滑地升高到2。这将删除突然的瞬态,但建立可能有点棘手。这是因为您需要设置足够长的转换时间,以便瞬态被平滑,但不太长的增益无法快速转换。
另一种方法,也可以说是一种更好的消除瞬变的方法是把所有开关都去掉。而不是两个不同的增益集,我们可以开发一条从一个操作点平滑地改变到另一个操作点的曲线。对于我们的单个调度变量例子,这可能意味着在低马赫数设置为2时的增益,并且增益随着速度的增加而逐渐增加。这条曲线可以定义为一个方程,也可以定义为查找表中的一系列点,然后在这些点之间进行插值。但由于增益总是平稳地变化,并且随着调度变量的变化而迅速变化,因此不会有突然的瞬变。
如果您有两个调度变量,则您将提出一个增益表面,该增益表面在每个指定的设计操作点之间插入。使用此方法,您仍然可以根据需要使用尽可能多的调度变量,因此它只是使曲面描述更高的顺序。
你们可能不知道一些很酷的工具是Systune和MATLAB和Simulink中的控制系统调谐器。金宝app有了这些工具,您可以选择您的设计操作点,定义增益面作为一个多项式作为一个方程,并自动调整多项式的增益。所以你需要做很多腿部工作。我在下面的描述中留下了一个如何做到这一点的例子。
无论选择什么样的架构,第四步都是至关重要的:在整个操作范围内评估控制性能——这通常是通过模型和模拟来完成的,因为您需要运行大量的测试条件。如果是模拟的,会快得多。由于您无法保证设计操作点之外的性能,因此选择您的测试条件(模拟什么和不模拟什么)非常重要。您需要确保覆盖了所有关键的转换和每个潜在的角落情况。
尽管对于这种方法来说似乎是不必要的工作量,但增益调度经常在实际情况中使用,所以它值得你更详细地学习和实践。
如果你看这个视频只是为了学习一点增益调度的概念,那真是太棒了!但是,如果你想练习我刚刚介绍的内容,或者学习如何在MATLAB和Simulink中实现这些,请务必查看我在描述中链接的所有示例和教程。金宝app
如果你不想错过下一个科技演讲视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。