作者丨弓青 來源丨古月居
如果說智能車的視覺處理是眼睛,PID就是雙手可以去幫你完成智能車的運(yùn)動(dòng)控制。沒有一個(gè)好的PID,就可能會(huì)產(chǎn)生手眼打架的情形。
比如說,你去看了一個(gè)美食博主的美食的制作過程,眼睛說,我會(huì)了,手說,你快拉到吧。
所以要想手眼協(xié)調(diào),智能車控制得當(dāng),好的視覺處理算法和好的PID調(diào)試都密不可分。
不然也不會(huì)有專門的PID調(diào)試的崗位了。廢話不多說,下面是我整理的一些資料。
方向控制在軟件系統(tǒng)中的位置方向控制系統(tǒng)宏觀概覽
PID?控制方法理解
PID?程序編寫PID?參數(shù)調(diào)試PID?算法微改進(jìn)
方向控制算法在軟件系統(tǒng)中的位置
整個(gè)智能車基本上就在做兩件事,一個(gè)是方向的控制,一個(gè)是速度的控制(當(dāng)然平衡車還多一個(gè)平衡的控制),只要能夠?qū)⑦@兩個(gè)量給控制的恰到好處(恰到好處不光是兩者單獨(dú)控制的很好,而是兩者 一起工作時(shí)配合的很好)
本文檔只講其中的一個(gè):方向控制中的控制策略問題(四輪車的速度控制與此非常類似,甚至還更簡(jiǎn)單)。
下面是我們車內(nèi)軟件運(yùn)行的一個(gè)大概的流程圖,軟件成員后來的所有精力基本都傾注在這三個(gè)加粗的方面:方向偏差提取;方向控制算法;速度控制;
整體上就分為兩部分,方向和速度控制。其中兩者均為周期性控制,
但控制的周期可能不一樣。方向控制的主要步驟如下:
1.采集方向傳感器的信息,比如對(duì)于攝像頭就是進(jìn)行圖像的采集;
2.方向偏差信息的求取,對(duì)于攝像頭來說就是圖像中線的求取, 進(jìn)而得到得到車體當(dāng)前位置與理想位置的偏差
3.方向控制模塊根據(jù)這個(gè)偏差來計(jì)算應(yīng)該輸給舵機(jī)的PWM 占空比,進(jìn)而來調(diào)整車體的前進(jìn)方向。
方向控制系統(tǒng)宏觀概覽
系統(tǒng)宏觀上了解。通過對(duì)系統(tǒng)的全局分析,你不僅可以更清楚了解方向控制的本質(zhì),更重要的是還能夠從系統(tǒng)中各模塊的相互約束關(guān)系中找到一些新的能夠改進(jìn)整個(gè)控制系統(tǒng)的方案,下面詳述~
從控制系統(tǒng)的角度來看,典型的方向閉環(huán)反饋系統(tǒng)結(jié)構(gòu)圖如下圖所示。
主要由五部分構(gòu)成:控制目標(biāo);被控對(duì)象;執(zhí)行機(jī)構(gòu);測(cè)量反饋;
控制算法(這里面就是我們常說的核心PID啦)
在構(gòu)思控制算法之前你首先需要對(duì)執(zhí)行機(jī)構(gòu),被控對(duì)象,測(cè)量反饋和控制目標(biāo)
這四個(gè)部分有足夠的了解。
控制目標(biāo)是首當(dāng)其沖要考慮的。本系統(tǒng)要控制的物理量是什么?
最開始想的肯定是保持車體的方向和位置在車道的正中央。
仔細(xì)思考一下可以發(fā)現(xiàn),其實(shí)堅(jiān)持的方向一直正確,最后的位置就一定會(huì)正確(感覺突然發(fā)現(xiàn)了一個(gè)在實(shí)際生活中也是顛撲不破的真理),而且車體的位置又是不可控(無能的舵機(jī)只能控制方向),因此其實(shí)控制目標(biāo)可以換成只需要車體的方向保持正確就 OK了。
因此此時(shí)的系統(tǒng)變?yōu)槿缦隆?/p>
要控制的物理量是車體前進(jìn)方向:接下來要考慮執(zhí)行機(jī)構(gòu)與控制對(duì)象的特性。
本系統(tǒng)中的控制對(duì)象是什么?值得注意的是,本系統(tǒng)的執(zhí)行機(jī)構(gòu)是舵機(jī)驅(qū)動(dòng)與舵機(jī),被控對(duì)象是車體。
這一點(diǎn)重點(diǎn)關(guān)注執(zhí)行機(jī)構(gòu)與被控對(duì)象的輸入-輸出特性, 即輸入?PWM?的占空比舵機(jī)轉(zhuǎn)角的關(guān)系,舵機(jī)轉(zhuǎn)角和車體轉(zhuǎn)角的關(guān)系(為方便這里均近似看成是一個(gè)線性的比例關(guān)系,只是近似而已)
在接下來就該看測(cè)量反饋。
一個(gè)控制系統(tǒng)的精度的上限是由反饋測(cè)量部分精度決定,但是和這個(gè)上限的接近程度是由控制器來決定的。
控制策略再好,你測(cè)量的有誤差也是白控制。因此才開始大家一定要注意將測(cè)量部分精度盡量提高,這樣不僅能夠大大減少控制部分的工作量,還能夠有效提高控制精度。
個(gè)人感覺測(cè)量部分的重要性略大于控制部分。假設(shè)測(cè)量反饋的輸入是攝像頭圖像,輸出是方向信息,關(guān)鍵是怎么由圖像得到方向信息?方向信息怎么表示?
按照我們目前方向角提取的方法(我們目前的做法:取圖像中固定前瞻行(比如第 10?行)的中線的偏差來代替方向角。)
示意圖如下圖。
其中紅色為車體,綠色為攝像頭視野,藍(lán)色為視野中求得的中線。
由圖可以看出,其實(shí)這種方法其實(shí)是非常粗糙的。
那么如何得到更真實(shí)的方向信息,怎么改進(jìn)?
圖像的中線能夠反映出車輛的方向
圖像的中線角度(alpha)近似反映出車輛的方向(beta)
關(guān)鍵問題:
從系統(tǒng)的角度來看我們可以采取怎么的方法來提升整體的控制精度?整個(gè)系統(tǒng)的關(guān)鍵部分在哪?如何改善關(guān)鍵部分的性能?
1)?執(zhí)行機(jī)構(gòu)與控制對(duì)象的改進(jìn)。
舵機(jī)的機(jī)械傳遞結(jié)構(gòu)改善、輪胎的摩擦力改善使控制的靈敏度更高,響應(yīng)更快;使總體的輸入輸出能更接近線性比例關(guān)系(線性越好越容易控制)
2)?測(cè)量反饋的改善。
如何讓測(cè)量的信息能夠更真實(shí)的反映出車輛的方向信息。
對(duì)于攝像頭和光電圖像來說,就涉及到如何放置攝像頭,如何取合適的圖像視野,如何從對(duì)圖像處理得到更有效的車輛真實(shí)方向信息(如先對(duì)圖像進(jìn)行失真矯正,然后對(duì)矯正以后的圖像處理);
對(duì)于電磁傳感器來說,那就是如何擺布各個(gè)電感的位置,如何使采集到的電壓值更好的反應(yīng)出方向信息(原始數(shù)據(jù)濾波融合等)等;
3)?控制策略的改善。
動(dòng)態(tài) PID,模糊控制,位置/增量PID,積分限幅,四輪車后輪雙電機(jī)差速的協(xié)調(diào)控制等等
常用的控制策略-PID
PID 雖然是最簡(jiǎn)單的控制器,應(yīng)用卻是最廣泛的,實(shí)際生活中 95%以上的控制都是 PID 控制。
還有很多其他控制方法,想法很好但是應(yīng)用的實(shí)際效果卻并不比 PID 好。
因此對(duì)于我們的小車控制來說,PID 完全足矣。
PID 的含義?(Proportion 比例+Differential 微分+Integral 積分)
輸出量=P*誤差+D*誤差的變化+I*誤差的積分
3.1 PID 的理解
l P(比例)控制,Kd 與Ki 為 0,最簡(jiǎn)單的控制規(guī)律
如直道(誤差為 0)時(shí)舵機(jī)占空比 DUTY,則當(dāng)誤差為error 時(shí),輸出的占空比直接是 DUTY+Kp*error。
l PD(比例微分)控制,Ki 為 0
考慮偏差及偏差的變化趨勢(shì),當(dāng)誤差為 error 時(shí),輸出的占空比是 DUTY+Kp*error+Kd*(current_error-last_error)。可以看出,對(duì)于同樣的一個(gè)偏差:
1) 若偏差正在減小的過程,PD 控制的量要比純比例控制量小一些,這樣能夠避免過度控制
2) 若偏差在逐漸增加的過程,PD 所要施加的量比純比例要多一些,目的是為了抑制誤差增大的趨勢(shì)。
所以?D?這一項(xiàng)有一些預(yù)測(cè)控制的味道~~~,相比?P?而言要更智能一些~~~
l PID(比例微分積分控制)
相比 PD 而言,多了一項(xiàng)積分項(xiàng),目的是為了使系統(tǒng)無誤差,將系統(tǒng)在整個(gè)過程中的誤差考慮進(jìn)去。當(dāng)誤差為error 時(shí),輸出占空比 DUTY+Kp*error+Kd*(current_error-
last_error)+Ki* error_integral
積分這一點(diǎn)對(duì)于方向控制來說意義不大,速度控制會(huì)需要。
不過有興趣的均可以嘗試一下。
3.2 PID 程序編寫
//輸出=P*誤差+D*誤差的變化+I*誤差的積分int current_error,last_error ,error_integral; //偏差定義int Kp,Kd,Ki;//PID 參數(shù)定義int Out; //輸出量current_error=get_error();//求出本次偏差 error_integral= error_integral+current_error; //誤差積分 Out=Kp*error+Kd*(current_error-last_error)+Ki* error_integral; last_error=current_error;
注意:前面講的 D 項(xiàng)都是對(duì)誤差的偏差進(jìn)行差 分,然而對(duì)于平衡車而言,官方方案里方向控制的 D 項(xiàng)被轉(zhuǎn)向陀螺儀輸出的角速度代替。
其作用也是起著一個(gè)預(yù)測(cè)的作用,且實(shí)際控制效果也非常好,因此四輪車也可以借鑒這種做法,在你們的車上裝上一個(gè)陀~螺~儀~
3.3 參數(shù)調(diào)試(參照曲線) PID 的控制算法
非常簡(jiǎn)單,寫起來總共也就 10 行不到,但我前面說了,你們后期的很大一部分時(shí)間還得花在這上面,這是為什么?
最耗時(shí)間的地方是什么?那就是參數(shù)的調(diào)試,也是你們?cè)谧鲕嚨暮笃?從不會(huì)間斷的一件事。
理論上其實(shí)有很多參數(shù)調(diào)試方法,來快速得到一個(gè)合適的參數(shù)。
但是經(jīng)過實(shí)踐檢驗(yàn) 的最實(shí)用的卻還是—試湊,真是沒辦法,控制領(lǐng)域的科學(xué)家們努力了那么多年始終沒能夠找到一個(gè)特別行之有效的方法,只是因?yàn)楣こ虒?shí)際與理論相差太遠(yuǎn)。
不過試湊也是要講科學(xué)的,這也就是科學(xué)試湊法
(<( ̄ˇ ̄)>鄙人自己起的名字),試湊的依據(jù)就是下面同 P 不同 D 的曲線。其中橫坐標(biāo)為時(shí)間,縱坐標(biāo)為輸出(圖中的 D 參數(shù)值只是示意大小關(guān)系,由此圖可以大概得到某個(gè)參數(shù)應(yīng)該調(diào)大還是調(diào)小),虛線為理想輸出
記住曲線結(jié)論:----------------------- 非常重要
可以看出:
1) 對(duì)于同樣的 P 而言,隨著 D 的增加系統(tǒng)的超調(diào)量會(huì)越來越小,但是若 D 增加的太大會(huì)造成系統(tǒng)響應(yīng)太慢,達(dá)不到控制要求。
2) 對(duì)于同樣的 D 而言,P 增加過大會(huì)使系統(tǒng)震蕩,超調(diào)大。對(duì)于方向控制而言,四輪車的 D 參數(shù)效果不太明顯,但是平衡車的方向 D 參數(shù)調(diào)起來效果特別明顯。
這個(gè)曲線的結(jié)論反映到你們實(shí)際的車上就是下面的行駛軌跡:
無 D 參數(shù)或 P 過大時(shí),拐彎以后抖動(dòng)比較厲害
有 D 且 D 比較合適時(shí),此時(shí)拐彎造成的抖動(dòng)會(huì)明顯減小
D 參數(shù)太大時(shí),此時(shí)將會(huì)拐不過去
3.4 算法微改進(jìn)
分段 PID/動(dòng)態(tài)PID
PID 參數(shù)在運(yùn)行的過程中根據(jù)時(shí)間的變化而變化。
如分段等,如考慮到當(dāng)偏差較小時(shí)需要的控制量較小,而偏差較大時(shí)需要的控制量要增加,而這種增加客源是線性的,也可以是二次的,比如可以讓 Kp 參數(shù)與偏差的平方成正比,如下圖Kp = (error * error)/2 + 1000
文章出處:【微信公眾號(hào):】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論