如何通過目標(biāo)追蹤功能制作一個手機攝像頭實時跟蹤小車,該設(shè)計運用OpenCV的圖像處理APP,手機APP通過攝像頭實時跟蹤設(shè)定的顏色目標(biāo),并且通過手機藍(lán)牙將目標(biāo)坐標(biāo)位置和大小等信息輸出,配合藍(lán)牙串口模塊和我寫的配套Arduino數(shù)據(jù)接收庫,就可以做成一個簡單的手機跟蹤尋跡小車。
手機實時跟蹤尋跡小車視頻演示:
手機實時跟蹤尋跡小車手機APP截圖:
安裝方法:
1.直接安裝Trace.apk,Android5.0以上系統(tǒng)需要到設(shè)置里賦予應(yīng)用相機和藍(lán)牙權(quán)限
2.在豌豆莢搜索“跡”安裝,同上
使用方法:
1.進(jìn)軟件之后可以點擊連接藍(lán)牙,選擇你的藍(lán)牙模塊(模塊需要事先在手機系統(tǒng)藍(lán)牙設(shè)置里面配對好),連接上之后如果有目標(biāo)信息就會通過藍(lán)牙發(fā)送到模塊上,Arduino進(jìn)行讀取就可以了。
2.點擊左上角的按鈕進(jìn)入預(yù)覽畫面,此時在預(yù)覽窗口中點擊任何一個你想追蹤的物體,就會自動進(jìn)行處理輸出數(shù)據(jù)了,頂欄會顯示你選中的顏色。
3.這里說明一下,跟蹤原理是以顏色為特征的,所以應(yīng)該盡量避免視野中出現(xiàn)顏色相同的物體,同時如果發(fā)現(xiàn)跟蹤物體的周圍出現(xiàn)大量小塊的目標(biāo)塊,可以適當(dāng)調(diào)大屏幕下方的進(jìn)度條,直到雜塊消失只剩一個目標(biāo)。
說明一下屏幕下方各個控件的含義:
1.左邊的按鈕是切換手機前后鏡頭的(現(xiàn)在應(yīng)該沒有不帶前置鏡頭的手機了吧…)
2.進(jìn)度條用于調(diào)節(jié)圖像處理閾值,這個值用于色塊過濾,可以理解為,用于設(shè)置最小的目標(biāo)塊的限制,也就是當(dāng)目標(biāo)小于一定程度就過濾掉。
3.T、X、Y三個參數(shù)是目標(biāo)的信息,XY是坐標(biāo)大家都知道(坐標(biāo)的最大值跟手機鏡頭分辨率有關(guān));T是目標(biāo)的大小信息,如果檢測到多個目標(biāo)或者沒有檢測到任何目標(biāo)這里會顯示E(error)。T可以用于粗略得判斷物體的遠(yuǎn)近(近大遠(yuǎn)?。贿^更推薦的方式是用Y軸判斷遠(yuǎn)近(見后文的小車)。
手機實時跟蹤尋跡小車設(shè)計總結(jié):
這個小車大家可以隨意搭建,只要能把你的手機放上去就行。Tmp上我用了兩個舵機改造成輪子,把180度的舵機改成可以連續(xù)旋轉(zhuǎn)的360舵機,這樣就省下了電機驅(qū)動以及麻煩的減速箱,而且只用一根信號線就可以控制電機的正反轉(zhuǎn)和速度,這部分要是大家感興趣可以上網(wǎng)搜搜相關(guān)改造教程。
然后我們需要把小車和手機聯(lián)系起來,通過藍(lán)牙模塊:
需要使用從機模塊,最好把波特率設(shè)置為115200,連線如下:
藍(lán)牙模塊 Arduino
Tx -> Rx
Vcc -> 5V
Gnd -> Gnd
1.注意藍(lán)牙的Rx是不接Arduino的,因為Arduino只需要接收APP的數(shù)據(jù)而不需要發(fā)送,這樣的話留出的Tx就可以通過Serial.Print()打印到電腦端的串口助手。
2.當(dāng)然,考慮到一般Arduino都只有一個硬件串口,這樣串口被藍(lán)牙模塊占用了之后每次下載都需要拔下藍(lán)牙以避免數(shù)據(jù)串?dāng)_,解決辦法是換用軟串口或者換用Mega等不止一個串口的板子。
3.軟件部分,提供已經(jīng)封裝好的Arduino庫,放到library文件夾后打開示例就會用了
需要自己完成的部分就是,把獲取到的x,y坐標(biāo)轉(zhuǎn)換為小車電機的速度,思路是這樣的:
1.假設(shè)我們希望目標(biāo)始終在屏幕中間,那么當(dāng)y坐標(biāo)大于屏幕y最大值的一半時讓車有一個往前的基礎(chǔ)速度V,反 之則是向后的基礎(chǔ)速度-V;
2.如果x坐標(biāo)大于屏幕x最大值的一半,那么讓車子有一個旋轉(zhuǎn)速度Vt,反之有個旋轉(zhuǎn)速度-Vt;
最后賦值給小車的速度是:左輪 = V+Vt,右輪 = V-Vt,也就是所謂的差速驅(qū)動了。
最后給出APP和Arduino庫,見“相關(guān)文件”下載。