比PID更絲滑的控制算法&卡內(nèi)基梅隆大學(xué)
本文經(jīng)自動(dòng)駕駛之心公眾號(hào)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
MPC控制算法,全稱Model Predictive Control(模型預(yù)測(cè)控制),是一種基于系統(tǒng)動(dòng)態(tài)模型的控制技術(shù)。它的工作原理是通過數(shù)學(xué)模型預(yù)測(cè)系統(tǒng)的未來行為,并基于這些預(yù)測(cè)結(jié)果來優(yōu)化系統(tǒng)的控制輸入,從而實(shí)現(xiàn)期望的輸出。
MPC控制算法的核心在于其預(yù)測(cè)模型,這個(gè)模型可以根據(jù)系統(tǒng)的當(dāng)前狀態(tài)信息預(yù)測(cè)未來的系統(tǒng)狀態(tài)。預(yù)測(cè)模型的形式并不固定,可以是狀態(tài)空間方程、傳遞函數(shù)、階躍響應(yīng)模型、脈沖響應(yīng)模型、模糊模型等,具體形式取決于被控對(duì)象和需要預(yù)測(cè)的狀態(tài)。
TinyMPC 是一款專為凸模型預(yù)測(cè)控制量身定制的開源求解器,可以較小的內(nèi)存占用提供高速計(jì)算。TinyMPC 在 C++ 中實(shí)現(xiàn),具有最小的依賴性,特別適用于資源受限平臺(tái)上的嵌入式控制和機(jī)器人應(yīng)用程序。TinyMPC 可以處理狀態(tài)和輸入邊界以及二階錐約束。Python、Julia 和 MATLAB 接口可用于幫助為嵌入式系統(tǒng)生成代碼。
機(jī)器人演示
TinyMPC 有助于彌合計(jì)算密集型凸模型預(yù)測(cè)控制與資源受限的處理平臺(tái)之間的差距。將 TinyMPC 集成到計(jì)算能力不足的機(jī)器人中,使它們能夠執(zhí)行敏捷操作并表現(xiàn)出安全行為。
動(dòng)態(tài)避障
TinyMPC 的運(yùn)行速度足夠快,可以在每個(gè)時(shí)間步長(zhǎng)重新線性化約束,從而使其能夠?qū)σ苿?dòng)的障礙物進(jìn)行推理。在左邊,在搖桿末端為中心的虛擬球體在每個(gè)時(shí)間步長(zhǎng)被線性化為一組新的超平面約束。該算法還可以處理任意數(shù)量的任意線性約束。例如,在右側(cè),它在停留在 yz 平面時(shí)避開了搖桿的末端。
極致姿態(tài)恢復(fù)
TinyMPC 可以從極端的初始條件下恢復(fù)。在此示例中,將其與 Crazyflie 2.1's stock controllers進(jìn)行了比較。只有 TinyMPC 能夠推斷出控制極限,從而實(shí)現(xiàn)干凈利落的恢復(fù)操作。
圖 8 跟蹤
我們比較了相同的庫存控制器,以完成不可行的快速 8 字形跟蹤任務(wù)(只有在無人機(jī)更強(qiáng)大的情況下才能完成單個(gè) 8 字形的時(shí)間)。TinyMPC 和 PID 能夠保持直立,但 TinyMPC 的軌跡更接近 8 字形。
微控制器基準(zhǔn)測(cè)試
在微控制器基準(zhǔn)測(cè)試中,TinyMPC 在速度和內(nèi)存占用方面優(yōu)于最先進(jìn)的求解器。我們求解隨機(jī)生成的基于 QP 的 MPC 問題,并將迭代時(shí)間和內(nèi)存占用與 OSQP 進(jìn)行比較。TinyMPC 在 OSQP 上的最大加速是 OSQP 的 8 倍,內(nèi)存要少得多。
TinyMPC 現(xiàn)在也能夠處理圓錐約束!在(b)中,我們將TinyMPC與兩個(gè)現(xiàn)有的具有嵌入式支持的圓錐求解器(SCS和ECOS)對(duì)火箭軟著陸問題進(jìn)行了基準(zhǔn)測(cè)試。TinyMPC 在 SCS 上實(shí)現(xiàn)了 13 倍的平均速度提升,在 ECOS 上實(shí)現(xiàn)了 137 倍的平均速度提升。
實(shí)時(shí)控制要求求解器在嚴(yán)格的時(shí)間窗口內(nèi)返回解決方案。在火箭軟著陸問題上比較了TinyMPC與SCS和ECOS的軌跡跟蹤性能,同時(shí)人為地改變了每個(gè)求解的可用時(shí)間量。在所有控制持續(xù)時(shí)間內(nèi),TinyMPC 的違反約束更少,跟蹤誤差也低于 SCS 和 ECOS。
算法貢獻(xiàn)者:
代碼獲取地址:
GitHub - TinyMPC/TinyMPC: Model-predictive control for microcontrollers