LQR算法核心思想

本章以倒立摆为解决目的

什么是线性二次型控制器(LQR)

开环系统

状态变量的倒数 = 系统的状态空间矩阵A * 系统状态变量x

A状态矩阵:描述系统本身物理特性的一个矩阵,它是由系统本身的机械结构、物理结构决定的,无法改变。

系统状态变量x:用四个变量描述了倒立摆整个系统的运动状态

闭环系统:

B状态矩阵也是由系统本身的物理特性决定的。

u就是反馈项,u = - kx

由于这个式子

整个闭环算法中最重要的就是求出最佳的K,来使得系统稳定。

如何求最优K是核心问题,LQR实际上提供了求解最优K的方法

通过代价函数来求K

可以看到里面还有Q和R,这两个与系统的收敛有关。

Q是系统状态变量的权重,也叫权重矩阵

根据这个来看,比如Q11就是倒立摆角度的权重,Q22就是角速度的权重,Q33就是飞轮角度的权重、Q44就是飞轮角速度的权重。

如果希望道理摆角度收敛的更快(更快稳定),可以给Q11的权重增加

R的话,可以理解为决定系统输出量大小的项。一般而言R都设为1,不去改变它。

结合这两个式子

R越大,u的输出越小;R越小,u的输出越大。

一句话,要想求出K,就需要A矩阵、B矩阵、Q矩阵、R矩阵(一般为1)

其实只需要三个

A矩阵和B矩阵得通过建模得到!!!

物理建模 --- 建立动力学模型(为了A矩阵和B矩阵

这个是动量轮动力摆系统,可以用牛顿第二定律来分析力,但是我们用更常用的求法

利用拉格朗日方程:

因为拉格朗日方程不需要列出系统具体的力是怎样平衡的

它只需要列出系统的动能减去势能得到算子,然后争对这个算子对系统不同的广义坐标求偏导,最后得到系统的广义力

通过图可分析:

这个θ是摆杆的摆角

这个φ是动量轮自身的转动角度

有两个广义坐标就可以列出两个拉格朗日方程

这个是θ的导数,偏导。同理φ。

我们开始详细讲

MATLAB

求A、B矩阵

可以看到Q阵把第三项的权重设小

最后求出K,

由于是通过电压来控制电机的力矩,电压总不可能去到300多,所以应该适当缩放

从结果也能看出第三项小到可以忽略不计。 

 

看最核心的代码:

 

### 回答1: LQR(Linear Quadratic Regulator)控制算法是一种广泛应用于控制系统设计的经典控制算法。该算法通过最小化系统状态的二次性能指标来设计控制器,在满足系统稳定性的前提下,实现对系统的最佳控制。 LQR控制算法的Matlab代码如下所示: ```Matlab % 定义系统的状态空间表示 A = [1, 1; 0, 1]; % 系统的状态转移矩阵 B = [0; 1]; % 输入矩阵 C = [1, 0]; % 输出矩阵 D = 0; % 前馈矩阵 % 定义系统的权重矩阵 Q = [1, 0; 0, 1]; % 状态误差的权重矩阵 R = 1; % 控制输入的权重矩阵 % 使用lqr函数计算最优控制器增益矩阵 K = lqr(A, B, Q, R); % 定义系统初始状态和目标状态 x0 = [0; 0]; % 初始状态 x_des = [1; 0]; % 目标状态 % 定义控制器输出 u = -K * (x - x_des); % 计算控制输入 % 使用ode45函数模拟系统响应 [t, x] = ode45(@(t, x) (A - B * K) * x, tspan, x0); % 绘制系统的状态响应曲线 plot(t, x(:, 1), 'r', t, x(:, 2), 'b'); xlabel('时间'); ylabel('系统状态'); legend('状态1', '状态2'); ``` 以上代码中,我们首先定义系统的状态空间表示,并根据系统的权重矩阵定义目标控制性能。然后使用lqr函数计算最优控制器增益矩阵K。接着我们定义系统的初始状态和目标状态,并通过计算控制器输出来实现对系统的最佳控制。最后使用ode45函数模拟系统的状态响应,并绘制系统状态的变化曲线。 ### 回答2: LQR(线性二次调节)控制算法是一种广泛应用于控制系统设计中的优化控制方法。其基本思想是通过设计一个最优的状态反馈控制器来使得系统满足一定的性能指标。 在Matlab中,可以使用控制工具箱中的lqr函数来实现LQR控制算法。下面是lqr函数的基本使用方法: ```matlab % 定义系统的状态方程 A = [A1, A2, ..., An]; B = [B1, B2, ..., Bn]; C = [C1, C2, ..., Cn]; D = [D1, D2, ..., Dn]; sys = ss(A, B, C, D); % 定义LQR控制器的权重矩阵 Q = [Q1, Q2, ..., Qn]; R = [R1, R2, ..., Rm]; % 计算LQR增益矩阵K K = lqr(sys, Q, R); % 将LQR增益矩阵K应用于系统 sys_with_control = ss(A - B * K, B, C, D); % 模拟系统的响应 t = 0:dt:T; % 时间向量,dt为采样时间步长,T为总仿真时间 u = ...; % 输入信号向量 [y, t, x] = lsim(sys_with_control, u, t, x0); % 绘制系统的响应曲线 plot(t, y); xlabel('时间'); ylabel('输出'); title('系统响应'); ``` 在代码中,需要首先定义系统的状态方程,即A、B、C和D矩阵。然后,通过选择合适的权重矩阵Q和R,利用lqr函数计算出最优的LQR增益矩阵K。将该增益矩阵应用于系统后,可以使用lsim函数模拟系统的响应,并通过plot函数绘制出输出的响应曲线。 需要注意的是,在使用LQR控制算法时,权重矩阵Q和R的选择对于控制效果非常重要。可以通过调整权重矩阵来实现对系统性能的不同要求,例如快速响应、稳定性等。 总之,通过以上的Matlab代码,可以实现LQR控制算法,并对系统进行优化控制。具体的参数和权重矩阵的选择需要根据具体的控制系统进行调整。 ### 回答3: LQR(Linear Quadratic Regulator)控制算法是一种优化控制算法,通过调整控制器的参数来最小化系统状态和控制输入之间的误差。其基本思想是基于线性系统模型,使用二次代价函数来定义系统的性能评估指标,并通过最小化这个指标来设计控制器。 LQR控制算法的核心是利用系统的状态空间模型和增广控制器来构建一个代价函数,然后通过求解代价函数的最小值问题来确定最优的控制器参数。这个最小值问题可以通过Riccati方程的求解来实现。 在MATLAB中,可以利用控制系统工具箱提供的lqr()函数来实现LQR控制器的设计。该函数的基本语法如下: [K, S, E] = lqr(A, B, Q, R) 其中,A和B分别为系统的状态空间模型的矩阵形式,Q和R是用户定义的代价权重矩阵。 函数的输出结果有三个,K为最优控制器的增益矩阵,S为Riccati方程的解,E为系统特征值的向量。 具体步骤如下: 1. 定义系统的状态空间模型矩阵A和B,以及代价权重矩阵Q和R; 2. 调用lqr()函数,输入参数为A、B、Q和R; 3. 获取输出的最优控制器增益矩阵K、Riccati方程的解S和系统特征值的向量E; 4. 将K作为闭环控制器的增益矩阵,实现对系统的控制。 总结而言,LQR控制算法可以通过MATLAB中的lqr()函数来实现,具体步骤包括定义系统的状态空间模型和代价权重矩阵,然后通过函数调用获取最优控制器的增益矩阵和解。最后,将增益矩阵应用于闭环控制系统中,实现对系统的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值