基於OpenCV的移動物體檢測和目標追蹤

視頻鏈接:

https://www.bilibili.com/video/av24220271

https://www.bilibili.com/video/av24220271

https://www.bilibili.com/video/av24181594

無人機的未來在於機器視覺,而機器視覺是離不開攝像頭的,也就是說無人機的未來離不開圖像處理,去年電賽的經歷,讓我對此深有體會,包括電賽的尋線和追小車,我們都是使用的openmv,首先我要承認openmv的確不錯,至少在色塊檢測中幫了我們很大的忙,關鍵是容易上手,調試方便快捷。但是其處理性能實在不敢恭維,尤其是做人臉識別,手勢識別,光流定點之類的,性能不夠用,我尤其是想做特徵點檢測的,但是openmv根本實現不了那些高大上的功能,而且距離也受限制。思考再三我們打算採用樹莓派,但是實際測試尤其是跑光流的時候,也是比較卡,那就更不用說人臉識別和特徵點檢測之類的了。目前看來只有使用電腦處理了,但是電腦在現在的電賽中一般是不允許使用的,如果是真愛,你就不會爲了比賽而比賽,所以我們現在的opencv地面站就誕生了。








這就是目前地面站所融合的幾個功能。大家不要先看這幾個功能,和openmv比還是十分強大的。尤其是模式3和模式4,我可以不謙虛的說,這個技術已經是目前網上開源當中效果很好的了。目前我開放了地面站模式3的功能供大家使用,實現的功能就是鼠標點擊感興趣物體,鼠標選中到哪個位置飛機就飛到哪個位置,再也不用考慮到光線和顏色的差異了,其優點不知道比甩了簡單的色塊檢測幾條街,具體介紹請往下看。
1要連接USB攝像頭或者USB接口的圖傳接收機
2在地面站打開運行之前,電腦必須先連接串口4(COM4),打開設備管理器查看com4是否正確打開,否則程序無法正常運行。可以使用USB轉TTL模塊,或者數傳接口。上位機數據發送的波特率設置爲115200,因此數傳接口的波特率也必須設定爲115200,否則接收數據會出現亂碼。
3地面站功能展示僅限於模式3,鼠標選取感興趣物體,地面站通過串口把目標物體的座標發送出去。追蹤區別於camshift,效果比camshift要好的多,檢測距離可以達到幾十米。
開發者可以用這個地面站來進行高空追蹤,目標定位。
推薦:
圖傳接收機-->牛牛航模5.8G圖傳手機接收機 ,
圖傳發射機-->熊貓發射機5.8G 
圖傳攝像頭-->彈弓攝像頭
注意:圖傳測試的時候建議在空曠的室外,效果較好,室內也是可以的,但是由於牆壁反射的原因圖像會不太穩定
通過測試,程序無論是在無人機運動狀態下還是在靜止狀態下,追蹤效果都很穩定。
測試視頻效果展示:鏈接:https://pan.baidu.com/s/1IdUXxMEirfNXF0RXTpUhkg 密碼:njur
注意我們的主要任務是圖像處理,提取目標數據,至於你如何用數據來控制飛機飛行就靠你自己發揮了,不過我們也簡單實現了一個點哪裏飛哪裏的飛控功能。
有問題請聯繫QQ:1628464345

地面站通訊協議:UAV地面站每隔10ms,發送一組字符串char[10]={‘s’,,,,’#’},波特率115200
Char[0]=’s’,Char[9]=’#’爲校驗字符

Char[1],char[2],分別代表目標中心座標X的高8位和低8位 (16進製表示)

char[3],char[4]分別代表目標中心座標Y的高8位和低8位(16進製表示)

剩餘其他字符暫時保留。

以上就是圖像處理部分。


無人機目標追蹤代碼編寫
考慮到部分同學可能不知道怎麼修改基於無人機地面站追蹤的飛控程序,特此做了一個比較詳細的教程。代碼已經成功移植到飛控上,而且就在昨天3月25號已經測試了,代碼可用,但是PID控制參數需要優化。僅供大家參考。以下程序適合市面上所有開源的無人機飛控。大家只需要把一個c文件和一個h頭文件添加到你的飛控程序,然後按照下面的步驟修改即可。
第一步向飛控程序裏面添加c文件和.h頭文件


這兩個文件也是小編整理的哦,花了我一天時間呢。可以直接添加到任何開源飛控,不依賴於任何飛控平臺。當然變量和函數的命名不能和你的自身飛控代碼定義的衝突哈!其實這個代碼我們電賽教學視頻裏面講解的巡線和追蹤思路一樣,巡線和追車其都是屬於位置控制。具體內容請結合電賽教學視頻。

 




第二步向飛控程序裏面添加串口接收程序:
我這裏以串口5爲例。
首先在main函數初始化程序部分先初始化串口
 
其次粘貼串口部分:
初始化串口的函數


接下來寫串口接收中斷部分
 

 

好啦,寫到這個位置我們的串口數據接收部分就完成了,那麼接下來就該寫我們拿這個數據來進行位置控制,
第三步 找到你的飛控程序的任務調度部分,添加第一步.c文件裏面的位置控制函數

位置控制函數在我們的.c 文件裏面寫好了哦

最後通過PID控制就把我們自己的postion_Roll和Position_Pitch計算好了哦。
第四部姿態控制部分
找到你的飛控程序的串級姿態控制的的外環(角度環),添加我們的姿態控制角度

好的,所有的都寫完了,我們3月26號測試了一下數據的正確性,然後測了一下高空追蹤追蹤效果可以,但是PID參數不夠好需要進一步優化,沒時間啦,月底就出去工作了,剩下的就交給大家去調試吧。
哦忘了第五步了模式切換,通過六通道,也就是輔助2通道的閾值來進行模式切換。找到你的飛控程序的遙控接收部分,設置一下Mode的值吧
 
OpenCV處理源代碼請聯繫QQ:1628464345

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