LQR原理及其在路径跟踪的应用

一、原理及推导

LQR ,全称Linear Quadratic Regulator,翻译为线性二次型调节器。

1、它要做什么事情呢?

我这样理解:给定一个线性系统(控制量与状态量呈现线性关系),然后为这个系统建立一个代价函数(cost function,评价控制好坏的指标),在一定的约束范围内,求出一个控制序列,使得这个系统能够稳定(稳定可以理解为维持某个值,也可以是跟踪某个曲线)。这样看来是不是有点像高中学过的线性规划问题?

2、它能做什么事情呢?

顾名思义,首先它能调节的是一个线性系统(非线性系统首先要尽心线性化),代价函数是以二次型的方式构建的。通过二次型代价函数找到一组控制量 { u 0 , u 1 , u 2 . . . } \left \{ u_{0},u_{1},u_{2}... \right \} {u0,u1,u2...},使得状态量 { x 0 , x 1 , x 2 . . . } \left \{ x_{0},x_{1},x_{2}... \right \} {x0,x1,x2...}尽可能稳定。

什么是线性系统?
对于一个函数 y=f(x) 来说,线性性必须要满足两个准则:比例性和叠加性。
1、比例性:对于任意的a,有ay = f(ax)成立;
2、叠加行:若 y1=f(x1), y2=f(x2),则 y1 +y2 =f(x1 + x2)。

什么是二次型?
参考博客:http://t.csdnimg.cn/2GB63
在这里插入图片描述

3、举例说明LQR研究的问题

假设我们要控制的是一个热水器的保温功能,怎么用LQR理解呢?热水器的预设保温温度就是这个系统需要调节的稳定值;每一时刻水的温度就是状态量,用 x k x_{k} xk 表示;加热棒的输出功率就是控制量,用 u k u_{k} uk 表示,很容易用函数表征这个线性系统的状态转移方程(暂时认为它是一个离散型的系统,后面会讨论连续性和离散型):
x k + 1 = A x k + B u k x_{k+1} =Ax_{k} + Bu_{k} xk+1=Axk+Buk
x k + 1 x_{k+1} xk+1代表下一时刻的水温状态, x k x_{k} xk代表当前时刻的水温状态, u k u_{k} uk代表当前时刻的控制量,A、B为系数常量,这个方程也是一个非常经典的状态转移方程。当前时刻和下一时刻要怎么理解?其实不用纠结,这是对真实物理连续化场景的一种离散化表征。为了使这个系统稳定,我们研究的对象肯定不是一个时刻,而是一段时间区间,所以我们要找的是一组控制量 { u 0 , u 1 , u 2 . . . } \left \{ u_{0},u_{1},u_{2}... \right \} {u0,u1,u2...}
那么二次型的代价函数表示为:

J = 1 2 [ x N − x d [ N ] ] S [ x N − x d [ N ] ] + 1 2 ∑ k = 0 N − 1 [ [ x k − x d [ k ] ] Q [ x k − x d [ k ] ] + u k R u k ] J = \frac{1}{2} [x_{N} -x_{d[N]} ]S[x_{N} -x_{d[N]} ] +\frac{1}{2}\sum_{k=0}^{N-1} \left [ [x_{k} -x_{d[k]} ]Q[x_{k} -x_{d[k]} ] + u_{k}Ru_{k} \right ] J=21[xNxd[N]]S[xNxd[N]]+21k=0N1[[xkxd[k]]Q[xkxd[k]]+ukRuk]

x N x_{N} xN代表末时刻的状态量, x d [ N ] x_{d[N]} xd[N]代表末时刻的控制目标, 1 2 [ x N − x d [ N ] ] S [ x N − x d [ N ] ] \frac{1}{2} [x_{N} -x_{d[N]} ]S[x_{N} -x_{d[N]} ] 21[xNxd[N]]S[xNxd[N]]整体代表了末端代价; x k x_{k} xk代表中间过程第k步的状态量, x d [ k ] x_{d[k]} xd[k]代表中间过程第k步的控制目标, [ x k − x d [ k ] ] Q [ x k − x d [ k ] ] [x_{k} -x_{d[k]} ]Q[x_{k} -x_{d[k]} ] [xkxd[k]]Q[xkxd[k]]整体代表了过程代价; u k u_{k} uk代表第k步的控制量, u k R u k u_{k}Ru_{k} ukRuk整体代表了控制代价,越小越好。S,Q,R表示代价系数。那么就是要求出一系列的 { u 0 , u 1 , u 2 . . . } \left \{ u_{0},u_{1},u_{2}... \right \} {u0,u1,u2...},使得J最小即可。

思维发散
实际调节对象的状态量难道只是一维的吗?实际的控制量难道也只是一维的吗?显而易见,他们都有可能是多维的,比如说跟踪一条路径,对于地上的小车来说,至少是一个三维的 x , y , θ x,y, \theta x,y,θ,控制量也不太可能只有一个,我能想到最简单的也包括油门和方向角。对于无人机来说,状态量就更多了。那么这个线性系统的状态转移方程和代价函数应该怎么表征呢?so esay! 用向量表示就行了嘛
状态转移方程:
x k + 1 → = A x k → + B u k → \overrightarrow{x_{k+1}} =A\overrightarrow{{x_{k}}} + B\overrightarrow{u_{k}} xk+1 =Axk +Buk
代价函数:
J = 1 2 [ x N ⃗ − x d [ N ] ⃗ ] T S [ x N ⃗ − x d [ N ] ⃗ ] + 1 2 ∑ k = 0 N − 1 [ [ x k ⃗ − x d [ k ] ⃗ ] T Q [ x k ⃗ − x d [ k ] ⃗ ] + u k ⃗ T R u k ⃗ ] J = \frac{1}{2} {[\vec{x_{N}} -\vec{x_{d[N]}}]^T} S[\vec{x_{N}} -\vec{x_{d[N]}} ] +\frac{1}{2}\sum_{k=0}^{N-1} \left [ [\vec{x_{k}} -\vec{x_{d[k]}} ]^TQ[\vec{x_{k}} -\vec{x_{d[k]} } ] + \vec{u_{k}} ^TR\vec{u_{k}} \right ] J=21[xN xd[N] ]TS[xN xd[N] ]+21k=0N1[[xk xd[k] ]TQ[xk xd[k] ]+uk TRuk ]

如果 x d [ N ] x_{d[N]} xd[N]是一个常量,则研究对象是一个稳定调节问题;
如果 x d [ N ] x_{d[N]} xd[N]变成一条跟踪的路径点集,则研究的是一个路径跟踪问题;

4、纯理论推导过程(离散型系统)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这里为止,推导就完成了,这里其实是一个反向递推的过程,当k=1时,可以求得 F N − 1 F_{N-1} FN1 …当k=n时,可以求得 F 0 F_{0} F0 ,在使用时先推导求出 u ( 0 ) u_{(0)} u(0),然后根据状态转移求得 x ( 1 ) x_{(1)} x(1),再继续求 u ( 1 ) u_{(1)} u(1)…这里大部分运算都是矩阵运算,使用程序计算就非常简单了。

以上过程要是没看懂也没关系,在实际的计算过程中,一般没有这么复杂,只需要记住下面公式能使用即可,总结如下:

在这里插入图片描述
是不是很简单了???

4、连续型系统的推导

很多时候系统状态方程是连续的,要进行离散化,下面会进行说明
在这里插入图片描述

二、实际举例说明

1、经典的弹簧阻尼系统(恢复稳态)

大家请注意,这里推导过程是将连续型系统转化为离散型的系统去计算的。
在这里插入图片描述

在这里插入图片描述

2、路径跟踪问题(以车辆运动学模型为例子)

LQR在机器人领域的控制已经非常成熟了,在搞懂理论的基础是就是套用公式, 核心点是建立车辆的误差模型、线性化、离散化、再去求增益矩阵K就行了,这里我也简单做个推导,欢迎查看。
在这里插入图片描述
在这里插入图片描述

  • 22
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值