周旭華 伍懿美 賴理智 黃宇俊
【摘? 要】本文主要設計一款利用深度攝像頭搭配KCF算法實現(xiàn)對指定目標跟隨的四驅(qū)小車。小車以Jetson Nano為核心控制器、Arduino驅(qū)動板為輔控制器、深度攝像頭為主要傳感器、ROS為控制系統(tǒng),采取KCF算法對圖像進行分析處理。經(jīng)過反復測試,小車能平穩(wěn)順暢地跟隨指定目標,同時深度攝像頭也采集出具有清晰鮮艷并且對比度高的環(huán)境信息。
【關鍵詞】KCF算法;目標跟隨;四驅(qū)小車;ROS系統(tǒng)
中圖分類號:U463.63? ? 文獻標志碼:A? ? 文章編號:1003-8639( 2023 )05-0027-03
【Abstract】A Four-wheel drive car is designed that uses a depth camera and KCF algorithm to follow a specified target. The car uses Jetson Nano as the core controller,Arduino driver board as the auxiliary controller,the depth camera as the main sensor,the ROS system as the control system,and the KCF algorithm is used to analyze and process the image. After repeated tests,the car can follow the designated target smoothly and smoothly,and the depth camera collects clear,vivid and high-contrast environmental information.
【Key words】KCF algorithm;target following;4WD car;ROS system
作者簡介
伍懿美(1985—),碩士,主要研究方向為人工智能、樓宇智能化(通訊作者)。
隨著汽車數(shù)量的不斷增加和科技的飛速發(fā)展,汽車行業(yè)迎來了自動駕駛的熱潮。中國政府對自動駕駛技術的支持力度也是非常大的,《中國制造2025》明確指出,中國要在2025年掌握自動駕駛的總體技術以及各項關鍵技術,建立起比較完善的智能網(wǎng)聯(lián)汽車自主研發(fā)體系、生產(chǎn)配套體系以及產(chǎn)業(yè)群,要基本完成汽車產(chǎn)業(yè)的轉(zhuǎn)型升級。在政策和市場的共同作用下,中國的自動駕駛技術得到了迅猛發(fā)展。自動駕駛汽車是指能夠通過車載傳感器感知道路環(huán)境、自動規(guī)劃行車路線并控制車輛到達預定目標的一種智能汽車。本文主要通過研究深度攝像頭所采集的數(shù)據(jù)包括深度信息也就是距離的感知,把深度信息和圖像信息傳送到ROS上利用算法分析處理,實現(xiàn)對目標保持一定距離的跟隨[1]。
1? 自動跟隨四驅(qū)小車的總體設計
本文設計的自動跟隨四驅(qū)小車以Jetson Nano為核心控制器、Arduino驅(qū)動板為輔控制器、深度攝像頭為主要傳感器,以ROS為控制系統(tǒng),采取KCF算法對圖像進行分析處理,其主要工作原理是將深度攝像頭采集到的深度信息和圖像數(shù)據(jù)通過ROS系統(tǒng)進行匯集并通過KCF算法分析處理,然后信號傳輸?shù)诫姍C驅(qū)動板上來控制4個電機以不同的轉(zhuǎn)速旋轉(zhuǎn),讓小車利用轉(zhuǎn)速差進行直走、轉(zhuǎn)向動作,最終實現(xiàn)智能四驅(qū)小車保持一定距離跟隨目標[2-3]。
四驅(qū)小車的設計主要分為硬件設計和軟件設計。硬件設計主要包括硬件電路的設計、硬件的選擇、硬件的搭建和調(diào)試,硬件電路包括Jetson Nano與深度攝像頭和Arduino 2560控制板的連接、Arduino 2560控制板與電機驅(qū)動板和編碼器的連接、電機驅(qū)動板和電機的連接;軟件設計包括Ubuntu 18.04系統(tǒng)和ROS系統(tǒng)的下載和安裝、KCF算法的使用和適配、四驅(qū)底盤控制程序等,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
2? 硬件設計
2.1? 硬件結(jié)構(gòu)設計
KCF跟隨的智能四驅(qū)小車的硬件設計包括Jetson Nano、深度攝像頭、Arduino 2560控制板、降壓穩(wěn)壓模塊、24V鋰電池、雙路直流電機驅(qū)動板、擴展板和光電編碼器電機等,系統(tǒng)的硬件設計框圖如圖2所示。
2.2? 硬件電路設計
硬件部分包括電源模塊設計、下位機外圍電路模塊、深度攝像頭信息采集模塊、電機驅(qū)動模塊、上位機及操作系統(tǒng)、下位機-底盤控制模塊等。
2.2.1? 電源模塊的設計
電源模塊是整個硬件系統(tǒng)的核心,決定了小車能不能穩(wěn)定地工作。智能小車硬件模塊電壓需求情況見表1。由于每個硬件系統(tǒng)的電壓需求不一樣,使用壓降穩(wěn)壓模塊使電源模塊可以給使用低電壓的硬件供電。為了滿足各個硬件系統(tǒng)的用電要求,采用規(guī)格為24V、20000mAh的鋰離子充電電池。在使用時,給電池充滿電時電壓能達到24V。電池直接向電機驅(qū)動板供電,下位機Arduino 2560和攝像頭通過USB線與Jeston Nano連接,實現(xiàn)硬件之間的通信并且間接給Arduino板和深度攝像頭供電。上位機Jeston Nano的工作電壓為5V,因此在給Jeston Nano供電時必須先通過降壓模塊把電壓降至5V。電源與各模塊的連接如圖3所示。
2.2.2? 下位機外圍電路模塊
下位機Arduino 2560接收到Jeston Nano傳輸來的指令后向電機驅(qū)動板發(fā)送信號,電機驅(qū)動板可通過下位機Arduino 2560上的PWM端口單獨控制左右電機的速度。電機驅(qū)動板的IN1、IN2和ENA1控制左電機的正反轉(zhuǎn)和速度,IN3、IN4和ENA2控制右電機的正反轉(zhuǎn)和速度。下位機外圍電路模塊連接示意圖如圖4所示。
電機編碼器與下位機Arduino 2560連接,可以測量電機的速度并調(diào)整,還能讓電機更迅速達到目標速度。下位機Arduino 2560與編碼器的連接如圖5所示。
2.2.3? 深度攝像頭信息采集模塊
深度攝像頭信息采集模塊采用的是奧比中光的Astra Pro深度攝像頭,它包含彩色攝像頭(RGB)、紅外相機(IR Camera)、紅外投影儀(LDM)、深度計算處理器(Depth Processor)、麥克風拾音(MIC)、激光保護裝置(LDP)、USB2.0。此模塊的深度范圍為0.6~8m,彩色圖分辨率為1280×720,深度圖分辨率為1280×1024。采用Class 1激光,供電方式USB。其功耗2.5W MAX,峰值電流小于500mA。深度攝像頭特點在于除了能夠獲取平面圖像以外,還可以獲得拍攝對象的深度信息(Z軸),即位置和距離信息。深度攝像頭實時獲取環(huán)境物體深度信息、三維尺寸以及空間信息,為跟隨的KCF算法提供了足夠和穩(wěn)定的數(shù)據(jù)。此模塊通過深度攝像頭采集深度信息和圖像信息經(jīng)USB串口反饋到Jeston Nano上。
2.2.4? 電機驅(qū)動模塊
電機驅(qū)動采用雙路直流電機驅(qū)動板,可同時驅(qū)動2臺直流電機,單路有7A大功率,光耦隔離輸入信號,帶有欠壓保護,穩(wěn)定可靠。驅(qū)動板上的+5V引腳可以接5V或者3.3V,為信號端提供電源,ENA1和ENA2為電機使能端,可接Arduino驅(qū)動板上的PWM來調(diào)節(jié)電機的轉(zhuǎn)速,IN1、IN2、IN3、IN4可控制電機的正反轉(zhuǎn)和制動,見表2。
2.2.5? 上位機及操作系統(tǒng)
自主跟隨的四驅(qū)小車的上位機選用Jeston Nano,是一臺新一代且只有盒子大小的微型計算機,采用4核64位ARM CPU和128核集成NVIDIA GPU,可提供472 GFLOPS的計算性能,并在其上安裝運行了Ubuntu 18.04操作系統(tǒng)和ROS[1]。Jeston Nano主要負責接收深度攝像頭傳輸來的信息,然后再利用KCF算法分析處理,將KCF算法分析處理的結(jié)果,即小車的行進方向等指令信息下發(fā)給下位機Arduino 2560。
2.2.6? 下位機-底盤控制模塊
底盤的控制平臺采用Arduino 2560為核心,Arduino 2560內(nèi)置了54路數(shù)字輸入/輸出口(其中15路可作為PWM輸出),15路模擬輸入,4路UART接口,支持USART和其他通信模式,適合需要大量IO接口的設計。處理器核心是ATmega 2560,一個16MHz晶體振蕩器。Arduino 2560通過USB線與Jeston Nano連接,接收Jeston Nano傳來的指令,以此發(fā)給與電機驅(qū)動板相連接的端口信號,帶動電機驅(qū)動。
3? 軟件設計
軟件系統(tǒng)主要有KCF算法處理和運動控制層兩部分。軟件整體設計流程如圖6所示。
3.1? KCF算法處理
KCF是一種鑒別式追蹤方法,在追蹤過程中訓練一個目標檢測器,使用目標檢測器去檢測下一幀預測位置是否是目標,然后再使用新檢測結(jié)果去更新訓練集,進而更新目標檢測器,而在訓練目標檢測器時,一般選取目標區(qū)域為正樣本,目標的周圍區(qū)域為負樣本,當然越靠近目標的區(qū)域為正樣本的可能性越大。算法中使用輪轉(zhuǎn)矩陣對樣本進行采集,把圖像向上、向下分別移動不同的像素得到新的樣本圖像,這就是循環(huán)之后的樣本,直接增加了樣本的數(shù)量,然后用這些樣本去訓練一個判別分類器,判斷跟蹤到的是目標還是周圍的背景信息,并且通過離散傅里葉變換的推導,通過對下位機下發(fā)移動指令從而實現(xiàn)對指定目標跟隨[4-5]。KCF算法部分源代碼如圖7所示。
3.2? 運動控制層
運動控制層主要包括底盤控制程序。底盤控制程序采用ROS_arduino_bridge功能包,負責Arduino與上位機ROS系統(tǒng)的通信,將上位機發(fā)布的速度話題解析成小車底盤左右輪的速度和轉(zhuǎn)向,同時將小車底盤的里程計信息收集,并通過話題發(fā)布,供上位機中傳感器融合節(jié)點使用,進而實現(xiàn)小車自身位置的定位。控制部分源程序部分源代碼如圖8所示。
4? 測試
測試時,將小車放在測試場地上,測試小車如圖9所示。運行KCF跟隨功能,然后框選需要跟隨的目標,移動目標,觀察小車的跟隨情況。在目標直線前后勻速移動時可以很好地跟隨,距離保持在設定的范圍內(nèi)。目標在橫向移動時出現(xiàn)小車跟丟目標的情況,經(jīng)過多次調(diào)整目標的移動速度,對比發(fā)現(xiàn)小車的角速度滿足不了目標橫向移動時的跟隨要求,通過調(diào)整KCF算法下發(fā)給下位機跟隨目標的角速度,對于跟隨橫向移動的目標時,目標丟失率大大降低。
5? 結(jié)論
本文設計了一個利用深度攝像頭搭配KCF算法實現(xiàn)對指定目標跟隨的四驅(qū)小車。小車以Jetson Nano為上位機控制器,Arduino控制板作為下位機控制器,深度攝像頭為主要傳感器,以ROS為控制系統(tǒng),采取KCF算法對圖像進行分析處理。經(jīng)過調(diào)試,該自動跟隨四驅(qū)小車能夠較為準確地跟隨目標行走。
參考文獻:
[1] 金志熙,王宏遠,勾尤旭,等. 基于ROS目標跟蹤移動機器人設計與實驗[J]. 電腦知識與技術,2021,17(2):1-3.
[2] 杜玉紅,劉賢超,劉大維,等. 基于高置信度更新KCF的移動機器人行人跟隨[J]. 天津工業(yè)大學學報,2020,39(5):67-74.
[3] 戴浩. 一種基于ROS的室內(nèi)跟隨機器人的設計與實現(xiàn)[D]. 西安:西京學院,2020.
[4] 程姜榮,宋芳. 基于ROS的移動機器人視覺跟隨系統(tǒng)設計[J]. 軟件,2020,41(2):23-27,43.
[5] 陳丹,姚伯羽,吳欣. 基于ROS的移動機器人核相關目標跟蹤方法的優(yōu)化設計[J]. 計算機輔助設計與圖形學學報,2020,32(12):1967-1975.
(編輯? 凌? 波)