[科研理論]無人機底層控制算法PID、LQR、MPC解析

文章目錄

  • 1. PX4飛控PID簡介
    • 1.1 位置控制器
    • 1.2 速度控制器
    • 1.3 加速度和yaw轉到姿態
    • 1.4 姿態控制器
    • 1.5 角速率控制器
  • 2. 線性二次型優化(LQR)控制
  • 3. 模型預測控制MPC/NMPC
    • 3.1 MPC
    • 3.2 NMPC

1. PX4飛控PID簡介

相關鏈接:PX4官方中文文檔、PID概念(不了解PID的可以看看這個或者翻自控書吧)

px4飛控串級PID算法框圖

PX4使用了串級PID控制器,串級PID通過分而治之的策略,將復雜控制問題分解為多個簡單子問題,在響應速度、抗干擾性、穩定性和工程實現上均優于單級PID。比如姿態環處理的IMU噪聲不會影響到位置環,同時各環PID參數可獨立調諧,內環保證局部穩定(如機體角速率收斂),外環在此基礎上優化全局性能。避免單級PID因參數耦合導致的振蕩或發散。

1.1 位置控制器

位置控制器

在位置外環中只使用了一個P控制器和一個限幅函數。使用當前的位置估計和期望位置相減得到誤差,然后經過P控制器和限幅得到期望速度,輸出到速度內環。

為什么外環只需要一個P控制環呢?
那是因為外環的核心任務是“設定目標”,而非快速跟蹤。核心任務是將位置誤差線性轉化為速度指令,無需積分或微分,速度內環的PID會補償外環的不足,避免振蕩和噪聲放大。若外環加入I或D控制,積分會導致超調或延遲,微分會放大噪聲,反而破壞系統穩定性,因此簡化外環、強化內環是最優策略。

QGC對應位置

1.2 速度控制器

px4速度控制器

速度內環控制器就熟悉一點,PID大套餐上齊了。首先估計速度直接進入LPF(低通濾波器,防止高頻干擾微分結果)然后計算微分,進入D環節,這一部分是防止輸出突變以及提前控制防止震蕩,其實也不難理解,就是對當前的估計做了微分反映了數據的運動趨勢;然后估計速度與期望速度作差得到誤差進入積分環節,這部分是**消除穩態誤差(如抵抗恒定風阻導致的速度偏差),其實就是識別到誤差長時間沒有歸零就加大矯正力度;最后是誤差進入P環節快速響應速度誤差**。

為什么內環使用PID控制器?速度內環用PID控制,因為它需要快速精準地跟蹤速度指令,比例項響應誤差,積分項消除靜差,微分項抑制擾動,確保內環動態性能足夠支撐外環。

總結:外環P控制像“指揮官”設定宏觀目標,內環PID像“執行者”處理細節,二者分工明確,避免單級PID的復雜性和不穩定性。

QGC對應位置

1.3 加速度和yaw轉到姿態

由于無人機的yaw和速度加速度在動力學上天然解耦,yaw角在規劃器中是可以單獨規劃的,不過常見規劃器還是按照軌跡的切向方向來的。圖中的yaw角也是直接從規劃器來的,而不是像pitch、roll需要從加速度中提取。

1.4 姿態控制器

PX4姿態控制器

多旋翼姿態控制器基于四元數(quaternion)設計,通過誤差四元數計算期望角速率,最終輸出飽和的角速率命令。

1.誤差計算(通過四元數乘法實現):

四元數乘法如下(實部虛部分開):

這里分為兩路,提取了實部的符號乘以虛部保證最短旋轉路徑(具體可以參考四元數的幾何表示,q和-q表示一樣的終端狀態,但是旋轉方向有大小區別,q可以保證旋轉最短角度):

2.P控制器構造

角速度 Ω 的本質是旋轉偏差隨時間的變化率。在控制系統中,我們希望角速度命令與姿態誤差成比例關系,即**角速度的方向應對準旋轉軸,大小應與旋轉角度偏差成正比**。

觀察四元數的幾何表示:

四元數的物理含義

可以看到w是影響旋轉角度大小,虛部影響旋轉軸方向還有旋轉角度大小。當誤差特別小時,可以使用小角度假設,此時的虛部等于1/2θn,那么根據前面的構造,可以進一步構造一個有物理意義的P系數即2P。

這個時候P的物理意義是姿態誤差每增加一弧度,角速度增加P弧度每秒。最后再限幅保證安全。

這里為什么選擇四元數而不選擇歐拉角呢?
主要有下列幾點原因:1.歐拉角有萬向節死鎖問題。2.四元數是線性計算,歐拉角是三角函數計算,更加復雜。3.通過四元數插值(如SLERP)可平滑過渡姿態,且誤差四元數的實部符號能自動選擇最短旋轉路徑。

這一環可以自動調參:自動調參,但是感覺對大軸距的飛機效果不好。

QGC調參位置

1.5 角速率控制器

K-PID:比例項(K)獨立于積分(I)和微分(D)路徑,直接作用于誤差信號。無人機需要快速響應姿態誤差(比例項K直接作用),同時通過積分消除穩態誤差(如風力干擾),微分抑制振蕩。

這一環可以自動調參:自動調參,但是感覺對大軸距的飛機效果不好。

QGC調參位置

計算完期望的體速率和推力之后,使用旋翼的模型計算每個電機的轉速:

由電機轉速得到力矩和推力公式:

對上式求逆得到每個電機轉速:

2. 線性二次型優化(LQR)控制

無人機的底層控制算法中,LQR(Linear Quadratic Regulator,線性二次調節器)是一種基于狀態空間模型的優化控制方法,廣泛應用于姿態、位置等底層控制環節。LQR是一種最優控制算法,通過最小化一個“代價函數”來求解最優控制輸入。其核心思想是:

  • 線性系統:無人機動力學模型在平衡點附近可線性化(如懸停狀態附近)。
  • 二次代價函數:平衡狀態誤差和控制輸入的能耗,實現“高性能+低能耗”的折中。

由于限制為一個線性系統,所以這個狀態方程就不會太復雜,以無人機懸停為例。

無人機的狀態方程(此時當做質點):

設x為無人機的位置、速度,A為無人機的狀態轉移矩陣,B為輸入矩陣(描述控制輸入對狀態的影響),u為無人機的輸入,這里應該是加速度。

代價函數為:

最小化跟蹤誤差以及輸入加速度(節省能量)。Q:增大對角元素會強制對應狀態快速收斂。R:增大對角元素會限制控制輸入的幅值。

這個目標函數是一個標準的二次型優化問題(可以類比于二次函數),是有解析解的。下面是推導過程:

1.先構建一個關于狀態向量的值函數(其中P 是對稱正定矩陣,需要求解):

2.帶入HJB方程(哈密頓-雅各比-貝爾曼方程)

這個方程表達了 從當前狀態出發,若采取最優控制策略,所能達到的最小代價應滿足某種微分方程。

再把值函數帶入得到:

然后對這個HJB方程對輸入u求導:

得到

再構造一個反饋增益矩陣K:

再將結果帶入HJB方程得到:

最終求得

**總結:**LQR通過數學模型和優化理論,為無人機提供了一種高效、穩定的底層控制方案。其核心是狀態反饋和代價函數最小化,適合需要精確建模和性能優化的場景。

3. 模型預測控制MPC/NMPC

MPC(Model Predictive Control,模型預測控制)是現代控制中非常重要的一個方法,特別適用于多變量系統、有約束系統或需要提前規劃行為的場景,比如無人車路徑跟蹤、無人機避障、工業過程控制等。MPC 是一種滾動優化控制策略。它的基本思想是:

  • 使用系統模型預測未來狀態變化(例如未來幾秒或幾個采樣周期);
  • 基于預測結果最小化一個代價函數(類似 LQR 的目標函數);
  • 求解一個有限時域的優化問題,得到一組未來控制序列;
  • 只執行第一個控制輸入,然后重新預測、重新優化,循環進行。

這就是 MPC 的“預測-優化-執行-滾動”機制。

如果系統方程是線性的就是MPC,如果非線性就是NMPC。

3.1 MPC

還是以無人機懸停為例,且暫時考慮一維模型,狀態變量:

控制輸入為加速度:

系統模型(離散)為:

代價函數為:

求解過程:

1.預測:

給定當前狀態𝑥0,可以展開出整個時域的狀態預測:

定義控制向量:

將整個狀態預測寫成矩陣形式:

2.優化求解
將預測狀態代入代價函數:

代入狀態展開:

展開為標準形式:

同時考慮一些必要的硬件約束,調用優化庫進行求解得到數值解。

3.執行

執行求解后的u_0,即控制向量的第一個元素。

總流程

每個控制周期:

  1. 讀取當前狀態𝑥0建預測矩陣 𝑆𝑥,𝑆𝑢 構造代價函數和約束
  2. 解二次規劃問題,得到控制向量 𝑢?
  3. 僅執行第一個控制輸入 𝑢_0?
  4. 系統前進一步,滾動窗口,重復上述步驟

3.2 NMPC

仍然是無人機懸停為例,使用NMPC直接控制無人機的電機轉速。

狀態變量(12維):

控制變量(4維)

系統模型:

這個M就是1.5節的M矩陣。

代價函數:

然后再寫出擴展過的系統模型,帶入代價函數進行優化求解。

**總結:**LQR就是MPC無約束、無時域限制的特殊形式,而且由于形式簡單,可以準確計算解析解,計算快、準。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI系統性思維復盤概述

核心價值:從“被動思考”到“主動進化”。 基于數據驅動、機器學習和知識圖譜的智能化組織學習系統,它將經驗積累從傳統的主觀性、碎片化模式轉變為客觀性、系統化的科學模式,最終實現從被動應對向主動預防、從經驗決策向數據決策、從個體智慧…

C++繼承(2)

2.基類和派生類間的轉換 ?public繼承的派?類對象可以賦值給基類的指針/基類的引?。這?有個形象的說法叫切?或者切 割。寓意把派?類中基類那部分切出來,基類指針或引?指向的是派?類中切出來的基類那部分。 ? 基類對象不能賦值給派?類對象。 ? 基類的指針或…

easya2a: 一鍵將 LangChain Agent 發布為 A2A 服務

easya2a: 一鍵將 LangChain Agent 發布為 A2A 服務 隨著 A2A (Agent-to-Agent) 協議的發布,相關的實踐項目也逐漸涌現。對于許多希望體驗 A2A 功能,但又擔心學習成本和開發時間的開發者來說,推薦使用 easya2a——一個可以快速、無縫地將現有 …

原學之設計模式- 設計模式來源

引言 各位旅行者們你們好,我是小森,首先我為啥是程序員。學了技術快六年了,但一直都是斷斷續續,本身自己的條件,從2021年11月份開始下載原神,總而言之不了解一些抽卡機制導致退了并且刪除了具體賬號打算重新…

有鹿機器人:AI技術如何重新定義「掃地」這件小事?

當掃地成為一門“技術活”掃地,可能是人類最古老的清潔行為之一。從掃帚到吸塵器,再到今天的無人駕駛清潔設備,我們一直在尋找更高效、更徹底的方式維護環境整潔。但有鹿機器人的出現,讓“掃地”這件事有了新的定義——它不再只是…

62.不同路徑

dp問題描述 62.不同路徑 確定本題的狀態表示 dp[i,j]表示的是從左上角走到這個位置的路徑條數 確定本題的狀態轉移方程 根據已知條件:dp[0,0]1,dp[0,1]1,dp[1,0]1 本題的狀態轉移方程是: dp[i,j]dp[i,j-1]dp[i-1,j] 填表求…

python---包

文章目錄包的基本概念創建包的基本結構__init__.py文件導入包和模塊相對導入(在包內部使用)導入包和導入模塊的區別包是Python中組織模塊的一種方式,它允許你將相關的模塊分組在一起,形成一個層次結構。包的主要目的是幫助避免命名…

超詳細yolov8/11-obb旋轉框全流程概述:配置環境、數據標注、訓練、驗證/預測、onnx部署(c++/python)詳解

因為yolo的檢測/分割/姿態/旋轉/分類模型的環境配置、訓練、推理預測等命令非常類似,這里不再詳細敘述環境配置,主要參考【超詳細yolo8/11-detect目標檢測全流程概述:配置環境、數據標注、訓練、驗證/預測、onnx部署(c/python)詳解】&#xf…

創世理論達成 全關聯的動態振動網:量子世界的“底層邏輯”

全關聯的動態振動網:量子世界的“底層邏輯”(不帶公式,超級詳細)要真正理解量子世界的本質,我們需要跳出“粒子”和“波”的傳統框架,從量子場論的核心邏輯出發,用最生活化的類比和日常經驗&…

銀行間交易IMIX協議加密相關

加密流程 字段篩選與序列化 提取業務報文中標記為敏感的字段&#xff0c;生成待加密的數據塊 <!-- 示例&#xff1a;原始交易指令 --> <Order><Symbol>ABC123</Symbol> <!-- 非敏感 --><Price>100.50</Price> …

ABM和強化學習-2015年全國大學生數學建模競賽B題

多智能體系統&#xff08;Agent-Based Model, ABM&#xff09;和強化學習&#xff08;Reinforcement Learning, RL&#xff09;是兩個不同但可結合的概念&#xff0c;尤其在復雜系統建模和人工智能領域有重要應用。下面分別解釋它們&#xff0c;并說明二者的關聯&#xff1a; …

ALBEF/BLIP/BLIP2/Instruct BLIP/X Instruct BLIP

ALBEF 研究動機 ALBEF之前的一些方式&#xff0c; 視覺分支基本都是基于 dector的方式&#xff08;檢出目標框&#xff09;&#xff0c;如下圖所示&#xff0c;由于大量的數據沒有標框&#xff0c;因此視覺預訓練的受限于dector的檢測方式。創新點 能不能不再采用dector的方式訓…

數據結構——排序算法(簡單篇:冒泡排序、選擇排序、插入排序)

1?? 冒泡排序&#xff08;Bubble Sort&#xff09; 基本思想 重復地比較相鄰的兩個元素&#xff0c;如果順序錯誤就交換它們。一趟冒泡結束后&#xff0c;最大&#xff08;或最小&#xff09;的元素會“浮”到末尾。下一趟時可以少比較一次&#xff0c;因為最后的元素已經排好…

配置 Docker 鏡像加速,解決 docker pull 拉取鏡像失敗、docker search 查詢鏡像失敗等問題

一、概述 記錄時間 [2025-08-16] 在 Docker 學習中&#xff0c;可能會遇到諸如 docker 遠程倉庫無法訪問、docker pull 拉取鏡像失敗、docker search 查詢鏡像失敗等問題。 這是由于國內網絡對 docker 遠程倉庫的訪問受到限制。 那么在國內如何獲取 docker 鏡像呢&#xff1f…

【Python】Python 面向對象編程詳解?

Python 面向對象編程詳解? 文章目錄Python 面向對象編程詳解?前言一、面向對象的基本概念?1.1 類&#xff08;Class&#xff09;?1.2 對象&#xff08;Object&#xff09;?1.3 屬性&#xff08;Attribute&#xff09;?1.4 方法&#xff08;Method&#xff09;?二、類的定…

Redis 緩存和 Redis 分布式鎖

目錄 Redis 緩存 (Caching) 目的 核心邏輯 存儲形式總結 典型場景 Redis 分布式鎖 (Distributed Lock) 目的 核心作用 核心邏輯 典型場景 核心區別總結 Redis 緩存 (Caching) 在Redis中&#xff0c;數據是以鍵值對的形式存儲的&#xff0c;其中鍵總是字符串類型&…

[ java 基礎 ] 了解編程語言的第一步

目錄 一. IDE (1). 使用IDE的原因: (2). 創建和使用: (3). 常用快捷方式與設置 (4). 注釋 (5). 關鍵字 (6). 標識符 (7). 變量 (8). 數據類型 1) 整數類型 2) 浮點類型 3) 布爾類型(boolean) 4) 字符類型(char) 5) 字符串 6) 基本數據類之間的轉換 (9). 運算符…

JavaScript 閉包與遞歸深度解析:從理論到實戰

本文將系統梳理 JavaScript 中閉包與遞歸的核心概念、實戰應用及面試要點,涵蓋課堂知識點、作業實現、面試題解析等內容,幫助你全面掌握這兩大重要概念。 一、閉包:函數與變量的綁定藝術 1.1 閉包的定義與核心特性 閉包是 JavaScript 中一種特殊的語言現象,其核心定義可…

牛 CDR3 單抗:抗病毒領域的 “納米級精準導彈”

一、病毒防御的天然克星病毒感染的核心難題在于其表面的 “糖衣炮彈”—— 以 HIV 為例&#xff0c;其 Env 蛋白表面密集的糖鏈形成物理屏障&#xff0c;傳統抗體難以穿透。而牛 CDR3 單抗的超長 CDR H3 結構&#xff08;50-60 個氨基酸&#xff09;如同 “納米探針”&#xff…

鴻蒙應用開發和Vue網頁開發中生命周期的區別

因為下節課就可以寫講解兩者生命周期代碼的實戰了&#xff0c;寫介紹一下理論方面的區別&#xff1a;鴻蒙應用開發&#xff08;ArkUI范式&#xff09;與Vue網頁開發在生命周期管理上的核心區別&#xff0c;這直接反映了原生OS應用與Web應用在架構哲學和運行環境上的根本差異??…