状态空间,第四部分:什么是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很高,那么我们惩罚的是花费很多钱的选项。一旦我们设置了权重,我们就会计算每个选项的总成本,并选择总成本最低的选项。这是最优解。
有趣的是,根据你对绩效和支出的相对权重,有不同的最佳解决方案。万博 尤文图斯没有通用的最优解决方案,只有满足用户需求的最佳解决方案。首席执行官可能会乘坐直升机,而大学生可能会骑自行车,但考虑到他们的偏好,这两种方式都是最佳选择。
这和我们设计控制系统时所做的推理是完全一样的。与其考虑极点位置,我们可以考虑并评估在系统性能如何和我们想要花费多少来获得性能之间,什么对我们来说是重要的。当然,通常我们想要花多少钱不是用美元来衡量的,而是用驱动器的工作量,或者它所需要的能量来衡量的。
这就是LQR找到最优增益矩阵的方法。我们建立了一个成本函数,将性能和努力的加权和加起来,然后通过解决LQR问题,它返回在给定系统动态的情况下产生最低成本的增益矩阵。
我们在LQR中使用的成本函数看起来和我们在旅行例子中开发的函数有点不同,但概念是完全相同的;我们通过调整Q来惩罚糟糕的性能,我们通过调整R来惩罚执行器的努力。
我们来看看这个成本函数的性能意味着什么。性能是根据状态向量判断的。现在,让我们假设我们希望每个状态都是0,都被推回到它的初始平衡点。因此,如果系统初始化时处于某种非零状态,那么它返回零的速度越快,性能就越好,成本就越低。我们可以通过观察曲线下的面积来测量它回到理想状态的速度。这就是积分的作用。面积较小的曲线意味着它比面积较大的曲线更接近目标。
然而,状态可以是负的,也可以是正的,我们不希望从总成本中减去负值,所以我们将值平方以确保它是正的。这对较大错误的惩罚比较小错误的惩罚要大得多,但这是一个很好的妥协,因为它把我们的代价函数变成了二次函数。二次函数,如z = x^2 + y^2是凸的,因此,有一个确定的最小值。受线性动力学影响的二次函数仍然是二次函数所以我们的系统也会有一个确定的最小值。
最后,我们希望能够衡量每个状态的相对重要性。因此,Q不是一个单独的数而是一个方阵它的行数与状态数相同。Q矩阵必须是正定的,这样当我们将它与状态向量相乘时,得到的值是正的且非零。通常它只是一个对角线上都是正的矩阵。有了这个矩阵,我们可以通过使Q矩阵中的对应值非常大来定位我们想要非常低误差的状态,而我们不太关心的状态则使这些值非常小。
成本函数的另一半将驱动成本加起来。用一种非常相似的方式,我们看一下输入向量,我们把这些项平方以确保它们是正的,然后用一个R矩阵对它们进行加权,这个R矩阵在对角线上有正的乘数。
我们可以把它写成更大的矩阵形式,虽然你不经常看到代价函数这样写,它帮助我们可视化一些东西。Q和R是这个更大权重矩阵的一部分,但是这个矩阵的对角线外项是零。我们可以用N来填充这些角,这样整个矩阵仍然是正定的但是现在N矩阵惩罚了输入和状态的叉乘。s manbetx 845虽然用N矩阵建立代价函数是有用处的,但对我们来说,我们要保持简单,只把它设为0,只关注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,并重新运行模拟。
我们少用了2单位的燃料,但代价是多花了3秒。问题是,这种组合只是稍微超出了目标,不得不浪费时间回来。所以让我们试着放慢最大旋转速度,希望它不会超过。我们要通过惩罚Q矩阵的角速率部分来做到这一点。现在,任何非零利率的成本都是以前的两倍。让我们试一试。
好吧,我们节省了大约一秒钟,因为它没有超调,在这个过程中,我们成功地减少了另一个单位的燃料。好了,这些小事够了。现在让我们通过放松角度误差权重来节省燃料。
好了,现在进展得很慢了。让我加快视频的速度,把它讲完。最后,我们用了5个单位的燃料,不到以前的一半。我们也可以用另一种方式调整一个非常激进的控制器。
是的,那样要快得多。不到2秒,我们的加速度就爆表了。这就是你轮流捡牛的方法。不幸的是,这是以消耗近100单位燃料为代价的,所以凡事都有不利的一面。好的,希望你们开始看到我们如何通过调整这两个矩阵来调整和调整控制器。这很简单。
现在,我知道这个视频有点拖了,但是我想用另一个脚本快速地向你们展示另一个东西,那就是LQR比极置更强大的原因。这里,我有一个不同的状态空间模型,它有三个状态和一个执行器。我已经定义了Q和R矩阵并求解了最佳增益。像以前一样,我将生成闭环状态空间模型,然后运行对初始条件1,0,0的响应。然后我画出第一个状态的响应,从1回到0;执行器出力;以及闭环极点和零点的位置。
让我们运行一下,看看会发生什么。第一个状态很好地回归到0,但是以很大的驱动为代价。我没有建立任何特别的模型但是假设执行器的力是推力所需的。所以这个控制器需要10个单位的推力。但是,假设推进器只能提供2个单位的推力。这种控制器设计会使推进器饱和我们就得不到我们想要的响应。现在,如果我们使用极点布置来开发这个控制器,此时的问题是我们应该移动这三个极点中的哪一个来减少执行器的工作量?这不是很直观,对吧?
但是对于LQR,我们可以很容易地得到R矩阵,并通过提高单个值来惩罚执行器的使用。我将重新运行脚本。我们看到,响应较慢,正如预期的那样,但执行器不再饱和。看看这个,所有三个闭环的极点都随着r的一个调整而移动,所以如果我们使用极点位置,我们必须知道像这样移动这些极点以减少执行器的工作量。这将是相当困难的。
这节课就讲到这里。LQR控件是非常强大的,希望你看到它是简单的设置和相对直观的调优和调整。最棒的是,它会根据你的表现和努力的权重,返回一个最佳增益矩阵。因此,最终取决于您希望系统如何表现。
如果你不想错过下一期Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我在那里涵盖了更多的控制理论主题。感谢收看。下次见。
相关产品s manbetx 845
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。