RoboMaster視覺教程(10)目標預測

RoboMaster視覺教程(10)目標預測

目標預測應該是RM視覺中最難也是最重要的部分了,預測直接決定了子彈發射後的命中率,實話實說我預測做得不好。預測之所以難做有很多原因,我覺得最困難的地方在於預測是需要上下位機配合的,也就是妙算/微型電腦與戰車上的STM32需要配合起來纔可以達到比較好的效果。

我雖然也會寫一些嵌入式上的程序對STM32也比較瞭解,但水平太差。17年比賽的時候基地的自瞄和電控都是我負責的,當時我連基地自轉都控制不好比賽時候總撞牆,自瞄做了等於白做。。。

言歸正傳,雖然我預測做得不怎麼樣,但是對這方面也還是有點經驗可以與大家分享的。

爲什麼要進行目標預測

首先說一下預測的必要性,爲什麼要進行目標預測。因爲攝像頭和微型電腦性能的限制,幀率不會達到很高。

每次攝像頭在拍攝到戰車的裝甲的時候會有8ms左右的延遲(按120fps算)之後再加上處理花費的時間和串口傳輸的時間,這樣從裝甲板出現到識別到發出控制指令就已經有十幾毫秒過去了。

下位機接收到數據後雲臺也需要一定的時間才能旋轉到指定位置的,當雲臺旋轉到位後此時裝甲板早已不在之前出現的位置了。

若敵方車輛不斷移動,那自瞄將總是滯後於裝甲板的實際位置,若敵方的車輛是小陀螺不斷自旋就更難打中了。

預測問題的幾種情況及分析

  • 攝像頭在小車底盤上,小車不動
  • 攝像頭在小車槍管上,小車不動
  • 攝像頭在小車底盤上,小車動
  • 攝像頭在小車槍管上,小車動

第一種情況是最簡單的。在第一種情況下攝像頭是第三視角,相當於小車座標系和大地座標系是等價的。通過識別裝甲板得到的位置就是敵方戰車裝甲板在大地座標系下的座標,這樣通過相鄰兩幀間的時間差和位置差就可以得到裝甲板移動的速度,進而通過速度乘以時間即可得到預測量進行預測補償。

第二種情況下攝像頭是第一視角,攝像頭會隨着雲臺的運動而運動,此時測得的裝甲板位置是相對於攝像頭的也就是相對於槍管的,若想預測則需要知道槍管當前偏轉的角度進而進行座標換算,把裝甲板位置換算得出的轉角加上槍管當前的轉角就能得到物體實際的轉角,進而可以計算角速度再得到預測量進行補償。

第三和第四種情況下小車是動的,這就意味着小車座標系和大地座標系不再重合,如果想要得到準確的預測結果就需要規定一個原點,在此基礎上測出小車的位移,再將其與裝甲板位置及槍管的轉角進行疊加轉換得到大地座標系下的位置進而進行補償。

怎樣做預測

從上面的分析中我們可以看出,預測最重要的就是確定敵方裝甲板在大地座標系(可以用直角座標系也可以是極座標系)下的位置。

而在現實中小車往往是在運動的,慣性導航又很難做,所以可以退而求其次用小車座標系近似大地座標系。因爲在實戰中大多數情況是停下來打的,而且當小車運動速度不快時造成的誤差也不會太大。

一般來說大家都會把攝像頭裝在槍管上,這樣得到的裝甲板位置就是以攝像頭所在位置爲原點在攝像頭座標系下的位置。

首先需要將該位置座標的z軸和y軸進行偏移(假設攝像頭的是放在槍管上面且放在正中間,則x軸正好在槍管的中間處不需要偏移)。

偏移後就得到了以雲臺爲原點的座標,再將此時裝甲板的座標通過反三角函數轉換成角度(把裝甲板位置換算成角度比把槍管轉角換算成三維座標容易),之後把裝甲板的角度和槍管的角度相加就能得到了在小車座標系下的角度。

用這個角度通過卡爾曼濾波或者簡單的兩幀相減就能得到角速度,進而將其乘以預測時間得到預測量進行補償。

如果覺得預測難做其實不做預測也是可以的只是效果差些,在妙算上直接將得到的相對於攝像頭的裝甲板偏轉角作爲誤差傳給pid進行控制(pid本自身就有預測作用),可以實現在目標運動時速度無靜差而位置有靜差而在目標停下時位置靜差會消除的跟蹤瞄準效果,而且運動時的靜差會隨着攝像頭幀率的提高而減小,在使用330fps的攝像頭時若識別到裝甲板不會跟丟且誤差在一個裝甲板內。

如果進行預測,則預測在STM32上做比較好。上位機命令的發送頻率畢竟比下位機的控制頻率低,可以通過串口把每次識別到裝甲板後換算得到的轉角發送給下位機,然後下位機每個控制週期對裝甲板位置進行預測後再控制雲臺的旋轉,可以得到比較好的結果。

關於預測,大疆官方有一篇知乎可以看看 https://zhuanlan.zhihu.com/p/38745950

這一篇沒有代碼只講了思路,因爲我自己也沒有做得很好,今年分區賽前沒有做預測,因爲把攝像頭得到的相對位置當成了速度來做預測(雲臺跟隨時每次得到轉角可以看成是相對速度,但是若雲臺轉過後會馬上變爲負從而會抵消之前的預測效果),一直沒有效果(被自己蠢哭),到最後又因爲電控不給力無法得到槍管的pitch和yaw轉角(臨近考試周又還有好幾輛車的程序要寫,所以電控就沒時間來做這一塊了)就沒有做預測。

申請了一個自己的公衆號 江達小記 ,打算將自己的學習研究的經驗總結下來幫助他人也方便自己。感興趣的朋友可以關注一下。

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