LQR优化控制

今天来讲一下LQR控制,LQR是一种基于状态空间表述的优化控制。

在开始之前,我们先来对比一下极点配置控制器和LQR控制器。极点配置中,控制器中的每个状态都作为反馈,然后乘以增益矩阵K,假如控制器是可控且可观的,我们可以把闭环极点放在我们选择的任何地方,然后把参考项缩放来确保没有稳态跟随误差。

而LQR控制器反馈全状态向量,然后与增益矩阵K相乘,然后用缩放的参考值相减。可以看出,两者的控制率完全相同,他们都是全状态反馈控制器,我们可以利用 LQR 和极点配置的相同结构来实现结果。

图片

那么问题来了,既然这两个控制器的实现方式完全相同,为什么要给它们起不同的名字呢?关键就在这里。实现方式是一样的,但我们选择 K 的方式不同。

关于极点配置,我们通过选择闭环极点的放置位置来解决 K 的问题。但这种方法的一个问题是,如何找出放置闭环极点的最佳位置。对于高阶系统和有多个执行器的系统来说,这种方法就没那么直观了。

因此,使用 LQR 时,我们不会选择极点位置。我们通过选择对我们来说非常重要的闭环特性来找到最佳 K 矩阵,具体来说,就是系统的性能如何,以及需要付出多少努力才能获得这种性能。这种说法可能不太好理解,所以让我们来做一个简单的思考练习,我想应该会有所帮助。

比方说,你想找出从家到公司的最佳或最理想的方式。你有几种交通方式可供选择。你可以打车,可以骑自行车,可以坐公交车。问题是,哪种是最佳选择?我们需要弄清楚什么对我们最重要,如果说时间是最重要的,要尽可能快地去上班,那么最佳方案就是打车。另一方面,如果我说你没有钱,想尽可能便宜地去上班,那么骑自行车就是最佳解决方案。

图片

当然,在现实生活中,你要综合考虑时间和金钱,在两者之间找到平衡。

现在,如果我们可以用数学的方式来评估哪种交通方式是最佳的,我们可以设置一个函数,将每种选择所需的旅行时间和花费的金额相加。然后,我们可以用一个乘数来设定时间与金钱的重要性。我们将根据自己的个人偏好对每个矩阵进行加权。 我们称之为成本函数或目标函数,你可以看到它在很大程度上受到这些权重参数的影响。如果 Q 值较高,那么我们就会惩罚那些需要花费更多时间的选项;如果 R 值较高,那么我们就会惩罚那些需要花费大量金钱的选项。设置好权重后,我们就可以计算每个方案的总成本,然后选择总成本最低的方案。这就是最优解。 

图片

有趣的是,根据你对性能和支出的相对权重,会有不同的最佳解决方案。并不存在通用的最佳解决方案,只是根据用户的愿望选择最佳方案。这与我们在设计控制系统时所进行的推理如出一辙。与其考虑极点的位置,我们可以综合考虑并评估我们想要达到什么样的系统性能和我们希望花费多少钱。我们想要花多少钱在控制系统中则是指执行器的工作量或耗费的能量来衡量的。

图片

这就是 LQR 寻找最佳增益矩阵的方法。我们设定了一个成本函数,将性能和总耗费的加权总和相加,然后通过求解 LQR 问题,返回在系统动态条件下成本最低的增益矩阵K。

图片

在上述公式中,我们通过调整 Q 来惩罚不良性能,通过调整 R 来惩罚执行器的能量。

图片

那么,让我们来看看对于这个成本函数来说,性能意味着什么。性能是根据状态向量来判断的。现在,让我们假设我们希望每个状态都为零,回到起始平衡点。因此,如果系统初始化在某个非零状态,那么它归零的速度越快,性能就越好,成本就越低。我们可以通过观察曲线下的面积来衡量系统恢复到理想状态的速度。这就是积分的作用。与面积较大的曲线相比,面积较小的曲线意味着它花费了更多的时间来接近目标。

图片

但是,状态可以是负值也可以是正值,我们不希望负值从总成本中减去,因此我们要对数值进行平方,以确保它是正值,,以保证对较大错误的惩罚比对较小错误的惩罚更大。这样一来,成本函数就变成了二次函数。二次函数,如 z = x^2 + y^2 是凸函数,因此有一个确定的最小值。受线性动力学影响的二次函数仍然是二次函数,因此我们的系统也会有一个确定的最小值。

图片

最后,我们希望能对每个状态的相对重要性进行加权。因此,Q 并不是一个单一的数字,而是一个行数与状态数相同的矩阵。Q 矩阵必须是正定矩阵,这样当我们将其与状态向量相乘时,得到的值才是正值且不为零。而 Q 矩阵通常只是一个对角矩阵,对角线上的值为正。有了这个矩阵,我们就可以将 Q 矩阵中的相应值做得很大,从而将目标锁定在误差非常小的状态上,而将我们不太关心的状态的相应值做得很小。

图片

成本函数的另一半是启动成本。以非常相似的方式,我们查看输入矢量,对各项进行平方以确保它们都是正值,然后用沿对角线具有正乘数的 R 矩阵对它们进行加权。

因此,通过设置 Q 和 R 的值,我们现在有办法明确说明什么对我们最重要。如果其中一个执行器非常昂贵,而我们又想节省能源,那么我们就可以通过增加与之对应的 R 矩阵值来惩罚它。如果使用推进器控制卫星,就可能会出现这种情况,因为推进器会消耗燃料,而燃料是有限的资源。在这种情况下,你可能会接受较慢的反应速度或更大的状态误差,以便节省燃料。

另一方面,如果性能确实至关重要,那么我们可以通过增加与我们关心的状态相对应的 Q 矩阵值来惩罚状态误差。

那么现在问题来了: 我们如何解决这个优化问题?对于控制器系统设计来说,LQR 设计的方法并不是手工求解优化问题,而是建立系统动态的线性模型,然后通过调整 Q 和 R 权重矩阵来指定重要因素。Matlab 中已经实现了求解指令LQR。通过在 MATLAB 中运行 LQR 命令来求解优化问题并返回最优增益集,然后在必要时再次调整 Q 和 R。因此,只要了解 Q 和 R 如何影响闭环行为,如何惩罚状态误差和驱动器的能量,并了解这是一个二次优化问题,那么使用 MATLAB 中的 LQR 命令找到最优增益集就相对简单了。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值