韓 煒,宋曉娟
(內蒙古工業(yè)大學 機械學院,內蒙古 呼和浩特 010051)
隨著科技的發(fā)展,四軸飛行器由于其制造成本低,可垂直起降,機動性良好的特點,在生活中的應用越來越廣。傳統(tǒng)的精度高的圖像識別四軸飛行器搭載了非常多昂貴的傳感器元件,負載過重,電量消耗過大使得這類飛行器無法在民用中得到普及。與此同時,搭載GPS定位的飛行器非常依賴GPS信號的強度。在礦難營救或者火災室內現(xiàn)場等特殊地形無法做到先人一步進行幸存人員搜索[1]。
AR.Drone是法國Parrot公司生產的四軸飛行器[2],因其攝像頭性和處理器行性能能滿足基本的研究要求,且具有極高的穩(wěn)定性,同時無需太大的試驗場地,非常適用于實驗室研究。在Github上,有一個關于AR.Drone的封裝包ardrone_autonomy[3]。其控制指令條理清晰,適用于AR.Drone二次開發(fā)研究。安裝ardrone_autonomy需要使用ROS(Robot Operating System)系統(tǒng),所以需要用到ROS和Linux Ubuntu開發(fā)環(huán)境。
ROS的運行架構是一種使用ROS通信模塊實現(xiàn)模塊間P2P的松耦合的網絡連接處理架構[4],可以適應單個上位機與多個下位機連接,也支持多種語言,免費且開源[5]。多個特點使得ROS在近來受到越來越多的關注與使用。
結合AR.Drone的封裝包ardrone_autonomy,在不使用GPS定位等傳感器的情況下,進行基本的圖像識別及動作反饋。
ROS系統(tǒng)平臺使用點對點的網絡連接模式,所有的進程會通過點對點的網絡形式表現(xiàn)出來。過程包括發(fā)布節(jié)點,發(fā)送消息,訂閱主題。
AR.Drone圖像識別及動作反饋,分為三個步驟:
(1) AR.Drone連接客戶端,能夠使用端口。
(2) 對接收來的視頻流圖像進行圖像處理。
(3) 對處理后的圖像結果進行AR.Drone的動作反饋。
由AR.Drone發(fā)出的原始的飛行數(shù)據經過autonomy_ardrone整合后發(fā)送給ROS建立的工作空間,其中包括飛行狀態(tài)和圖像信息。經過圖像處理,將相對位置寫成運動期望的字符串,傳回給工作空間,工作空間將相關運動指令計算出來,傳至autonomy_ardrone,再由autonomy_ardrone來控制AR.Drone執(zhí)行運行指令。如圖1。
圖1 整體構架原理概圖
節(jié)點、主題關系分成三部分,分別是主題、節(jié)點間關系和與節(jié)點相關的程序。如圖2。由于ROS的節(jié)點不能直接通信,需要主題將之聯(lián)系在一起。需要建立Topic主題,image_raw和Cmd_vel主題是由autonomy_ardrone提供的。image_raw用于接收和發(fā)送圖像信息,Topic用來接收和發(fā)送相關運行期望字符串的信息。Cmd_vel接收Twist類型的運動指令。
建立節(jié)點video_sub、video_pub、taker_drone_position、listener_ardrone_position和dronemove_cmd。video_sub負責采集AR.Drone的圖像,video_pub負責將圖像顯示出來,taker_drone_position負責發(fā)布運動期望字符串,listener_ardrone_position負責收集發(fā)布的運動期望字符串,這里taker_drone_position和listener_ardrone_position可以在終端顯示字符串信息,也可以將這個信息集成到關于ROS和QT設計的可視化界面里,以便直觀的看到位置信息。
剩下的與節(jié)點相關的發(fā)送或接收的信息可以通過C++程序來完成。
圖2 節(jié)點、主題關系圖
程序設計包括圖像處理的程序,相對位置計算、運動期望字符串以及轉化指令格式幾個部分,分別采取不同的方法進行設計。
圖像處理采用OpenCV庫,使用vim進行編輯。
對于簡單的圖像處理,如圖像中只有一個圓,流程簡圖如圖3所示。
圖3 圖像處理流程簡圖
(1) 原始圖像轉化成灰度圖,以提高計算效率。
(2) 圖像濾波處理,對圖像降噪。
(3) 將圖像二值化處理,再次提高計算效率。
(4) 霍夫圓檢測,將二值化后的圖像中的圓檢測出來。
(5) 將檢測出的圓心坐標、圓半徑和圖像的中心點坐標輸出,以執(zhí)行下一步操作。
整個處理過程涉及到灰度化、濾波處理、二值化處理和霍夫檢測。如圖4。
圖4 圖像處理
灰度化是將圖像中的三個通道(分別是B、G、R)的像素點的分量做相加取均值給新的單通道圖像。由此將單個像素的計算量的256×256×256降到256。
濾波處理采用高斯濾波,本質上就是圖像與正態(tài)分布做卷積。也就是用一個方框掩膜掃描圖像中的每一個像素,將其中的高頻信號平均到臨域中去,以消除噪點。
二值化是采用一個閾值將原圖像轉化為兩種極端,即將[0,255]的取值轉化成[0,1],這樣會提高很多的計算速度,但同時也會損失掉非常多的圖像信息。由于這里取的識別圓和背景反差較大,所以可以得到需要的圖像信息。
霍夫檢測是一種圖像特征提取技術,是在一個參數(shù)空間尋找符合特征要求形狀的算法集,此設計中使用了霍夫圓變換的算法,其原理是使用霍夫梯度法進行邊緣檢測,梯度處理,累加計算,得到圓心坐標和半徑。
圖5 相對位置計算簡圖
運動期望字符串過程采用邏輯判斷語句,利用上一步得到的象限位置和x、y的絕對值數(shù)據,計算x、y的相對距離較長的MAX值,優(yōu)先縮短這個MAX值,以使飛行器中心和圓心靠近。這里使用C++設計邏輯判斷語句。最后將輸出語句以發(fā)布消息的方式直觀的表示出來。如:Up、Down、Left、Right。意味著飛行器此時需要向上、下、左、右執(zhí)行某個運動。如圖6。
圖6 輸出消息樣圖
ardrone_autonomy里有對應的命令執(zhí)行格式,將上一步的消息接收后,將字符串消息轉化為geometry_msgs::Twist類型的信息。然后將此消息發(fā)布到對應的控制主題上,控制飛行器的運動和位置變化。當飛行器的攝像頭中心和識別圖像的中心距離小于閾值后,識別結束。
識別后整個控制流程如圖7。坐標對比后,進行邏輯判斷,得到飛行器優(yōu)先運行方向,飛行器執(zhí)行。然后,再次進行坐標對比,執(zhí)行上步的操作,直到達到預設的閾值后,整個識別過程結束。
圖7 識別程序流程圖
運動路徑如圖8,最開始飛行器中心在最左側1位置,經過對比后,優(yōu)先向右運動。經過幾步后,到達位置2,經過對比,距離上方向較遠,故向上運動。到達位置3后,經對比,向右側運動,經過幾步后,到達預設位置。
圖8 飛行器運動路徑
研究了關于AR.Drone的圖像識別跟隨的原理和場景搭建。實現(xiàn)了飛行器與PC端的ROS連接,對圖像進行目標識別和中心運算,飛行指令的設計,采用了一個直觀高效的方式進行實驗。在不使用GPS和各類傳感器的情況下,完成設計要求。
實驗中,使用ROS的消息發(fā)布機制,將飛行器跟隨圖像動作反饋的過程,分解成多個步驟,每一步進行對比跟蹤,直接降低了只執(zhí)行一套指令的誤差。對于移動物體跟蹤,也在隨時尋找最優(yōu)的路徑,可以完成追蹤的任務。
程序設計中,圖像處理使用了霍夫圓變換,優(yōu)點是使用了霍夫梯度法,算法簡單,執(zhí)行高效;缺點是只能識別圖像中的圓,并且在圖像中只能有一個圓,多個圓會造成程序出錯。由于沒有使用傳感器元件,需要人為干預飛行器與識別圖像或者物體的垂直距離。
實驗搭建環(huán)境是在學校的實驗室中,干擾較小。當環(huán)境條件較差,或者圖像干擾較多時,會出現(xiàn)較大的差異。在后續(xù)研究中,會進行改進。
[1] 馬建磊.基于視覺的無人飛行器目標識別與跟蹤控制[D].大連:大連海事大學,2017.
[2] Parrot.Parrot of developers.2016.[2017].http://developer.parrot.com[DB/OL].
[3] Mani Monajjemi.github.2014.[2017].https://github.com/AutonomyLab/ardrone_autonomy[DB/OL].
[4] 陳金寶,韓 冬,聶 宏,等.開源機器人控制基礎[M].上海:上海交通大學出版社,2016.
[5] 高志發(fā),武建新.基于ROS的移動機器人的路徑規(guī)劃策略研究[J].機械研究與應用,2017,30(3):161-162.