自动驾驶(七十二)---------LQR控制算法

        之前有写过MPC的控制算法,主要介绍的也是理论部分,在实际使用过程中发现C++没有高效的优化方法,类似python中的cvxpy的库,所以想绕过去,研究一下LQR控制算法。

1. 控制系统

        这里我们先介绍常用的控制系统逻辑:

                                      在这里插入图片描述

        假设我们现在状态是x0,我们有状态方程 :                 (u为控制矩阵)

        特别的,这里我们是对偏差建立方程,x是偏差的状态,优化的目的是x=0,针对我们通过一些假设可以得到详细的方程,这里我直接先给出其中,  

                     

        详细的推导有兴趣可以看最后。

        再假设有一个反馈控制器:                 这里很重要,可以认为是当前的控制量是通过当前的状态量计算出来的

        通过这套方法,我们就能得到一个稳定的系统 :  

        当然这是基本的理论,再进一步,我们就会思考,通过这些控制量作为自变量,再设计一个代价函数,来优化这些控制量?

2. LQR控制算法

        讲到这里就很自然引出LQR了,首先的问题代价函数是什么?一方面我们希望系统达到稳定状态,及偏差最小; 另一方面我们希望控制量较小,即付出较小的代价达到我们的目的。这里我直接给出:

                                                            

         其中x为状态量,u为控制量,Q为状态权重矩阵,R为控制权重矩阵。

          特别的x和u中取值有正有负,所以需要平方和最小,在矩阵中没有平方,这里我们采用转置乘以本身的做法模拟矩阵的平方,如x^T*x 。这里状态量x和控制量u都是多维向量,上式计算的结果是一个标量。

          其实我们可以把看作是的多维扩展表达式,这里我们需要Q为半正定,就是希望Q能起到a≥0的效果,R为正定矩阵就是希望矩阵R能够起到a>0的效果。

          一般的我们认为状态量x为:横向偏差、横向变化率、角度偏差、角度变化率。Q为我们提前标定的对角矩阵,标定值对应以上不同维度的权重,也可以为非对角矩阵,考虑不同维度之间的相互关系。

         控制向量u为:前轮转角、加速度。同样的R也为提前标定的对角矩阵。也可以考虑相互关系。

         我的理解是Q11选取较大的值,会让x1很快到0;另外一方面,加大R的值,会使得对应的控制量减小,控制器执行更少的动作,意味着系统的状态衰减将变慢。所以要综合看具体的实际应用场景来调节,鱼和熊掌不可兼得。建议在不同场景下采用不同的参数。

3. 公式求解

         有了上面的优化目标后,就是如何求解最优的控制量了。下面我们先进行一些转换:

          1. 将u=−Kx代入代价函数后:  ,u=−Kx即我们认为当前的控制量可以通过当前的状态量计算出来。如果我们能计算出-K就很简单了,可以直接套出控制量。

          2. 假设纯在一个常量矩阵P使得,  ,这里就直接这么假设,接着往下看,有需要深入的同学可以看后面详细推导,总之,在等式成立的情况下,J取最小值,达到我们的优化目标。

          3. 把上式代入得到:               

          4. 把2中的方程微分展开:

          5. 状态变量x的微分用式表示: 

               整理得到:

               通过矩阵得知上式要想有解只有中间部分为零,即:

           6. 把 代入上式:

                整理得到: 

            7. 这里我们再令      这里需要思考一下,为什么可以这样假设,凑出结果?为了不增加复杂度,把这里的推导我放在最后,感兴趣的朋友可以继续研究。总之 在上面等式成立的情况下,可以得到

                 代入:

                  整理得到: ,得到这一步就很简单了,式中A、B、Q、R都是已知量,很容易就能计算出P的结果。

             8. 计算出P再通过就可以计算出K,也就是达到了我们一开始的目标,轻松得到当前的控制量。

4. MPC与LQR比较

          首先,LQR的研究对象是现代控制理论中的状态空间方程给出的线性系统,而MPC的研究对象可以是线性系统,也可以是非线性系统。不过现在很多的做法都是将非线性系统线性化,然后进行相关计算,具体要根据自己的工程情况来确定哪种方式比较好,比如之前做MPC的时候,线控车底层速度控制接口就是加速度,那就没必要根据IMU再套嵌个一层PID。

          其次,既然是优化问题,那就离不开目标函数的设计,LQR的目标函数在上面已经有描述,MPC的目标函数,多数都是多个优化目标乘以不同权重然后求和的方式。虽然方式不同,不过都是对达到控制目标的代价累计。

          最后,工作时域上的不同,LQR的计算针对同一工作时域,在一个控制周期内,LQR只计算一次,并将此次计算出的最优解下发给控制器即可;而MPC是滚动优化的,计算未来一段时间内,每个采样周期都会经过计算,得出一组控制序列,但是只将第一个控制值下发给控制器。

        对于LQR所有的理论部分都介绍完毕,下面是之前的一些公司推导部分,有兴趣的可以阅读:

1. 运动学模型的推导

        根据车辆的二自由度动力学模型 : 

        在小角度偏角的情况下有,轮胎的侧向力与轮胎的偏离角成正比. ,分别为前、后轮的侧偏刚度:

         (3)在小角度的情况下有 所以有(4)

        因此上述车辆的动力学模型可以简化写成(5)

           (6)期望横摆角角速度    ;

            横摆角角度偏差; 

            横向偏差变化率求导数;

             (8)横向偏差变化率

              车辆模型的连续状态空间方程  

            状态变量X的选择分别为横向偏差、横向偏差变化率,横摆角角度偏差,横摆角角度偏差变化率。控制量u为前轮偏角。

           选择合适的状态变量后得到A,B,B1,B2矩阵分别如下

                   

              由于只对横摆角角度偏差变化率的导数产生影响,在横向控制中主要是控制横向偏差、横向偏差变化率,横摆角角度偏差,横摆角角度偏差变化率,因而忽略了公式中项。车辆系统的状态空间方程表示为 (10)        

2. 最优化目标的等价条件

         首先控制理论是一门学科,我建议其他专业同学,直接使用以上的结论,如果你非要想完全理解,你需要具备以下知识:泛函极值、哈密尔顿方程、正则方程、无约束条件泛函、变分法、拉格朗日方程、黎卡提微分方程、控制域、欧拉方程、等周长积分方程......等等知识点。如果说你都具备,欢迎你往下看,不然你还是多看几遍上面把。

         1. 对于的最小化问题,

3.对于 的推导

         在前面的公式中,我们假设,到底这部分假设有没有数学推导呢?

         回到之前的公式:           ,

         同时我们知道R是正定对称矩阵,则一定存在一个矩阵M使得:,因为R的每一项大于零,M也为对角矩阵,数字为其平方根。

         代入R得到:

  • 67
    点赞
  • 543
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答1: MIMO系统是指多输入多输出的控制系统,通常需要进行输入输出-状态反馈解耦来降低系统的复杂度和提高控制效果。这种解耦方法可以将MIMO系统分解成若干个SISO系统,从而可以分别对每个SISO系统进行设计和控制。 Matlab是一款强大的工具箱,可以用于MIMO系统输入输出-状态反馈解耦的设计和模拟。在Matlab中,可以使用多种工具和算法对MIMO系统模型进行分解和控制,例如利用最小二乘法将系统分解成一组独立的SISO系统,并使用状态反馈和输出反馈控制器对每个SISO系统进行设计。 MIMO系统输入输出-状态反馈解耦的核心思想是在控制器中引入动态反馈,通过将输出变量作为状态量来辅助设计控制器。这种方法可以显著提高系统的响应速度和鲁棒性,从而实现更高效、更稳定的控制。 总之,利用Matlab进行MIMO系统输入输出-状态反馈解耦的设计和模拟是一种很有效的方法。通过这种方法,可以将复杂的MIMO系统分解为若干个SISO系统,对每个系统分别进行设计和控制,从而提高系统的控制效果和稳定性。 ### 回答2: MIMO输入输出-状态反馈解耦控制是一种多变量控制方法,可以有效地将多个输入和输出变量进行分离控制。此方法利用状态反馈控制器通过将系统状态转换为控制变量,从而实现对系统的控制。该方法在MATLAB中可以实现。 首先,需要针对多变量系统建立状态空间模型,并将其转化为矩阵形式。接着,可以使用MATLAB中的sys纯状态空间对象,将状态空间模型系数存储在其中。接下来,设计状态反馈控制器,并根据实际情况选择合适的控制器增益。 在MATLAB中,需要使用lqr函数来计算状态反馈控制器增益。该函数需要输入系统的状态空间模型、状态反馈矩阵以及权重矩阵等参数,可以计算出最优的状态反馈增益矩阵。 在得到状态反馈控制器增益矩阵后,可以使用MATLAB中的反馈函数来实现控制系统的闭环控制。根据实际情况,可以选择不同的反馈模型,如内部反馈、中间反馈和外部反馈等。 最后,需要进行仿真和实验验证,评估控制系统的性能和稳定性。可以使用MATLAB中的simulink模块来建立控制系统仿真模型,并通过matlab与实验平台进行联动,实现实时控制。同时,还可以通过调整参数等方法来进一步优化控制系统的性能。 总之,MIMO输入输出-状态反馈解耦控制在MATLAB中的实现需要建立状态空间模型、设计状态反馈控制器、计算和应用增益矩阵以及进行仿真和实验验证等步骤,可以实现对多变量系统的高效控制。 ### 回答3: MIMO输入输出-状态反馈解耦是在多输入多输出系统中,通过控制输入输出和状态变量之间的依赖关系,来达到解耦的目的,从而提高系统的控制性能。在Matlab中,可以利用系统提供的控制工具箱实现MIMO输入输出-状态反馈解耦。 首先,需要确定系统的状态空间模型,即系统的状态变量、输入和输出之间的关系式,可以通过输入系统的传递函数或状态空间矩阵转换得到。接着,利用Matlab的控制工具箱中的函数,如ss、tf等,将系统模型转换为状态空间模型,然后使用statefbk函数来进行MIMO输入输出-状态反馈解耦的设计。 在设计过程中,需要考虑到输入输出之间以及状态变量之间的交叉耦合,以及设计反馈控制器的增益矩阵,以达到系统的性能指标。同时,还需要注意设计反馈控制器的稳定性和可实现性。 最后,利用Matlab中的sim函数来进行模拟仿真和验证设计的有效性。可以通过改变系统的参数和输入来观察系统的响应,从而优化设计,并寻找最佳的控制方案。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值