支奕琛,谷玉海,龔志力,宋亮
(1.北京信息科技大學(xué)現(xiàn)代測(cè)控技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室,北京 100192;2.北京信息科技大學(xué)機(jī)電工程學(xué)院,北京 100192)
隨著經(jīng)濟(jì)和科學(xué)技術(shù)的迅速發(fā)展,智能手機(jī)在人們生活中的普及促進(jìn)了二維碼技術(shù)的發(fā)展與成熟,使用二維碼技術(shù)進(jìn)行信息存儲(chǔ)與傳遞變得更加高效和便捷。二維碼技術(shù)在物流行業(yè)應(yīng)用越來越廣泛,目前的快遞車間基本上都是無人車間,均采用信息化處理數(shù)據(jù)。對(duì)此,精準(zhǔn)投放是機(jī)器人物流要解決的首要問題。
二維碼的另一個(gè)別名是二維條碼,生活中的QR Code為常見的二維碼種類。QR的英文是Quick Response,這種編碼方式是最近幾年非常流行的一種編碼方式。二維碼是以某種一定的幾何圖形規(guī)律記錄數(shù)據(jù)符號(hào)信息并將它繪制在黑白相間的二維平面分布圖中。這種編碼方式將比特流概念合理且巧妙地運(yùn)用其中,使用若干個(gè)與二進(jìn)制相對(duì)應(yīng)的幾何形體來表示各種類型的數(shù)據(jù)信息。因此,關(guān)于二維碼識(shí)別技術(shù)的應(yīng)用和創(chuàng)新研究也越來越重要。
常見的用于識(shí)別二維碼的算法有:BoofCV(一種基于Java實(shí)現(xiàn)的開源、實(shí)時(shí)的計(jì)算機(jī)視覺庫)、OpenCV、Quirc(一種專門面向QR碼的檢測(cè)和解碼庫)、ZBar、ZXing(一種面向Java Android開發(fā)的各種條碼檢測(cè)識(shí)別庫)。
ZBar算法是一種被廣泛應(yīng)用的條碼檢測(cè)識(shí)別庫,支持Windows、ROS等多種平臺(tái),同時(shí)也支持Perl、Python、C++、Java等語言。因要在機(jī)器人小車ROS平臺(tái)下進(jìn)行二維碼目標(biāo)點(diǎn)的識(shí)別,ZBar算法針對(duì)ROS平臺(tái)提供ZBar_ROS功能包,此功能包提供有效的接口和節(jié)點(diǎn)。綜合對(duì)比以上二維碼識(shí)別算法,最終選擇ZBar算法在ROS平臺(tái)下進(jìn)行二維碼識(shí)別。
如圖1所示,機(jī)器人小車帶有雙目攝像頭,雙目攝像頭的型號(hào)為IMX219-83 Stereo Camera。
圖1 無人車攝像頭
找到該型號(hào)攝像頭在ROS中的驅(qū)動(dòng)功能包為jetson_camera,驅(qū)動(dòng)攝像頭使攝像頭可以捕捉到機(jī)器人小車前方的畫面,當(dāng)畫面中出現(xiàn)二維碼時(shí)即可提取到目標(biāo)點(diǎn)二維碼的圖形信息。如圖2所示,在rviz左下角顯示雙目攝像頭捕捉到的畫面信息。
圖2 rviz中攝像頭的畫面信息
ZBar_ROS是專門識(shí)別二維碼圖像的算法功能包,現(xiàn)雙目攝像頭已經(jīng)捕捉到二維碼的實(shí)時(shí)圖像幀信息,功能包需要配置的參數(shù)如下:
(1)訂閱圖像話題名稱Image(Sensor_MSGS/Image),即可獲得實(shí)時(shí)的圖像幀信息;
(2)發(fā)布識(shí)別出二維碼的圖像信息話題名稱Barcode(Std_MSGSString),訂閱該話題即可在終端中查找到數(shù)據(jù)信息;
(3)配置參數(shù)Throttle_Repeated_Barcodes,識(shí)別二維碼的延時(shí)時(shí)間。
上述參數(shù)配置完成后即可識(shí)別二維碼且將識(shí)別結(jié)果以話題方式發(fā)布。
ZBar_ROS功能包工作流程如圖3所示。該功能包訂閱雙目攝像頭發(fā)布的圖像話題image即可獲得攝像頭捕捉到的畫面信息;然后識(shí)別二維碼,識(shí)別成功后發(fā)布barcode話題,在終端中訂閱該話題發(fā)布的消息即可查看二維碼被識(shí)別后的數(shù)據(jù)信息。ZBar算法識(shí)別二維碼的流程如圖4所示。
圖3 ZBar_ROS功能包工作流程
圖4 ZBar算法流程
機(jī)器人小車的攝像頭捕捉到畫面中的二維碼后需要在Cartographer-SLAM生成的地圖上標(biāo)記出二維碼當(dāng)前的位置,從而獲得目標(biāo)點(diǎn)的位置。
每個(gè)ROS中的SLAM算法都可以發(fā)布map話題,其中包含了ROS中通用的地圖信息。因Geotiff格式的地圖更為清晰準(zhǔn)確,建成的SLAM地圖視覺效果更好,故找到ROS中能生成Geotiff格式地圖的算法:Hector-SLAM。該算法的功能包中提供兩個(gè)Servic,即:Nav_MSGS/GetMap獲得地圖數(shù)據(jù)和Hector_Nav_MSGS/GetRobotTrajectory獲得機(jī)器人軌跡。但機(jī)器人小車使用的SLAM算法是Cartographer,且Cartographer算法不提供上述2個(gè)服務(wù),所以根據(jù)Hector-SLAM算法為Cartographer-SLAM算法編寫這兩個(gè)服務(wù)。
在Hector-SLAM算法的功能包Hector_Geotiff源碼中有在Geotiff格式地圖上繪制軌跡以及畫標(biāo)記的接口,使用ROS中的service/topic進(jìn)行通信得到目標(biāo)點(diǎn)二維碼位置的、坐標(biāo),利用容器記錄目標(biāo)點(diǎn)二維碼位置的、坐標(biāo),最后在保存地圖時(shí)調(diào)用Hector_Geotiff中的drawpath接口將保存在容器中的目標(biāo)點(diǎn)坐標(biāo)繪制到地圖上即可在SLAM生成的地圖上得到目標(biāo)點(diǎn)的位置。
實(shí)驗(yàn)所用的上位機(jī)硬件配置是Intel Core i7-10700K、3.8 GHz CPU、16.00 GB內(nèi)存、NVIDIA RTX2080Ti顯卡,操作系統(tǒng)為Ubuntu。實(shí)驗(yàn)所用的機(jī)器人小車如圖5所示。將融合Cartographer-SLAM與Hector-SLAM算法的無人車SLAM建圖算法定為方案一。
圖5 實(shí)驗(yàn)所用無人車 圖6 實(shí)驗(yàn)所用二維碼示意
所用的目標(biāo)點(diǎn)二維碼如圖6所示,共4個(gè)二維碼,識(shí)別內(nèi)容分別為QR1、QR2、QR3、QR4。
實(shí)驗(yàn)步驟:
步驟1,將上位機(jī)與3輛小車之間通過WiFi建立通信連接,上位機(jī)通過ssh遠(yuǎn)程連接小車,從而控制小車的運(yùn)動(dòng);
步驟2,將4個(gè)目標(biāo)點(diǎn)二維碼放置到不同的固定位置,預(yù)設(shè)無人車在距離目標(biāo)點(diǎn)50 cm可識(shí)別到二維碼;
步驟3,將無人車放置到固定位置,在上位機(jī)中運(yùn)行編寫好的腳本文件Start_Robot.sh,即可啟動(dòng)rviz觀察小車運(yùn)行狀態(tài),啟動(dòng)SLAM建圖生成Geotiff格式地圖服務(wù)。腳本文件如圖7所示。
圖7 腳本文件
啟動(dòng)腳本文件后即可在rviz界面中觀察到無人車的運(yùn)動(dòng)狀態(tài)與周圍環(huán)境的變化。
運(yùn)行鍵盤控制節(jié)點(diǎn)即可控制無人車運(yùn)動(dòng),根據(jù)rviz中實(shí)時(shí)圖像控制無人車尋找4個(gè)固定位置的目標(biāo)點(diǎn)。使用命令rostopic echo在上位機(jī)終端中查看zbar_ros功能包發(fā)布的話題/barcode的數(shù)據(jù)即可判斷二維碼是否識(shí)別成功。圖8所示為攝像頭捕捉到某一目標(biāo)點(diǎn)二維碼,圖9所示為上位機(jī)終端中訂閱該話題顯示的二維碼信息數(shù)據(jù),即成功識(shí)別二維碼。
圖8 攝像頭捕捉到的某一目標(biāo)點(diǎn)的二維碼
圖9 二維碼的數(shù)據(jù)信息
步驟4,測(cè)量無人車成功識(shí)別4個(gè)固定位置目標(biāo)點(diǎn)二維碼后無人車距離目標(biāo)點(diǎn)的實(shí)際距離,實(shí)際距離如表1所示。
表1 無人車距離目標(biāo)點(diǎn)的實(shí)際距離(方案一)
步驟5,4個(gè)固定目標(biāo)點(diǎn)識(shí)別完畢后,在上位機(jī)中運(yùn)行編寫好的腳本文件Save_Geotiff.sh即可啟動(dòng)保存Geotiff格式地圖的服務(wù),從而將目標(biāo)點(diǎn)二維碼標(biāo)記在生成的地圖上,如圖10所示。
圖10 保存地圖的腳本文件
保存Cartographer-SLAM建立的2D地圖,如圖11所示,圖中的QR紅色標(biāo)記即是識(shí)別目標(biāo)點(diǎn)二維碼后預(yù)估的目標(biāo)點(diǎn)所在的位置。
圖11 方案一地圖及目標(biāo)點(diǎn)預(yù)估位置
步驟6,將無人車的SLAM建圖算法調(diào)整為Hector-SLAM算法并定為方案二,Hector_Geotiff功能包包含在此算法中。利用同樣的步驟識(shí)別固定位置的目標(biāo)點(diǎn)二維碼,測(cè)量無人車成功識(shí)別4個(gè)固定位置目標(biāo)點(diǎn)二維碼后無人車距離目標(biāo)點(diǎn)的實(shí)際距離,結(jié)果如表2所示。
表2 無人車距離目標(biāo)點(diǎn)的實(shí)際距離(方案二)
保存Hector_SLAM算法建立的2D地圖,如圖12所示,圖中的QR紅色標(biāo)記即是目標(biāo)點(diǎn)所在的預(yù)估位置。
圖12 方案二地圖及目標(biāo)點(diǎn)預(yù)估位置
預(yù)設(shè)無人車距離目標(biāo)點(diǎn)50 cm處可識(shí)別到二維碼,綜合表1和表2進(jìn)行數(shù)據(jù)分析,結(jié)果如表3所示。
表3 無人車距離目標(biāo)點(diǎn)的實(shí)際距離(預(yù)設(shè)距離為50 cm) 單位:cm
對(duì)比圖11、圖12和表4可得:方案一圖中QR標(biāo)記的預(yù)估位置和實(shí)際二維碼目標(biāo)點(diǎn)所在位置更為接近,標(biāo)記的精度更高,綜合表3數(shù)據(jù)可知,方案一在比預(yù)設(shè)距離更遠(yuǎn)的位置即可識(shí)別到二維碼。
表4 SLAM地圖中標(biāo)記點(diǎn)對(duì)應(yīng)的實(shí)際位置與目標(biāo)點(diǎn)實(shí)際位置的距離
對(duì)比分析實(shí)驗(yàn)結(jié)果可知,與機(jī)器人小車基于ZBar算法和Hector-SLAM算法進(jìn)行二維碼目標(biāo)點(diǎn)識(shí)別、建圖相比,機(jī)器人小車基于ZBar算法和融合Cartographer-SLAM與Hector-SLAM算法的方法對(duì)二維碼進(jìn)行識(shí)別、標(biāo)記、建圖時(shí)效果更好。其優(yōu)點(diǎn)主要體現(xiàn)在以下幾個(gè)方面:
(1)能在較遠(yuǎn)的距離識(shí)別到目標(biāo)點(diǎn)二維碼;
(2)目標(biāo)點(diǎn)的預(yù)估位置更加精確,平均精度可提高67.6%。
但是,所提方法預(yù)估位置還存在一定誤差,因此下一步工作將考慮繼續(xù)縮小誤差,提高精度。