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