状态空间,第4部分:什么是LQR最优控制?
从系列:状态空间
布莱恩•道格拉斯
LQR是一种基于状态空间表示的最优控制。在这个视频中,我们将从一个非常高的层面介绍这个话题,这样你就能对控制问题有一个理解,并且当你学习它背后的数学时,可以在这个理解的基础上继续学习。本视频将介绍什么是最优以及如何考虑LQR问题。最后,我将向您展示MATLAB中的一些例子®这将帮助你对LQR有一些直观的认识。
让我们谈谈线性二次调节器,或LQR控制。LQR是一种基于状态空间表示的最优控制。在这个视频中,我想在一个非常高的层次上介绍这个话题,这样你就可以对控制问题有一个大致的理解,当你学习它背后的数学时,可以在这个理解的基础上继续学习。我会讲到什么是最优,如何思考LQR问题,然后我会给你们看MATLAB中的一些例子我认为这些例子会帮助你们对LQR有一些直观的认识。我是Brian,欢迎来到MATLAB技术讲座。
首先,让我们比较我们在第二个视频中提到的极点放置控制器和LQR控制器的结构。这样你就能知道它们的不同之处。通过极点配置,我们发现,如果我们反馈状态向量中的每个状态,并将它们乘以一个增益矩阵K,我们就有能力将闭环极点放置在我们选择的任何地方,假设系统是可控的和可观察的。然后对参考项进行缩放,以保证稳态参考跟踪不存在误差。
另一方面,LQR结构反馈完整的状态向量,然后用增益矩阵K乘以它,然后从缩放参考中减去它。所以,正如你所看到的,这两个控制律的结构是完全不同的——好吧,实际上,不,它们是完全一样的。它们都是全状态反馈控制器,我们可以用LQR和极点布置的相同结构实现结果。
关于这种结构的一个简短的旁注:我们可以设置它来反馈输出的积分,或者我们可以将增益应用于状态误差。所有这三种实现都可以产生零稳态误差,并且可以与极点配置或LQR的结果一起使用。如果你想了解更多关于其他两个反馈结构的知识,我在描述中留下了一个很好的来源。
好吧,我们回来了。如果这两个控制器以完全相同的方式实现,为什么要给它们不同的名称呢?好吧,这是钥匙。实现是一样的,但是我们如何选择K是不同的。
对于极点的放置,我们通过选择要放置闭环极点的位置来求解K。我们想的地方他们在一个特定的地方。这是太棒了!但这种方法的一个问题是要找出适合那些闭环极点的位置。对于高阶系统和有多个执行器的系统,这可能不是一个非常直观的答案。
所以在LQR中,我们不选择极点位置。我们通过选择对我们重要的闭环特征来找到最优K矩阵——具体地说,就是系统的性能如何,以及需要付出多少努力才能获得这种性能。这种说法可能不太有意义,所以让我们来做一个我认为会有帮助的快速思考练习。
我借用并修改了Christopher Lum的例子,他有一个关于LQR的视频,如果你想要更深入的数学解释,这个视频值得一看。我在描述中链接了他的视频。但大致思路是这样的:
假设你想找出从家到单位的最佳路线。你有很多交通工具可以选择。你可以开车,骑自行车,坐公共汽车,或者租一架直升机。问题是,哪个是最优的选择?这个问题本身无法回答,因为我还没有告诉你们好的结果意味着什么。所有这些选择都可以让我们从家到公司,但它们的方式不同,我们需要弄清楚什么对我们来说是重要的。如果我说时间是最重要的事情,尽快去工作,那么最佳的解决方案是乘坐直升机。另一方面,如果我说你没有多少钱,尽可能便宜地上班是一个好的结果,那么骑自行车将是最佳解决方案。
当然,在现实生活中,你没有无限的金钱来最大化性能,也没有无限的时间来最小化支出,相反,你要努力在两者之间找到平衡。所以,也许你会想,你有一个较早的会议,因此很珍惜上班的时间,但你本身并不富有,所以你在乎花了多少钱。因此,最佳的解决方案是开车或乘公共汽车。
现在,如果我们想用一种奇特的方法来从数学上评估哪种交通方式是最佳的,我们可以建立一个函数,将每种选择的旅行时间和花费相加。然后我们可以用乘数来设定时间和金钱的重要性。我们将根据自己的个人喜好对每个矩阵进行加权。我们称它为代价函数,或者目标函数,你可以看到它受这些权重参数的影响很大。如果Q很高,那么我们就会选择花费更多时间的选项,如果R很高,那么我们就会选择花费很多钱的选项。一旦我们设定了权重,我们就会计算每个选项的总成本,然后选择总成本最低的选项。这是最优解。
有趣的是,根据你对性能和支出的相对权重,有不同的最佳解决方案。没有通用的最优解决方案,只有满足用户需求的最佳解决方案。CEO可能会乘坐直升机,而大学生可能会骑自行车,但考虑到他们的偏好,两者都是最佳选择。
这和我们在设计控制系统时所做的推理是完全一样的。我们可以不考虑极点位置,而是考虑并评估在系统执行得如何和我们想要花费多少来获得该性能之间什么对我们来说是重要的。当然,通常我们想花多少钱不是用美元来衡量的,而是用执行器的努力,或它所消耗的能量来衡量的。
这就是LQR寻找最佳增益矩阵的方法。我们建立了一个成本函数,将性能和总时间的努力的加权和相加,然后通过解决LQR问题,它返回在给定系统的动态条件下产生最低成本的增益矩阵。
现在我们用LQR的成本函数看起来和我们为旅行例子开发的函数有点不同,但概念是完全一样的;我们通过调整Q来惩罚糟糕的表现,通过调整R来惩罚执行器的努力。
让我们看看性能对于这个成本函数意味着什么。性能是根据状态向量来判断的。现在,我们假设每个状态都是零,都被拉回到初始平衡点。因此,如果系统在某种非零状态下初始化,它返回零的速度越快,性能越好,成本越低。我们可以通过观察曲线下的面积来衡量它回到期望状态的速度。这就是积分的作用。面积小的曲线意味着它比面积大的曲线花更多的时间接近目标。
然而,状态可以是负的也可以是正的,我们不希望负数从总成本中减去,所以我们对值进行平方以确保它是正的。这对大错误的惩罚不成比例地大于对小错误的惩罚,但这是一个很好的妥协,因为它把我们的成本函数变成了二次函数。二次函数,如z = x^2 + y^2是凸的,因此有一个确定的最小值。受线性动力学影响的二次函数仍然是二次函数所以我们的系统也会有一个确定的最小值。
最后,我们希望能够衡量每个状态的相对重要性。因此,Q不是一个单独的数而是一个方阵它的行数和状态数相同。Q矩阵需要是正定的,这样当我们将它与状态向量相乘时,得到的值是正的且非零。通常它只是一个对角线上的正对角线。有了这个矩阵,我们可以通过使Q矩阵中的相应值非常大来瞄准我们想要非常低误差的状态,而我们不太关心的状态则使这些值非常小。
成本函数的另一半是驱动成本的总和。类似地,我们看一下输入向量我们对这些项平方以确保它们是正的,然后用一个R矩阵对它们进行加权它的对角线上有正的乘数。
我们可以像这样把它写成更大的矩阵形式,虽然你不经常看到这样写的成本函数,但它帮助我们可视化一些东西。Q和R是这个更大的权重矩阵的一部分,但是这个矩阵的对角线外项是零。我们可以用N填充这些角,这样整个矩阵仍然是正定的但是现在N矩阵惩罚了输入和状态的叉乘。2022世界杯八强谁会赢?虽然用N矩阵来建立你的成本函数有很多用途,但对于我们来说,我们要保持简单,只把它设为零,只关注Q和R。
因此,通过设置Q和R的值,我们现在有了一种方法来明确什么对我们来说是重要的。如果一个执行器非常昂贵,我们想要节约能源,那么我们通过增加相应的R矩阵值来惩罚它。如果你用推进器来控制卫星可能就是这种情况,因为它们会耗尽燃料,而燃料是一种有限的资源。在这种情况下,你可以接受一个较慢的反应或更多的状态错误,以节省燃料。
另一方面,如果性能真的很重要,那么我们可以通过增加与我们关心的状态相对应的Q矩阵值来惩罚状态误差。当使用反作用轮进行卫星控制时可能会出现这种情况,因为它们使用的能量可以储存在电池中,并由太阳能电池板补充。因此,使用更多的能量进行低误差控制可能是一个很好的折衷方案。
现在的大问题是,我们如何解决这个优化问题?最令人失望的答案是推导解超出了本视频的范围。但如果你想深入了解的话,我在描述区留下了一个很好的链接。
然而,好消息是,作为一个控制系统设计师,通常的方式方法等方面设计不是通过求解优化问题,但通过开发一个系统动力学的线性模型,然后指定最重要的通过调整Q和R加权矩阵,然后运行等方面的命令在MATLAB解决优化问题并返回最优增益集,然后模拟系统,必要时再次调整Q和R。所以只要你理解了Q和R是如何影响闭环行为的,它们是如何惩罚状态误差和执行器的努力的,并且你理解了这是一个二次优化问题,那么使用MATLAB中的LQR命令找到最优增益集就相对简单了。
通过LQR,我们将设计问题从放置极点的位置转移到了如何设置Q和r的问题上。不幸的是,并没有一种万能的方法来选择这些权重;然而,我认为设置Q和R比选择极点位置更直观。例如,你可以从Q和R的单位矩阵开始然后通过试错和直觉来调整它们。为了帮助你建立一些直觉,让我们在MATLAB中看几个例子。
好吧,这需要解释一下。让我们从代码开始。我有一个在无摩擦环境中旋转质量的简单模型系统有两种状态,角度和角速率。我正在设计一个使用LQR的全状态反馈控制器,它真的不能更简单。我将从Q的单位矩阵开始,其中第一个对角线项与角误差有关,第二个与角速率有关。这个系统只有一个单一的驱动输入,这是四个旋转推力器,它们共同作用产生单一的扭矩命令。因此,R只是一个单独的值。
现在,我使用LQR命令求解最佳反馈增益,并构建一个表示闭环动态的状态空间对象。设计好控制器后,我可以模拟对初始条件的响应,我将其设置为3弧度。差不多就是这样了。这个脚本中的其他内容只是使这个奇特的情节更容易理解结果。
好了,让我们运行这个脚本。你可以看到UFO初始化为承诺的3弧度。在上面,我记录了这个动作需要多长时间这代表了性能,以及完成这个动作需要多少燃料。让我们开始,看看控制器做得如何。
你看,它用15单位燃料在5.8秒内完成了机动,并在过程中击中了奶牛,这是最重要的部分。当推进器启动时,它们会产生扭矩,随着时间的推移加速UFO。因此,燃料使用量与加速度的积分成正比。所以我们加速的时间越长,消耗的燃料就越多。
现在让我们看看能不能通过加大对推进器的惩罚来减少这个动作的燃料消耗。我将R提高到2,然后重新运行模拟。
我们少用了两单位燃料,但却多花了三秒。问题是,这种组合只超出了一点目标,必须浪费时间返回。所以让我们试着降低最大旋转速度,希望它不会超过。我们要通过对Q矩阵的角速率部分进行惩罚来做到这一点。现在,任何非零利率的成本都是以前的两倍。让我们试一试。
我们节省了大约一秒,因为它没有超调,在这个过程中,我们又消耗了一单位的燃料。好了,这些小事说够了。现在让我们通过放松角度误差权重来节省燃料。
好了,现在速度很慢了。让我加快视频的播放速度。最后,我们用了5个单位的燃料,不到以前的一半。我们也可以用另一种方式调整一个非常激进的控制器。
是的,那样快多了。不到两秒,我们的加速度就破表了。这样你就可以轮流抱起一头牛。不幸的是,这是以消耗100单位燃料为代价的,所以凡事都有不好的一面。好的,希望你们开始看到我们如何通过调整这两个矩阵来调整控制器。这很简单。
现在,我知道这个视频有点拖了,但我想用不同的脚本再快速地向你们展示一个东西,那就是LQR比极点布置更强大的原因。这里,我有一个不同的状态空间模型,它有三个状态和一个驱动器。我已经定义了我的Q和R矩阵并求解了最佳增益。和前面一样,我将生成闭环状态空间模型,然后对初始条件1,0,0运行响应。然后画出第一种状态的响应,从1到0的这一步;执行机构工作;以及闭环极点和零点的位置。
让我们运行一下,看看会发生什么。第一种状态很好地追踪到0,但要付出很大的动力。我没有特别建模但是假设执行器需要推力。所以这个控制器要求10单位推力。但是,我们假设推进器只能提供2单位的推力。这种控制器设计会使推进器饱和我们就得不到我们想要的响应。现在,如果我们使用极点布置来开发这个控制器,此时的问题将是我们应该移动这三个极点中的哪一个以减少执行器的努力?这不是很直观,对吧?
但是对于LQR,我们可以很容易地使用R矩阵并通过提高单个值来惩罚执行器的使用。我将重新运行脚本。我们看到响应变慢了,正如预期的那样,但执行器不再饱和。看看这个,所有的三个闭环杆都随着r的调整而移动,所以如果我们使用杆的位置,我们必须知道像这样移动这些杆,以减少执行器的努力。那将是相当困难的。
这节课就讲到这里。LQR控件是非常强大的,希望你看到它的设置很简单,调优和调整相对直观。最棒的是它会根据你的工作表现和努力程度返回一个最佳增益矩阵。所以最后你希望你的系统表现如何取决于你。
如果你不想错过下一期Tech Talk视频,不要忘记订阅这个频道。此外,如果你想查看我的频道,控制系统讲座,我也在那里涵盖了更多的控制理论主题。谢谢收看。我们下期见。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。