从系列:状态空间
布莱恩•道格拉斯
LQR是一种基于状态空间表示的最优控制。在这个视频中,我们会从一个非常高的层次来介绍这个主题,这样你就会对控制问题有一个理解,并且可以在这个理解的基础上学习它背后的数学。本视频将介绍什么是最优以及如何考虑LQR问题。最后,我将展示一些MATLAB中的例子®这会帮助你对LQR有一点直觉。
让我们来谈谈线性二次调节器,或LQR控制。LQR是一种基于状态空间表示的最优控制。在这段视频中,我想在一个非常高的层次上介绍这个主题,这样你就可以对控制问题有一个大致的理解,并且可以在你学习其背后的数学时建立在这个理解的基础上。我将介绍什么是最优,如何思考LQR问题,然后我将向您展示一些MATLAB中的示例,我认为这些示例将帮助您获得关于LQR的一些直觉。我是布赖恩,欢迎参加MATLAB技术讲座。
首先,让我们比较我们在第二段视频中提到的极点配置控制器和LQR控制器的结构。这样你就知道它们有什么不同了。通过极点配置,我们发现,如果我们反馈状态向量中的每个状态,并将它们乘以增益矩阵K,我们有能力将闭环极点放置在我们选择的任何地方,假设系统是可控和可观察的。然后我们缩放参考项,以确保我们没有稳态参考跟踪误差。
另一方面,LQR结构反馈完整的状态向量,然后将其乘以增益矩阵K,并从缩放的参考中减去它。正如你所看到的,这两个控制律的结构是完全不同的,实际上,它们是完全相同的。它们都是全状态反馈控制器,我们可以用相同的结构从LQR和极点配置实现结果。
关于这种结构的一个简要说明:我们可以将其设置为反馈输出的积分,或者我们可以将增益应用于状态误差。所有这三种实现都可以产生零稳态误差,并且可以与极点配置或LQR的结果一起使用。如果您想了解其他两种feedbac的更多信息k结构,我在描述中留下了一个很好的源代码。
好了,我们回来了。那么,如果这两个控制器是以完全相同的方式实现的,为什么我们要给它们取不同的名称呢?这是钥匙。实现是相同的,但是我们如何选择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矩阵惩罚了输入和状态的叉乘。s manbetx 845虽然用N矩阵来设置代价函数是有用处的,但对于我们来说,我们将保持事情简单,将它设为零,只关注Q和R。
所以通过设置Q和R的值,我们现在有一种方法来明确什么对我们来说是重要的。如果其中一个驱动器非常昂贵而我们想要节省能量,我们就会通过增加相应的R矩阵值来惩罚它。如果你用推进器来控制卫星可能会出现这种情况因为它们会耗尽燃料,而燃料是有限的资源。在这种情况下,你可以接受一个较慢的反应或更多的状态错误,这样你就可以节省燃料。
另一方面,如果性能真的至关重要,那么我们可以通过增加与我们关心的状态对应的Q矩阵值来惩罚状态误差。当使用反作用轮进行卫星控制时,可能会出现这种情况,因为它们使用的能量可以存储在电池中,并通过太阳能电池板补充。因此,为低误差控制使用更多的能量可能是一个很好的权衡。
所以现在最大的问题是:我们如何解决这个优化问题?最令人失望的答案是,得出这个解决方案超出了本视频的范围。但是如果你想了解它,我在描述中留下了一个很好的链接。
然而,好消息是,作为一个控制系统设计师,通常你进行LQR设计的方式不是通过手工解决优化问题,而是通过开发一个系统动力学的线性模型,然后通过调整Q和R权重矩阵指定什么是重要的,然后在MATLAB中运行LQR命令求解优化问题,返回最优增益集,然后对系统进行仿真,必要时重新调整Q和R。所以只要你理解Q和R是如何影响闭环行为的,它们是如何惩罚状态误差和执行器努力的,并且你理解这是一个二次优化问题,那么在MATLAB中使用LQR命令来找到最优增益集就相对简单了。
使用LQR,我们将设计问题从极点放置的位置转移到如何设置Q和R。不幸的是,没有一种一刀切的方法来选择这些权重;然而,我认为设置Q和R比选择杆位更直观。例如,您可以从Q和R的单位矩阵开始,然后通过反复试验和对系统的直觉来调整它们。因此,为了帮助您开发一些直觉,让我们在MATLAB中浏览一些示例。
好吧,这需要一点解释。让我们从代码开始。我有一个非常简单的无摩擦环境中旋转质量的模型这个系统有两种状态,角和角速度。我正在使用LQR设计一个全状态反馈控制器,它真的非常简单。我将从Q的单位矩阵开始第一个对角项与角误差有关第二个与角速率有关。这个系统只有一个单一的驱动输入,这是四个旋转推进器一起行动,以创建单一的扭矩命令。因此,R只是一个值。
现在,我使用LQR命令求解最优反馈增益,并构建一个表示闭环动力学的状态空间对象。通过设计控制器,我可以模拟对初始条件的响应,我将其设置为3弧度。差不多就是这么回事。这个脚本中的其他内容只是使这个奇特的情节更容易理解结果。
好的,让我们运行这个脚本。你可以看到UFO初始化为3弧度。在上面,我记录了这个动作需要多长时间这代表了这个动作的性能,以及完成这个动作需要消耗多少燃料。让我们开始,看看控制器做得如何。
看,它在5.8秒内用15单位燃料完成了这个动作,牛也在这个过程中,这是重要的部分。当推进器被激活时,它们会产生一个扭矩,随着时间的推移加速UFO。因此,燃油使用量与加速度积分成正比。所以我们加速的时间越长,消耗的燃料就越多。
现在让我们看看是否可以通过对推进器进行更多惩罚来减少这次机动的燃料消耗。我将把R增加到2,然后重新运行模拟。
嗯,我们少用了2个单位的燃料,但代价是多用了3秒。问题是,在这种组合下,它只是稍微超出了目标,不得不浪费时间回来。所以,让我们试着降低最大转速,希望它不会超调。我们将通过惩罚Q矩阵的角速率部分来做到这一点。现在,任何非零利率的成本都是以前的两倍。让我们试一试。
我们节省了大约一秒因为它没有超调,在这个过程中又减少了一个单位的燃料。好了,小事情说够了。现在让我们通过放松角度误差权重来节省燃料。
好了,现在进展真的很慢了。让我把视频加速一下。最后,我们用了5单位的燃料,不到以前的一半。我们也可以用另一种方法来调整一个非常激进的控制器。
是的,那样快多了。不到两秒,我们的加速度就破纪录了。这样才能把牛抱起来。不幸的是,这是以消耗近100单位燃料为代价的,所以凡事都有不好的一面。好了,希望你们开始看到我们如何通过调整这两个矩阵来调整和调整控制器。这很简单。
现在,我知道这个视频有点拖了,但是用一个不同的脚本,我想快速地向你们展示一个东西,那就是LQR如何比杆位更强大。这里,我有一个不同的状态空间模型,它有三个状态和一个驱动器。我已经定义了Q和R矩阵并解出了最优增益。和之前一样,我会生成一个闭环状态空间模型然后运行初始条件为(1,0,0)的响应。然后画出第一个状态的响应,即从1到0这一步;执行机构工作;以及闭环极点和零点的位置。
让我们运行这个,看看会发生什么。好吧,第一个状态很好地跟踪到0,但以大量驱动为代价。我没有特别建模,但假设驱动力是需要推力的。所以这个控制器要求10个单位的推力。但是,假设我们的推进器只能通过2个单位的推力t、 这种控制器的设计会使推进器饱和,我们不会得到我们想要的响应。现在,如果我们使用极点配置开发这种控制器,那么此时的问题是,为了减少执行器的工作,我们应该移动这三个极点中的哪一个?这不是很直观,对吗?
但对于LQR,我们可以很容易地找到R矩阵,通过提高单个值来惩罚执行器的使用。我会重播脚本。我们看到响应较慢,如预期,但驱动器不再饱和。看看这个,所有三个闭环极点都随着r的单一调整而移动,所以如果我们使用极点放置,我们必须知道像这样移动这些极点,以减少驱动器的努力。那将是相当困难的。
这节课就讲到这里。LQR控制非常强大,希望你能够看到它的设置非常简单,并且能够相对直观地进行调整和调整。最重要的是,它会根据你对表现和努力的衡量,返回一个最佳增益矩阵。所以最终取决于你希望系统如何运行。
如果您不想错过下一个技术谈话视频,请不要忘记订阅此频道。此外,如果您想查看我的频道“控制系统讲座”,我也会在那里介绍更多的控制理论主题。感谢收看。下次再见。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。