LQR算法用法介绍(跳出课本看LQR控制)

一、LQR算法介绍

线性二次调节(LQR算法是一种广泛使用的控制器设计方法。它可以使状态变量趋向于零,同时确保控制输入在规定的范围内。LQR是一个优秀的控制器设计方法,因为它的高效性和卓越的性能,应用于工业、机器人控制、能源系统控制等领域。

二、LQR算法原理

LQR算法的基本思想是,设计一个线性反馈控制器,使得系统的性能指标(如能量消耗或轨迹跟踪误差)最小化。这些性能指标通常被表示为代价函数或成本函数,它们量化系统行为的响应。

LQR算法的数学原理在于寻找一个最优的线性反馈控制器矩阵,使得系统的状态最小化。与传统的最小二乘法不同,LQR算法考虑的是系统状态的方差、协方差矩阵,并且将加权控制器的方差和状态方差加权结合为代价函数(cost function)进行优化。

三、LQR算法实现步骤

1. 建立系统模型

在应用LQR算法之前,需要先建立系统的状态空间模型。通常,系统的状态空间模型可以用以下形式表示:

ẋ = Ax + Bu
y = Cx + Du

其中,x是状态向量,u是输入向量,y是输出向量,A,B,C,D是常数矩阵。

2. 定义性能指标

接下来,我们需要定义代价函数J,用于量化控制器性能。代价函数通常采用二次形式表示,如下:

J = ∫[0,∞] (xTQx + uTRu) dt

其中Q和R都是正定半矩阵。代价函数值越小,表示控制器的性能越好,反之亦然。

3. 构造LQR控制器矩阵

为了最小化代价函数,需要找到最优的K矩阵。LQR算法可以通过Riccati方程得到最优的反馈增益矩阵K,如下:

P = ATPA - ATPB(R + BTPB)-1BTPA + Q
K = -(R + BTPB)-1BTPA

其中,P是代价函数的值得到的正定半矩阵。K是最优的反馈增益矩阵,它可以通过对P的解析表达式求解得到。一旦得到了K,我们就可以构造控制器矩阵,如下:

u = -Kx

4. 实现LQR控制器

最后,我们将LQR控制器矩阵应用于系统,实现所需的控制效果。控制器可以通过对状态变量进行反馈来控制系统。例如,在单个机器人的情况下,我们可以通过机器人位置和速度来控制它的运动。在控制器中,反馈增益矩阵K相当于权重或平衡因子,帮助我们管理控制器的输出,以达到所需的控制效果。

四、示例代码

1. 建立系统模型

import numpy as np

# 定义状态空间模型:
def system_dynamics(t, x, u):

    # 参数
    m = 1.0
    k = 1.0
    b = 0.5
    
    # 状态空间矩阵    
    A = np.array([[0.0, 1.0], [-k/m, -b/m]])
    B = np.array([[0.0], [1/m]])

    x_dot = np.dot(A, x) + np.dot(B, u)

    return x_dot

# 定义初始状态和控制输入
x0 = np.array([[1], [0]])
u = np.array([[-1]])

2. 定义性能指标

# 定义代价函数
Q = np.array([[1.0, 0.0], [0.0, 1.0]])
R = np.array([[0.5]])

def cost_function(x, u):
    return np.dot(np.dot(x.T, Q), x) + np.dot(np.dot(u.T, R), u)

3. 构造LQR控制器矩阵

# 计算P
from scipy.linalg import solve_continuous_are

P = np.array([[ 4.95, -0.12], [-0.12,  1.07]])
 
# 计算K
B = np.array([[0.0], [1/m]])

K = np.dot(-np.linalg.inv(R + np.dot(np.dot(B.T, P), B)), np.dot(np.dot(B.T, P), A))

4. 实现LQR控制器

# 应用LQR控制器,控制机器人
t_sim = np.linspace(0, 5)
data = []

for t in t_sim:
    
    u = np.dot(K, x0)
    x_dot = system_dynamics(t, x0, u)
    x0 = x0 + x_dot * 0.1

    data.append(np.hstack((x0, u)))

五、小结

LQR算法是一种常用的控制器设计方法,它可以使系统变量趋向于零,并控制输入在规定的范围内。LQR算法的实现需要步骤的构建系统模型、定义性能指标、构造LQR控制器矩阵、实现LQR控制器。通过这些步骤,我们可以根据应用的要求来设计具有高效性和卓越性能的控制器。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平