自动驾驶控制算法——LQR控制算法

发布于:2025-08-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

自动驾驶控制算法——LQR控制算法

文章目录

一、LQR 是什么?

Linear Quadratic Regulator(线性二次型调节器,简称 LQR)是一类基于状态反馈的最优控制算法
它针对“线性系统 + 二次型代价函数”这对经典组合,自动给出一组最优反馈增益,从而在误差最小化控制能量最小化之间取得全局最优折中。
在自动驾驶中,LQR 被广泛用于横向/纵向轨迹跟踪、车道保持(LKA)、稳定性控制(VSC)、智能底盘协同控制等场景,兼具实时性多变量耦合处理能力理论最优性

二、LQR 原理

2.1 线性状态空间模型 (State–Space Model)

对连续时间系统,令

x ˙ ( t ) = A   x ( t ) + B   u ( t ) \dot{x}(t)=A\,x(t)+B\,u(t) x˙(t)=Ax(t)+Bu(t)

  • x ( t ) ∈ R n x(t)\in\mathbb{R}^n x(t)Rn:状态向量(位置、姿态、速度、误差等)
  • u ( t ) ∈ R m u(t)\in\mathbb{R}^m u(t)Rm:控制输出(转向角、驱动力、制动力等)
  • A A A B B B:系统动力学矩阵(可由自行车模型、三自由度模型或实验辨识而得)

离散时间版本(采样周期 Δ t \Delta t Δt)同理:

x k + 1 = A d   x k + B d   u k x_{k+1}=A_d\,x_k+B_d\,u_k xk+1=Adxk+Bduk

2.2 二次型性能指标 J J J

设计目标:在 t ∈ [ 0 , ∞ ) t\in[0,\infty) t[0,) 内最小化

J = ∫ 0 ∞  ⁣ ( x T ( t ) Q x ( t ) + u T ( t ) R u ( t ) )   d t J=\int_{0}^{\infty}\!\bigl(x^{\mathrm T}(t)Qx(t)+u^{\mathrm T}(t)Ru(t)\bigr)\,dt J=0(xT(t)Qx(t)+uT(t)Ru(t))dt

记号 物理含义 工程调节思路
Q ⪰ 0 Q\succeq0 Q0 状态加权矩阵:惩罚偏离参考轨迹 误差越关键,赋值越大
R ≻ 0 R\succ0 R0 控制加权矩阵:惩罚控制能耗/激烈度 不希望频繁/剧烈操舵就增大 R R R

2.3 代数黎卡提方程 (ARE)

最优解存在唯一正定矩阵 P P P,满足

A T P + P A − P B R − 1 B T P + Q = 0 A^{\mathrm T}P+PA-PBR^{-1}B^{\mathrm T}P+Q=0 ATP+PAPBR1BTP+Q=0

得到最优反馈增益

K = R − 1 B T P ⟹ u ( t ) = − K   x ( t ) K=R^{-1}B^{\mathrm T}P \quad\Longrightarrow\quad u(t)=-K\,x(t) K=R1BTPu(t)=Kx(t)

2.4 特点总结

  1. 最优性:对给定 A , B , Q , R A,B,Q,R A,B,Q,R 全局最优;无局部极值困扰。
  2. 多变量耦合:一次性考虑所有状态与输入,天然处理耦合。
  3. 实时性高:上线前离线求 K K K,在线只需矩阵乘法。
  4. 线性假设:需在工作点线性化;大幅偏离或强非线性场景下效果下降。
  5. 无显式约束:不直接处理饱和与障碍,需要配合限幅或外层规划器。

2.5 一句话总结 LQR 原理:

LQR 就像一个“聪明的爸爸”,手里拽着你(小孩)一根绳子,在奔跑中努力让你既不跑偏,又不会猛拉你太用力。


2.5.1 场景类比:小孩牵绳跑步

假设你(小孩)在一个广场上跑步,有一个目标路线(比如一条蓝色的直线轨迹),你爸(控制器)拽着你一根弹力绳,任务是让你尽量沿着这条轨迹跑。你爸不能直接控制你,但可以通过拉扯绳子的方式调整你的方向。

现在他面临两个问题:

  1. 你偏离轨迹越多(状态误差大),他就想越用力拉你回来
  2. 但用力过猛你会摔倒(控制动作大 → 不舒适),他也不想那样

于是他就想着:

“我要最优地拉这根绳子,让我家孩子既快速回到轨迹,又不至于每次都摔个大跟头。”

这时候他脑子里其实就运行着一个 LQR 控制器


2.5.2 数学意义下的类比映射:
生活场景 控制系统术语
你的位置与方向 状态向量 x ( t ) x(t) x(t)
你爸的拉力 控制输入 u ( t ) u(t) u(t)
你和轨迹的偏离 状态误差(需要惩罚)
拉绳子的幅度大小 控制开销(也要惩罚)
你爸的聪明程度 增益矩阵 K K K,控制律 u = − K x u = -Kx u=Kx
怎么权衡纠偏 vs 用力 惩罚矩阵 Q , R Q, R Q,R,定义什么是“好”
目标 让总代价函数 J J J 最小(偏差小 + 控制平滑)
2.5.3 更直白一点的解释:

LQR 的工作流程可以理解为以下四步:

① 系统动态是什么?

你是个小车,你能跑、能转弯,爸爸知道你每跑一步、每拐一个弯,会跑到什么位置 → 系统模型:

x ˙ ( t ) = A x ( t ) + B u ( t ) \dot{x}(t) = A x(t) + B u(t) x˙(t)=Ax(t)+Bu(t)


② 什么样的轨迹才叫“好”?

当然是既偏差小,又别太用力操控你

J = ∫ 0 ∞ [ x T Q x + u T R u ] d t J = \int_0^\infty \left[ x^T Q x + u^T R u \right] dt J=0[xTQx+uTRu]dt偏差太大 x T Q x x^T Q x xTQx 会被罚

  • 控制太猛 u T R u u^T R u uTRu也要罚
  • 怎么罚?用矩阵 Q , R Q, R Q,R 来定义,自己调!

③ 怎么做才最优?

解一个叫“黎卡提方程”的东西,得到一个增益 K K K,然后只要你一偏离,控制器就自动拉回:

u ( t ) = − K x ( t ) u(t) = -K x(t) u(t)=Kx(t)

这个反馈矩阵 K K K 就是控制器的“聪明劲儿”。


④ 最终结果如何?
  • 如果你设计得好,系统运行起来就像小车沿轨道平稳前进,轻松纠偏
  • 如果你太注重精度( Q Q Q太大),控制器可能疯狂操作
  • 如果你太怕费力( R R R太大),小车就变得慵懒、不追轨了

🖼️ 图像化理解你可以把 LQR 理解为:“我告诉系统什么是‘好’,它就自己计算出‘怎么做’”。

在这里插入图片描述


总结关键思想
关键词 意义
误差反馈 LQR 直接用当前误差状态来反馈控制
最优折中 不只纠错,还要代价最小
增益矩阵 控制器的大脑,自动学会怎么拉得最好
提前离线求解 控制器上线后实时快如闪电(仅乘法)

2.6 案例分析 —— 车辆轨迹跟踪

2.6.1 任务介绍
  • 目标:让车辆以 15 m/s 的恒速精准沿参考曲线(S 形)行驶,最小化横向误差 e y e_y ey 和航向误差 e ψ e_\psi eψ
  • 模型:采用简化自行车模型并在小角度、恒速条件下线性化。
2.6.2 控制流程
  1. 实时感知车辆位置与姿态 → 计算误差向量 x = [ e y ,   e ˙ y ,   e ψ ,   e ˙ ψ ] T x=[e_y,\,\dot e_y,\,e_\psi,\,\dot e_\psi]^{\mathrm T} x=[ey,e˙y,eψ,e˙ψ]T

  2. 状态反馈:控制器输出前轮转角

    δ = − K x \delta=-Kx δ=Kx

  3. 车辆执行 → 新状态回馈 → 进入下一控制周期。

2.6.3 参数调优现象观察
  • 增大 Q ( e y , e ψ ) Q_{(e_y,e_\psi)} Q(ey,eψ):曲线跟随更紧,响应更快,但控制动作更激进,可能出现抖动。
  • 增大 R:转向更平滑、舒适,跟踪误差增大,可能在急弯处外偏。
  • 平衡策略:先用 Bryson’s Rule 给初值,再基于仿真/现场试验迭代微调。
2.6.4 不同 Q/R 组合的典型效果
方案 Q(diag) R 稳态误差 峰值转角 舒适性 评述
A [ 10 , 1 , 10 , 1 ] [10,1,10,1] [10,1,10,1] 0.1 0.05 m 3.2° ★★☆ 误差小,操舵略频繁
B [ 2 , 0.5 , 2 , 0.5 ] [2,0.5,2,0.5] [2,0.5,2,0.5] 1.0 0.15 m 1.1° ★★★ 舒适度佳,误差可接受
C [ 20 , 2 , 20 , 2 ] [20,2,20,2] [20,2,20,2] 0.05 0.02 m 5.5° ★☆☆ 极致精度,易饱和

在这里插入图片描述

图中红色曲线展示了在**非线性车辆模型(Kinematic Bicycle Model)**下,LQR 控制器如何调整前轮转角,使车辆从偏离状态逐步回到并跟踪 S 型参考轨迹(黑色虚线)。

这说明即使模型是非线性的,基于线性近似设计的 LQR 控制器也能取得良好的控制效果,尤其在中等速度、路径曲率适中的场景下非常适用。

2.7 LQR 参数解读

2.7.1 常用术语
术语 含义
P P P 黎卡提方程解,衡量未来代价的“势能”
K K K 状态反馈增益矩阵
Closed-Loop Poles 闭环特征值,决定响应快慢与稳定性
2.7.2 权重矩阵 Q , R Q,R Q,R对性能的影响
  • Q Q Q / 小 R R R:强调跟踪精度 → 响应快、可能过冲。
  • Q Q Q / 大 R R R:强调控制平滑 → 误差大、舒适性高。
2.7.3 关键性能指标
  • 稳态误差
  • 超调量 / 峰值转角
  • 90% 调整时间
  • 控制能量 ∫ u 2 d t \int u^2 dt u2dt
2.7.4 计算与信号流程图

感知 → 计算状态误差 → LQR 内核(读 K K K 表 → 乘以 − K K K)→ 输出控制 → 车辆执行 → 反馈环。 (工程实现中常封装成 ROS 控制节点或嵌入式任务)

2.7.5 典型作用总结
  • 紧急避障前提供平稳高精度跟踪。
  • 可作为 MPC 的终端控制器或非线性控制器的局部线性近似补偿器
  • 低速或大曲率场景下,可结合速度规划降低侧向加速度峰值。
2.7.6 设计准则与物理量对应关系
物理量/需求 建议权重调整
横向误差 ≤ 0.1 m 提高 Q e y Q_{e_y} Qey
航向误差 ≤ 0.5° 提高 Q e ψ Q_{e_\psi} Qeψ
乘坐舒适度 提高 R R R 以限制剧烈操舵
转角饱和 事先加输入限幅或适当增大 R R R
低抓地/湿滑路面 同时增大 Q , R Q,R Q,R并在外层降速

三、离散 LQR 推导(DLQR)

3.1 离散状态空间模型

x k + 1 = A d   x k + B d   u k , k = 0 , 1 , … x_{k+1}=A_d\,x_k+B_d\,u_k,\qquad k=0,1,\dots xk+1=Adxk+Bduk,k=0,1,

  • x k ∈ R n x_k\in\mathbb{R}^n xkRn:第 k k k 步系统状态
  • u k ∈ R m u_k\in\mathbb{R}^m ukRm:控制输入
  • A d , B d A_d,B_d Ad,Bd:离散化后的系统矩阵(可由零阶保持 A d = e A Δ t ,    B d = ∫ 0 Δ t  ⁣ e A τ   d τ   B A_d=e^{A\Delta t},\;B_d=\int_0^{\Delta t}\!e^{A\tau}\,d\tau\,B Ad=eAΔt,Bd=0ΔteAτdτB 获得,或直接辨识/数值近似)

3.2 无限时域二次型性能指标

J = ∑ k = 0 ∞ ( x k  ⁣ ⊤ Q x k + u k  ⁣ ⊤ R u k ) , Q ⪰ 0 ,    R ≻ 0 J=\sum_{k=0}^{\infty}\Bigl(x_k^{\!\top}Qx_k+u_k^{\!\top}Ru_k\Bigr),\qquad Q\succeq0,\;R\succ0 J=k=0(xkQxk+ukRuk),Q0,R0

有限时域(Horizon NNN)只需将求和上限改为 N − 1 N-1 N1,末端加终端权 x N  ⁣ ⊤ S x N x_N^{\!\top}Sx_N xNSxN

3.3 动态规划推导

  1. 定义成本到终点(Cost-to-Go)函数

    J k ( x k ) = ∑ i = k ∞ ( x i  ⁣ ⊤ Q x i + u i  ⁣ ⊤ R u i ) J_k(x_k)=\sum_{i=k}^{\infty}\bigl(x_i^{\!\top}Qx_i+u_i^{\!\top}Ru_i\bigr) Jk(xk)=i=k(xiQxi+uiRui)

  2. Bellman 最优性原理

    J k ( x ) = min ⁡ u  ⁣ [ x  ⁣ ⊤ Q x + u  ⁣ ⊤ R u + J k + 1 ( A d x + B d u ) ] J_k(x)=\min_{u}\!\left[x^{\!\top}Qx+u^{\!\top}Ru+J_{k+1}(A_dx+B_du)\right] Jk(x)=minu[xQx+uRu+Jk+1(Adx+Bdu)]

  3. 二次型猜想 J k ( x ) = x  ⁣ ⊤ P k x J_k(x)=x^{\!\top}P_kx Jk(x)=xPkx,则递推得到 P k = Q + A d  ⁣ ⊤ P k + 1 A d −  ⁣ A d  ⁣ ⊤ P k + 1 B d ( R + B d  ⁣ ⊤ P k + 1 B d ) − 1 B d  ⁣ ⊤ P k + 1 A d P_k=Q+A_d^{\!\top}P_{k+1}A_d-\! A_d^{\!\top}P_{k+1}B_d \bigl(R+B_d^{\!\top}P_{k+1}B_d\bigr)^{-1} B_d^{\!\top}P_{k+1}A_d Pk=Q+AdPk+1AdAdPk+1Bd(R+BdPk+1Bd)1BdPk+1Ad_

  4. 最优控制律** u k ⋆ = − K k x k , K k = ( R + B d  ⁣ ⊤ P k + 1 B d ) − 1 B d  ⁣ ⊤ P k + 1 A d u_k^{\star}=-K_kx_k,\quad K_k=\bigl(R+B_d^{\!\top}P{k+1}B_d\bigr)^{-1}B_d^{\!\top}P{k+1}A_d uk=Kkxk,Kk=(R+BdPk+1Bd)1BdPk+1Ad

  5. 无限时域收敛:若 ( A d , B d ) (A_d,B_d) (Ad,Bd) 稳定可控且 ( A d , Q 1 / 2 ) (A_d,Q^{1/2}) (Ad,Q1/2) 可观,则存在极限

    P k → k → ∞ P ∞ P_k\xrightarrow[k\to\infty]{}P_\infty Pk kP

    其满足离散代数黎卡提方程(DARE)

    P = A d  ⁣ ⊤ P A d − A d  ⁣ ⊤ P B d ( R + B d  ⁣ ⊤ P B d ) − 1 B d  ⁣ ⊤ P A d + Q P=A_d^{\!\top}PA_d- A_d^{\!\top}PB_d\bigl(R+B_d^{\!\top}PB_d\bigr)^{-1} B_d^{\!\top}PA_d+Q P=AdPAdAdPBd(R+BdPBd)1BdPAd+Q

    得到 恒定最优增益

    K = ( R + B d  ⁣ ⊤ P B d ) − 1 B d  ⁣ ⊤ P A d K=\bigl(R+B_d^{\!\top}PB_d\bigr)^{-1}B_d^{\!\top}PA_d K=(R+BdPBd)1BdPAd

数值求解

  • Scipy:scipy.linalg.solve_discrete_are(A_d,B_d,Q,R)
  • MATLAB:[K,P,~] = dlqr(A_d,B_d,Q,R)
  • 若做有限时域控制,可从终端条件 P N = S P_N=S PN=S 向前递推(Backward Riccati Sweep)。

3.4 DLQR 与 CLQR 的对应关系

连续 LQR 离散 LQR
ARE: A ⊤ P + P A − P B R − 1 B ⊤ P + Q = 0 A^\top P+PA-PBR^{-1}B^\top P+Q=0 AP+PAPBR1BP+Q=0 DARE 上式
控制律: u = − K x ,    K = R − 1 B ⊤ P u=-Kx,\;K=R^{-1}B^\top P u=Kx,K=R1BP 同型: K = ( R + B ⊤ P B ) − 1 B ⊤ P A K=\bigl(R+B^\top PB\bigr)^{-1}B^\top PA K=(R+BPB)1BPA
解析稳定域靠 ARE 正定解 解析稳定域靠 DARE 正定解

四、iLQR(Iterative LQR)扩展

动机:LQR 只适用于线性近似;真实车辆模型 x k + 1 = f ( x k , u k ) x_{k+1}=f(x_k,u_k) xk+1=f(xk,uk) 往往非线性。
思路:在给定控制序列附近迭代线性化 + 二次化,每轮都做一次“时变 LQR” → 前向滚动更新 → 直至收敛。
本质上是 DDP(Differential Dynamic Programming)的简化实现,计算量更轻,且易于嵌入 MPC/规划器。

4.1 问题定义

  • 非线性动力学: x k + 1 = f ( x k , u k ) x_{k+1}=f(x_k,u_k) xk+1=f(xk,uk)
  • 分段代价: ℓ k ( x k , u k ) \ell_k(x_k,u_k) k(xk,uk),终端代价 ℓ f ( x N ) \ell_f(x_N) f(xN)
  • 目标: min ⁡ u 0 : N − 1   ∑ k = 0 N − 1 ℓ k + ℓ f u 0 : N − 1 \displaystyle\min_{u_{0:N-1}}\ \sum_{k=0}^{N-1}\ell_k+\ell_fu0:N−1 u0:N1min k=0N1k+fu0:N1

4.2 算法框架

  1. 初始化:选一条可行控制序列 { u k ( 0 ) } \{u_k^{(0)}\} {uk(0)},正向仿真得到轨迹 { x k ( 0 ) } \{x_k^{(0)}\} {xk(0)}

  2. 迭代循环 ( t = 0 , 1 , 2 , … t = 0,1,2,… t=0,1,2,):

    • 线性化:对每个步长 k k k

      δ x k + 1 = A k δ x k + B k δ u k , A k = ∂ f ∂ x ∣ ( x k ( t ) , u k ( t ) ) ,    B k = ∂ f ∂ u ∣ ( ⋅ ) \delta x_{k+1}=A_k\delta x_k+B_k\delta u_k,\quad A_k=\left.\frac{\partial f}{\partial x}\right|_{(x_k^{(t)},u_k^{(t)})},\; B_k=\left.\frac{\partial f}{\partial u}\right|_{(\cdot)} δxk+1=Akδxk+Bkδuk,Ak=xf (xk(t),uk(t)),Bk=uf ()

    • 二次化代价:泰勒展开 ℓ k \ell_k k 得二次型 δ x ,   δ u \delta x,\,\delta u δx,δu

    • 后向遍历(LQR backward pass):求时变增益 K k ( t ) , k k ( t ) K_k^{(t)},k_k^{(t)} Kk(t),kk(t)(反馈 + 前馈)。

    • 前向滚动:更新控制

      u k ( t + 1 ) = u k ( t ) + α ( t ) k k ( t ) + K k ( t ) ( x k ( t + 1 ) − x k ( t ) ) u_k^{(t+1)}=u_k^{(t)}+\alpha^{(t)}k_k^{(t)}+K_k^{(t)}\bigl(x_k^{(t+1)}-x_k^{(t)}\bigr) uk(t+1)=uk(t)+α(t)kk(t)+Kk(t)(xk(t+1)xk(t))

      并重新仿真得 { x k ( t + 1 ) } \{x_k^{(t+1)}\} {xk(t+1)}

    • 线搜索:调节 α ( t ) ∈ ( 0 , 1 ] \alpha^{(t)}\in(0,1] α(t)(0,1] 满足代价下降。

    • 收敛判据 ∣ J ( t + 1 ) − J ( t ) ∣ < ε |J^{(t+1)}-J^{(t)}|<\varepsilon J(t+1)J(t)<ε 或迭代次数达上限。

4.3 简化伪代码

Input: f, ℓ, ℓ_f, horizon N, x0
Initialize U ← {u0,...,u_{N-1}} (zeros or heuristic)
while not Converged do
    X ← ForwardRollout(f, x0, U)
    {A_k,B_k,ℓ_x,ℓ_u,ℓ_xx,ℓ_uu,ℓ_ux} ← LinearizeAndQuadratize(X,U)
    {K_k,k_k} ← BackwardPass(A,B,ℓ_x,ℓ_u,ℓ_xx,ℓ_uu,ℓ_ux)
    U_new ← LineSearchAndUpdate(U,K,k)
    if CostDropSmall then break
    U ← U_new
end while
return U, X

4.4 iLQR 与其它方法对比

方法 模型要求 约束处理 收敛性质 工程特点
LQR 线性 不显式 一步求闭解 最快,局部有效
iLQR 可微非线性 软约束/罚项 局部收敛 迭代求解,秒级
DDP 同上 软约束/罚项 二阶收敛 需二阶导数
MPC 线/非线性 可显式硬约束 在线优化 计算量大,最灵活

4.5 工程实践要点

  • 采样周期:iLQR 得到的是开环控制序列;可每 τ\tauτ 秒重解一次,外层加反馈稳健性更佳(Receding Horizon iLQR)。
  • 权重与正则:常在二次化阶段对 Hessian 加 λ I \lambda I λI 保证正定。
  • 约束:可在代价中加入 barrier / soft-constraint,也可外层投影。
  • 软件
    • ilqr(Python)、traja/ilqr (基于 JAX)
    • acados 非线性 MPC 内含 iLQR kernel
    • C++ 实时实现可参考 mpc-lqrpinocchio+croccodile

五、LQR 权重整定方法(参数选择)

LQR 的设计核心在于选择合适的权重矩阵 Q Q Q R R R,它们反映了控制器对误差状态控制输入的“偏好程度”。调得好,可以实现高精度+高舒适性;调不好则可能导致过度抖动、饱和、甚至失稳。本节介绍三种常用的权重调参策略。


5.1 ✅ Bryson’s Rule

📌 基本思想

将每个状态量/控制量的“最大允许值”设为代价函数中的单位惩罚基准。

即:对每个分量设定其最大允许值 ⁡ x i , max ⁡ ⁡x_{i,\max} xi,max ⁡ u max ⁡ ⁡u_{\max} umax,令:

Q i i = 1 x i , max ⁡ 2 , R = 1 u max ⁡ 2 Q_{ii} = \frac{1}{x_{i,\max}^2},\quad R = \frac{1}{u_{\max}^2} Qii=xi,max21,R=umax21

🧠 背景原理

  • LQR 性能指标函数本质上是:

    J = ∫ x ⊤ Q x + u ⊤ R u   d t = ∑ (状态惩罚) + (控制惩罚) J = \int x^\top Q x + u^\top R u \,dt = \sum \text{(状态惩罚)} + \text{(控制惩罚)} J=xQx+uRudt=(状态惩罚)+(控制惩罚)

  • 若我们将每个量归一化到它的最大可接受值,那么所有项的权重就统一了 → 得到一个物理量解释清晰的权重矩阵。

🔧 操作步骤

  1. 明确各状态量最大可接受偏差(如位置偏差 ≤ 0.2 m,偏航角 ≤ 3° 等)

  2. 明确控制量最大允许范围(如最大转角 ≤ 25°)

  3. 代入公式构建权重矩阵

    Q = d i a g ( 1 x 1 2 , 1 x 2 2 , …   ) , R = 1 u max ⁡ 2 Q = \mathrm{diag}\left(\frac{1}{x_1^2},\frac{1}{x_2^2},\dots\right),\quad R = \frac{1}{u_{\max}^2} Q=diag(x121,x221,),R=umax21

  4. 若还需强调某些状态量,可在此基础上乘上放大系数(例如横向位置乘以 5)。

🚗 自动驾驶应用案例

物理量 变量 允许最大值 权重项
横向误差 e y e_y ey 0.2 m Q 1 , 1 = 25 Q_{1,1} = 25 Q1,1=25
航向角误差 e ψ e_\psi eψ 3° = 0.052 rad Q 2 , 2 ≈ 369 Q_{2,2} ≈ 369 Q2,2369
转向角 δ \delta δ 25° = 0.436 rad R = 5.26 R = 5.26 R=5.26

5.2 🛠️ Trial-and-Error 调参法

📌 基本思想

基于仿真/试验观察系统响应曲线,手动增减 Q Q Q/ R R R 中元素逐步调整控制行为。

🧠 背景原理

  • LQR 是解析型反馈控制,其性能高度依赖于代价函数的构型
  • 直接通过增大/减小某一项权重,可以预测性地影响系统的响应曲线特征(如超调、响应时间、震荡等)

🔧 操作步骤

  1. 初始设置(例如单位矩阵):

    Q = I , R = 1 Q = I,\quad R = 1 Q=I,R=1

  2. 仿真运行系统,看如下响应指标:

    • 超调量
    • 稳态误差
    • 峰值控制量
    • 抖动/频繁操作
  3. 观察控制趋势:

    • 跟踪不准?→ 提高 Q Q Q 的关键项
    • 抖动太大?→ 提高 R R R
  4. 循环调整至满足性能指标或舒适性要求

🛠 工具推荐

  • Python + matplotlib + control 仿真框架
  • MATLAB Simulink + scope 曲线可视化
  • ROS 中动态配置 K 调参并采集驾驶行为数据

🚗 自动驾驶应用案例

观察现象 处理方法
跟踪误差大 增加 Q e y , Q e ψ Q_{e_y}, Q_{e_\psi} Qey,Qeψ
控制频繁跳变 增加 R R R
航向角偏移慢 增加 Q e ψ Q_{e_\psi} Qeψ
进入弯道偏移大 减小 R R R,提升反应能力

5.3 📐 LMI-Based 自动整定

📌 基本思想

将 LQR 权重选择问题转化为一个线性矩阵不等式(LMI)优化问题,自动寻找满足性能指标下的最优权重。

🧠 背景原理

  • LQR 本质是稳定性约束下的最优控制 → 可在 Lyapunov 函数约束下构建如下 LMI:

    { A c = A − B K  稳定 V ( x ) = x ⊤ P x ,   P ≻ 0 最小化  tr ⁡ ( Q P ) \begin{cases} A_c = A - B K\ \text{稳定} \\ V(x) = x^\top P x,\ P \succ 0 \\ \text{最小化 } \operatorname{tr}(Q P) \end{cases} Ac=ABK 稳定V(x)=xPx, P0最小化 tr(QP)

  • 通过控制 Lyapunov 函数下降速率 + 状态/控制限幅约束,可自动搜索 Q , R Q,R Q,R 满足性能指标

🔧 操作步骤

  1. 明确系统模型 ( A , B ) (A,B) (A,B) 与性能指标(如响应时间、能耗上限等)
  2. 将问题转化为优化形式(minimize 某种 cost, subject to LMI)
  3. 使用 LMI 优化工具(如 CVX, YALMIP)进行数值求解
  4. 从求得的 P P P 与优化变量中反推 K K K Q , R Q,R Q,R

🛠 工具推荐

  • MATLAB + YALMIP + SeDuMi
  • Python + CVXPY(支持 SDP)
  • SciML Ecosystem(Julia)也支持非线性 SDP

🚗 自动驾驶应用案例

  • 自动整定用于满足“最大横向加速度不超过 2.5m/s²”约束
  • 控制能量最小化 → 节能路径跟踪控制器
  • 系统稳定裕度 λ min ⁡ ( P ) \lambda_{\min}(P) λmin(P) 最大化设计

六、python实现代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import solve_continuous_are

# ----------------------------
# 1. 定义线性系统模型
# ----------------------------
# 状态空间模型:dx/dt = A x + B u
A = np.array([[0, 1],
              [0, 0]])              # 双积分器模型(位置+速度)
B = np.array([[0],
              [1]])                # 控制输入为加速度

# ----------------------------
# 2. 设置 LQR 权重矩阵
# ----------------------------
Q = np.array([[10, 0],             # 惩罚位置误差更重
              [0, 1]])             # 惩罚速度误差次之
R = np.array([[1]])                # 控制成本

# ----------------------------
# 3. 求解黎卡提方程并计算最优反馈增益 K
# ----------------------------
P = solve_continuous_are(A, B, Q, R)         # 解代数黎卡提方程
K = np.linalg.inv(R) @ B.T @ P               # LQR 最优增益

print("LQR Gain K =", K)

# ----------------------------
# 4. 仿真控制系统响应
# ----------------------------
dt = 0.01                     # 时间步长
T = 5                         # 仿真总时间
steps = int(T / dt)
x = np.array([[1.0], [0.0]])  # 初始状态:偏离1m,速度为0
trajectory = [x.flatten()]

for _ in range(steps):
    u = -K @ x                # 状态反馈控制律
    x_dot = A @ x + B @ u     # 系统动态
    x += x_dot * dt
    trajectory.append(x.flatten())

trajectory = np.array(trajectory)

# ----------------------------
# 5. 可视化结果
# ----------------------------
plt.figure(figsize=(8, 4))
plt.plot(trajectory[:, 0], label="Position $x_1$ (m)")
plt.plot(trajectory[:, 1], label="Velocity $x_2$ (m/s)")
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("Time Step")
plt.ylabel("State Value")
plt.title("LQR Control Response of a Double Integrator")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

小结对比

方法 优点 缺点 场景适配
Bryson’s Rule 简洁直观、物理意义明确 粒度粗、仅限对角权重 快速初始化,物理系统强适配
Trial-and-Error 灵活细致、性能可控 需反复仿真,调参经验依赖重 小规模系统 + 仿真丰富的设计阶段
LMI 自动整定 自动最优、支持约束 数学复杂,需 SDP 解器 多目标优化、高安全性应用、复杂耦合系统

网站公告

今日签到

点亮在社区的每一天
去签到