LQR

本文主要介绍LQR的直观推导,说明LQR目标函数J选择的直观含义以及简单介绍矩阵Q,R的选取,最后总结LQR控制器的设计步奏,并将其应用在一个简单的倒立摆例子上。      

      假设有一个线性系统能用状态向量的形式表示成:

             

                                   ( 1 )

其中 ,初始条件是. 并且假设这个系统的所有状态变量都是可测量到的。

      在介绍LQR前,先简单回顾一下现代控制理论中最基本的控制器--全状态反馈控制。

      全状态反馈控制系统图形如下:

                 

我们要设计一个状态反馈控制器

             

使得闭环系统能够满足我们期望的性能。我们把这种控制代入之前的系统状态方程得到

                               ( 2 )

对于(1)式的开环系统,由现代控制理论我们知道开环传递函数的极点就是系统矩阵A的特征值。(传递函数的分母是|sI -A|,|·|表示行列式)

现在变成了(2)的闭环形式,状态变换矩阵A变成了(A-BK)。因此通过配置反馈矩阵K,可以使得闭环系统的极点达到我们期望的状态。注意,这种控制器的设计与输出矩阵C,D没有关系。

       那么,什么样的极点会使得系统性能很棒呢?并且,当系统变量很多的时候,即使设计好了极点,矩阵K也不好计算。

       于是,LQR为我们设计最优控制器提供了一种思路。

在设计LQR控制器前,我们得设计一个能量函数,最优的控制轨迹应该使得该能量函数最小。一般选取如下形式的能量函数。

            ,其中Q是你自己设计的半正定矩阵,R为正定矩阵。

可是,为什么能量函数(或称系统的目标函数)得设计成这个样子呢

       首先假设状态向量x(t)是1维的,那么其实就是一个平方项 Qx^2 >= 0,同理. 能量函数J要最小,那么状态向量x(t),u(t)都得小。J最小,那肯定是个有界的函数,我们能推断当t趋于无穷时,状态向量x(t)将趋于0,这也保证了闭环系统的稳定性。那输入u(t)要小是什么意思呢?它意味着我们用最小的控制代价得到最优的控制。譬如控制电机,输入PWM小,将节省能量。

       再来看看矩阵Q,R的选取,一般来说,Q值选得大意味着,要使得J小,那x(t)需要更小,也就是意味着闭环系统的矩阵(A-BK)的特征值处于S平面左边更远的地方,这样状态x(t)就以更快的速度衰减到0。另一方面,大的R表示更加关注输入变量u(t),u(t)的减小,意味着状态衰减将变慢。同时,Q为半正定矩阵意味着他的特征值非负,R为正定矩阵意味着它的特征值为正数。如果你选择Q,R都是对角矩阵的话,那么Q的对角元素为正数,允许出现几个0.R的对角元素只能是正数。

       注意LQR调节器是将状态调节到0,这与轨迹跟踪不同,轨迹跟踪是使得系统误差为0.

        知道了背景后,那如何设计反馈矩阵K使得能量函数J最小呢?很多地方都是从最大值原理,Hamilton函数推导出来。这里用另外一种更容易接受的方式推导。

将u = -Kx 代入之前的能量函数得到:

                        ( 3 )

为了找到K,我们先不防假设存在一个常量矩阵P使得:

                    (4)

代入(3)式得:

                   (5)

注意,我们已经假设闭环系统是稳定的,也就是t趋于无穷时,x(t)趋于0.

现在把(4)式左边的微分展开,并把状态变量x的微分用(2)式替代得到:

                

这个式子要始终成立的话,括号里的项必须恒等于0.

                

这是一个关于K的二次型等式,当然这个二次型是我们不愿看到的,因为计算复杂。现在只要这个等式成立,我们何必不选择K使得两个二次项正好约掉了呢?这样既符合了要求,又简化了计算。

取    代入上式得:

             (6)

K的二次项没有了,可K的取值和P有关,而P是我们假设的一个量,P只要使得的(6)式成立就行了。而(6)式在现代控制理论中极其重要,它就是有名的Riccati 方程。

现在回过头总结下LQR控制器是怎么计算反馈矩阵K的:

       1.选择参数矩阵Q,R

       2.求解Riccati 方程得到矩阵P

       3.计算

再看看LQR的结构图:

             

关于它的应用呢,比较典型的就是倒立摆控制器的设计。

倒立摆的状态变量为,其中p(t)是小车位置,θ是倒立摆的角度。系统结构如程序所示:

  1. A = [0 1 0 0  
  2.      0 0 -1 0  
  3.      0 0 0 1  
  4.      0 0 9 0];  
  5. B = [0;0.1;0;-0.1];  
  6. C = [0 0 1 0];   %观测角度  
  7. D = 0;  
  8.   
  9. Q = [1 0 0 0  
  10.      0 1 0 0  
  11.      0 0 10 0  
  12.      0 0 0 10  
  13.     ];  
  14. R = 0.1;  
  15. %由上面这个系统,可以计算出K  
  16. K = lqr(A,B,Q,R);  
  17. Ac = A - B*K;  
  18. %对系统进行模拟  
  19. x0 = [0.1;0;0.1;0]; %初始状态  
  20. t = 0:0.05:20;  
  21. u = zeros(size(t));  
  22. [y,x]=lsim(Ac,B,C,D,u,t,x0);   
  23. plot(t,y);  
                      

最后看到角度回到0,即平衡位置,控制器起到了作用,你可以选择不同的Q,R进行对比。

       文章为总结性文章,有纰漏,请指出,谢谢。

reference:

1.F.L. Lewis .<< Linear Quadratic Regulator (LQR) State Feedback Design >>

2.http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&section=ControlStateSpace

3.http://ctms.engin.umich.edu/CTMS/index.php?example=InvertedPendulum&section=ControlStateSpace


转载:http://blog.youkuaiyun.com/heyijia0327/article/details/39270597


03-11
<think>嗯,用户问的是关于LQR的问题,也就是线性二次调节器。我需要先确定LQR的基本概念和核心组成部分。LQR是控制理论中的一个重要方法,用于设计状态反馈控制器,优化线性系统的性能。可能需要解释它的数学模型,比如状态方程、代价函数,以及如何求解Riccati方程。 接下来,用户可能需要了解LQR的具体步骤,比如如何建立系统模型,设计代价函数中的Q和R矩阵,以及求解代数Riccati方程得到反馈增益矩阵K。还要提到离散时间和连续时间系统的区别,因为有些资料可能会分开讨论这两种情况。 然后,应用场景也是关键点。用户可能想知道LQR在机器人、无人机、倒立摆等领域的实际应用案例。此外,可能需要比较LQR与其他控制方法如PID、MPC的优缺点,帮助用户理解何时选择LQR。 注意事项部分应该包括如何调整Q和R矩阵的权重,系统可控性的重要性,以及计算时的数值稳定性问题。这些都是实际应用中容易遇到的挑战。 关于代码示例,应该提供Python的实现,比如使用SciPy中的solve_continuous_are函数来求解Riccati方程,并计算反馈矩阵K。代码需要简洁明了,让用户可以直接应用。 最后,相关问题部分需要基于用户的问题和回答内容生成。可能的问题包括LQR与LQG的区别,离散时间系统的LQR实现,如何选择Q和R矩阵,以及处理非线性系统时的扩展方法,比如LQR与MPC的结合或者iLQR。这些问题都是用户深入理解LQR后可能自然产生的疑问。</think>LQR(线性二次调节器)是控制系统中用于设计最优状态反馈控制器的经典方法。其核心在于通过二次型代价函数最小化系统状态和控制输入的加权组合,适用于线性系统的优化控制。 ### LQR基本原理 系统动态模型描述为: $$\dot{x} = Ax + Bu$$ 代价函数定义为: $$J = \int_{0}^{\infty} (x^T Q x + u^T R u) dt$$ 其中$Q$为半正定状态权重矩阵,$R$为正定控制输入权重矩阵。目标是通过求解代数Riccati方程获得最优反馈增益矩阵$K$: $$A^TP + PA - PBR^{-1}B^TP + Q = 0$$ ### 实现步骤 **系统建模** 建立状态空间方程,确定系统矩阵$A$和控制矩阵$B$的维度与参数。对于离散系统需使用差分方程形式。 **权重矩阵设计** 根据控制目标选择$Q$和$R$矩阵: - $Q$对角元素对应各状态变量的权重 - $R$元素反映控制输入的代价 典型初始设置:$Q = diag([q_1,...,q_n])$,$R = diag([r_1,...,r_m])$ **Riccati方程求解** 使用数值方法求解连续代数Riccati方程(CARE): ```python from scipy.linalg import solve_continuous_are P = solve_continuous_are(A, B, Q, R) K = np.linalg.inv(R) @ B.T @ P ``` **控制器实现** 将反馈增益矩阵$K$应用于闭环系统: $$u = -Kx$$ 该控制律保证系统在平衡点处的渐进稳定性。 ### 应用场景 - 机器人姿态控制 - 无人机轨迹跟踪 - 倒立摆平衡控制 - 电力系统频率调节 ### 注意事项 1. 系统必须满足可控性条件 2. $Q$矩阵需至少包含所有需要调节的状态量 3. 权重比$Q/R$决定响应速度与能耗的平衡 4. 数值计算需保证矩阵条件数良好 ```matlab % MATLAB实现示例 [K,~,~] = lqr(A,B,Q,R); sys_cl = ss(A-B*K, B, C, D); ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值