RM圓桌「005」:搶人頭要靠自瞄

白皮书乐队 2024-09-21 00:44 1次浏览 0 条评论 taohigo.com

活動鏈接:「活動已結束」「RM圓桌」第五期 搶人頭要靠自瞄【RoboMaster論壇-科技宅天堂】

1. 什麼是自瞄?你們是怎麼利用自瞄獲取比賽勝利的?為什麼要做自瞄?優勢在哪?

所謂自瞄,就是利用機器視覺來實現自動瞄準敵方和輔助打擊的一種技術,在以往的比賽中,都是以純手動打擊為主,但人的操作和反應能力往往不如機器的快,正確的使用自瞄,宛如“開掛”一般,可以大大提升各單位的命中率既輸出能力,給己方的輸出提供強有力的支持和保障,在賽場上,擁有自瞄的隊伍通常能起到非常強大的震懾作用,給隊伍帶來很大的技術優勢。

2. 自瞄怎麼做起?

1)編程語言選擇

C++、python:

C++是編譯型語言,是編譯執行的,程序是先需要編譯成二進制執行程序,既機器碼,然後才能執行,編譯的時候編譯器可以進行一些優化,python是解釋型語言,是解釋執行的,和物理機CPU之間多瞭解釋器這層,所以運行效率C++ >> python。

但python也有它的好處,python編程更加簡單高效,不需要像C++一樣要去關心底層內存的操作,python使程序員隻需更加關註程序的目標而不是過程,所以非常容易上手,也非常容易實現想要的功能。

通常最好的選擇是用c++搭建輔助打擊框架,不過python也可以用在部分算法的驗證、輔助工具的編寫上面,在編程能力有限的情況下,python也是個不二選擇。

2)第三方庫的運用

俗話說的好,前人栽樹後人乘涼,如果所有的算法都從零寫起那得需要多少時間和經歷,是十分不可取的,所以合理使用第三方平臺能快速實現想要的功能。

OpenCV:OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供瞭Python、Ruby、MATLAB等語言的接口,實現瞭圖像處理和計算機視覺方面的很多通用算法。

OpenCV的官網有很多教程,同時社區也很完善,很多問題直接搜索就可以解決:https://opencv.org/

HALCON:HALCON是德國MVtec公司開發的一套完善的標準的機器視覺算法包,擁有應用廣泛的機器視覺集成開發環境。它節約瞭產品成本,縮短瞭軟件開發周期——HALCON靈活的架構便於機器視覺和圖像分析應用的快速開發。

HALCON學習網:http://www.ihalcon.com/ (包含教程、軟件下載、論壇等)

普遍的方案都是使用C++和OpenCV實現視覺算法,而HALCON是商業級別的軟件(說白瞭就是正版要用錢買,而且比較貴),由於其使用的簡易性、調試的便捷性和算法的高度集成性,在工業上采用的極多,HALCON可以通過可視化編程和利用一系列輔助工具縮短程序開發時間,同時該平臺提供瞭大量實際應用的成熟方案DEMO,例如OCR光學字符識別、零件尺寸測量、三維物體識別等等,其運行效率和精度也是不容小覷的。

3)計算平臺的選擇

這裡介紹兩種主流的選擇

A)NUC

NUC是intel推出的mini PC,性能和日常使用的筆記本甚至臺式機的性能相當,優點是體積較小,而且由於是intel框架的,程序的移植非常容易,不需要做什麼修改就能從自己的PC移植到NUC上,缺點是顯卡用到是Intel的集成顯卡,不易使用GPU加速的算法。

NUC的圖片

B)NVIDIA JETSON(TX1、TX2)

NVIDIA Jetson 是業內領先的 AI 計算平臺,它面向移動嵌入式系統市場中的 GPU 加速並行處理。在深度學習和計算機視覺方面的高性能、低能耗計算,使得 Jetson 成為計算密集型嵌入式項目的理想平臺。

因為該平臺和PC的框架不同,所以使用過的人都會發現該平臺有些很奇怪的坑,但如果用好瞭,該平臺的性能是遠大於NUC的,尤其是它在神經網絡上的加速,是NUC無法比的,此外,TX1、TX2的體積和質量比NUC小很多,非常適合在對重量敏感的機器人上應用(如無人機)。

TX2核心板的圖片

當然以上兩個計算平臺的共同特點就是貴……..

如果想要節省RMB,就隻能犧牲計算的速度,退而求其次選擇其他的開發平臺,

例如Firefly的ARM開發板,官網傳送:http://www.t-firefly.com/

3. 自瞄算法的一般思路

1)設置合適的相機幀率和曝光時間

在自瞄的應用下,較高幀率和較低的曝光時間對圖像處理有很大的幫助,可以避免過多噪聲,防止運動過快導致圖像模糊,這些參數需要在不同光照條件下進行測試調參。

2)圖像預處理

因為燈條分為紅藍兩色,預處理時可以采取顏色分割的方法將圖像處理為二值圖方便下一步的燈條提取。

HSV顏色空間分割:通常相機獲取得到的圖像都是RGB顏色空間,不方便直接進行顏色分離,因此轉化為HSV顏色空間再進行分割。

HSV顏色空間由色調(Hue)、飽和度(Saturation)、亮度(Value)三個分量構成,HSV更接近於人眼的主觀感受。我們可以通過下面的圖來展示HSV顏色分佈情況:

通過尋找紅色藍色對應的分量,將該顏色的區域劃分出來,最後得到二值化的圖像。

3)燈條提取

首先將上面處理好的二值圖的輪廓提取出來(例如使用opencv的findContours函數),然後通過一系列條件排除掉假燈條,接著用最小包圍矩形或最小包圍橢圓去計算各個輪廓,選出最符合燈條特征的輪廓(例如判斷燈條的長寬比、形狀等等)。

4)裝甲片識別

提取出所有可能的燈條之後,將“燈條”兩兩匹配,根據兩“燈條”之間的距離、斜率之差、兩燈條之間的長度之比等條件選出合適的待選裝甲片,之後再通過篩選裝甲片選擇“最像”的那個(比如通過識別裝甲片中間的數字判斷是否為真裝甲片),計算出裝甲片的中點位置,至此完成瞭裝甲片的識別。

5)雲臺控制

獲得裝甲片中點位置後,計算該點與圖像中心(假設裝甲片中心到達圖像中心時雲臺正好對準裝甲片中心)的差值,將圖像x軸的差值作為雲臺yaw軸的控制輸入量,y軸的差值作為雲臺pitch軸的控制輸入量,不斷地發送實時的“偏差”值,做一個閉環的控制。至此就實現瞭自瞄最基本的功能。

4. 自瞄大傢都有做,怎樣才能做得穩呢?(做自瞄有什麼訣竅?)

1)硬件的選型很重要,有個好的相機可以解決很多算法上的問題,並使算法效益最大化

相機通常有以下一些參數:

  • 曝光方式(Exposure):全局快門/卷簾快門
  • 分辨率(Resolution)
  • 最大幀率(Frame Rate)
  • 快門速度(Shutter)
  • 接口類型:usb2.0/usb3.0/GigE/CSI等
  • 光譜響應特性(Spectral Range):是指該像元傳感器對不同光波的敏感特性

等等。

工業相機與普通相機的部分區別:

  1. 工業相機的性能穩定可靠,普通相機輕便小巧,易於安裝;
  2. 工業相機的快門時間短,可以抓拍高速運動物體;
  3. 工業相機的幀率通常遠遠高於普通相機;
  4. 工業相機(Industrial Camera)相對普通相機(DSC,Digital Security Control)來說價格較貴。

根據實際需求,選擇一個合適的相機對結果非常重要。

2)專註於一點並做到極致,比哪裡都做一點的效果更好

例如:大部分學校的自瞄都會出現“跟不上”既雲臺瞄準跟不上目標的移動,這裡提供一個idea,與其想各種各樣的預測算法,不如先把現有代碼優化到極致,使它的實時性最高並最小化誤識別率,最終效果可能會讓你意料之外的好。

3)巧妙運用GPU加速

Opencv包含瞭CUDA(CUDA™是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決復雜的計算問題)加速的版本,有些圖像的操作在GPU上的速度會大大提高,而TX2、TX1這類嵌入式平臺,往往CPU的處理能力有限,如果所有算法都在CPU上跑效率會大打折扣,而TX2、TX1恰巧完美支持CUDA和提供各種圖像加速的API。

5. 自瞄要在備賽的哪個階段去做呢?你認為達成什麼條件做自瞄才能發揮它的用處?

自瞄應該越早做越好,因為自瞄需要充分的魯棒性測試和命中率測試,需要在不同的環境下測試可行性,測試最終效果是否真的比“手打”好,同時所說的“自瞄”大多數是有人的參與的,既不完全是全自動的瞄準+打擊,通常的方案是人為控制是否開啟自動瞄準,並且當多目標出現時人為選擇要瞄準的目標,手動控制子彈的發射,因此操作手需要對該系統充分熟悉,隻有達到人機合一的境界,自瞄才能充分發揮它的效果。

6. 做自瞄最應該避免犯的錯誤是什麼呢?

忽略電控部分的重要性:在視覺識別穩定的情況下,一個優良的控制算法會對效果大大加分,再例如利用響應更快的電機、為自瞄定制的電調,會明顯提高自瞄的實時性和命中率。

友情鏈接:

這篇文章講述的方法就很好地在電控上做瞭建模和優化。


以下為網友提問:

7. 如果是用神經網絡和機器學習去做跟蹤處理,現在已經做到可以識別車瞭,那接下來是不是應該轉化為識別燈條上的裝甲板?華工是在tx2上面進行運算的嗎?

答:我們用的都是傳統算法識別裝甲片的,神經網絡的方法沒有嘗試過,覺得會比較慢;我們在大部分機器人上用的是nuc,無人機上用的是TX2。

8. 請問自瞄過程中,怎樣對目標進行預測,運用到什麼策略或算法?

答:2018年的比賽中並沒有在預測上做太大的功夫,不過可以嘗試一下卡爾曼預測。

9. 請問華工現在采用的是什麼視覺方案呢?

答:參考上面回答的一般思路。

10. 視覺算法設計到大量像素運算,為瞭保證實時性同時不犧牲性能,都有哪些優化方案?

答:如果用的平臺是TX1、TX2的話,可以試試GPU加速。

11. 請問視覺解算出角度後,與電控之間的配合,有什麼需要註意的嗎?

其實沒有需要特別註意的地方,隻要保證串口相互通信正常,和電控的控制算法相匹配即可。

12. 請問在自瞄系統中高性能工業相機是否必要,算法效率真的可以發揮高性能工業相機的性能優勢嗎?

答:有必要,能,不過個人認為反過來也是對的,高性能工業相機反而能提高算法的效率。

13. 深度學習做檢測一般可以達到很高的準確率,但是一般比c++ +opencv方案會更耗時,用深度學習做自瞄這個思路靠譜嗎?

答:我會選擇更加實時的方案。

14. 請問進行目標跟蹤時有哪些算法能有效幫助我們進行實時跟蹤呢?

答:各種濾波算法。

15. 工業攝像機,如果選擇高幀率,那麼就低像素;如果高像素,那麼就幀率就會下降。請問你們是怎麼選擇的?

答:高幀率低像素。

16. 想問下主講人識別出裝甲板後采用什麼方法測距比較好呢?

答:利用小孔成像的原理測距。

17. 自瞄攝像頭的fov多少比較合適?

答:看實際情況,如果攝像頭安裝在雲臺上,可能60°就夠瞭,但如果攝像頭安裝在地盤上,可能需要廣角一點的攝像頭防止目標跟丟。

18. GPU加速算法具體怎麼實現呢?

答:cuda,TensorRT等等。

19. 同問一下大佬識別出目標後除瞭重力都需要考慮那些補償呢?

答:說實話,我們並沒有把重力的因素寫在算法裡面。

20. 識別出來之後單目測距有什麼算法可以優化嗎?

答:單目測距本來也不是很可靠,所以算出來的距離一般隻是作為參考使用的,不會作為準確計算的數值使用。

21. 請問大佬的測距用的深度還是雙目呢?

答:單目。

22. 請問要解算打擊角度的時候彈道是怎麼預測的呢,因為重力影響裝甲在圖像中心的時候發射彈丸並不能打中。

答:把準星參考點補償高一點。

23. 優先級的判斷是要交給操作手嗎?

答:戰場的情況很復雜,不能保證算法的決策比人的決策可靠。

24. 卡爾曼對於爆發運動預測效果還是比較差,請問有什麼好的解決方案嗎?

答:自己寫相應的濾波算法,將所有可能的情況考慮進去。

25. 有性價比高的工業相機推薦嗎,或者是比較實用的上?

我們直接在淘寶上選的比較便宜的不知名品牌,不過比較好的牌子可以考慮海康威視、大華。

26. 大佬們是怎麼解決自瞄算法處理產生延遲,影響雲臺控制的?

答:我們的做法是將視覺算法的速度做到極致,來使延遲的影響最小化。

27. 請問貴校有在自瞄系統中使用例如KCF跟蹤一類的跟蹤算法?

答:並沒有使用。

28. 如果要用卡爾曼預測的話,他的Q、R值應該如何整定?

答:可以參考這篇知乎:

29. 想問一下大佬華工這樣的頂級隊伍分辨率采用多少呀,幀率能到達多少呢?

答:用的是640*480,幀率60。

30. 請問貴校使用的攝像頭圖像采集的延遲有多大?150ms可以接受嗎?

答:這個我們沒測過;不過150ms延時可能有些大,移動目標基本很難打中。

31. 那NUC是否運用加速算法呢?

答:NUC沒有用GPU加速,都是用CPU跑的。

32. 請問大佬有沒有使用粒子濾波,KCF或者等等其他的跟蹤算法嗎?

答:沒有,就隻是自己寫瞭一些防止數據跳動的濾波算法。

33. 請問大佬是用什麼機器學習模型算法呢,還是使用深度學習呢?

答:沒有用到機器學習。

34. 請問一下大佬有用yolov3這樣的算法嗎?

答:沒有。

35. 請問算法單幀耗時大概是個什麼情況呢?跟隨時又是怎麼消除這個延時所帶來的影響呢?

答:單幀大概20ms,我們並沒有用上什麼算法來消除延時,就隻是盡量提高運行幀率,不過可以考慮卡爾曼濾波。

36. 小白提問:請問提升識別的穩定性從哪些方面進行呢?識別時斷時續

答:將所有可能的情況考慮進去,同時要充分測試各種環境下的識別率。

37. 請問一下大佬,單目的話,距離信息怎麼求解呢?pnp算法嗎?

答:利用小孔成像的原理,pnp也可以求解出。

38. 請問進行目標跟蹤時有哪些算法能有效幫助我們進行實時跟蹤呢?什麼濾波算法比較優秀呢?

答:還是卡爾曼。

39. 那一般來說,pnp的誤差大概是多少呢?

答:需要實際測試,不同場景、攝像頭、算法都有影響,給個參考,10%左右。

40. 請問華工這些濾波算法是視覺做呢還是電控做呢?

答:視覺。

41. 請問工業相機選擇幀率多少的比較合適呢?在算法優化到最佳情況的條件下?

答:60以上。

42. 想請問一下彈道的預測方面時使用瞭什麼模型呢?實際測試中彈道比較散,請問出瞭摩擦輪閉環以外還有什麼方法可以提高彈道的集中度嗎?

答:我們做的時候沒有特地考慮彈道的預測,有關彈道的問題要問機械組的成員,我不太清楚。

43. 大佬對DSO算法有什麼見解嗎?

答:沒用過、也沒聽說過。

44. 問大佬,目前opencv的跟蹤算法有哪些比較靠譜?

答:opencv沒有提供很多跟蹤算法,主要是用來提取特征、識別裝甲片。

45. 請問在識別過後是否使用瞭跟蹤算法進行目標跟蹤?

答:沒有。

46. 那請問大佬對於視覺識別到的目標信息是怎麼處理的呢,是作為雲臺雙環的輸入量?還是代替雲臺位置環?

答:這個問題我不是很清楚,但輸入的是相對量(偏差)。

47. 剛才大佬說攝像頭安裝在雲臺上60°就夠瞭,又說采用低分辨率高幀率,那這樣遠處的物體不很小很難識別嗎,這樣請問下大佬識別多遠的物體呢?

答:的確不是很遠,3m的效果是最好的。

48. 請問一下除瞭采用PNP粗測,華工用於精確測距的算法是什麼呢?

答:沒用用其他的精確測距算法。

49. 單目不可靠的話大佬沒有考慮其他測距方式嗎?

答:目前沒有。

50. 請問大佬隊伍對於多目標同時出現是采用操作手手動篩選的,還是算法自己選擇?我覺得靠操作手去手動篩選的這個程序寫不來。

答:靠操作手。

51. 同mym問,單目的粗測不靠譜隻能用與參考,那該用什麼數值作為準確計算用呢?

答:我們直接用粗測的值計算的。

52. 小白的視覺算法一換光源就瞎瞭,總需要臨場調試。大佬們的視覺是怎樣適應不同光線條件,怎樣高效的在比賽條件下調試的?

答:這個問題問的比較廣,總的來說就是調整攝像頭的參數,提高算法的魯棒性,在比賽條件下通過錄像後期調試,測試場地時最好能實現遠程調試。

53. 想問下大佬用多少分辨率,幀率又能達到多少?

答:同上。

54. 請問大佬們的整塊視覺算法花費的時間是多少呢?

答:搭出框架2周,剩下的時間主要優化、調試。

55. 請問您說的高幀率是指多少百幀以上呢?請問發給下位機的頻率多少比較適中呢?

答:高幀率一般60以上夠用,當然越高越好,隻要算法的速度有那麼快,發給下位機的頻率要看串口波特率還有電控那邊的處理能力。

56. 請問大佬,識別裝甲板,怎麼區分大小裝甲板呢?因為使用pnp,大小裝甲板參數不一樣啊。

答:可以考慮識別裝甲片中間的數字。

57. 60幀是不是有點保守?

答:主要看算法的速度,如果你處理一幀下來的時間要20ms,那大於60幀也並不會提升太大效益,當然如果錢多,買到330幀甚至更高的當然好。

58. 請問大佬60幀不會發生卡頓嗎?

參考上一問,沒有明顯的卡頓。

59. 很多調好的參數改變光照後就檢測不到裝甲瞭,這個問題有解嗎?

答:除瞭用魯棒性更高的算法,就隻能根據現場光照微調參數瞭。

60. 請問大佬們是怎麼選取最優目標的呢?

答:操作手選擇。

61. 自瞄的時候是完全把雲臺的控制權交給視覺嗎?那這時候底盤的方向是怎麼控制的?還是自動跟隨雲臺嗎?

答:是,地盤跟隨雲臺。

62. 請問大佬,看瞭下大佬的回復,我看到的是貴校沒有用opencv的如KCF的跟蹤算法也沒有用到預測算法,貴校的自瞄是以計算裝甲板中心與圖像中心,並補償為主嘛?

答:基本上是。

63. 請問大佬,自瞄是怎麼解決誤識別問題呢?我在做自瞄,誤識別很嚴重。

答:還是要將所有情況考慮進去,剔除偽裝甲片,同時可以考慮識別裝甲片的數字。

64. 用於雲臺上的單目自瞄攝像頭可以解決今年大符識別的問題嗎?

答:這裡不討論大符的問題。

65. 請問下大佬,長焦和廣角不能兼顧的話,應該重點關註多少米的目標呢?

答:看需要,如果操作手適合打靜距離目標就放在2-3m,如果喜歡狙擊的話就用長焦。

66. 看往屆視頻,很多學校會在底盤上面安裝雙目攝像頭,這個主要是用來做什麼的?

答:其他學校不清楚,我們前年用兩個攝像頭隻是備用。

67. 沒有機器學習怎麼識別貼紙和打符呢?

答:自瞄沒用機器學習,打神符才用瞭。

68. 請問大佬既然說單目測距不準那貴校是如何獲取準確的距離信息呢?

答:同上。


熱心網友幫答:

69. 視覺算法設計到大量像素運算,為瞭保證實時性同時不犧牲性能,都有哪些優化方案?

答:在自瞄中,如果識別到瞭目標可以縮小區域而不是進行全局搜索,即采用ROI的方法減少圖像的運算,提高算法速度。

70. 請問在自瞄系統中高性能工業相機是否必要,算法效率真的可以發揮高性能工業相機的性能優勢嗎?

答:在自瞄系統中工業相機還是有必要的,因為工業相機的幀率會高於普通相機,對於普通相機來說,采集圖像所耗的時間接近圖像算法處理時間,所以幀率高可以提高整個自瞄的效率。

71. 同問一下大佬識別出目標後除瞭重力都需要考慮那些補償呢?

答:可以考慮空氣阻力的影響

72. 請問要解算打擊角度的時候彈道是怎麼預測的呢,因為重力影響裝甲在圖像中心的時候發射彈丸並不能打中。

答:子彈是一個拋物線模型,需要考慮重力的影響

73. 大佬們是怎麼解決自瞄算法處理產生延遲,影響雲臺控制的?

答:算法相對控制的延時是一定存在延遲的,所以要加入預測去補償延遲

74. 請問貴校使用的攝像頭圖像采集的延遲有多大?150ms可以接受嗎?

答:競培的小哥哥回答,采集圖像延時150ms有點兒高,一般工業相機的幀率有100hz,延時可以控制在10ms左右。但如果是普通相機的話,延時就會比較高。