自動跟隨推車項目總結

自動跟隨推車項目總結

舵機模塊

舵機採用的模式是1ms到2ms模式,對應的角度是180度,實際不到180度,可以根據180度和1ms對應關係,來確定脈衝值,不過這樣不準確,因爲舵機的線性度不是特別精準,最好還是實際測量爲準,不同的脈衝值,測量下所對應的角度。

PID控制舵機

PID的作用按我的理解就是通過反饋來做一個閉環控制,比如我們設置了一個角度,如果不用PID,直接讓舵機轉到哪一個角度,會有兩個大的缺點:1、快速的轉動會使推車產生晃動,而且會因爲慣性產生超調,車子的實際轉的角度會增大。2、到達那個角度的實際值不一定是正確的,會因爲有摩擦力達不到哪個角度。
下面根據1-6的公式來分析解決這兩個問題:
我們做的是車子是智能跟隨,在前方有UWB(相當於遙控)給車子發距離和角度,使用PID主要是爲了控制舵機轉向,讓轉向更穩定,車子走的更平穩,因爲PID採用反饋的機制,這樣可以做閉環控制,反饋回來的是車和UWB的角度差(相當於e(k)),因爲我們做跟隨,所以期望值一直是0,也就是角度差一直爲0是我們想要的,所以一旦有角度差,就經過PID計算,讓車子根據輸出值調整,快速的消除角度差,以此達到跟隨的效果。
針對第一個問題:使用PID的P值,比如P值是0.5,設置值是1,剛開始反饋值爲0,那麼我們第一次輸出是0.5*e(K)=0.5,第二次輸出0.75,第三次0.875,慢慢累加,這樣舵機轉動的角度不會突然增大,從而使車子行駛更平穩。
針對第二個問題,使用I值和D值,如果上一次的誤差e(k-1)是大於0,那麼說明,沒有達到我們的設置值,那麼就會加上e(k-1),從而增加角度的輸出值,如果e(k-1)是負值,就會減,以此來達到克服摩擦帶來的負面作用,D值代表的是一個趨勢,斜率,就比如這一次的誤差比上一次的誤差大,那麼D的一項就爲正,就加上,來彌補誤差。

**PID控制舵機的公式使用的是位置式的,位置式的公式如圖所示:**

**位置式PID
**

增量式PID可由u(k)-u(k-1)得到:

**
增量式PID**

我們一般使用的是1-11的式子,比較接近原始公式,使用1-12也可以,不過效果沒有1-11好。

PID調試的坑

我們調試的時間浪費的挺久的,主要原因是PID公式沒掌握好,沒能理解透,和我們特殊的應用場景也有關係,下面以此介紹幾個坑:
1:公式理解有誤,期望值和反饋值選擇錯誤,我們當時的反饋值錯了兩次,
一次是把輸出值作爲反饋值,既然是反饋,那麼一定會和輸出的控制值不一樣的,就像採集的輪速值和你PWM控制的輪速是不一樣的,我們用PID把他控制成一樣,這樣才稱之爲反饋,纔有價值。
第二次是採樣和反饋值是前後兩次UWB的角度值,本來以爲這個是正確的,我們理解的是這一次的角度值是30度,下一次是20度,我們控制到30度,實際上反饋是20度,所以他們兩個做差等於e(k),以此來控制輸出,達到我們的角度,這個按道理來說也是可以行得通的,但是這種控制力度太小,必須要兩次UWB的角度有角度差時才能起一點作用,比如上次30度,這次20度,那麼做差也才10度,PID的值要給的很大才可以,而且當兩次都是30度時,e(k)=0,就沒起到控制的作用。實際上應該是30度時就和0度相差30,那麼PID的調節範圍就很大了,可以快速的響應。所以我們的期望值是固定的0度,反饋值就是UWB返回的角度,e(k)=30-0,這樣方便調節PID參數。
2:做運動控制,控制的速度一定要快,我們調試那麼久的終極原因就是控制速度太慢,我們的數據平滑太嚴重,用中值濾波導致UWB數據嚴重滯後,滯後將近2S,這樣角度不能快速調節,那就會一直出錯,一直滯後。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章