基於超聲波的四軸定高控制簡析


 

筆者是來自武漢理工的小青同學,接下來為大家講一下基於超聲波的定高問題,鑒於筆者能力有限,所以如有錯誤請多指教,且很多僅僅是工程上的近似化應用,沒有做過仿真模擬。

我講的東西更加偏重於實踐,可以幫助你切實的實現這個應用!

基於超聲波的定高主要有如下幾個問題:

(有需要自主DLY資料和控制板或者四軸的加QQ939062236)

硬件和安裝技巧?

超聲波測距的算法(如何編程,如何處理結果)?

是用什么樣子的PID算法?

如何調試更加快捷?

實際開發將會遇到哪些棘手問題?

定高控制如何實現較為穩定為起降?

筆者做定高用了一個星期,而且參考了別的算法,實現比較簡單,但是真正達到一個很好的效果,卻經歷了很多挫折。

那么我將展開討論了:

如圖1是我搭建的四軸平台,花了2000左右,PCB是自己做的,模塊是自己的配的,調試地面站是匿名地面站,通過藍牙通信;當然這不是今天的主題,筆者假設你已經得到了很好地姿態控制。


.硬件和安裝技巧:

1.超聲波的特性是這樣的,當模塊被東西突然遮住的時候(1cm之內或者更小),那么測量值就會發生突變,非常之大,那么這對控制來說是毀滅性的。所以你的超聲波要安裝到飛行器的正下方,而且要避免跟電池放在一起。容易干擾。此外,需要做閾值處理,如果測量值突變,則舍棄測量結果。

理論上講超聲波放在飛行器的正下面的中心是最好的,這樣測出來的距離更加精確。如圖2。如果飛行器俯仰角不為0,從數學上講要進行補償,但是實際上你們可以算一下角度變化10以內的時候對這個距離造成的距離影響很小。所以並不需要PPT里面所講的這種幾何補償,而且在STM32中三角函數的計算量非常大,就算是換成快速三角函數,造成的計算誤差,遠遠大於實際測量誤差,補償反而得不償失。而且超聲波也沒有明顯的偏移。PPT的作者可能並沒有實際實現過。超聲波也不需要裝在正下方,裝在支架的兩邊可以。因為正下方可是要放攝像頭的。

如果在程序上不精密設計,不合理的線程設計,不合理的計算設計,都會導致程序失控。

 


2.如何測量和處理數據:

超聲波有的采用串口協議,我個人覺得串口協議的蠻好用,下面是程序截圖,語句1意思是測出的數據是兩個字節得到的,第一個字節左移八位,加上第二個字節。兩者距離,單位是mm,筆者實測,超聲波模塊的精度很高。

測量得到原始的ultra_distance,需要處理,不然得到的數據是上下抖動的。

 


筆者沒有保存圖,所以下面這個不是很明顯,還是可以看出跳動。通常有3種濾波算法:

1.均值濾波

2.低通濾波

3.kalman濾波


筆者實測,第二三中效果差不多,且低通濾波更加易於實現,第一種的效果很差,那么我們來看一下低通濾波。


 

這里針對不同的高度做了不同頻率的低通濾波,這個形式是基於濾波頻率的,比較難懂,大家可以看下下面這種:

Yn=a* Xn+(1-a)*Yn-1 

Yn-1是上次測量值,Yn是這次測量值,得到輸出,截止頻率是

F = a /(2*3.14*T)

T為采樣周期;


如上就是代碼實現,其中通過右移8位的方式實現除法,速度更快。計算可得截止頻率是50HZ

二、用了什么樣子的PID?

當然是串級PID了。


一階PID也是可以實現的。但是明顯不穩定,而且控制復雜。需要在不同的高度調節不同的參數。串級PID則比較穩定,問題較少。上圖是PixHawk的PID算法。實際上我用的內環是速度pID,即飛行器上升下降的速度,外環當然是高度PID了。

整體實現不講了,就是PID算法,說一下細節。比如說,如何得到速度,這里需要用到融合濾波算法:

    y = (a)*(y) + (1-a)*(x);

這個是不同於低通濾波是一種一階融合濾波,將兩種測量結果,融合在一起,兼顧兩種測量好的效果,抵消掉不利的效果。


wz-speed是通過重力加速度積分測得的速度,h_speed是超聲波差分得到的。代碼的一個句就是對加速度進行積分,第二句是死區控制,有點麻煩,這里不提。

三四句對加速度測量做了低通濾波,第五句,通過融合兩種速度,得到更加穩定的結果。你可以在地面站上去看這個曲線,非常漂亮,只是速度回復稍微有點慢。

外環就是對高度進行控制,這里需要注意幾點:

1.高度要做限制,不能過高;

2.無人機啟動從地面起飛的時候,要設定一個固定的較大的高度值,提供一個穩定的PID控制,超過了一定的高度再更改目標高度,比如說無人機靜止時候測量得到20CM,那么打開油門后設定目標高度為40,飛機上升到40,在繼續加高度。因為無人機有地面效應,在地面的時候有更大的推力。

這里是工程實踐得到的經驗。

三、如何調試更加快捷?

實際開發將會遇到哪些棘手問題?

如何調試定高,真的挺費勁的。需要反復更改PID。

而且還有很多棘手問題,我當時調試,就是因為回來一個頭,結果沒看住無人機飛到天下,把天花板撞爛了。四軸的底層很難調,經常出問題。出一個問題弄不好就是毀滅性的。

我是在四軸的兩個方向上加了兩個支柱,這樣飛起來的時候,不好的話,可以抓住它。還有第二個好處,就是定高的時候懸停是沒有的,所以飛機四處飄,很難調定高,你可以是不是的戳一下桿子,讓他保持在一個范圍內。還有一個好處測量你姿態的穩定度。好的穩定度,你去劇烈搖擺桿子,姿態可以很快地恢復。不會崩潰。但是千萬不要用桿子去旋轉四軸,那樣基本就雪崩。

首先先調內環。外環不管。把油門加到可以讓無人機起飛。接下里,調P,將P調到一個合適的位置,你劇烈的上下晃動四軸,無人機會出下一個很大的阻尼,阻尼越平滑,反應越快越好,你將四軸向上推,四軸轉速降低,向下推轉速開始對看你的推力。調的較好以后就徒手懸空放開四軸,會發現四軸慢慢的飄落,如果速度保持為0的性能越好,則P越好。然后調D,D差不多就行了。關鍵是I ,這個需要長時間調試去感受了。沒有I的話,效果很差。

然后就是調高度環,先調50cm定高,再調100cm定高,再是30cm,越低越難調。四軸能夠穩定的到達目的地那是最好的、

這里有一個技巧:


exp_height是定高控制值。height_value是真實的目標值,不能一蹴而就,所以期待的定高,要慢慢去逼近他。不然一次給一個很大的值,很容易過沖,一點點的逼近目標,會比較穩定。這時候只需要慢慢調節逼近速度即可。

四,如何實現穩定的起降?

這個是最具工程性的,而且編程難度實際上很大。

降落來講,首先低於一個閾值就必須關閉電機,不然四周會在地面跳躍,不穩定;

再就是從高處下落,更好地辦法是開環的,慢慢的較低油門,就可以慢慢掉下來。比控制高度的方法效果更高;

起飛也是非常難得。今天先將到這里,下次好好講一下,穩定起降。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM