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

文章目录

  • 自动驾驶控制算法——LQR控制算法
    • **一、LQR 是什么?**
    • 二、LQR 原理
      • 2.1 线性状态空间模型 (State–Space Model)
      • 2.2 二次型性能指标 JJJ
      • 2.3 代数黎卡提方程 (ARE)
      • 2.4 特点总结
      • 2.5 一句话总结 LQR 原理:
        • 2.5.1 场景类比:小孩牵绳跑步
        • 2.5.2 数学意义下的类比映射:
        • 2.5.3 更直白一点的解释:
          • ① 系统动态是什么?
          • ② 什么样的轨迹才叫“好”?
          • ③ 怎么做才最优?
          • ④ 最终结果如何?
          • 🖼️ 图像化理解你可以把 LQR 理解为:“我告诉系统什么是‘好’,它就自己计算出‘怎么做’”。
        • 总结关键思想
      • 2.6 案例分析 —— 车辆轨迹跟踪
        • 2.6.1 任务介绍
        • 2.6.2 控制流程
        • 2.6.3 参数调优现象观察
        • 2.6.4 不同 Q/R 组合的典型效果
      • 2.7 LQR 参数解读
    • 三、离散 LQR 推导(DLQR)
      • 3.1 离散状态空间模型
      • 3.2 无限时域二次型性能指标
      • 3.3 动态规划推导
      • 3.4 DLQR 与 CLQR 的对应关系
    • 四、iLQR(Iterative LQR)扩展
      • 4.1 问题定义
      • 4.2 算法框架
      • 4.3 简化伪代码
      • 4.4 iLQR 与其它方法对比
      • 4.5 工程实践要点
    • 五、LQR 权重整定方法(参数选择)
      • 5.1 ✅ Bryson’s Rule
      • 📌 基本思想
      • 🧠 背景原理
      • 🔧 操作步骤
      • 🚗 自动驾驶应用案例
      • 5.2 🛠️ Trial-and-Error 调参法
      • 📌 基本思想
      • 🧠 背景原理
      • 🔧 操作步骤
      • 🛠 工具推荐
      • 🚗 自动驾驶应用案例
      • 5.3 📐 LMI-Based 自动整定
      • 📌 基本思想
      • 🧠 背景原理
      • 🔧 操作步骤
      • 🛠 工具推荐
      • 🚗 自动驾驶应用案例
    • 六、python实现代码
    • 小结对比

一、LQR 是什么?

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

二、LQR 原理

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

对连续时间系统,令

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

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

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

xk+1=Adxk+Bdukx_{k+1}=A_d\,x_k+B_d\,u_kxk+1=Adxk+Bduk

2.2 二次型性能指标 JJJ

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

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

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

2.3 代数黎卡提方程 (ARE)

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

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

得到最优反馈增益

K=R−1BTP⟹u(t)=−Kx(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,RA,B,Q,RA,B,Q,R 全局最优;无局部极值困扰。
  2. 多变量耦合:一次性考虑所有状态与输入,天然处理耦合。
  3. 实时性高:上线前离线求 KKK,在线只需矩阵乘法。
  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)
你和轨迹的偏离状态误差(需要惩罚)
拉绳子的幅度大小控制开销(也要惩罚)
你爸的聪明程度增益矩阵 KKK,控制律 u=−Kxu = -Kxu=Kx
怎么权衡纠偏 vs 用力惩罚矩阵 Q,RQ, RQ,R,定义什么是“好”
目标让总代价函数 JJJ 最小(偏差小 + 控制平滑)
2.5.3 更直白一点的解释:

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

① 系统动态是什么?

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

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


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

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

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

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

③ 怎么做才最优?

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

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

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


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

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

在这里插入图片描述


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

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

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

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

    δ=−Kx\delta=-Kxδ=Kx

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

2.6.3 参数调优现象观察
  • 增大 Q(ey,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.10.05 m3.2°★★☆误差小,操舵略频繁
B[2,0.5,2,0.5][2,0.5,2,0.5][2,0.5,2,0.5]1.00.15 m1.1°★★★舒适度佳,误差可接受
C[20,2,20,2][20,2,20,2][20,2,20,2]0.050.02 m5.5°★☆☆极致精度,易饱和

在这里插入图片描述

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

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

2.7 LQR 参数解读

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

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

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

三、离散 LQR 推导(DLQR)

3.1 离散状态空间模型

xk+1=Adxk+Bduk,k=0,1,…x_{k+1}=A_d\,x_k+B_d\,u_k,\qquad k=0,1,\dotsxk+1=Adxk+Bduk,k=0,1,

  • xk∈Rnx_k\in\mathbb{R}^nxkRn:第 kkk 步系统状态
  • uk∈Rmu_k\in\mathbb{R}^mukRm:控制输入
  • Ad,BdA_d,B_dAd,Bd:离散化后的系统矩阵(可由零阶保持 Ad=eAΔt,Bd=∫0Δt⁣eAτdτBA_d=e^{A\Delta t},\;B_d=\int_0^{\Delta t}\!e^{A\tau}\,d\tau\,BAd=eAΔt,Bd=0ΔteAτdτB 获得,或直接辨识/数值近似)

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

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

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

3.3 动态规划推导

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

    Jk(xk)=∑i=k∞(xi⁣⊤Qxi+ui⁣⊤Rui)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 最优性原理

    Jk(x)=min⁡u⁣[x⁣⊤Qx+u⁣⊤Ru+Jk+1(Adx+Bdu)]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. 二次型猜想Jk(x)=x⁣⊤PkxJ_k(x)=x^{\!\top}P_kxJk(x)=xPkx,则递推得到Pk=Q+Ad⁣⊤Pk+1Ad−⁣Ad⁣⊤Pk+1Bd(R+Bd⁣⊤Pk+1Bd)−1Bd⁣⊤Pk+1AdP_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_dPk=Q+AdPk+1AdAdPk+1Bd(R+BdPk+1Bd)1BdPk+1Ad_

  4. 最优控制律**uk⋆=−Kkxk,Kk=(R+Bd⁣⊤Pk+1Bd)−1Bd⁣⊤Pk+1Adu_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_duk=Kkxk,Kk=(R+BdPk+1Bd)1BdPk+1Ad

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

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

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

    P=Ad⁣⊤PAd−Ad⁣⊤PBd(R+Bd⁣⊤PBd)−1Bd⁣⊤PAd+QP=A_d^{\!\top}PA_d- A_d^{\!\top}PB_d\bigl(R+B_d^{\!\top}PB_d\bigr)^{-1} B_d^{\!\top}PA_d+QP=AdPAdAdPBd(R+BdPBd)1BdPAd+Q

    得到 恒定最优增益

    K=(R+Bd⁣⊤PBd)−1Bd⁣⊤PAdK=\bigl(R+B_d^{\!\top}PB_d\bigr)^{-1}B_d^{\!\top}PA_dK=(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)
  • 若做有限时域控制,可从终端条件 PN=SP_N=SPN=S 向前递推(Backward Riccati Sweep)。

3.4 DLQR 与 CLQR 的对应关系

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

四、iLQR(Iterative LQR)扩展

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

4.1 问题定义

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

4.2 算法框架

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

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

    • 线性化:对每个步长 kkk

      δxk+1=Akδxk+Bkδuk,Ak=∂f∂x∣(xk(t),uk(t)),Bk=∂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_kk 得二次型 δx,δu\delta x,\,\delta uδx,δu

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

    • 前向滚动:更新控制

      uk(t+1)=uk(t)+α(t)kk(t)+Kk(t)(xk(t+1)−xk(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))

      并重新仿真得 {xk(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)}|<\varepsilonJ(t+1)J(t)<ε 或迭代次数达上限。

4.3 简化伪代码

Input: f, ℓ, ℓ_f, horizon N, x0
Initialize U ← {u0,...,u_{N-1}} (zeros or heuristic)
while not Converged doX ← 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 breakU ← 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 的设计核心在于选择合适的权重矩阵 QQQRRR,它们反映了控制器对误差状态控制输入的“偏好程度”。调得好,可以实现高精度+高舒适性;调不好则可能导致过度抖动、饱和、甚至失稳。本节介绍三种常用的权重调参策略。


5.1 ✅ Bryson’s Rule

📌 基本思想

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

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

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

🧠 背景原理

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

    J=∫x⊤Qx+u⊤Rudt=∑(状态惩罚)+(控制惩罚)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=diag(1x12,1x22,…),R=1umax⁡2Q = \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)。

🚗 自动驾驶应用案例

物理量变量允许最大值权重项
横向误差eye_yey0.2 mQ1,1=25Q_{1,1} = 25Q1,1=25
航向角误差eψe_\psieψ3° = 0.052 radQ2,2≈369Q_{2,2} ≈ 369Q2,2369
转向角δ\deltaδ25° = 0.436 radR=5.26R = 5.26R=5.26

5.2 🛠️ Trial-and-Error 调参法

📌 基本思想

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

🧠 背景原理

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

🔧 操作步骤

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

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

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

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

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

🛠 工具推荐

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

🚗 自动驾驶应用案例

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

5.3 📐 LMI-Based 自动整定

📌 基本思想

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

🧠 背景原理

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

    {Ac=A−BK稳定V(x)=x⊤Px,P≻0最小化 tr⁡(QP)\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,RQ,RQ,R 满足性能指标

🔧 操作步骤

  1. 明确系统模型 (A,B)(A,B)(A,B) 与性能指标(如响应时间、能耗上限等)
  2. 将问题转化为优化形式(minimize 某种 cost, subject to LMI)
  3. 使用 LMI 优化工具(如 CVX, YALMIP)进行数值求解
  4. 从求得的 PPP 与优化变量中反推 KKKQ,RQ,RQ,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 * dttrajectory.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 解器多目标优化、高安全性应用、复杂耦合系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91973.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91973.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91973.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jotai:React轻量级原子化状态管理,告别重渲染困扰

简介 Jotai 是一个为 React 提供的原子化状态管理库&#xff0c;采用自下而上的方法来进行状态管理。Jotai 受 Recoil 启发&#xff0c;通过组合原子来构建状态&#xff0c;并且渲染基于原子依赖性进行优化。这解决了 React 上下文的额外重新渲染问题&#xff0c;并消除了对 m…

C语言数据结构(7)贪吃蛇项目2.贪吃蛇项目实现

8. 核心逻辑实现分析 8.1 游戏主逻辑 程序开始就设置程序支持本地模式&#xff0c;然后进入程序的主逻辑。 主逻辑分为3个过程&#xff1a; • 游戏开始&#xff08;GameStart&#xff09;完成游戏的初始化。 • 游戏运行&#xff08;GameRun&#xff09;完成游戏运行逻辑的…

知识蒸馏 - 最小化KL散度与最小化交叉熵是完全等价的

知识蒸馏 - 最小化KL散度与最小化交叉熵是完全等价的 flyfish KL散度与交叉熵的数学关系 对于两个概率分布 PPP&#xff08;真实分布&#xff09;和 QQQ&#xff08;模型预测分布&#xff09;&#xff0c;KL散度的定义是&#xff1a; DKL(P∥Q)∑xP(x)log⁡(P(x)Q(x)) D_{KL}(P…

设计心得——网络包的处理

一、介绍 在程序的开发中&#xff0c;网络开发是一个重要的应用场景。毕竟这些年IT行业之所以火&#xff0c;主要还是互联网&#xff08;移动互联网&#xff09;带来的。网络开发&#xff0c;有各种平台、框架以及系统和库提供的API&#xff0c;如果说网络开发是一个特别复杂和…

sqli-labs通关笔记-第30关GET字符注入(WAF绕过 双引号闭合 手工注入+脚本注入两种方法)

目录 一、源码分析 1、index.php代码审计 2、login.php代码审计 3、java_implimentation函数 4、whitelist函数 5、SQL安全性分析 二、渗透实战 1、进入靶场 2、WAF探测 &#xff08;1&#xff09;触发WAF &#xff08;2&#xff09;绕过WAF 3、手工注入 &#xf…

【openlayers框架学习】九:openlayers中的交互类(select和draw)

文章目录openlayers进阶28 openlayers中的事件29 openlayers中select交互类的使用30 openlayers中select常见的配置选项31 openlayers中绘制交互类&#xff08;Draw&#xff09;openlayers进阶 28 openlayers中的事件 常用进行事件交互的对象&#xff1a;map\view\source29 o…

Java企业级应用性能优化实战

在企业级Java应用开发中,性能优化是确保系统稳定运行的关键因素。本文将从多个维度深入分析Java应用性能瓶颈,并提供实战优化方案。 🎯 性能优化核心领域 1. 对象操作性能优化 在企业应用中,对象拷贝是一个高频操作,特别是在分层架构中的DO、DTO、VO转换。选择合适的拷…

LLM Prompt与开源模型资源(3)如何写一个好的 Prompt

学习材料&#xff1a;https://www.hiascend.com/developer/courses/detail/1935520434893606913 &#xff08;3.5&#xff09;学习时长&#xff1a; 预计 60 分钟学习目的&#xff1a; 了解提示工程的定义与作用熟悉提示工程的关键技术相关概念掌握基于昇腾适配的大模型提示工程…

日志管理工具 ——ELK Stack

一、ELK Stack 概述1.1 核心组件ELK Stack&#xff08;现更名为 Elastic Stack&#xff09;是一套开源的日志收集、存储、分析和可视化平台&#xff0c;由三个核心组件构成&#xff1a;Elasticsearch&#xff1a;分布式搜索引擎&#xff0c;负责日志数据的存储、索引和快速查询…

SpringAI:AI工程应用框架新选择

Spring AI 是一个用于 AI 工程的应用框架 Spring AI 是一个用于 AI 工程的应用框架。其目标是将可移植性和模块化设计等 Spring 生态系统设计原则应用于 AI 领域,并推广使用 POJO 作为应用程序的构建块到 AI 领域。 Spring AI 的核心是解决 AI 集成的基本挑战:将企业数据和…

Kettle 开源ETL数据迁移工具从入门到实战

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于数据抽取、转换和加载的软件工具&#xff0c;用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具是纯 java 开发的开源的 ETL工具&#xff0c;用于数据库间的数据迁移 。可以在 Linux、windows、unix 中运…

Maven中的bom和父依赖

maven最全避坑指南写完后&#xff0c;发现自己对于bom和父pom的理解还是不够深入&#xff0c;特此转载DeepSeek的回答&#xff0c;和大家一起学习了。 在 Maven 的依赖管理中&#xff0c;父 POM (Parent POM) 和 BOM (Bill of Materials) 都是用于实现集中化管理和控制的核心机…

Python 操作 Word 文档:主流库对比与选择指南

在办公自动化、报告生成、数据处理等领域&#xff0c;利用 Python 程序化地创建、读取或修改 Microsoft Word 文档 (.docx 格式) 是一项非常实用的技能。Python 生态中有多个优秀的库可以完成这项任务&#xff0c;但它们各有侧重和优缺点。选择哪一个“最好用”&#xff0c;关键…

怎么修改论文格式呢?提供一份论文格式模板

注!!!本文内容是作者自己整理的一份模板,仅供参考,各位如何修改,还需要看学校的要求。 一、参考文献 1、有一定数量的近几年参考文献、不宜过多中文文献 英文期刊模板 [1] Taesoo K, Sooyoung K, Kyunghan L, et al. Special issue on 6G and satellite communication…

MVC 发布

MVC 发布 引言 MVC(Model-View-Controller)模式是一种广泛应用于软件开发的架构模式。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这种模式不仅提高了代码的可维护性和可扩展性,而且使得开发者可以更加专注于各个组件的开发。本文…

arkui 动画曲线

参考文档 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-curve#curvesinterpolatingspring10 可视化工具网站 https://easingwizard.com/ https://www.desmos.com/calculator/k01p40v0ct?langzh-CN 基本介绍 import { curves } from kit.A…

大语言模型(LLM)技术架构与工程实践:从原理到部署

在自然语言处理领域,大语言模型(LLM)已成为颠覆性技术。从 GPT 系列到 LLaMA、ChatGLM,这些参数规模动辄百亿甚至万亿的模型,不仅实现了流畅的自然语言交互,更在代码生成、逻辑推理等复杂任务中展现出惊人能力。本文将从技术底层拆解 LLM 的核心架构,分析训练与推理的关…

python后端之DRF框架(上篇)

一、DRF框架介绍 1、web应用开发模式 1.1、前后端不分离1.2、前后端分离2、RESTful介绍 RESTful是目前最流行的API设计风格 &#xff0c; REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 1、每一个URI代表1种资源&#xff1b; 2、客…

信创数据库-DM(达梦)数据库安装教程

官方安装文档在这&#xff1a;安装前准备 | 达梦技术文档 本文也是基于这个来写的&#xff0c;微调了一下。 1&#xff0c;下载安装包 体验版直接到官方下载即可&#xff1a;产品下载 | 达梦在线服务平台 如果是有需要商业版等&#xff0c;需要联系客服申请。 安装包要选择CPU…

docker常用命令集(6)

接前一篇文章&#xff1a;docker常用命令集&#xff08;5&#xff09; 本文内容参考&#xff1a; Docker login/logout 命令 | 菜鸟教程 Docker命令_docker login-CSDN博客 特此致谢&#xff01; 9. docker login 简介 docker login命令用于登录到docker注册表&#xff08…