朱泳玨,蔣學程,方楚炎
(閩江學院 物理與電子信息工程學院,福建福州,350108)
隨著人工智能技術(shù)的進步,智能小車在物流、工業(yè)和生活服務(wù)等領(lǐng)域得到了廣泛應(yīng)用。要實現(xiàn)小車智能化,需要實現(xiàn)建圖、定位、路徑規(guī)劃這三項任務(wù)。前兩項任務(wù)就是實現(xiàn)實時建圖以及實時定位,第三項任務(wù)就是實現(xiàn)路徑規(guī)劃,即根據(jù)已知的地圖規(guī)劃出一條到達目標的最佳路徑[1]?,F(xiàn)如今的許多智能車價格昂貴、軟件代碼不開源且通用性差,如果從頭到尾開發(fā)一個機器人的軟硬件系統(tǒng)會造成開發(fā)難度大和周期長等問題[2]。針對這些問題,本課題基于ROS開源機器人操作系統(tǒng)開發(fā),設(shè)計一款具有通用性、結(jié)構(gòu)簡單、經(jīng)濟性良好的智能小車系統(tǒng)。
本課題主要設(shè)計一款自導航垃圾識別智能移動小車。硬件部分:上位機采用搭載ROS的jetson nano硬件平臺,下位機采用STM32進行運動控制,傳感器有激光雷達、IMU和攝像頭,如圖1所示。軟件部分:主要開發(fā)自主導航和圖像識別兩部分,如圖2所示。
圖1 硬件部分框架
圖2 軟件部分框架
采用的通信協(xié)議:11字節(jié),[55 aa][size05][左輪速度2字節(jié)][右輪速度2字節(jié)][控制位07][效驗位][0d 0a]。
數(shù)據(jù)傳輸選擇共用體的方法,通過使用共享內(nèi)存的方式,使傳輸數(shù)據(jù)的大小增加,圖3為具體原理圖。
圖3 數(shù)據(jù)傳輸原理圖
上位機部分,采用ROS的話題通信機制,訂閱/cmd_vel話題,獲取小車線速度和角速度,解算為左右輪速,將左右輪速通過串口向下位機發(fā)送。
下位機部分,通過STM32的USART串口,使能GPIOA9和GPIOA10,對串口的收發(fā)模式進行設(shè)置,通過主程序中對其進行調(diào)用,可以使兩者進行通訊。由建立的通信協(xié)議打包成的庫,通過中斷的方式將ROS下發(fā)的左輪和右輪數(shù)據(jù)從USART串口中接收進來,在保證波特率和延時一致時,兩者之間就可以實現(xiàn)通信了。
cartographer是由谷歌開發(fā)的實時室內(nèi)SLAM,cartographer是基于submap子圖構(gòu)建全局地圖的思想,能有效避免建圖過程中環(huán)境中有移動物體帶來的干擾。cartographer采用了基于谷歌開發(fā)的ceres非線性優(yōu)化的方案,cartographer的亮點在于代碼規(guī)范與工程化,非常適合商用和再開發(fā)。并且cartographer支持多傳感器數(shù)據(jù)來建圖,支持建立二維地圖和三維地圖。所以,我們果斷采用cartographer。
下面我們將cartographer的代碼部署到自己的機器人平臺上。cartographer提供了一個基于Revo LDS的demo,與我們所使用的rplidar相近,可以參考該demo進行實現(xiàn)。修改revo_lds.lua配置文件內(nèi)的參數(shù)即可。revo_lds.lua文件中的部分內(nèi)容如圖4所示。
圖4 revo_lds.lua文件
部分參數(shù)說明:
參數(shù)map_frame:cartographer中使用的全局坐標系。
參數(shù)tracking_frame:SLAM算法追蹤的ROS坐標系。
參數(shù)published_frame:正在發(fā)布pose的坐標系。
參數(shù)provide_odom_frame:是否需要cartographer內(nèi)部提供里程計。
參數(shù)use_odometry:是否使用里程計。
參數(shù)odom_frame:里程計坐標系。
參數(shù)use_imu_data:是否使用IMU數(shù)據(jù)。
參數(shù)publish_frame_projected_to_2d:如果啟用,發(fā)布的位姿將被限制為純2D位姿。
定位其實就是計算出機器人自身在全局地圖上所處的位置。在SLAM中也需要定位,但是,SLAM中的定位僅僅用于導航開始之前用于構(gòu)建出全局地圖。而當前定位是用于導航過程中的,導航中機器人需要按照規(guī)劃好的路線移動,通過定位,我們就可以評估機器人的實際軌跡是否符合我們的預期。在ROS的導航功能包集navigation中提供了一個非常實用的功能包,該功能包就是amcl功能包,可以實現(xiàn)導航中的機器人定位。
AMCL是一種面向二維移動機器人的概率定位系統(tǒng),它實現(xiàn)了自適應(yīng)蒙特卡洛定位,可以基于現(xiàn)有的地圖使用粒子濾波器計算出機器人所處位置。
導航的核心功能之一就是路徑規(guī)劃,在ROS的導航功能包集navigation提供了一個 move_base功能包,可用于實現(xiàn)路徑規(guī)劃。
在世界坐標中給定一個目標位置,move_base功能包就可以根據(jù)這個位置,不斷地將速度信息通過/cmd_vel話題發(fā)布出來,使機器人底盤不斷接近目標位置,在移動過程中也會不斷地反饋機器人自身的位姿信息和目標位置的狀態(tài)信息。
使用move_base功能包,需要編寫四個yaml配置文件:①costmap_common_params文件,該文件是move_base 在本地路徑規(guī)劃和全局路徑規(guī)劃時都要載入的通用參數(shù),其中包含了傳感器的信息、距離障礙物的安全距離、機器人的尺寸等。②base_local_planner_params文件,該文件設(shè)置了基本的本地規(guī)劃器參數(shù),設(shè)置了機器人的最大和最小速度,也設(shè)置了加速度的閾值。③local_costmap_params文件,該文件用于設(shè)置本地代價地圖的參數(shù)。④global_costmap_params文件,該文件用于設(shè)置全局代價地圖的參數(shù)。
要實現(xiàn)機器人自主移動的SLAM建圖,需要將導航與SLAM建圖相結(jié)合。在使用cartographer進行SLAM建圖的過程中本身就會實時發(fā)布地圖信息,所以只需要同時啟動SLAM節(jié)點與move_base節(jié)點即可實現(xiàn)機器人的自主導航。
小車自主導航實際環(huán)境測試效果如圖5所示,可見在rviz中指定一個目標位置后,小車可以避開包括動態(tài)障礙物在內(nèi)的各種障礙物,實現(xiàn)自主導航并建立二維柵格地圖。
圖5 小車自主導航實測效果
2020年6月,Ultralytics公司公開發(fā)布了YOLOv5,主要有四種不同規(guī)模的版本。YOLOv5的大部分性能改進來自PyTorch,而模型架構(gòu)仍然接近于YOLOv4。YOLOv5具有快速、精確且易于訓練的優(yōu)點。YOLOv5核心思想是將整張圖作為網(wǎng)絡(luò)的輸入,在輸出層直接回歸出目標的位置坐標和類別,其特點是檢測精度高、檢測速度快,滿足實時監(jiān)測的需求[3]。
要實現(xiàn)圖像識別,第一步需要制作數(shù)據(jù)集。我們共制作了30張垃圾的圖片,對圖片進行按順序命名,把這些圖片作為訓練集。對這些圖片進行手工標注。標注完成后,生成格式為.txt的文件。
第二步訓練YOLOv5。創(chuàng)建garbage.yaml文件,該文件用于配置存放數(shù)據(jù)集路徑等參數(shù)。在yolov5s.yaml文件中。找到nc參數(shù),nc為類別數(shù)量,修改為16,我們指定垃圾種類有16個類別。打開終端,執(zhí)行命令,開始訓練。訓練完成后會生成對應(yīng)的.pt文件,該文件就是我們所需的權(quán)重文件。將該權(quán)重文件載入到Y(jié)OLOv5中,啟動神經(jīng)網(wǎng)絡(luò)即可實現(xiàn)圖像識別,效果如圖6所示。
圖6 圖像識別效果
本文設(shè)計了基于ROS的自導航智能移動小車,采用cartographer算法建立二維柵格地圖,結(jié)合導航算法功能包實現(xiàn)自主導航,采用YOLOv5實現(xiàn)圖像識別。本課題為自主導航和服務(wù)型機器人提供了可行的解決思路和方案。未來,智能移動機器人將更多地運用在物流、工業(yè)和生活服務(wù)等領(lǐng)域。