自動駕駛控制算法——LQR控制算法

自動駕駛控制算法——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?=Ad?xk?+Bd?uk?

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\succeq0Q?0狀態加權矩陣:懲罰偏離參考軌跡誤差越關鍵,賦值越大
R?0R\succ0R?0控制加權矩陣:懲罰控制能耗/激烈度不希望頻繁/劇烈操舵就增大 RRR

2.3 代數黎卡提方程 (ARE)

最優解存在唯一正定矩陣 PPP,滿足

ATP+PA?PBR?1BTP+Q=0A^{\mathrm T}P+PA-PBR^{-1}B^{\mathrm T}P+Q=0ATP+PA?PBR?1BTP+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=R?1BTP?u(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?=Ad?xk?+Bd?uk?,k=0,1,

  • xk∈Rnx_k\in\mathbb{R}^nxk?Rn:第 kkk 步系統狀態
  • uk∈Rmu_k\in\mathbb{R}^muk?Rm:控制輸入
  • 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Δt?eAτ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?(xk??Qxk?+uk??Ruk?),Q?0,R?0

有限時域(Horizon NNN)只需將求和上限改為 N?1N-1N?1,末端加終端權 xN??SxNx_N^{\!\top}Sx_NxN??SxN?

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?(xi??Qxi?+ui??Rui?)

  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?[x?Qx+u?Ru+Jk+1?(Ad?x+Bd?u)]

  3. 二次型猜想Jk(x)=x??PkxJ_k(x)=x^{\!\top}P_kxJk?(x)=x?Pk?x,則遞推得到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+Ad??Pk+1?Ad??Ad??Pk+1?Bd?(R+Bd??Pk+1?Bd?)?1Bd??Pk+1?Ad?_

  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??=?Kk?xk?,Kk?=(R+Bd??Pk+1Bd?)?1Bd??Pk+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_\inftyPk?k?P?

    其滿足離散代數黎卡提方程(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=Ad??PAd??Ad??PBd?(R+Bd??PBd?)?1Bd??PAd?+Q

    得到 恒定最優增益

    K=(R+Bd??PBd)?1Bd??PAdK=\bigl(R+B_d^{\!\top}PB_d\bigr)^{-1}B_d^{\!\top}PA_dK=(R+Bd??PBd?)?1Bd??PAd?

數值求解

  • 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=0A?P+PA?PBR?1B?P+Q=0DARE 上式
控制律:u=?Kx,K=R?1B?Pu=-Kx,\;K=R^{-1}B^\top Pu=?Kx,K=R?1B?P同型:K=(R+B?PB)?1B?PAK=\bigl(R+B^\top PB\bigr)^{-1}B^\top PAK=(R+B?PB)?1B?PA
解析穩定域靠 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:N?1?min??k=0N?1??k?+?f?u0:N?1

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?=?x?f??(xk(t)?,uk(t)?)?,Bk?=?u?f??(?)?

    • 二次化代價:泰勒展開 ?k\ell_k?k? 得二次型 δ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,max2?1?,R=umax2?1?

🧠 背景原理

  • LQR 性能指標函數本質上是:

    J=∫x?Qx+u?Rudt=∑(狀態懲罰)+(控制懲罰)J = \int x^\top Q x + u^\top R u \,dt = \sum \text{(狀態懲罰)} + \text{(控制懲罰)}J=x?Qx+u?Rudt=(狀態懲罰)+(控制懲罰)

  • 若我們將每個量歸一化到它的最大可接受值,那么所有項的權重就統一了 → 得到一個物理量解釋清晰的權重矩陣。

🔧 操作步驟

  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(x12?1?,x22?1?,),R=umax2?1?

  4. 若還需強調某些狀態量,可在此基礎上乘上放大系數(例如橫向位置乘以 5)。

🚗 自動駕駛應用案例

物理量變量允許最大值權重項
橫向誤差eye_yey?0.2 mQ1,1=25Q_{1,1} = 25Q1,1?=25
航向角誤差eψe_\psieψ?3° = 0.052 radQ2,2≈369Q_{2,2} ≈ 369Q2,2?369
轉向角δ\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?=A?BK?穩定V(x)=x?Px,?P?0最小化?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/s2”約束
  • 控制能量最小化 → 節能路徑跟蹤控制器
  • 系統穩定裕度 λ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…