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