【运动控制】线性二次型最优控制(LQR)

1.算法思想

对一个受控系统,从一类允许的控制方案中找出一个最优的方案,使系统由初始状态转移到目标状态的同时某个特定的性能指标为最优。

在运动方程和允许控制范围的约束下,对以控制函数和运动状态为变量的性能指标函数求极值。

2.算法原理

车辆运动学方程

参考轨迹时间/距离最近点𝑥𝑟,𝑦𝑟,𝜑𝑟,𝛿𝑟泰勒展开线性化 + 离散化处理

性能指标函数

最优控制律

 式中,P为黎卡提方程的解,可以循环迭代求解(补充:迭代初值取Q,可同时设置最大迭代次数)。

3.算法调参

1.状态加权系数矩阵Q影响状态偏差累计大小,半正定,常取对角阵;

2.控制加权系数矩阵R影响控制能量损耗,正定且对称,常取对角阵;

3.Q阵横摆角误差系数为横向位置误差系数的阻尼项。

4.个人理解

1.优点:有显示解,工程应用简单;

2.稳定性分析:被控对象状态完全可观可控、Q可分解为Q=𝑆𝑇S,𝐴,𝑆可观,则最优控制存在,闭环系统渐进稳定;

3.纵向位置误差为快变量,横向位置误差为慢变量,故Q阵中Q(1,1)、Q(2,2)的值应分别设计,并随车辆航向角自适应调整实现全向运动的控制品质最优化。

5.实现

...

 6.视频分享

7.相关论文

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的线性二次型最优控制的MATLAB代码示例: 首先,我们需要定义系统的动态方程和控制输入方程。在这个例子中,我们使用一个简单的二阶系统: ``` % 系统参数 m = 1; k = 1; % 系统动态方程 A = [0 1; -k/m 0]; B = [0; 1/m]; ``` 接下来,我们需要定义成本函数。在这个例子中,我们使用一个标准的二次型成本函数: ``` % 成本函数参数 Q = [1 0; 0 1]; R = 1; % 成本函数 cost = @(x, u) x'*Q*x + u'*R*u; ``` 接着,我们需要定义时间离散化的步长和仿真的时间长度: ``` % 时间离散化步长 dt = 0.1; % 仿真时间长度 T = 10; ``` 然后,我们可以使用线性二次型最优控制器来计算最优控制输入: ``` % 求解最优控制输入 [t, x, u] = lqr_sim(A, B, cost, dt, T); ``` 最后,我们可以绘制系统状态和控制输入随时间的变化曲线: ``` % 绘图 figure; subplot(2, 1, 1); plot(t, x(1, :)); hold on; plot(t, x(2, :)); ylabel('States'); legend('x', 'v'); subplot(2, 1, 2); plot(t, u); ylabel('Control input'); xlabel('Time'); ``` 完整的代码如下所示: ``` % 系统参数 m = 1; k = 1; % 系统动态方程 A = [0 1; -k/m 0]; B = [0; 1/m]; % 成本函数参数 Q = [1 0; 0 1]; R = 1; % 成本函数 cost = @(x, u) x'*Q*x + u'*R*u; % 时间离散化步长 dt = 0.1; % 仿真时间长度 T = 10; % 求解最优控制输入 [t, x, u] = lqr_sim(A, B, cost, dt, T); % 绘图 figure; subplot(2, 1, 1); plot(t, x(1, :)); hold on; plot(t, x(2, :)); ylabel('States'); legend('x', 'v'); subplot(2, 1, 2); plot(t, u); ylabel('Control input'); xlabel('Time'); ``` 需要注意的是,这个示例只是一个简单的例子,实际应用中需要根据具体的系统和成本函数进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值