測(cè)控制(MPC)建模實(shí)戰(zhàn):從離散/連續(xù)到線性/非線性模型詳解)
1. 項(xiàng)目概述從“預(yù)測(cè)”到“控制”的橋梁在工業(yè)自動(dòng)化、機(jī)器人控制乃至自動(dòng)駕駛領(lǐng)域我們常常面臨一個(gè)核心挑戰(zhàn)如何讓一個(gè)系統(tǒng)不僅對(duì)當(dāng)前狀態(tài)做出反應(yīng)還能“預(yù)見(jiàn)”未來(lái)幾步并據(jù)此做出最優(yōu)決策這就是模型預(yù)測(cè)控制Model Predictive Control, MPC要解決的問(wèn)題。它不像傳統(tǒng)的PID控制器那樣只盯著當(dāng)前的誤差進(jìn)行修正MPC更像一個(gè)下棋高手會(huì)推演未來(lái)幾步棋的走勢(shì)選擇一條最優(yōu)路徑然后只執(zhí)行第一步下一時(shí)刻再重新推演如此循環(huán)。這種“滾動(dòng)優(yōu)化”的策略使其在處理多變量、有約束的復(fù)雜系統(tǒng)時(shí)展現(xiàn)出無(wú)與倫比的優(yōu)勢(shì)。然而MPC的魅力與挑戰(zhàn)并存其核心就在于這個(gè)“模型”。模型是MPC預(yù)測(cè)未來(lái)的“水晶球”模型的精度和形式直接決定了控制性能的上限。很多初學(xué)者在接觸MPC時(shí)往往被各種模型類型搞得暈頭轉(zhuǎn)向我的系統(tǒng)該用離散模型還是連續(xù)模型線性模型夠用嗎還是必須上非線性在Matlab里又該如何把這些抽象的數(shù)學(xué)模型“落地”成可運(yùn)行的代碼本文將圍繞“使用離散、連續(xù)、線性或非線性模型對(duì)預(yù)測(cè)控制進(jìn)行建?!边@一核心結(jié)合Matlab實(shí)現(xiàn)為你徹底拆解MPC的建模內(nèi)核。我不會(huì)只給你一堆公式和代碼而是會(huì)帶你理解每種模型選擇背后的“為什么”分享在實(shí)際編碼和調(diào)試中踩過(guò)的坑和總結(jié)的技巧。無(wú)論你是正在做課程設(shè)計(jì)的學(xué)生還是需要在項(xiàng)目中快速應(yīng)用MPC的工程師這篇文章都將提供一條從理論到實(shí)踐的清晰路徑。2. 模型預(yù)測(cè)控制的核心思想與工作流程在深入模型細(xì)節(jié)之前我們必須先統(tǒng)一對(duì)MPC基本框架的認(rèn)識(shí)。很多人一上來(lái)就鉆研模型和優(yōu)化算法卻忽略了MPC作為一個(gè)閉環(huán)策略的整體邏輯這容易導(dǎo)致“只見(jiàn)樹(shù)木不見(jiàn)森林”。2.1 “滾動(dòng)時(shí)域”優(yōu)化MPC的靈魂想象一下自動(dòng)駕駛汽車在彎道行駛。一個(gè)糟糕的司機(jī)可能只盯著車頭前方幾米發(fā)現(xiàn)偏離車道了才猛打方向盤(pán)結(jié)果就是車輛畫(huà)龍。而一個(gè)優(yōu)秀的司機(jī)會(huì)提前觀察整個(gè)彎道的曲率在心中規(guī)劃出一條平滑的軌跡然后沿著這條軌跡行駛并隨時(shí)根據(jù)實(shí)際情況微調(diào)。MPC就是那個(gè)“優(yōu)秀的司機(jī)”。它的工作流程可以概括為以下四步這是一個(gè)在每個(gè)控制周期都會(huì)重復(fù)的循環(huán)狀態(tài)估計(jì)/測(cè)量在當(dāng)前時(shí)刻k通過(guò)傳感器獲取系統(tǒng)當(dāng)前的實(shí)際狀態(tài)x(k)。對(duì)于無(wú)法直接測(cè)量的狀態(tài)需要使用狀態(tài)觀測(cè)器如卡爾曼濾波器進(jìn)行估計(jì)。預(yù)測(cè)基于當(dāng)前狀態(tài)x(k)和系統(tǒng)數(shù)學(xué)模型預(yù)測(cè)在未來(lái)一段有限時(shí)間預(yù)測(cè)時(shí)域Np內(nèi)系統(tǒng)在不同控制輸入序列U(k) [u(k), u(k1), ..., u(kNc-1)]作用下的狀態(tài)軌跡X(k) [x(k1|k), ..., x(kNp|k)]。這里的(ki|k)表示在k時(shí)刻對(duì)ki時(shí)刻的預(yù)測(cè)。優(yōu)化在預(yù)測(cè)時(shí)域內(nèi)求解一個(gè)帶約束的優(yōu)化問(wèn)題。其目標(biāo)函數(shù)通常是讓預(yù)測(cè)輸出盡可能跟蹤期望的參考軌跡同時(shí)控制量變化平滑、能耗最小。約束則包括控制輸入u的幅值/速率限制、狀態(tài)x的安全范圍等。通過(guò)優(yōu)化算法找到最優(yōu)的未來(lái)控制輸入序列U*(k)。執(zhí)行與滾動(dòng)只取最優(yōu)控制序列中的第一個(gè)元素u*(k)施加給實(shí)際系統(tǒng)。到下一個(gè)采樣時(shí)刻k1系統(tǒng)狀態(tài)更新重復(fù)步驟1基于新的狀態(tài)重新進(jìn)行預(yù)測(cè)和優(yōu)化。這個(gè)“預(yù)測(cè)-優(yōu)化-執(zhí)行-滾動(dòng)”的過(guò)程就是“滾動(dòng)時(shí)域優(yōu)化”。它用開(kāi)環(huán)優(yōu)化在每個(gè)時(shí)刻求解一個(gè)開(kāi)環(huán)最優(yōu)問(wèn)題的方法實(shí)現(xiàn)了閉環(huán)反饋控制的效果并且天然地處理了多變量和約束。2.2 目標(biāo)函數(shù)與約束優(yōu)化問(wèn)題的“指揮棒”MPC的優(yōu)化問(wèn)題通常表述如下min J Σ [ (y(ki|k) - r(ki))^T * Q * (y(ki|k) - r(ki)) ] // 跟蹤誤差懲罰 Σ [ Δu(ki)^T * R * Δu(ki) ] // 控制增量懲罰 Σ [ u(ki)^T * S * u(ki) ] // 控制量懲罰 (可選) s.t. x(ki1|k) f( x(ki|k), u(ki) ) // 系統(tǒng)動(dòng)力學(xué)模型等式約束 y(ki|k) h( x(ki|k) ) // 輸出方程 u_min ≤ u(ki) ≤ u_max // 控制輸入約束 Δu_min ≤ Δu(ki) ≤ Δu_max // 控制增量約束 x_min ≤ x(ki|k) ≤ x_max // 狀態(tài)約束目標(biāo)函數(shù) J由三部分組成。跟蹤項(xiàng)最核心的部分懲罰預(yù)測(cè)輸出y與參考軌跡r之間的偏差。權(quán)重矩陣Q決定了我們對(duì)不同輸出變量跟蹤精度的重視程度。Q越大跟蹤越緊但可能導(dǎo)致控制動(dòng)作劇烈。控制增量項(xiàng)懲罰控制量u的變化率Δu。權(quán)重矩陣R用于抑制控制量的劇烈波動(dòng)使控制過(guò)程更平滑。這是保證實(shí)際物理系統(tǒng)穩(wěn)定、減少執(zhí)行器磨損的關(guān)鍵??刂屏宽?xiàng)可選有時(shí)為了將控制量穩(wěn)定在某個(gè)工作點(diǎn)附近會(huì)直接懲罰控制量u本身。約束這是MPC相比傳統(tǒng)控制器的最大優(yōu)勢(shì)之一它能將物理限制直接納入控制器設(shè)計(jì)。等式約束即系統(tǒng)的動(dòng)力學(xué)模型f(·)和輸出方程h(·)。這是預(yù)測(cè)的基礎(chǔ)。不等式約束包括輸入/輸出的幅值限制、變化率限制、狀態(tài)安全區(qū)域等。例如閥門(mén)的開(kāi)度有0-100%的限制電機(jī)的扭矩和轉(zhuǎn)速有上限機(jī)器人的關(guān)節(jié)角度有機(jī)械限位。一個(gè)關(guān)鍵的實(shí)操心得權(quán)重矩陣Q和R的調(diào)節(jié)是MPC調(diào)試的“藝術(shù)”。通常的起點(diǎn)是Q的對(duì)角線元素設(shè)為1或輸出量綱倒數(shù)的平方以歸一化R的對(duì)角線元素設(shè)為一個(gè)較小的數(shù)如0.1。調(diào)試時(shí)遵循“先穩(wěn)后準(zhǔn)”的原則先增大R讓控制動(dòng)作平滑、系統(tǒng)穩(wěn)定再逐步增大Q以提高跟蹤性能。如果出現(xiàn)震蕩往往是R太小如果響應(yīng)遲鈍則是Q太小或R太大。3. MPC的基石四種模型類型的深度解析與選型指南模型是MPC預(yù)測(cè)未來(lái)的依據(jù)。選擇哪種模型取決于你的系統(tǒng)特性、你對(duì)精度的要求以及你對(duì)計(jì)算復(fù)雜度的容忍度。下面我們逐一拆解。3.1 連續(xù) vs. 離散時(shí)間域的抉擇這是一個(gè)關(guān)于“控制器如何在時(shí)間上運(yùn)作”的根本選擇。連續(xù)時(shí)間模型用微分方程描述系統(tǒng)動(dòng)態(tài)時(shí)間變量t是連續(xù)的。例如一個(gè)簡(jiǎn)單的質(zhì)量-彈簧-阻尼系統(tǒng)m * d2x/dt2 c * dx/dt k * x F(t)。這種模型更貼近物理世界的本質(zhì)在理論分析和某些高級(jí)控制算法如基于微分平坦度的控制中很常見(jiàn)。優(yōu)點(diǎn)模型形式優(yōu)雅物理意義清晰便于理論分析。缺點(diǎn)數(shù)字控制器計(jì)算機(jī)無(wú)法直接處理連續(xù)信號(hào)。必須對(duì)其進(jìn)行離散化才能進(jìn)行數(shù)值計(jì)算和滾動(dòng)優(yōu)化。何時(shí)用當(dāng)你從第一性原理物理定律推導(dǎo)模型時(shí)自然得到連續(xù)模型。或者當(dāng)你的采樣頻率非常高可以近似認(rèn)為連續(xù)時(shí)。離散時(shí)間模型用差分方程描述系統(tǒng)動(dòng)態(tài)時(shí)間變量k是離散的第k個(gè)采樣時(shí)刻。例如x(k1) A * x(k) B * u(k)。這是數(shù)字控制器的“母語(yǔ)”。優(yōu)點(diǎn)可直接用于計(jì)算機(jī)實(shí)現(xiàn)無(wú)需額外的離散化步驟。與MPC的滾動(dòng)優(yōu)化流程在每個(gè)采樣時(shí)刻求解天然契合。缺點(diǎn)離散化過(guò)程會(huì)引入誤差特別是當(dāng)采樣周期Ts較大或系統(tǒng)動(dòng)態(tài)較快時(shí)。何時(shí)用絕大多數(shù)實(shí)際MPC應(yīng)用的首選。特別是當(dāng)你通過(guò)系統(tǒng)辨識(shí)如利用輸入輸出數(shù)據(jù)來(lái)獲取模型時(shí)得到的直接就是離散模型。核心結(jié)論與實(shí)操建議對(duì)于工程實(shí)現(xiàn)我們幾乎總是在離散時(shí)間域設(shè)計(jì)和實(shí)施MPC。即使你擁有一個(gè)漂亮的連續(xù)模型最終也需要將其離散化。在Matlab中對(duì)于線性系統(tǒng)可以使用c2d函數(shù)進(jìn)行離散化。選擇離散化方法如零階保持ZOH、一階保持FOH、雙線性變換Tustin時(shí)ZOH是最常用且物理意義明確假設(shè)控制輸入在采樣周期內(nèi)保持恒定的選擇。注意離散化時(shí)采樣時(shí)間Ts的選擇至關(guān)重要。一個(gè)經(jīng)驗(yàn)法則是它應(yīng)小于系統(tǒng)最快動(dòng)態(tài)時(shí)間常數(shù)的1/10。Ts太大會(huì)導(dǎo)致離散化誤差大甚至造成系統(tǒng)不穩(wěn)定Ts太小則會(huì)增加不必要的計(jì)算負(fù)擔(dān)。3.2 線性 vs. 非線性復(fù)雜度與精度的權(quán)衡這是關(guān)于“模型如何描述系統(tǒng)動(dòng)態(tài)”的選擇對(duì)MPC的計(jì)算復(fù)雜度和性能影響最大。線性模型系統(tǒng)動(dòng)態(tài)由線性微分/差分方程描述。狀態(tài)空間形式最為常見(jiàn)x(k1) A*x(k) B*u(k),y(k) C*x(k) D*u(k)。優(yōu)點(diǎn)計(jì)算高效對(duì)于線性模型和二次型目標(biāo)函數(shù)、線性約束的MPC問(wèn)題即線性二次型調(diào)節(jié)器LQR的帶約束擴(kuò)展優(yōu)化問(wèn)題是一個(gè)凸的二次規(guī)劃QP問(wèn)題。QP有成熟、快速且可靠的求解算法如內(nèi)點(diǎn)法、有效集法能保證在有限時(shí)間內(nèi)找到全局最優(yōu)解滿足實(shí)時(shí)控制要求。理論成熟穩(wěn)定性、魯棒性分析有堅(jiān)實(shí)的理論支撐。缺點(diǎn)只能描述系統(tǒng)在工作點(diǎn)附近的小范圍動(dòng)態(tài)。如果實(shí)際工況偏離線性化點(diǎn)較遠(yuǎn)控制性能會(huì)嚴(yán)重下降甚至失穩(wěn)。何時(shí)用系統(tǒng)本質(zhì)上是線性的或者在工作點(diǎn)附近運(yùn)行且動(dòng)態(tài)范圍不大。這是工業(yè)應(yīng)用中最主流的選擇因?yàn)槠淇煽啃院蛯?shí)時(shí)性至關(guān)重要。非線性模型系統(tǒng)動(dòng)態(tài)由非線性方程描述。例如無(wú)人機(jī)動(dòng)力學(xué)、化學(xué)反應(yīng)過(guò)程、機(jī)器人動(dòng)力學(xué)等。優(yōu)點(diǎn)精度高能在大范圍工況下準(zhǔn)確描述系統(tǒng)行為理論上能獲得全局最優(yōu)的控制性能。缺點(diǎn)計(jì)算復(fù)雜優(yōu)化問(wèn)題變?yōu)榉蔷€性規(guī)劃NLP問(wèn)題。NLP的求解難度呈指數(shù)級(jí)增長(zhǎng)可能陷入局部最優(yōu)求解時(shí)間不可預(yù)測(cè)難以滿足實(shí)時(shí)控制要求。實(shí)現(xiàn)復(fù)雜需要更專業(yè)的優(yōu)化求解器和更仔細(xì)的初始化。何時(shí)用系統(tǒng)非線性非常強(qiáng)線性模型完全無(wú)法滿足性能要求并且你有足夠的計(jì)算資源和對(duì)實(shí)時(shí)性要求不那么苛刻。一個(gè)關(guān)鍵的折中方案線性變參數(shù)LPV模型與序列線性化在實(shí)際中純非線性MPC應(yīng)用較少。更常見(jiàn)的策略是序列線性化Successive Linearization在每個(gè)MPC采樣時(shí)刻圍繞當(dāng)前估計(jì)狀態(tài)x(k)對(duì)非線性模型進(jìn)行線性化得到一個(gè)局部的線性模型A(k), B(k)。然后在當(dāng)前時(shí)刻用這個(gè)線性模型構(gòu)建QP問(wèn)題并求解。下一時(shí)刻重新線性化。這樣你將一個(gè)非線性問(wèn)題轉(zhuǎn)化為一系列在線更新的線性QP問(wèn)題兼顧了精度和計(jì)算效率。這是處理溫和非線性系統(tǒng)的實(shí)用方法。線性變參數(shù)LPV模型將非線性模型表示為系統(tǒng)矩陣A(θ), B(θ)隨某個(gè)可測(cè)調(diào)度變量θ如工作點(diǎn)、速度等變化的線性模型。MPC在線根據(jù)當(dāng)前的θ調(diào)用對(duì)應(yīng)的線性模型。這需要離線建立好一系列模型。實(shí)操心得不要盲目追求非線性MPC。首先嘗試用線性模型或序列線性化。只有當(dāng)線性方法確實(shí)無(wú)法滿足性能指標(biāo)例如跟蹤誤差始終很大或者需要跨越多個(gè)截然不同的工作點(diǎn)且經(jīng)過(guò)充分評(píng)估確認(rèn)有足夠的計(jì)算余量時(shí)再考慮非線性MPC。在Matlab中Model Predictive Control Toolbox主要面向線性MPC而Nonlinear MPC Toolbox則用于非線性MPC。4. 在Matlab中實(shí)現(xiàn)MPC從模型建立到閉環(huán)仿真理論說(shuō)得再多不如一行代碼。我們以最典型的離散線性模型為例展示在Matlab中實(shí)現(xiàn)MPC的完整流程。這里假設(shè)我們要控制一個(gè)直流電機(jī)的轉(zhuǎn)速狀態(tài)x為角速度控制輸入u為電壓。4.1 步驟一定義離散線性模型首先我們需要系統(tǒng)的狀態(tài)空間模型(A, B, C, D)。假設(shè)我們通過(guò)機(jī)理建模或系統(tǒng)辨識(shí)得到% 假設(shè)電機(jī)參數(shù)時(shí)間常數(shù) Tau0.5s增益 K10 rad/s/V Tau 0.5; K 10; Ts 0.1; % 采樣時(shí)間應(yīng)遠(yuǎn)小于Tau % 連續(xù)時(shí)間狀態(tài)空間模型dx/dt Ac*x Bc*u, y Cc*x Dc*u % 簡(jiǎn)單一階系統(tǒng)Tau * dx/dt x K * u Ac -1/Tau; Bc K/Tau; Cc 1; Dc 0; sysc ss(Ac, Bc, Cc, Dc); % 離散化使用零階保持器 sysd c2d(sysc, Ts, zoh); [A, B, C, D] ssdata(sysd); disp(離散系統(tǒng)矩陣 A:); disp(A); disp(離散系統(tǒng)矩陣 B:); disp(B);4.2 步驟二創(chuàng)建MPC控制器對(duì)象使用Model Predictive Control Toolbox中的mpc函數(shù)。% 定義采樣時(shí)間必須與離散模型一致 mpc_Ts Ts; % 創(chuàng)建MPC控制器對(duì)象 % 參數(shù)離散模型、采樣時(shí)間、預(yù)測(cè)時(shí)域、控制時(shí)域 prediction_horizon 20; control_horizon 5; mpcobj mpc(sysd, mpc_Ts, prediction_horizon, control_horizon); % 設(shè)置約束非常重要 % 輸入電壓限制-10V 到 10V mpcobj.ManipulatedVariables.Min -10; mpcobj.ManipulatedVariables.Max 10; % 輸入電壓變化率限制每秒變化不超過(guò) 5V mpcobj.ManipulatedVariables.RateMin -5 * mpc_Ts; mpcobj.ManipulatedVariables.RateMax 5 * mpc_Ts; % 設(shè)置權(quán)重 % 輸出權(quán)重跟蹤誤差默認(rèn)是1這里我們加大權(quán)重以緊密跟蹤 mpcobj.Weights.OutputVariables 10; % 輸入增量權(quán)重控制平滑性默認(rèn)是0.1這里保持以平滑控制 mpcobj.Weights.ManipulatedVariablesRate 0.1; % 輸入權(quán)重可選這里設(shè)為0 mpcobj.Weights.ManipulatedVariables 0; % 設(shè)置參考信號(hào)類型默認(rèn)是輸出跟蹤即ysetpoint % 這里我們期望轉(zhuǎn)速輸出y跟蹤一個(gè)給定的參考值4.3 步驟三進(jìn)行閉環(huán)仿真使用sim函數(shù)進(jìn)行閉環(huán)仿真驗(yàn)證控制器性能。% 仿真時(shí)間 Tf 5; % 秒 steps ceil(Tf / mpc_Ts); % 仿真步數(shù) % 創(chuàng)建參考信號(hào)前2秒為0之后階躍到5 rad/s ref_signal zeros(steps, 1); ref_signal(ceil(2/mpc_Ts):end) 5; % 初始化狀態(tài)和輸入記錄 x 0; % 初始狀態(tài)轉(zhuǎn)速為0 u_history zeros(steps, 1); y_history zeros(steps, 1); x_history zeros(steps, 1); % 手動(dòng)實(shí)現(xiàn)仿真循環(huán)以便觀察每一步 for k 1:steps % 當(dāng)前參考值 r ref_signal(k); % 使用MPC控制器計(jì)算最優(yōu)控制量 % 注意mpcobj是控制器對(duì)象它內(nèi)部會(huì)維護(hù)狀態(tài)估計(jì)這里我們使用完美狀態(tài)反饋即x % 在實(shí)際中需要用狀態(tài)觀測(cè)器估計(jì)x [u, info] mpcmove(mpcobj, x, r); % 記錄 u_history(k) u; y_history(k) C * x; % 當(dāng)前輸出 x_history(k) x; % 使用離散模型更新系統(tǒng)狀態(tài)模擬被控對(duì)象 x A * x B * u; end % 繪制結(jié)果 time (0:steps-1) * mpc_Ts; figure; subplot(2,1,1); plot(time, ref_signal, r--, LineWidth, 1.5, DisplayName, 參考轉(zhuǎn)速); hold on; plot(time, y_history, b-, LineWidth, 1.5, DisplayName, 實(shí)際轉(zhuǎn)速); xlabel(時(shí)間 (s)); ylabel(轉(zhuǎn)速 (rad/s)); title(MPC控制效果 - 輸出跟蹤); legend(Location, best); grid on; subplot(2,1,2); stairs(time, u_history, k-, LineWidth, 1.5); xlabel(時(shí)間 (s)); ylabel(控制電壓 (V)); title(控制輸入); grid on;這段代碼的幾點(diǎn)關(guān)鍵解釋和避坑指南mpc函數(shù)參數(shù)prediction_horizon預(yù)測(cè)時(shí)域通常設(shè)為系統(tǒng)過(guò)渡過(guò)程時(shí)間的1.5-2倍。control_horizon控制時(shí)域可以小于預(yù)測(cè)時(shí)域以降低優(yōu)化問(wèn)題維度。通常控制時(shí)域后的控制量假設(shè)保持不變。狀態(tài)反饋例子中我們假設(shè)狀態(tài)x可直接測(cè)量y x?,F(xiàn)實(shí)中更多狀態(tài)不可測(cè)必須設(shè)計(jì)狀態(tài)觀測(cè)器如卡爾曼濾波器。mpc對(duì)象可以配置內(nèi)置的觀測(cè)器這是實(shí)際應(yīng)用中的關(guān)鍵一步。mpcmove函數(shù)這是MPC的核心計(jì)算函數(shù)。每次調(diào)用它都會(huì)基于內(nèi)部維護(hù)的模型和狀態(tài)估計(jì)求解一個(gè)QP問(wèn)題并返回當(dāng)前時(shí)刻的最優(yōu)控制量u。info結(jié)構(gòu)體包含了優(yōu)化問(wèn)題的詳細(xì)信息如是否可行、性能指標(biāo)值等調(diào)試時(shí)務(wù)必檢查info.ExitFlag確保優(yōu)化求解成功通常為正值。約束違反如果優(yōu)化問(wèn)題因約束過(guò)緊而不可行mpc對(duì)象會(huì)嘗試放松約束如果配置允許或返回錯(cuò)誤。在調(diào)試初期可以適當(dāng)放寬約束確??刂破髂苷9ぷ髟僦鸩绞站o。5. 進(jìn)階話題非線性MPC與自定義優(yōu)化求解當(dāng)你不得不面對(duì)非線性系統(tǒng)時(shí)Matlab提供了nlmpc對(duì)象。其使用流程與線性MPC類似但需要你提供描述系統(tǒng)動(dòng)力學(xué)的非線性函數(shù)句柄。5.1 非線性MPC對(duì)象創(chuàng)建與配置% 定義狀態(tài)數(shù)、輸入數(shù)、輸出數(shù) nx 2; nu 1; ny 1; % 創(chuàng)建非線性MPC對(duì)象 nlobj nlmpc(nx, ny, nu); % 配置參數(shù) nlobj.Ts Ts; % 采樣時(shí)間 nlobj.PredictionHorizon 20; nlobj.ControlHorizon 5; % 指定狀態(tài)函數(shù)和輸出函數(shù)需要單獨(dú)編寫(xiě)函數(shù)文件 nlobj.Model.StateFcn myStateFcn; % 描述 x(k1) f(x(k), u(k)) nlobj.Model.OutputFcn myOutputFcn; % 描述 y(k) h(x(k)) % 設(shè)置約束 nlobj.ManipulatedVariables.Min -10; nlobj.ManipulatedVariables.Max 10; % 設(shè)置權(quán)重 nlobj.Weights.OutputVariables 10; nlobj.Weights.ManipulatedVariablesRate 0.1; % 驗(yàn)證模型函數(shù)重要步驟 x0 [0; 0]; % 初始狀態(tài) u0 0; % 初始輸入 validateFcns(nlobj, x0, u0);其中myStateFcn.m和myOutputFcn.m需要你根據(jù)非線性系統(tǒng)編寫(xiě)。5.2 非線性MPC的求解挑戰(zhàn)與技巧非線性MPC的求解通常使用序列二次規(guī)劃SQP或內(nèi)點(diǎn)法。在Matlab中可以通過(guò)nlmpcmove或nlmpcmoveForces如果使用FORCES Pro求解器函數(shù)進(jìn)行計(jì)算。非線性MPC的三大挑戰(zhàn)與應(yīng)對(duì)策略實(shí)時(shí)性NLP求解耗時(shí)遠(yuǎn)大于QP。必須仔細(xì)選擇預(yù)測(cè)時(shí)域和控制時(shí)域不宜過(guò)長(zhǎng)。使用更高效的求解器如fmincon的特定配置或第三方求解器如IPOPT、FORCES Pro并利用代碼生成技術(shù)。局部最優(yōu)NLP可能收斂到局部最優(yōu)解而非全局最優(yōu)。提供良好的初始猜測(cè)例如使用上一時(shí)刻的解作為當(dāng)前時(shí)刻優(yōu)化的初始點(diǎn)至關(guān)重要。nlmpcmove的x0和mv0參數(shù)就是用于此目的。數(shù)值穩(wěn)定性非線性函數(shù)的雅可比矩陣導(dǎo)數(shù)如果計(jì)算不準(zhǔn)確或條件數(shù)很差會(huì)導(dǎo)致求解失敗。確保你的狀態(tài)函數(shù)和輸出函數(shù)是平滑可導(dǎo)的并考慮使用自動(dòng)微分工具來(lái)提供精確的導(dǎo)數(shù)。一個(gè)重要的調(diào)試技巧在正式閉環(huán)運(yùn)行前先在一個(gè)開(kāi)環(huán)的環(huán)境下測(cè)試你的非線性MPC控制器。給定一個(gè)初始狀態(tài)和一系列參考值調(diào)用nlmpcmove并檢查其計(jì)算時(shí)間、退出標(biāo)志和生成的控制序列是否合理。這能幫助你提前發(fā)現(xiàn)模型函數(shù)或配置中的問(wèn)題。6. 模型失配與魯棒性當(dāng)模型不完美時(shí)怎么辦我們之前討論都基于一個(gè)理想假設(shè)模型完全精確。但現(xiàn)實(shí)中模型失配Model-Plant Mismatch無(wú)處不在——參數(shù)漂移、未建模動(dòng)態(tài)、外部擾動(dòng)等。一個(gè)優(yōu)秀的MPC設(shè)計(jì)必須考慮魯棒性。6.1 模型失配的典型影響穩(wěn)態(tài)誤差即使有積分動(dòng)作模型增益不準(zhǔn)確也可能導(dǎo)致輸出無(wú)法精確跟蹤參考值。性能下降響應(yīng)變慢、超調(diào)增大或出現(xiàn)振蕩。約束違反基于錯(cuò)誤模型的預(yù)測(cè)可能使控制器低估或高估某些變量導(dǎo)致實(shí)際運(yùn)行中突破安全約束這是非常危險(xiǎn)的。不穩(wěn)定嚴(yán)重的模型失配可能導(dǎo)致閉環(huán)系統(tǒng)不穩(wěn)定。6.2 增強(qiáng)MPC魯棒性的實(shí)用方法狀態(tài)估計(jì)與擾動(dòng)模型這是最有效的手段之一。在狀態(tài)觀測(cè)器如卡爾曼濾波器中不僅估計(jì)狀態(tài)x還額外估計(jì)一個(gè)輸出擾動(dòng)Output Disturbance或輸入擾動(dòng)Input Disturbance。這個(gè)估計(jì)的擾動(dòng)項(xiàng)會(huì)被反饋到MPC的預(yù)測(cè)模型中用于補(bǔ)償模型誤差和慢變擾動(dòng)。Matlab的MPC工具箱默認(rèn)就包含一個(gè)擾動(dòng)模型。軟約束Soft Constraints對(duì)于關(guān)鍵的狀態(tài)或輸出約束將其設(shè)為“軟約束”。這意味著允許約束被輕微違反但在目標(biāo)函數(shù)中會(huì)對(duì)違反程度施加一個(gè)很大的懲罰。這樣當(dāng)模型失配或突發(fā)擾動(dòng)導(dǎo)致約束沖突時(shí)優(yōu)化問(wèn)題仍然是可行的控制器會(huì)盡力滿足約束但優(yōu)先保證問(wèn)題可解避免控制律中斷。在Matlab中可以通過(guò)設(shè)置mpcobj.Constraints中相關(guān)屬性的MinECR,MaxECR約束松弛優(yōu)先級(jí)來(lái)實(shí)現(xiàn)。魯棒MPCRobust MPC這是一種更高級(jí)的方法它 explicitly 考慮模型的不確定性例如參數(shù)在一個(gè)區(qū)間內(nèi)變化并求解一個(gè) min-max 優(yōu)化問(wèn)題保證在最壞情況下的性能。但這會(huì)極大地增加計(jì)算復(fù)雜度實(shí)際應(yīng)用較少。自適應(yīng)MPC在線更新模型參數(shù)。這需要一套可靠的系統(tǒng)辨識(shí)算法實(shí)時(shí)根據(jù)輸入輸出數(shù)據(jù)修正模型A, B的參數(shù)。復(fù)雜度高僅適用于參數(shù)緩慢變化且激勵(lì)充分的場(chǎng)景。在實(shí)際項(xiàng)目中我的經(jīng)驗(yàn)是優(yōu)先采用“狀態(tài)估計(jì)含擾動(dòng)模型 軟約束”的組合。這能解決90%以上的模型失配和抗干擾問(wèn)題。務(wù)必在仿真中測(cè)試控制器在不同程度的模型誤差如將B矩陣放大或縮小20%和加入階躍擾動(dòng)下的表現(xiàn)這是檢驗(yàn)控制器魯棒性的必要環(huán)節(jié)。7. 從仿真到部署工程化實(shí)現(xiàn)的考量讓MPC在Matlab里跑起來(lái)只是第一步讓它在一個(gè)真實(shí)的嵌入式系統(tǒng)或工業(yè)PLC上穩(wěn)定運(yùn)行是另一回事。代碼生成Matlab Coder和Simulink Coder可以將設(shè)計(jì)好的MPC控制器特別是線性MPC生成高效的C/C代碼。這是部署到實(shí)時(shí)系統(tǒng)的標(biāo)準(zhǔn)路徑。生成代碼前務(wù)必用buildInstrumentedMex和showInstrumentationResults分析數(shù)值范圍為定點(diǎn)化做準(zhǔn)備。定點(diǎn)化許多嵌入式處理器不支持浮點(diǎn)運(yùn)算或浮點(diǎn)運(yùn)算較慢。需要將生成的浮點(diǎn)代碼轉(zhuǎn)換為定點(diǎn)Fixed-Point代碼。這需要仔細(xì)分析所有變量的動(dòng)態(tài)范圍選擇合適的字長(zhǎng)和小數(shù)位以避免溢出和精度損失。Matlab Fixed-Point Designer工具箱可以輔助完成這項(xiàng)工作。求解器選擇與集成對(duì)于線性MPC生成的代碼會(huì)嵌入一個(gè)QP求解器通常是mpcQPSolver。確保目標(biāo)平臺(tái)有足夠的計(jì)算能力和內(nèi)存來(lái)運(yùn)行它。對(duì)于非線性MPC可能需要集成第三方NLP求解器如ACADO、FORCES Pro的嵌入式版本這更具挑戰(zhàn)性。采樣時(shí)間同步確??刂破鞯膱?zhí)行周期嚴(yán)格與物理世界的采樣時(shí)間同步。在實(shí)時(shí)操作系統(tǒng)中這通常通過(guò)高精度定時(shí)器或中斷服務(wù)程序來(lái)實(shí)現(xiàn)。安全與監(jiān)控部署的控制器必須包含完善的監(jiān)控邏輯檢查優(yōu)化求解器是否成功退出info.ExitFlag、控制輸出是否在安全范圍內(nèi)、執(zhí)行器是否故障等。一旦異常應(yīng)能無(wú)縫切換到備份的安全控制器如簡(jiǎn)單的PID或保位模式。從離散線性模型到非線性模型從理論推導(dǎo)到Matlab實(shí)現(xiàn)再到魯棒性設(shè)計(jì)和工程部署模型預(yù)測(cè)控制是一個(gè)環(huán)環(huán)相扣的體系。成功的MPC應(yīng)用始于一個(gè)“足夠好”的模型成于對(duì)約束和權(quán)重的精心調(diào)節(jié)終于穩(wěn)定可靠的工程實(shí)現(xiàn)。希望這篇結(jié)合了原理與實(shí)戰(zhàn)、經(jīng)驗(yàn)與代碼的梳理能為你搭建一座通往MPC自如應(yīng)用的堅(jiān)實(shí)橋梁。記住多仿真、多調(diào)試、從小系統(tǒng)開(kāi)始積累經(jīng)驗(yàn)是掌握這門(mén)控制藝術(shù)的不二法門(mén)。