自適應控制算法講解-案例(附C代碼)

?

目錄

?一、自適應控制算法的基本原理

?二、自適應控制算法分類

三、案例

?3.1自適應PID控制

1) 模型識別

2)動態調整PID參數邏輯

3)PID控制器


? 自適應控制算法是一種高級控制算法,用于處理那些參數不確定或者動態變化的系統。這類算法能夠根據系統性能的實時反饋自動調整控制器參數,以保持系統性能在最優或接近最優狀態。自適應控制特別適用于模型不準確、系統參數隨時間變化或環境條件變化顯著的情況。?

一、自適應控制算法的基本原理

? ? 自適應控制算法的核心思想是在控制過程中不斷地識別系統的動態特性,并相應地調整控制策略,以適應這些變化。這通常涉及兩個主要步驟:

1)參數估計或系統識別

算法實時估計系統參數或識別系統模型。這可以通過各種方法實現,如最小二乘法、梯度下降法或其他優化技術。

2)控制器參數調整

基于估計出的系統參數或識別出的模型,算法調整控制器的參數,以改善系統性能。

?二、自適應控制算法分類

?1)模型參考自適應控制(MRAC)

?該方法設計一個期望的模型參考系統,該系統表現出期望的動態性能。控制策略的目標是調整控制器參數,使實際系統的輸出跟蹤模型參考輸出

2)自校正控制(STR)

? ?該方法不需要模型參考。相反,它直接在控制律中引入自適應機制,根據系統輸出和控制輸入的實時數據調整控制器參數,以達到期望的控制目標。

三、案例

?3.1自適應PID控制

根據實時反饋動態調整其PID參數(比例Kp、積分Ki、微分Kd)以適應系統變化的控制器。

1) 模型識別

動態估計系統的模型參數,以便更準確地調整PID參數

假設有一個線性系統模型

  • y(t) 是在時間 t 的系統輸出。
  • θ 是系統模型參數的向量,這是我們想要估計的。
  • ?(t) 是包含系統輸入和/或輸出歷史值的特征向量。
  • ε(t) 是測量噪聲。

采用遞歸最小二乘法RLS進行模型動態參數更新:

參數估計更新公式:

其中

是基于上一時刻參數估計的輸出預測,K(t) 是增益向量,用于調整估計的更新量。

其中增益K(t) 的計算為:

λ 是遺忘因子,用于調整歷史數據的權重,P(t?1) 是參數估計誤差協方差矩陣。

其中協方差矩陣P(t?1) 的更新公式:

?因此通過上述的遞歸可實現模型的參數估計。

# 控制輸入:u  系統輸出:y
void RLS_Update(float u, float y) {static float phi = 0.0; // 系統輸入(或狀態)的歷史值// 計算增益float K = P * phi / (lambda + phi * P * phi);// 更新參數估計theta_hat += K * (y - theta_hat * phi);// 更新誤差協方差P = (1 - K * phi) * P / lambda;// 更新歷史值phi = u; // 假設u是當前的輸入(或狀態)
}//輸出更新的模型參數theta_hat 

2)動態調整PID參數邏輯

根據模型識別的結果和系統性能反饋,設計更精細的控制參數調整邏輯:

void adaptPIDParameters(float error, float dError, float modelParams) {// 根據誤差、誤差變化率和模型參數調整PID參數// 根據誤差的絕對值調整Kpif (abs(error) > 5) {Kp += 0.1;  // 如果誤差較大,增加Kp} else if (abs(error) < 2) {Kp -= 0.1;  // 如果誤差較小,減小Kp}// 確保Kp不會變得太小或太大if (Kp < 0.1) Kp = 0.1;if (Kp > 10.0) Kp = 10.0;// 可能需要更多條件和調整策略
}

3)PID控制器

float pidControl(float setpoint, float temperature) {float error = setpoint - temperature;integral += error;  // 積分項float derivative = error - prev_error;  // 微分項prev_error = error;return Kp*error + Ki*integral + Kd*derivative;
}
int main() {float input, output; // 控制輸入和輸出// RLS算法參數float lambda = 0.99; // 遺忘因子,一般選擇接近1的值float P = 1.0; // 估計誤差協方差的初始值float theta_hat = 0.0; // 參數估計的初始值,模型參數modelParamsfor (int cycle = 0; cycle < 100; cycle++) {// 模擬獲取系統輸出(實際該部分不存在,通過傳感器測量反饋輸出)output = simulateSystem(input);// 模型識別 modelIdentificationRLS_Update(input, output);// 根據當前誤差和模型參數調整PID參數float error = setpoint - output;float dError = error - prev_error;adaptPIDParameters(error, dError, theta_hat);// 計算控制輸入input = pidControl(error, dError);// 模擬將控制輸入應用到系統// 更新系統狀態}return 0;
}

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

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

相關文章

SwiftUI 在 App 中彈出全局消息橫幅(下)

功能需求 在 SwiftUI 開發的 App 界面中,有時我們需要在全局層面向用戶展示一些消息: 如上圖所示:我們彈出的全局消息橫幅位于所有視圖之上,這意味這它不會被任何東西所遮擋;而且用戶可以點擊該橫幅關閉它。這是怎么做到的呢? 在本篇博文中,您將學到以下內容 功能需求…

iOS-設置指定邊圓角(左上、左下等)

以UILabel舉例&#xff0c;效果圖如下&#xff1a; 方法一僅支持iOS11以上 方法一&#xff1a; [_sleepStateLabel.layer setMasksToBounds:YES]; [_sleepStateLabel.layer setCornerRadius:12]; [_sleepStateLabel.layer setMaskedCorners:kCALayerMinXMinYCorner | kCALaye…

個人項目介紹3:火車站篇

項目需求&#xff1a; 一比一精確顯示火車站主建筑和站臺模型。實時響應車輛信息&#xff08;上水&#xff0c;吸污&#xff0c;換乘&#xff09;并同步顯示&#xff0c;實時響應車輛進出站信息&#xff0c;并以動畫形式模擬。實時響應報警信息&#xff0c;并能在三位中顯示&a…

#WEB前端(CCS選擇器)

1.實驗&#xff1a;CCS選擇器 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; 子代選擇器、后代選擇器、相鄰兄弟選擇器、類選擇器、偽元素選擇器&#xff08;鼠標懸停&#xff09;、ID選擇器、調用選擇器&#xff08;全選&#xff09; 4.代碼&#xff1a; <!DOCTYPE html…

java generics(泛型)

在定義類、接口和方法時&#xff0c;泛型使類型(類和接口)成為參數。與方法聲明中使用的形參非常相似&#xff0c;類型參數為您提供了一種方法&#xff0c;可以用不同的輸入重用相同的代碼。不同之處在于形式參數的輸入是值&#xff0c;而類型參數的輸入是類型。 使用泛型有許…

Elasticsearch7.17.7操作geo_point類型數據

目前使用的elasticsearch版本是7.17.7 有一個index&#xff0c;其中mapping的內容如下&#xff1a; {"city" : {"aliases" : { },"mappings" : {"properties" : {"city" : {"type" : "keyword"},"…

嵌入式學習 Day 29

函數: 1.函數的定義 2.函數的調用 3.函數的聲明 1.函數傳參: 1.賦值傳遞&#xff08;復制傳遞&#xff09; 函數體內部想要使用函數體外部變量值的時候使用復制傳遞 2.全局變量傳遞 3.地址傳遞 函數體內部想要修改函數體外部變量值的時候使用地址傳遞 函數…

代碼隨想錄算法訓練營第48天| Leetcode 121. 買賣股票的最佳時機、Leetcode 122.買賣股票的最佳時機II

文章目錄 Leetcode 121. 買賣股票的最佳時機Leetcode 122.買賣股票的最佳時機II Leetcode 121. 買賣股票的最佳時機 題目鏈接&#xff1a; Leetcode 121. 買賣股票的最佳時機 題目描述&#xff1a; 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股…

W5300驅動說明

W5300是一款帶有硬件協議棧的網絡芯片&#xff0c;內部擁有128K的緩存&#xff0c;最大支持8路socket通信&#xff0c;與MCU之間通過16位數據總線通信&#xff0c;通信速度遠超W5500之類以SPI作為通信接口的網絡芯片&#xff0c;特別適合對高速網絡傳輸有需求的應用。 本次使用…

使用 helm repo add istio添加了一個helm chart repo,如何查看istio的版本呢

1. 添加chart repo helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update2. 查看版本 helm search repo istio 3. 查看版本詳細信息 helm show chart istio/cni 4. 查看某個chart的歷史版本 helm search repo <chart-name> --…

【Linux】信號的保存

&#x1f34e;個人博客&#xff1a;個人主頁 &#x1f3c6;個人專欄&#xff1a;Linux ?? 功不唐捐&#xff0c;玉汝于成 目錄 前言 正文 信號在Linux中的保存主要涉及方面 信號的類型&#xff1a; 信號處理程序&#xff1a; 信號的傳遞和處理&#xff1a; 信號的阻…

面試官:你用過Collections工具類嗎?

Collections工具類 1. 常用的 Collections 方法2. 代碼示例 Java中的 Collections 工具類提供了一系列靜態方法&#xff0c;用于對集合進行各種操作&#xff0c;如排序、查找、替換等。下面我們來看一些 Collections 工具類中常用的API和使用示例。 1. 常用的 Collections 方…

回溯算法套路③排列型回溯+N皇后【基礎算法精講 16】

46 . 全排列 鏈接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么確定選了那個數呢? 這里設置一個used表示i選沒選過 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…

2024年【天津市安全員B證】考試內容及天津市安全員B證實操考試視頻

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 天津市安全員B證考試內容根據新天津市安全員B證考試大綱要求&#xff0c;安全生產模擬考試一點通將天津市安全員B證模擬考試試題進行匯編&#xff0c;組成一套天津市安全員B證全真模擬考試試題&#xff0c;學員可通過…

《Improving Calibration for Long-Tailed Recognition》閱讀筆記

論文標題 《Improving Calibration for Long-Tailed Recognition》 改進長尾識別的校準工作 作者 Zhisheng Zhong、 Jiequan Cui、Shu Liu 和 Jiaya Jia 香港中文大學和 SmartMore 初讀 摘要 深度神經網絡在訓練數據集類別極度不平衡時可能會表現不佳。最近&#xff0c…

pydub、playsound播放聲音;gradio、streamlit頁面播放聲音;gradio 頁面圖像、視頻及調用攝像頭

1、pydub from pydub import AudioSegment from pydub.playback import playsong AudioSegment.from_wav(r"C:\Users\loong\Downloads\zh.wav") play(song)2、playsound from playsound import playsoundplaysound(r"voice.wav")3、streamlit import s…

Linux學習:初識Linux

目錄 1. 引子&#xff1a;1.1 簡述&#xff1a;操作系統1.2 學習工具 2. Linux操作系統中的一些基礎概念與指令2.1 簡單指令2.2 ls指令與文件2.3 cd指令與目錄2.4 文件目錄的新建與刪除指令2.5 補充指令1&#xff1a;2.6 文件編輯與拷貝剪切2.7 文件的查看2.8 時間相關指令2.9 …

22.基于springboot + vue實現的前后端分離-汽車票網上預定系統(項目 + 論文PPT)

項目介紹 系統是一個B/S模式系統&#xff0c;采用Spring Boot框架&#xff0c;MySQL 數據庫設計開發&#xff0c;充分保證系統的穩定性。系統具有界面清晰、操作簡單&#xff0c;功能齊全的特點&#xff0c;使得汽車票網上預訂系統管理工作系統化、規范化。本系統的使用使管理人…

JavaScript作用域及預解析

文章目錄 1. 作用域介紹2. 變量的作用域*3. JS中沒有塊級作用域4. 作用域鏈5. 預解析預解析案例 1. 作用域介紹 全局作用域局部作用域相同的變量名稱在不同的作用域中是不會相互影響的&#xff01; 2. 變量的作用域 全局變量&#xff1a;在全局下都可以使用&#xff1b;局部變…

藍橋杯——外賣店優先級

外賣店優先級 題目分析 這一題一看N&#xff0c;M&#xff0c;T的范圍就知道不能暴力&#xff0c;要討巧&#xff0c;怎么討巧是重點。正常的思路是第一層for循環遍歷訂單&#xff08;或者外賣店&#xff09;&#xff0c;第二層for循環遍歷外賣店&#xff08;或者訂單&#x…