鲁棒控制,第4部分:处理参数不确定性
从系列中:鲁棒控制
布莱恩•道格拉斯
前两个视频展示了几种不同的方法,通过查看系统在不再满足需求之前能处理多少输入和输出变化,来量化系统对建模和确定不确定性的鲁棒性。在这个视频中,我们将展示另一种方法。我们不是将变化应用到模型作为一个整体,而是将其应用到模型中的各个参数,以确定系统对参数不确定性的鲁棒性。
在前两个视频中,我们展示了几种不同的方法,通过查看系统在不再满足需求之前能够处理多少输入和输出变化,来量化系统建模和确定不确定性的健壮性。我们研究了输入的变化如何影响系统的稳定性,我们通过改变输出来研究同样的问题,然后我们研究了同时改变输入和输出。在这个视频中,我们不是将变量应用到整个模型中,而是将它应用到模型中的各个参数来确定系统对参数不确定性的鲁棒性。我想你们会发现这是思考系统中不确定性的一种很自然的方式,所以我希望你们能坚持下去。我是Brian,欢迎来到MATLAB技术讲座。
为了演示建模参数的不确定性的力量,让我们看看我们可能如何去控制一个双车和弹簧系统。这里的想法是,我们可以调整施加在第一个推车把手上的力。这是系统的输入。目标是将第二辆车移到设定值。有很多方法可以解决这个问题,但我想展示一个解决方案可能是什么样的。
红线表示输入力的方向和大小。我不知道你们有没有注意到,我们再看一遍,你们可以看到这个力是如何使第二辆车在设定值处停下来的。
我已经说过有很多方法可以解决这个问题;让我告诉你我是怎么做的。我们可以用第一性原理建立系统动力学的线性模型。我们从运动方程开始,然后定义4个状态变量。我使用1号车的位置和速度2号车的位置和速度。然后利用这些状态变量将运动方程重新写成状态形式,再重新打包成状态空间矩阵。你可以暂停视频如果你想更详细地研究它,但主要的是我们有一个简单的数学模型这个系统的形式是a B C D矩阵。
现在,我们可以使用这个模型来开发一个反馈控制系统,它将驱动第二辆车的位置到设定值。我要用控制器的全状态反馈,我要用LQR来选择增益。让我们用MATLAB看看这是怎么做到的。
顺便说一下,我非常松散地遵循MathWorks示例“构建和操作不确定模型”,如果您想自己尝试类似的东西,我在描述中留下了它的链接。这个实时脚本的第一部分只是一个图形,提醒您注意这个问题,并显示了我们刚刚导出的状态空间模型的更清晰的版本。
我将任意设置推车质量和弹簧常数为1,然后用ss命令建立状态空间模型。G是开环装置的模型。它有一个输入,力,它有四个输出,系统中的四种状态。
在这个模型中,开发LQR控制器非常简单。我定义了Q和R矩阵,然后用lqr命令求解完整的状态反馈增益。如果你想了解更多,请查看关于LQR的MATLAB Tech Talk视频。链接如下。
好的,现在我们得到了带有反馈命令的闭环系统模型,我们的控制系统设计完成了。我们可以测试它,看看它如何响应一个步骤命令。这里,我告诉系统将两个推车位置向右移动一个单位,然后检查一下。大约八秒钟后,两辆车的位置都定在了一。你可以看出它已经解决了,因为两辆车的速度都为0。
所以,控制器工作了!但我想提醒你们我们刚刚做了什么。我们开发了一个硬件模型来计算控制器应该是什么。但我们是否应该期待这个控制器在真正的硬件上工作?好吧,如果模型和硬件完美匹配,那么是的,它肯定能工作。但如果模型不能完美地代表硬件,或者硬件会随着时间变化而变化,或者存在硬件缺陷或较大的制造公差,那么我们就不知道控制器是否能够应对这些变化。就像我们说的,这就是圆盘边距的意义所在。我可以检查这个系统的输入/输出磁盘裕度,看到在1.7 rad/s的临界频率下,实际系统的输入和输出可以有一个增益变化在模型声称的0.76到1.3之间,或者相位变化+/- 15度。如果系统中的实际变化在这些值之间,那么我们用模型开发的控制器仍然可以工作。
这就是上一节我们量化鲁棒性的方法,这是确定边际的一个很有用的方法。但在某些情况下,将增益和相位裕度与物理上的东西联系起来并不容易。比如,很难很快看出弹簧常数的变化是如何影响整个系统的相位或增益的。举个例子,如果我们买一批弹簧因为我们要造一百个这样的装置我们知道每个弹簧都有一个稍微不同的常数。问题是,在我们想要在安装到系统之前拒绝它之前,弹簧常数会超出规格多远。从圆盘增益和相位裕度来看,这并不是很明显。
所以,除了圆盘余量,让我们通过问这个问题来解决这个问题:在不稳定发生之前,我们的系统能处理多少弹簧常数和推车质量的变化?解决这个问题的一种强力方法是构建数百个模型,每个模型在m1、m2和k上都有轻微的变化,并对它们进行模拟,看看哪些系统变得不稳定。
这是解决这个问题的蒙特卡洛方法。您可以指定参数如何变化,然后运行一系列模拟来查看它的执行情况。
蒙特卡洛方法的问题是,您只能在连续参数空间内测试有限数量的情况。测试用例的随机分布可能会错过产生不稳定系统的组合。我们可以通过增加案例的数量来提高概率,或者相反,我们可以使用MATLAB中的不确定参数模型以更确定的方式检查参数不确定性的鲁棒性。
这里的代码与我们前面所做的非常相似。我们将用参数k m1和m2建立状态空间方程,只不过这次,我们将它们定义为不确定实参数。我随便说过k可以变化30% m1 10% m2 20%使用ss命令,我们可以生成一个不确定的连续时间状态空间模型,我称之为gunc。
利用这个,我们可以用反馈命令计算不确定封闭系统就像我们之前做的一样,所以一切都是一样的。除了这个!我们可以用robstab命令检查不确定系统的鲁棒稳定性裕度。
这个命令确定地求解导致不稳定的参数组合,然后返回这些结果。它明确地在寻找最坏的情况。这和蒙特卡洛方法很相似我们在整个参数空间中寻找,除了我们能保证不会因为随机选择而遗漏任何东西。
它表明我们的系统对于建模的不确定性是稳健稳定的,结果证明我们实际上可以容忍2.3倍于我们预期的参数不确定性。所以,不是30% 10% 20%的变化,如果弹簧常数变化69% m1变化23% m2变化46%系统仍然是稳定的。这是有道理的,因为LQR本身产生了一个相当健壮的控制系统。如果配上卡尔曼滤波器就不是这样了,但那就是另一回事了。我们可以通过查看wcu来查看使系统不稳定的最小参数组合。如果我们真正的硬件有下面的弹簧常数和质量,那我们就有麻烦了。
现在,我觉得有件事超级酷。我们可以画出一个不确定系统模型的阶跃响应。这是我之前运行的相同的步长响应,但现在它显示了参数变化对它的影响。它通过在我们设置的参数范围内绘制25个随机系统来做到这一点。我们可以看到所有25个都和预期的一样稳定。这有点像蒙特卡洛方法我们通过观察有限数量的情况来验证稳定性。
但看看这个。为了告诉你们蒙特卡洛方法可能会出错,我把期望变化改为75 30和50%我们知道在这个不确定性范围内的一些参数组合将产生一个不稳定的系统。事实上,robstab命令告诉了我们这些。我们不是稳健稳定的,我们只能容忍89%的模型不确定性。显然,如果参数真的变化这么大,我们不会喜欢这个设计。
然而,如果我们检查在25个随机系统中可视化的阶跃响应,我们可能会倾向于声称我们是ok的,因为这些绘制的组合中没有一个产生任何看起来不稳定的东西。这相当于用蒙特卡洛方法运行25个案例,然后错误地声称成功。
让我告诉你我是什么意思。我说过wcu是会使系统不稳定的最小参数变化。假设我们建立了一个有k和m1值的系统但是m2值在可接受的最小变化值之外有5%在这种情况下,m2将比最低稳定质量0.55 Kg轻5%。这个组合仍然在我们上面指定的参数不确定性范围内,如果我们依赖于25例蒙特卡洛,那么我们期望这是可以的。
这应该不会让你感到惊讶,但这是不对的,我们可以通过绘制它的阶跃响应来验证这一点。我将把模拟时间延长到100秒,因为它将突出25个案例告诉我们的情况与现实情况之间的差异。
就是这样。这一节我特意选了这个例子,实际上我们不会只讲25个蒙特卡洛例子。我们会运行数百或数千,增加覆盖整个参数空间的几率。但希望通过这个例子,你能看到确定性方法,比如不确定系统模型,在确定参数不确定性的鲁棒性时比统计方法更可靠。
好了,这节课就讲到这里。我希望您能看到量化参数不确定性的价值,并使用它来评估您的系统对参数变化的鲁棒性。你没有理由一定要选择这种方法而不是圆盘裕度或者经典的增益和相位裕度。你可以看所有的。每种方法都告诉您系统如何处理变化的不同信息,所有这些知识将使您更好地了解系统的健壮程度。
事实上,您甚至可以组合方法。例如,您可以使用umargin命令为整个系统添加增益和相位不确定性,然后检查系统对参数变化的鲁棒性。如果你想看看你的系统对未建模的动力学有多健壮,这个方法是有用的,比如我们没有对弹簧的非线性进行模化。我留下了一个示例的链接,如果您有兴趣学习如何量化来自未建模动态的不确定性,您可以浏览一下。
在这个系列中,我们已经花了很多时间讨论如何确定我们的系统是否健壮。在下一集视频中,我们将从一开始就考虑到鲁棒性来设计控制器。所以,如果你不想错过这个视频或其他未来的Tech Talk视频,不要忘记订阅这个频道。如果你想查看我的频道,控制系统讲座,我也会在那里介绍更多的控制理论主题。感谢收看,我们下期见。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。