測(cè)控制MPC建模實(shí)戰(zhàn):從離散到非線性模型的Matlab實(shí)現(xiàn))
1. 項(xiàng)目概述從“預(yù)測(cè)”到“控制”的橋梁在工業(yè)自動(dòng)化、機(jī)器人、自動(dòng)駕駛這些領(lǐng)域我們經(jīng)常面臨一個(gè)核心挑戰(zhàn)如何讓一個(gè)系統(tǒng)比如一臺(tái)機(jī)器臂、一輛汽車不僅對(duì)當(dāng)前的狀態(tài)做出反應(yīng)還能“未卜先知”提前規(guī)劃好未來(lái)幾步的動(dòng)作從而更平穩(wěn)、更高效、更安全地達(dá)到目標(biāo)這就是模型預(yù)測(cè)控制Model Predictive Control, MPC要解決的核心問(wèn)題。它不像傳統(tǒng)的PID控制那樣只盯著“現(xiàn)在”的誤差而是像一個(gè)經(jīng)驗(yàn)豐富的棋手會(huì)基于對(duì)棋局系統(tǒng)模型的理解推演未來(lái)好幾步預(yù)測(cè)時(shí)域的各種走法控制序列從中選出一條最優(yōu)路徑最小化目標(biāo)函數(shù)然后只執(zhí)行第一步。下一步再根據(jù)新的棋局重新推演如此循環(huán)往復(fù)。這種“滾動(dòng)優(yōu)化”和“反饋校正”的機(jī)制讓MPC在處理多變量、有約束、大滯后的復(fù)雜系統(tǒng)時(shí)展現(xiàn)出無(wú)與倫比的優(yōu)勢(shì)。這個(gè)項(xiàng)目標(biāo)題——“【模型預(yù)測(cè)控制MPC】使用離散、連續(xù)、線性或非線性模型對(duì)預(yù)測(cè)控制進(jìn)行建模Matlab代碼實(shí)現(xiàn)”——精準(zhǔn)地概括了MPC實(shí)踐中的核心與難點(diǎn)模型。模型是MPC的“大腦”是它進(jìn)行預(yù)測(cè)和優(yōu)化的基石。你可以用離散時(shí)間的差分方程來(lái)描述一個(gè)數(shù)字控制系統(tǒng)也可以用連續(xù)時(shí)間的微分方程來(lái)刻畫物理世界的連續(xù)動(dòng)態(tài)你的系統(tǒng)可能是線性的簡(jiǎn)單可控也可能是非線性的充滿耦合與復(fù)雜性。選擇何種模型直接決定了后續(xù)優(yōu)化問(wèn)題的數(shù)學(xué)形式、求解難度和最終的控制性能。而Matlab憑借其強(qiáng)大的數(shù)值計(jì)算工具箱如優(yōu)化工具箱、模型預(yù)測(cè)控制工具箱和友好的仿真環(huán)境成為了學(xué)習(xí)和實(shí)現(xiàn)MPC算法的絕佳平臺(tái)。這篇文章我就以一個(gè)過(guò)來(lái)人的身份帶你深入MPC的建模世界從理論到代碼手把手教你如何根據(jù)你的系統(tǒng)特性構(gòu)建并實(shí)現(xiàn)離散、連續(xù)、線性或非線性的MPC控制器并分享那些只有踩過(guò)坑才知道的實(shí)操細(xì)節(jié)。2. MPC核心思想與工作流程拆解在深入建模之前我們必須把MPC的基本工作流程刻在腦子里。這就像學(xué)武功先學(xué)心法理解了流程后面的建模和優(yōu)化才有方向。2.1 滾動(dòng)時(shí)域優(yōu)化的基本框架MPC的核心可以概括為三個(gè)步驟在每個(gè)控制周期通常是離散的時(shí)間步長(zhǎng)k重復(fù)執(zhí)行狀態(tài)估計(jì)與預(yù)測(cè)在當(dāng)前時(shí)刻k利用傳感器測(cè)量或狀態(tài)觀測(cè)器獲取系統(tǒng)當(dāng)前的狀態(tài)向量 x(k)。然后基于我們建立的系統(tǒng)動(dòng)態(tài)模型無(wú)論是離散還是連續(xù)線性還是非線性以當(dāng)前狀態(tài)為初始條件對(duì)未來(lái)N步預(yù)測(cè)時(shí)域的系統(tǒng)行為進(jìn)行“開(kāi)環(huán)”預(yù)測(cè)。這個(gè)預(yù)測(cè)依賴于一個(gè)假設(shè)的未來(lái)控制輸入序列 U(k) [u(k), u(k1), ..., u(kN-1)]。在線優(yōu)化求解MPC會(huì)求解一個(gè)優(yōu)化問(wèn)題。這個(gè)問(wèn)題的目標(biāo)是找到一個(gè)最優(yōu)的未來(lái)控制序列 U*(k)使得某個(gè)性能指標(biāo)目標(biāo)函數(shù)J在預(yù)測(cè)時(shí)域內(nèi)最小化。這個(gè)目標(biāo)函數(shù)通常包含兩部分跟蹤誤差項(xiàng)希望系統(tǒng)輸出y盡可能接近期望的參考軌跡r和控制代價(jià)項(xiàng)希望控制輸入u變化平滑不要過(guò)于劇烈。同時(shí)優(yōu)化問(wèn)題必須滿足各種約束比如控制輸入u的幅度限制執(zhí)行器飽和、輸出y的范圍限制安全運(yùn)行區(qū)域、狀態(tài)x的約束等。實(shí)施與滾動(dòng)優(yōu)化求解后我們得到了未來(lái)N步的最優(yōu)控制序列 U*(k)。但MPC只取這個(gè)序列的第一個(gè)元素u*(k) 施加到實(shí)際系統(tǒng)上。到了下一個(gè)采樣時(shí)刻k1系統(tǒng)狀態(tài)因控制作用和環(huán)境干擾而更新為 x(k1)。然后整個(gè)流程重復(fù)基于新的狀態(tài)重新進(jìn)行預(yù)測(cè)和優(yōu)化。這就是“滾動(dòng)時(shí)域”的含義——優(yōu)化窗口隨著時(shí)間向前滾動(dòng)。注意這里有一個(gè)關(guān)鍵點(diǎn)MPC的優(yōu)化是在每個(gè)采樣周期在線完成的。這意味著求解速度必須快于采樣周期否則控制就無(wú)法實(shí)時(shí)進(jìn)行。這直接影響了我們對(duì)模型復(fù)雜度和優(yōu)化算法的選擇。2.2 為什么MPC如此強(qiáng)大相比于經(jīng)典控制MPC的優(yōu)勢(shì)顯而易見(jiàn)顯式處理約束約束可以直接寫入優(yōu)化問(wèn)題這是PID等傳統(tǒng)方法難以做到的。多變量協(xié)調(diào)天然適合多輸入多輸出MIMO系統(tǒng)可以協(xié)調(diào)多個(gè)變量之間的耦合關(guān)系。前饋補(bǔ)償通過(guò)模型預(yù)測(cè)可以對(duì)已知的干擾或未來(lái)參考軌跡的變化提前做出反應(yīng)。適用于復(fù)雜模型理論上只要你能建立模型并定義目標(biāo)函數(shù)MPC就能應(yīng)用不限于線性系統(tǒng)。當(dāng)然強(qiáng)大的能力也帶來(lái)了挑戰(zhàn)計(jì)算負(fù)擔(dān)重尤其對(duì)非線性模型、對(duì)模型精度依賴高、穩(wěn)定性理論分析比線性控制器復(fù)雜。3. 模型基石離散、連續(xù)、線性與非線性的選擇與建模模型是MPC的靈魂。標(biāo)題中提到的四類模型覆蓋了絕大多數(shù)實(shí)際系統(tǒng)。選擇哪一種取決于你的系統(tǒng)本質(zhì)、控制要求和可用的計(jì)算資源。3.1 離散時(shí)間模型數(shù)字世界的天然語(yǔ)言我們的控制器最終是在計(jì)算機(jī)或嵌入式芯片上運(yùn)行的工作在離散的時(shí)間點(diǎn)上。因此離散時(shí)間模型是MPC實(shí)現(xiàn)中最直接、最常用的形式。核心形式狀態(tài)空間方程是主流。x(k1) A * x(k) B * u(k) w(k) y(k) C * x(k) D * u(k) v(k)其中x是狀態(tài)u是控制輸入y是輸出k是離散時(shí)間索引。A, B, C, D是系統(tǒng)矩陣。w(k)和v(k)通常用來(lái)表示過(guò)程噪聲和測(cè)量噪聲在基礎(chǔ)MPC設(shè)計(jì)中常先忽略或作為擾動(dòng)處理。建模來(lái)源機(jī)理建模離散化如果你從物理定律得到了連續(xù)時(shí)間模型微分方程可以通過(guò)離散化方法得到離散模型。最常用的是零階保持器ZOH離散化在Matlab中就是c2d函數(shù)。選擇采樣時(shí)間Ts是關(guān)鍵它需要足夠快以捕捉系統(tǒng)動(dòng)態(tài)通常比系統(tǒng)最快時(shí)間常數(shù)小5-10倍但又不能太快以免造成不必要的計(jì)算負(fù)擔(dān)。系統(tǒng)辨識(shí)對(duì)于黑箱或灰箱系統(tǒng)可以通過(guò)輸入輸出數(shù)據(jù)使用Matlab的系統(tǒng)辨識(shí)工具箱System Identification Toolbox來(lái)辨識(shí)離散模型如狀態(tài)空間模型或ARX模型。Matlab實(shí)操示例線性離散模型 假設(shè)我們有一個(gè)簡(jiǎn)單的直流電機(jī)模型連續(xù)傳遞函數(shù)為1/(s^2 s)。我們將其轉(zhuǎn)化為狀態(tài)空間并離散化。% 1. 定義連續(xù)時(shí)間系統(tǒng) s tf(s); G_continuous 1/(s^2 s); sys_cont ss(G_continuous); % 轉(zhuǎn)換為狀態(tài)空間形式 % 2. 選擇采樣時(shí)間并離散化 Ts 0.1; % 采樣時(shí)間0.1秒 sys_disc c2d(sys_cont, Ts, zoh); % 使用零階保持器離散化 % 3. 提取離散系統(tǒng)矩陣 [A, B, C, D] A sys_disc.A; B sys_disc.B; C sys_disc.C; D sys_disc.D; disp(離散系統(tǒng)矩陣 A:); disp(A); disp(離散系統(tǒng)矩陣 B:); disp(B);這段代碼得到了離散時(shí)間狀態(tài)空間模型的矩陣它們將直接用于構(gòu)建MPC的預(yù)測(cè)方程。3.2 連續(xù)時(shí)間模型物理本質(zhì)的刻畫有些系統(tǒng)本質(zhì)是連續(xù)的或者我們更關(guān)心其連續(xù)的動(dòng)態(tài)特性。在MPC中直接使用連續(xù)模型意味著預(yù)測(cè)環(huán)節(jié)需要對(duì)微分方程進(jìn)行數(shù)值積分。核心形式dx/dt f_c(x(t), u(t)) y(t) h_c(x(t), u(t))對(duì)于線性時(shí)不變LTI系統(tǒng)f_c和h_c是線性函數(shù)dx/dt A_c * x(t) B_c * u(t),y(t) C_c * x(t) D_c * u(t)。在MPC中的處理 在基于離散時(shí)間優(yōu)化的MPC框架下我們通常還是需要將連續(xù)模型在預(yù)測(cè)時(shí)域內(nèi)進(jìn)行離散化。但這里有兩種思路先離散后優(yōu)化像3.1節(jié)那樣先將連續(xù)模型離散化得到一個(gè)離散模型然后在離散時(shí)間框架下構(gòu)建和求解MPC問(wèn)題。這是最常見(jiàn)、計(jì)算最高效的方法。連續(xù)優(yōu)化數(shù)值積分在優(yōu)化問(wèn)題中直接使用連續(xù)模型預(yù)測(cè)狀態(tài)時(shí)通過(guò)數(shù)值積分如歐拉法、龍格-庫(kù)塔法來(lái)計(jì)算。這會(huì)使優(yōu)化問(wèn)題變成一個(gè)連續(xù)時(shí)間的最優(yōu)控制問(wèn)題通常更復(fù)雜求解更慢但可能對(duì)某些高度非線性或變采樣系統(tǒng)有優(yōu)勢(shì)。Matlab實(shí)操心得 對(duì)于絕大多數(shù)工業(yè)應(yīng)用“先離散后優(yōu)化”的路徑是首選。Matlab的Model Predictive Control Toolbox默認(rèn)也采用這種方式。你需要確保離散化所用的采樣時(shí)間Ts與MPC控制器的執(zhí)行周期一致。一個(gè)常見(jiàn)的坑是系統(tǒng)本身是慢動(dòng)態(tài)時(shí)間常數(shù)幾秒但為了快速響應(yīng)設(shè)置了很短的Ts如0.01秒這會(huì)導(dǎo)致離散后的A矩陣非常接近單位陣可能帶來(lái)數(shù)值計(jì)算問(wèn)題如預(yù)測(cè)矩陣條件數(shù)過(guò)大同時(shí)優(yōu)化問(wèn)題維度變高。我的經(jīng)驗(yàn)是Ts通常取系統(tǒng)主導(dǎo)時(shí)間常數(shù)的1/5到1/10是一個(gè)不錯(cuò)的起點(diǎn)。3.3 線性與非線性模型的抉擇這是MPC建模中最關(guān)鍵的分水嶺直接決定了后續(xù)優(yōu)化問(wèn)題的性質(zhì)和求解難度。線性模型形式如上所述f和h是狀態(tài)的線性函數(shù)。優(yōu)勢(shì)如果系統(tǒng)確實(shí)是線性或近似線性的那么基于線性模型的MPC線性MPC的優(yōu)化問(wèn)題是一個(gè)二次規(guī)劃QP問(wèn)題。QP問(wèn)題有成熟、快速、可靠的求解算法如內(nèi)點(diǎn)法、有效集法可以保證實(shí)時(shí)性。Matlab MPC工具箱的核心就是處理線性QP問(wèn)題。適用場(chǎng)景系統(tǒng)在工作點(diǎn)附近小范圍運(yùn)行或者非線性可以被精確線性化如通過(guò)反饋線性化或者對(duì)控制速度要求極高必須使用QP求解器。非線性模型形式f和/或h是非線性函數(shù)。例如機(jī)器人動(dòng)力學(xué)、化學(xué)反應(yīng)過(guò)程、氣動(dòng)系統(tǒng)等。優(yōu)勢(shì)能更精確地描述系統(tǒng)在全工況范圍內(nèi)的行為尤其在設(shè)定點(diǎn)變化大或存在強(qiáng)非線性如飽和、死區(qū)、三角函數(shù)時(shí)線性MPC可能失效而非線性MPCNMPC能提供更優(yōu)的控制性能。挑戰(zhàn)優(yōu)化問(wèn)題變成一個(gè)非線性規(guī)劃NLP問(wèn)題。求解NLP比QP慢得多計(jì)算量可能呈指數(shù)增長(zhǎng)對(duì)實(shí)時(shí)性構(gòu)成巨大挑戰(zhàn)。穩(wěn)定性證明也更困難。如何選擇我的經(jīng)驗(yàn)法則是先用線性模型試試看。在很多應(yīng)用中系統(tǒng)主要在工作點(diǎn)附近運(yùn)行線性MPC已經(jīng)能提供出色的性能。只有當(dāng)線性MPC確實(shí)無(wú)法滿足要求如跟蹤精度差、違反約束頻繁且你有足夠的計(jì)算資源更快的處理器、更長(zhǎng)的允許計(jì)算時(shí)間時(shí)才考慮非線性MPC。此外還有一種折中的方法——線性變參數(shù)MPC它將非線性系統(tǒng)在不同工作點(diǎn)線性化形成一系列線性模型然后在線調(diào)度這比完全的非線性MPC要輕量。4. 基于不同模型的MPC問(wèn)題構(gòu)建與Matlab實(shí)現(xiàn)理解了模型我們就可以著手構(gòu)建MPC的優(yōu)化問(wèn)題了。這里我將分別展示線性離散和非線性兩種情況在Matlab中的實(shí)現(xiàn)思路。4.1 線性MPC離散的完整實(shí)現(xiàn)步驟我們以實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的線性二次型調(diào)節(jié)器LQR風(fēng)格的MPC為例目標(biāo)是最小化輸出跟蹤誤差和控制輸入變化。步驟1定義模型與參數(shù)% 假設(shè)我們已經(jīng)有了離散系統(tǒng)矩陣 A, B, C, D (來(lái)自3.1節(jié)) % A, B, C, D N 10; % 預(yù)測(cè)時(shí)域 Nc 5; % 控制時(shí)域 (通常 Nc N) Q C * C; % 輸出誤差權(quán)重矩陣簡(jiǎn)單起見(jiàn)取CC R 0.1 * eye(size(B,2)); % 控制輸入權(quán)重矩陣 P Q; % 終端代價(jià)權(quán)重這里簡(jiǎn)單取與Q相同 % 約束 u_min -1; u_max 1; delta_u_min -0.5; delta_u_max 0.5; y_min -Inf; % 若無(wú)輸出約束 y_max Inf;步驟2構(gòu)建預(yù)測(cè)方程核心線性MPC的妙處在于未來(lái)N步的狀態(tài)和輸出預(yù)測(cè)可以寫成當(dāng)前狀態(tài)和未來(lái)控制輸入的線性函數(shù)。這允許我們將優(yōu)化問(wèn)題轉(zhuǎn)化為QP標(biāo)準(zhǔn)形式。 我們需要構(gòu)建增廣模型將控制增量Δu(k) u(k) - u(k-1)作為新的控制輸入這樣可以方便地處理輸入速率約束并使系統(tǒng)類型增加改善跟蹤性能。 這部分涉及矩陣堆疊是MPC實(shí)現(xiàn)中最需要細(xì)心的地方。由于篇幅限制這里不展開(kāi)冗長(zhǎng)的矩陣推導(dǎo)但概念是最終我們可以得到關(guān)系式Y(jié) Ψ * x(k) Θ * ΔU其中Y是預(yù)測(cè)時(shí)域內(nèi)的輸出向量ΔU是待優(yōu)化的控制增量向量Ψ和Θ是由A,B,C矩陣構(gòu)成的常數(shù)矩陣。步驟3構(gòu)造二次規(guī)劃QP問(wèn)題目標(biāo)函數(shù)J (Y - R)的加權(quán)二次型 ΔU的加權(quán)二次型。代入預(yù)測(cè)方程后可以整理成標(biāo)準(zhǔn)的QP形式min (1/2) * ΔU * H * ΔU f * ΔU s.t. L * ΔU M其中H是Hessian矩陣正定f是梯度向量L和M由輸入輸出約束轉(zhuǎn)換而來(lái)。步驟4在線求解與應(yīng)用在每個(gè)控制周期% 1. 獲取當(dāng)前狀態(tài) x_k (可通過(guò)測(cè)量或觀測(cè)器) % x_k ... % 2. 計(jì)算梯度向量 f它與當(dāng)前狀態(tài)和參考軌跡有關(guān) % f ... % 3. 求解QP問(wèn)題 % 使用Matlab quadprog或更高效的專用QP求解器如OSQP, qpOASES options optimoptions(quadprog, Display, off); [deltaU_opt, ~, exitflag] quadprog(H, f, L, M, [], [], [], [], [], options); if exitflag 0 % 4. 取最優(yōu)解的第一個(gè)控制增量 delta_u_k deltaU_opt(1:size(B,2)); % 5. 計(jì)算實(shí)際控制量并施加 u_k u_prev delta_u_k; u_k max(min(u_k, u_max), u_min); % 再次飽和約束 % 6. 應(yīng)用 u_k 到系統(tǒng) % ... u_prev u_k; % 更新上一時(shí)刻控制量 else % 處理求解失敗例如使用備用控制律 warning(QP求解失敗); end步驟5使用Matlab MPC工具箱更快捷對(duì)于標(biāo)準(zhǔn)線性MPC強(qiáng)烈建議直接使用Matlab的Model Predictive Control Toolbox它能自動(dòng)化完成以上所有步驟。% 創(chuàng)建MPC控制器對(duì)象 mpcobj mpc(sys_disc, Ts, N, Nc); % sys_disc為離散模型 % 設(shè)置權(quán)重 mpcobj.Weights.OutputVariables [1]; % 輸出權(quán)重 mpcobj.Weights.ManipulatedVariablesRate 0.1; % 控制增量權(quán)重 % 設(shè)置約束 mpcobj.MV.Min u_min; mpcobj.MV.Max u_max; mpcobj.MV.RateMin delta_u_min; mpcobj.MV.RateMax delta_u_max; % 仿真 Tf 20; r 1; % 參考信號(hào) [y, t, u] sim(mpcobj, Tf, r);使用工具箱能極大提高開(kāi)發(fā)效率并且其求解器經(jīng)過(guò)高度優(yōu)化穩(wěn)定可靠。4.2 非線性MPCNMPC的實(shí)現(xiàn)思路與挑戰(zhàn)當(dāng)模型為非線性時(shí)預(yù)測(cè)方程Y F(x(k), U)也是非線性的。優(yōu)化問(wèn)題變?yōu)閙in J Σ (y(i) - r(i))Q(y(i)-r(i)) Δu(i)RΔu(i) s.t. x(i1) f_nl(x(i), u(i)) 各種約束這是一個(gè)非線性規(guī)劃NLP問(wèn)題。Matlab中可以使用fmincon求解器。實(shí)現(xiàn)步驟簡(jiǎn)述定義非線性模型函數(shù)編寫一個(gè)函數(shù)輸入當(dāng)前狀態(tài)和控制序列通過(guò)數(shù)值積分如ode45返回預(yù)測(cè)時(shí)域內(nèi)的狀態(tài)和輸出軌跡。定義目標(biāo)函數(shù)基于模型函數(shù)的輸出計(jì)算總代價(jià)J。定義非線性約束函數(shù)包含狀態(tài)、輸入、輸出等約束。在線調(diào)用fmincon每個(gè)控制周期以當(dāng)前狀態(tài)為初始條件調(diào)用fmincon求解最優(yōu)控制序列U。Matlab代碼框架示例function u_opt solveNMPC(current_x, ref_trajectory) % current_x: 當(dāng)前狀態(tài) % ref_trajectory: 參考軌跡 % 返回: 最優(yōu)控制量 u_opt (第一個(gè)元素) % 定義優(yōu)化變量控制序列 U0 zeros(Nc * nu, 1); % 初始猜測(cè) lb ... % 控制量下限 ub ... % 控制量上限 % 定義非線性約束包括動(dòng)力學(xué)模型 nonlcon (U) nmpcConstraints(current_x, U); % 求解NLP options optimoptions(fmincon, Algorithm,sqp, Display,off, MaxIterations, 100); [U_opt, ~, exitflag] fmincon((U) nmpcCost(current_x, U, ref_trajectory), ... U0, [], [], [], [], lb, ub, nonlcon, options); if exitflag 0 u_opt U_opt(1:nu); else % 求解失敗處理 u_opt 0; % 或使用其他策略 end end function J nmpcCost(current_x, U, ref) % 數(shù)值積分預(yù)測(cè)狀態(tài)軌跡 X_pred simulateNonlinearModel(current_x, U); Y_pred calculateOutput(X_pred, U); % 計(jì)算跟蹤誤差和控制代價(jià) J sum((Y_pred - ref)*Q*(Y_pred-ref)) sum(diff(U)*R*diff(U)); end function [c, ceq] nmpcConstraints(current_x, U) ceq []; % 等式約束例如終端狀態(tài)約束 c []; % 不等式約束例如狀態(tài)/輸出約束 % 通過(guò)模擬計(jì)算狀態(tài)軌跡然后施加約束 X_pred simulateNonlinearModel(current_x, U); % 例如狀態(tài)約束: c [c; X_pred(:) - x_max; x_min - X_pred(:)]; endNMPC的嚴(yán)峻挑戰(zhàn)與心得計(jì)算時(shí)間fmincon的求解時(shí)間可能遠(yuǎn)超采樣周期無(wú)法實(shí)時(shí)。工業(yè)中通常采用實(shí)時(shí)迭代RTI或顯式NMPC等高級(jí)方法。初始猜測(cè)NLP求解對(duì)初始猜測(cè)U0敏感。一個(gè)好的初始猜測(cè)例如上一時(shí)刻的解向前平移能顯著加快收斂。數(shù)值積分精度與速度在目標(biāo)函數(shù)和約束中反復(fù)調(diào)用數(shù)值積分計(jì)算開(kāi)銷巨大。通常需要權(quán)衡精度高階方法和速度低階方法。工具對(duì)于嚴(yán)肅的NMPC應(yīng)用建議使用專用工具如 CasADi與Matlab/Python接口搭配 IPOPT 求解器它們?yōu)镹LP提供了更高效的自動(dòng)微分和求解框架。5. 參數(shù)整定、調(diào)試與性能評(píng)估實(shí)戰(zhàn)模型建好了代碼跑通了但控制器性能可能一塌糊涂。調(diào)參是MPC工程應(yīng)用中的藝術(shù)。5.1 核心參數(shù)整定指南預(yù)測(cè)時(shí)域N作用決定了控制器“向前看”多遠(yuǎn)。太短控制器短視可能不穩(wěn)定或性能差太長(zhǎng)計(jì)算負(fù)擔(dān)增加且對(duì)模型誤差更敏感可能反而變差。整定通常從N 系統(tǒng)階躍響應(yīng)進(jìn)入穩(wěn)態(tài)所需時(shí)間以采樣周期計(jì)的1.5到2倍開(kāi)始嘗試??梢酝ㄟ^(guò)仿真觀察不同N下系統(tǒng)對(duì)階躍參考的響應(yīng)選擇響應(yīng)平穩(wěn)且計(jì)算可接受的值??刂茣r(shí)域Nc作用優(yōu)化中可自由變化的控制步數(shù)。Nc之后控制量通常假設(shè)保持不變或?yàn)榱?。Nc越小優(yōu)化變量越少問(wèn)題越簡(jiǎn)單但自由度也越小。整定通常NcN??梢詮腘cN/3 開(kāi)始。對(duì)于簡(jiǎn)單系統(tǒng)Nc1即單步優(yōu)化有時(shí)也有效。增大Nc可以提升性能但計(jì)算量增加。權(quán)重矩陣Q,R,PQ(輸出/狀態(tài)權(quán)重)增大Q意味著更看重減小跟蹤誤差響應(yīng)會(huì)變快但可能引起超調(diào)和控制量飽和。R(控制輸入/增量權(quán)重)增大R意味著更看重控制動(dòng)作的平緩系統(tǒng)響應(yīng)會(huì)變慢但更節(jié)能、執(zhí)行器磨損小。P(終端權(quán)重)用于保證無(wú)窮時(shí)域性能的穩(wěn)定性。一個(gè)簡(jiǎn)單的啟發(fā)式方法是取P為離散時(shí)間代數(shù)Riccati方程的解對(duì)應(yīng)LQR或者直接設(shè)P Q。整定這是一個(gè)權(quán)衡過(guò)程。經(jīng)典方法是先固定R或設(shè)為小值調(diào)整Q獲得滿意的響應(yīng)速度然后增大R直到控制量曲線變得平滑可接受。始終在仿真中觀察控制量是否飽和。5.2 仿真調(diào)試與性能評(píng)估在將控制器部署到實(shí)物之前充分的仿真測(cè)試至關(guān)重要。開(kāi)環(huán)測(cè)試在不施加MPC控制的情況下測(cè)試你的模型是否準(zhǔn)確。給模型一個(gè)階躍或脈沖輸入看其響應(yīng)是否符合物理預(yù)期。閉環(huán)階躍響應(yīng)測(cè)試這是最基本的測(cè)試。觀察系統(tǒng)對(duì)設(shè)定值變化的跟蹤能力上升時(shí)間、超調(diào)量、調(diào)節(jié)時(shí)間、穩(wěn)態(tài)誤差??垢蓴_測(cè)試在仿真中引入階躍或持續(xù)的負(fù)載干擾觀察MPC的抑制能力。一個(gè)好的MPC應(yīng)該能快速消除干擾的影響。約束激活測(cè)試故意設(shè)置一個(gè)會(huì)使系統(tǒng)觸達(dá)約束的參考信號(hào)或干擾觀察MPC如何優(yōu)雅地處理約束??刂屏繎?yīng)該在約束邊界平滑“貼邊”而不是劇烈震蕩。魯棒性測(cè)試在你的模型中有意引入誤差如改變某個(gè)參數(shù)看看MPC是否仍然穩(wěn)定。這可以測(cè)試你設(shè)計(jì)的MPC對(duì)模型不確定性的容忍度。Matlab仿真技巧 使用sim命令進(jìn)行閉環(huán)仿真時(shí)善用mpcmove命令進(jìn)行更靈活的單步仿真這有助于你調(diào)試在線優(yōu)化部分。同時(shí)使用mpc對(duì)象的getEstimator和setEstimator方法來(lái)設(shè)計(jì)和連接狀態(tài)觀測(cè)器如卡爾曼濾波器這對(duì)于無(wú)法全狀態(tài)測(cè)量的系統(tǒng)是必須的。6. 常見(jiàn)陷阱、問(wèn)題排查與進(jìn)階技巧這里分享一些我踩過(guò)的坑和總結(jié)的經(jīng)驗(yàn)。6.1 典型問(wèn)題與解決方案問(wèn)題現(xiàn)象可能原因排查與解決思路優(yōu)化求解失敗(QP/NLP無(wú)解)1. 約束過(guò)緊相互沖突。2. 預(yù)測(cè)時(shí)域太短問(wèn)題不可行。3. 模型不穩(wěn)定預(yù)測(cè)發(fā)散。1. 檢查并放松約束特別是輸出約束。2. 增加預(yù)測(cè)時(shí)域N。3. 檢查模型是否穩(wěn)定或?yàn)椴环€(wěn)定模型設(shè)計(jì)鎮(zhèn)定MPC通常需要終端約束/代價(jià)??刂菩阅懿铐憫?yīng)慢1. 控制權(quán)重R太大。2. 輸出權(quán)重Q太小。3. 采樣時(shí)間Ts太長(zhǎng)。1. 減小R增大Q。2. 在硬件允許下減小Ts??刂屏縿×艺鹗?. 控制增量權(quán)重太小。2. 采樣時(shí)間Ts太短放大了噪聲。3. 模型存在嚴(yán)重誤差或未建模動(dòng)態(tài)。1. 增大控制增量權(quán)重 (mpcobj.Weights.MVRate)。2. 適當(dāng)增大Ts或加入低通濾波。3. 重新辨識(shí)或修正模型。穩(wěn)態(tài)誤差1. 模型存在偏差如未建模的常值擾動(dòng)。2. 對(duì)于非零參考信號(hào)未使用正確的模型類型。1. 在MPC中引入擾動(dòng)模型或輸出積分。在Matlab MPC中可以增加一個(gè)不可測(cè)的輸入擾動(dòng)模型 (model.Disturbance)。2. 確保模型在原點(diǎn)處有正確的穩(wěn)態(tài)增益或使用增量式模型已隱含積分作用。計(jì)算時(shí)間過(guò)長(zhǎng)無(wú)法實(shí)時(shí)1. 預(yù)測(cè)/控制時(shí)域太長(zhǎng)。2. 模型維度過(guò)高。3. 求解器算法效率低。1. 減小N和Nc。2. 嘗試模型降階。3. 對(duì)于線性MPC使用更高效的專用QP求解器如qpOASES。對(duì)于NMPC考慮使用實(shí)時(shí)迭代或顯式方法。6.2 進(jìn)階實(shí)戰(zhàn)技巧軟約束Soft Constraints硬約束可能導(dǎo)致優(yōu)化問(wèn)題不可行。對(duì)于輸出約束尤其是可以將其設(shè)為軟約束。這意味著允許約束被輕微違反但在目標(biāo)函數(shù)中施加一個(gè)很大的懲罰項(xiàng)。這能極大地提高控制器的魯棒性和可行性。在Matlab MPC中可以通過(guò)設(shè)置mpcobj.OV(1).MinECR等屬性來(lái)實(shí)現(xiàn)。參考預(yù)覽Reference Preview如果未來(lái)的參考軌跡是已知的如自動(dòng)駕駛中的預(yù)定路徑MPC可以利用這些信息提前做出更優(yōu)的決策。在Matlab中可以在調(diào)用mpcmove或sim時(shí)提供未來(lái)的參考信號(hào)序列。經(jīng)濟(jì)MPC除了跟蹤MPC的目標(biāo)函數(shù)還可以直接反映經(jīng)濟(jì)效益如能耗最小、產(chǎn)量最大。這需要將經(jīng)濟(jì)指標(biāo)整合進(jìn)目標(biāo)函數(shù)是過(guò)程控制領(lǐng)域的熱點(diǎn)。狀態(tài)估計(jì)的重要性MPC嚴(yán)重依賴準(zhǔn)確的狀態(tài)反饋。對(duì)于不可測(cè)狀態(tài)必須設(shè)計(jì)狀態(tài)觀測(cè)器。線性MPC常與卡爾曼濾波器搭檔。確保觀測(cè)器的帶寬高于控制器帶寬但又不能太高以免放大噪聲。從離散到連續(xù)從線性到非線性模型預(yù)測(cè)控制的建模之旅充滿了挑戰(zhàn)與樂(lè)趣。記住沒(méi)有“最好”的模型只有“最合適”的模型。從簡(jiǎn)單的線性離散模型入手用Matlab工具箱快速搭建原型、進(jìn)行仿真理解每個(gè)參數(shù)的影響是學(xué)習(xí)MPC最快的方式。當(dāng)你對(duì)基本原理爛熟于心后再去挑戰(zhàn)非線性、約束更復(fù)雜的系統(tǒng)你會(huì)更加游刃有余。在實(shí)際項(xiàng)目中模型精度、計(jì)算實(shí)時(shí)性和控制性能三者之間的權(quán)衡將始終是你需要把握的核心。希望這篇結(jié)合了原理與實(shí)戰(zhàn)代碼的長(zhǎng)文能成為你探索MPC世界的一塊堅(jiān)實(shí)墊腳石。