@
一、PID:一種古老的控制方法
基本概念
首先需要簡單理解,什么是控制。
所謂控制,不嚴謹的來說,是使用特定方法,對事物的動態變化起調控作用,以達到我們期望的目標。或者說,達到期望。
具象的說,通過控制,使得物體精准移動到某個位置;抽象的說,我們需要控制對象的特定指標准確快速達到某值。
一般來講,控制需要反饋。接受反饋的控制叫閉環控制,反之叫開環控制。譬如你跑步,兩公里限時10分鍾,看表來適當調整速度就叫閉環,不看表憑着感覺去跑就叫開環。
在上面,我們提及兩個重要的詞:期望、反饋。這兩個概念非常重要,希望大家可以先在這里簡單理解,加深印象,我們后續會反復提及。
其次,引入系統以及兩個重要概念:閉環控制系統和開環控制系統。
閉環控制系統是控制系統的一種類型。具體內容是指:
把控制系統輸出量的一部分或全部,通過一定方法和裝置反送回系統的輸入端,然后將反饋信息與原輸入信息進行比較,再將比較的結果施加於系統進行控制,避免系統偏離預定目標。閉環控制系統利用的是負反饋。
即是由信號正向通路和反饋通路構成閉合回路的自動控制系統,又稱反饋控制系統。
閉環和開環控制系統的區別,在於閉環控制系統在給定控制器一定期望時,引入了系統被控對象的反饋量,即在給定控制量時,衡量被控對象此時的狀態,從而調整控制的值,更快更好的達到我們的期望。
我們總是希望在對系統進行控制時,達到更好的效果,因此,通過特定算法,利用反饋量合理的調整控制量,成為了系統控制的關鍵。一個世紀以來,工程師在工程實踐當中不斷總結,總結出多種自動控制算法。
比例-積分-微分控制,一種誕生於20世紀30年代的算法,如今仍廣泛用於各個行業的工程實踐當中。
在過程控制中,按偏差的比例(P)、積分(I)和微分(D)進行控制的PID控制器(亦稱PID調節器)是應用最為廣泛的一種自動控制器。它具有原理簡單,易於實現,適用面廣,控制參數相互獨立,參數的選定比較簡單等優點;而且在理論上可以證明,對於過程控制的典型對象──“一階滯后+純滯后”與“二階滯后+純滯后”的控制對象,PID控制器是一種最優控制。PID調節規律是連續系統動態品質校正的一種有效方法,它的參數整定方式簡便,結構改變靈活
PID的控制模型與公式如下,其中,控制系統的輸入值為反饋值和目標值,輸出值為控制量。參數分別為Kp、Ki、Kd。
案例展示與公式推導
下面通過一個簡單的例子,來簡單理解PID公式及各參數的意義。
如上圖,我們提出一個問題:讓一個機械臂從水平狀態(初始位置)旋轉,准確達到與水平夾角45度懸停於空中(目標位置)。我們需要給定電機一定電流,使其提供力矩,帶動機械臂旋轉。如何確定電流在各個時刻的大小?
我們知道,假設我們不對整個系統的控制過程建模(動力學分析與逆動力學解算),整個過程中,驅動機械臂旋轉所需要的力矩是未知的(不可直接通過觀測得到)。
一個簡單的方法,假設沒有重力與摩擦力影響,我們在外界對機械臂的角度進行觀測,得到當前電機位置(反饋值),假如沒到預定位置,我們就給他向目標的位置(期望值)旋轉的力矩;到達預定位置到,則停止輸出。
引入公式1:
Angle為機械臂當前角度,KP是一個參數,可以調節輸出力矩的大小,但一旦給定后,在控制過程中不能改變。我們稱,(45-Angle)為此時期望值與反饋值的誤差。通過此公式算出的Power1為此時計算出需要輸出的理論電流。
這個公式實現了一個簡單的功能,驅動電機輸出一定的力矩,且此力矩與此時機械臂的角度位置的誤差成比例關系。但是,這會有什么問題呢?
問題一:靜態誤差
機械臂旋轉受到重力矩和摩擦力矩。機械臂假若沒有到達指定位置,電機會給正向力矩(電流)。但存在一個情況,在某位置,正向力矩會和重力矩與摩擦力矩之和平衡。機械臂會懸停在此平衡位置,從而無法達到目標位置,無法達到期望。此時,我們稱,出現了“靜態誤差”。
我們引入公式2,與原函數線性疊加,解決這個問題:
Sum為誤差的累計(可以視為積分的一種離散形式),KI是一個參數,可以調節最終輸出力矩的大小,通過此公式算出的Power2為此時計算出需要輸出的電流。
這個公式實現了這個功能:若機械臂的當前值(反饋值)沒有到期望位置,Power2累加(可認為是積分過程)。當反饋值越來越接近期望值時,Power2會減緩增加的速度。最終成為一個恆定力矩。如果超過期望,它會反向增加;超出目標位置一段時間,會變成負值。可以說,此時力矩與誤差成積分關系。
該公式可以使當前值趨近於期望值,且對偏離期望值的誤差非常靈敏,從而幫助解決輸出力矩與阻力矩平衡的問題。當然,不能放任Power2無限累加,通常給Power2一個限制。
問題二:超調
我們重新關注公式1:
留意到,在動力矩大於阻力矩的時刻,機械臂會一直保持加速狀態。換言之,在到達期望位置時,機械臂仍有可能具有較高的速度,在到達目標位置時無法停止,從而超過目標位置。我們稱,此時出現超調。這是我們在控制中不希望看到的。
我們清楚這個問題為什么發生:機械臂在到達到期望位置時,仍然具有一定速度。因此,我們引入公式3:
Angle(k)是本次控制中的反饋值,,Angle(k-1)是上次控制的反饋值。兩個量相減,趨近於目標位置的速度(可以視為微分的一種離散形式)。Kd是一個參數,可以調節最終輸出力矩的大小與正負值。此處,速度是對期望值產生超調的因素,因此Kd理論上為一負值。從而,我們通過公式3抵消速度對控制的影響。即假如有正向的速度,我們將給出反向的力矩,抵消其導致超出期望值的影響。
將公式1、2、3結合,線性疊加,同時將45度以Target變量給出,得公式4:
其中:
Angle(k)為當前位置反饋值,Target為期望值。KP、KI、KD是需要手動調節的參數。Power(k)為k時刻電機輸出的電流,即我們對機械臂給出的力矩。
我們稱,Power1的計算環節為比例環節,Power2的計算環節為積分環節,Power3的計算環節為微分環節。
注意到,公式以 對k時刻的函數形式給出,表明Power在整個控制過程中並不是一成不變的,而是在控制過程中,根據各個時刻機械臂所處位置的反饋量而“自動”的調節。而人為調節KP、KI、KD三個參數,我們可以調節比例-積分-微分各個環節所占整個計算過程的權重,從而根據被控制對象的實際情況,調節各個環節對最終控制效果的影響。
當k趨近無窮時,我們認為對系統的控制過程已完成。此時衡量系統控制效果,若系統處於一個穩定狀態,即系統的反饋變化較小,我們稱系統達到“穩態”;若系統保持在某區間內振盪,我們稱系統無法達到穩態。稱系統達到穩態的過程為“收斂“。
“如果線性系統在初始條件的作用下,其輸出量最終返回它的平衡狀態,那么這種系統是穩定的.
如果線性系統的輸出量呈現繼續不竭的等幅振盪過程,則稱其為臨界穩定.(臨界穩定狀態按李雅普洛夫的界說屬於穩定的狀態,但由於系統參數變動等原因,實際上等幅振盪不能維持,系統總會由於某些因素招致不穩定.因此從工程應用的角度來看,臨界穩定屬於不穩定系統,或稱工程意義上的不穩定.)
如果系統在初始條件作用下,其輸出量無限制地偏離其平衡狀態,這稱系統是不穩定的.”
下面給出MATLAB仿真過程中參數對整體控制效果影響的波形圖。其中,藍色線為期望值,紅色線為控制對象的反饋值。
樣例1:KD較大KI較小,此時反饋值到達穩定,但是由於KI過小,系統產生穩態誤差,穩態值與期望值有差異且無法到達。
樣例2:KD較小KI較大,此時系統積分環節影響過大,系統在達到穩態前出現振盪,收斂速度慢。
樣例3:KD較大KI較大,收斂速度快,振盪過程少,振盪幅度小,無靜態誤差。
樣例4:比較合適的參數,收斂速度快,振盪小,快速達到穩態。
樣例5:動態展示PID各參數整定過程及對系統控制效果的影響。
最后,給出PID公式離散化形式的公式:
拓展與延伸
當然,PID也有其自身的局限性。在實際工程實踐過程中,被控對象往往具有非線性、時變不確定,難以建立精確的數學模型,常規的PID控制器不能達到理想的控制效果;常規PID控制器參數,對運行工況的適應能力很差,即控制系統狀態假如發生改變,PID控制器控制效果可能變差。
關於PID的進階閱讀資料,以及自動控制原理的相關資料,在b站/百度上都有很多。參考鏈接:
DR_CAN的個人空間_嗶哩嗶哩
推薦理由:該UP較為系統的講述自動控制原理(經典控制/現代控制/非線性控制),同時對機器人控制中常用的卡爾曼濾波也有較為詳盡的簡介。對希望系統學習理論知識的同學有較大幫助。
這些都是在百度搜索:經典控制理論,排名較前的教程。當然,大部分教程都只能夠提供簡要的概念認知,系統的學習希望大家還是扎根課內,或者閱讀《信號與系統》《自動控制原理》等教材。
大家可以通過該文章簡要了解現代控制理論。這篇文章詳細解答了以下問題:
一、什么是特征值和特征向量
二、什么是特征值和特征函數
三、什么是狀態方程
四、如何求解狀態方程
五、可控性和可觀性
六、如何用狀態反饋進行極點配置
七、如何進行跟蹤控制
八、全狀態觀測器
九、縮減狀態觀測器
其中部分是數學內容,十分重要,希望大家耐心閱讀。
二、電機:機器人的動力輸出模塊
驅動電機
直流有刷電機:機械換向,磁極不動,線圈旋轉。內部含有碳刷,起到換向作用。碳刷不斷磨損,會造成一定損耗,並且需要定時更換碳刷
直流無刷電機: 電子換向,線圈不動,磁極轉動。通常用霍爾元件感應永磁體位置,進而控制電流的方向,達到換向作用。
控制電機
伺服電機:通過控制脈沖時間的長短控制轉動角度
步進電機:通過控制脈沖的個數控制轉動角度的,一個脈沖對應一個步距角
其他類型電機
力矩電機、直線電機……
直流有刷電機
JGB37-520編碼器減速電機 帶測速 霍爾編碼器 機器人大扭力金屬齒-淘寶網(taobao.com)
L298N電機驅動板模塊步進電機/智能小車/板載5V輸出/yourcee-tmall.com天貓
工程實踐中的電機選型,需要關注電機的基本參數(上圖)
通常搭配電機驅動達到調速效果(下圖):通過控制電機的運轉速度和方向,實現對占空比的控制,來達到對電機怠速控制的方式。
減速箱作用:降速同時提高輸出扭矩,扭矩輸出比例按電機輸出乘減速比
編碼器作用:一種旋轉傳感器,將旋轉零件的位置和位移轉換為一系列數字脈沖信號。脈沖信號由控制系統收集和處理,用作閉環反饋控制。
PWM控制有刷電機代碼
void Motor_Calc(){
PID_SetFdb(&motor_pid,speed_get);
}
void Motor_Init(){
PID_ParamInit(&motor_param,5,0,0,100,900);
PID_ClearData(&motor_pid);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin==GPIO_PIN_2){ //記錄脈沖數
speed_get++;
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim3)
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,0);
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,500);
Motor_Calc();
speed_get=0;
}
}
PID計算函數
void PID_Calc(PID_PIDTypeDef* pid, PID_PIDParamTypeDef* pparam)
{
float dError,Error;
Error = pid->ref - pid->fdb; //計算誤差
pid->sum = pid->sum + Error; //累積誤差
pid->err_last = pid->err; //更新結構體歷史誤差
pid->err = Error; //更新結構體誤差
dError = pid->err - pid->err_last; //計算微分
pid->sum = limit(pid->sum, pparam->sum_max,-pparam->sum_max) //積分限幅
pid->output = pparam->kp * Error + pparam->ki * pid->sum + pparam->kd * dError; //計算輸出
pid->output = limit(pid->output, pparam->output_max, -pparam->output_max); //輸出限幅
}
直流無刷電機
上圖 M3508減速電機
下圖 GM6020雲台電機
上面兩款電機,為RM比賽中常用到的直流無刷電機,他們具有更好的動力輸出性能,精准的速度、位置、溫度反饋。
他們采用的通信方式、控制方法更加復雜,不在此處介紹。
三、課程總結:道阻且長,與君同行
機器人控制是一個復雜的系統,由多種外設組合起來共同控制。外設使用的通信方式種類各有不同。控制程序會包含任務進程、中斷、外設驅動函數、解碼函數、以及各傳感器的數據融合、控制函數,還需要利用各種控制算法優化控制效果。
推薦一個實踐項目(也許需要梯子)
項目地址 :GitHub -RoboMaster/Development-Board-C-Examples
項目文檔: 教程文檔
一份基於RobomasterC型板的項目開發例程(CubeMX+KeilMDK5)。由北理工2017級畢業生、2021賽季機器人隊前隊長Satori學長編寫。sasasatori個人博客
更加進階的教學內容,我們會在后續的博客【ROBOMASTER比賽電控技術教程】中更新。
薪火培訓的教程的博客到此就告一段落。
后續預計上線教程:
- 遙控器數據解碼
- 麥克納姆底盤解算與控制
- 雙軸雲台的位置控制
進階學習的技術准備:C語言基礎
- 熟練運用指針,結構體
- 熟悉多文件的調用
- 熟練運用位運算
感謝大家看到這里。假如你已經完成前五講的學習內容,並按要求完成學習任務,那我們相信,你已經對電控有一定的入門基礎了。
在這里,留下北京理工大學機器人隊的地址與聯系方式。我們每年的秋季、春季會舉辦兩次普通招新,同時長期開放特殊招新通道。期待你的加入!
地址:北京理工大學良鄉校區北校區圖書館地下室機器人隊實驗室(112A室)
微信公眾號:北理機器人隊