朱泳玨,蔣學程,方楚炎
(閩江學院 物理與電子信息工程學院,福建福州,350108)
隨著人工智能技術的進步,智能小車在物流、工業和生活服務等領域得到了廣泛應用。要實現小車智能化,需要實現建圖、定位、路徑規劃這三項任務。前兩項任務就是實現實時建圖以及實時定位,第三項任務就是實現路徑規劃,即根據已知的地圖規劃出一條到達目標的最佳路徑[1]。現如今的許多智能車價格昂貴、軟件代碼不開源且通用性差,如果從頭到尾開發一個機器人的軟硬件系統會造成開發難度大和周期長等問題[2]。針對這些問題,本課題基于ROS開源機器人操作系統開發,設計一款具有通用性、結構簡單、經濟性良好的智能小車系統。
本課題主要設計一款自導航垃圾識別智能移動小車。硬件部分:上位機采用搭載ROS的jetson nano硬件平臺,下位機采用STM32進行運動控制,傳感器有激光雷達、IMU和攝像頭,如圖1所示。軟件部分:主要開發自主導航和圖像識別兩部分,如圖2所示。

圖1 硬件部分框架

圖2 軟件部分框架
采用的通信協議:11字節,[55 aa][size05][左輪速度2字節][右輪速度2字節][控制位07][效驗位][0d 0a]。
數據傳輸選擇共用體的方法,通過使用共享內存的方式,使傳輸數據的大小增加,圖3為具體原理圖。

圖3 數據傳輸原理圖
上位機部分,采用ROS的話題通信機制,訂閱/cmd_vel話題,獲取小車線速度和角速度,解算為左右輪速,將左右輪速通過串口向下位機發送。
下位機部分,通過STM32的USART串口,使能GPIOA9和GPIOA10,對串口的收發模式進行設置,通過主程序中對其進行調用,可以使兩者進行通訊。由建立的通信協議打包成的庫,通過中斷的方式將ROS下發的左輪和右輪數據從USART串口中接收進來,在保證波特率和延時一致時,兩者之間就可以實現通信了。
cartographer是由谷歌開發的實時室內SLAM,cartographer是基于submap子圖構建全局地圖的思想,能有效避免建圖過程中環境中有移動物體帶來的干擾。cartographer采用了基于谷歌開發的ceres非線性優化的方案,cartographer的亮點在于代碼規范與工程化,非常適合商用和再開發。并且cartographer支持多傳感器數據來建圖,支持建立二維地圖和三維地圖。所以,我們果斷采用cartographer。
下面我們將cartographer的代碼部署到自己的機器人平臺上。cartographer提供了一個基于Revo LDS的demo,與我們所使用的rplidar相近,可以參考該demo進行實現。修改revo_lds.lua配置文件內的參數即可。revo_lds.lua文件中的部分內容如圖4所示。

圖4 revo_lds.lua文件
部分參數說明:
參數map_frame:cartographer中使用的全局坐標系。
參數tracking_frame:SLAM算法追蹤的ROS坐標系。
參數published_frame:正在發布pose的坐標系。
參數provide_odom_frame:是否需要cartographer內部提供里程計。
參數use_odometry:是否使用里程計。
參數odom_frame:里程計坐標系。
參數use_imu_data:是否使用IMU數據。
參數publish_frame_projected_to_2d:如果啟用,發布的位姿將被限制為純2D位姿。
定位其實就是計算出機器人自身在全局地圖上所處的位置。在SLAM中也需要定位,但是,SLAM中的定位僅僅用于導航開始之前用于構建出全局地圖。而當前定位是用于導航過程中的,導航中機器人需要按照規劃好的路線移動,通過定位,我們就可以評估機器人的實際軌跡是否符合我們的預期。在ROS的導航功能包集navigation中提供了一個非常實用的功能包,該功能包就是amcl功能包,可以實現導航中的機器人定位。
AMCL是一種面向二維移動機器人的概率定位系統,它實現了自適應蒙特卡洛定位,可以基于現有的地圖使用粒子濾波器計算出機器人所處位置。
導航的核心功能之一就是路徑規劃,在ROS的導航功能包集navigation提供了一個 move_base功能包,可用于實現路徑規劃。
在世界坐標中給定一個目標位置,move_base功能包就可以根據這個位置,不斷地將速度信息通過/cmd_vel話題發布出來,使機器人底盤不斷接近目標位置,在移動過程中也會不斷地反饋機器人自身的位姿信息和目標位置的狀態信息。
使用move_base功能包,需要編寫四個yaml配置文件:①costmap_common_params文件,該文件是move_base 在本地路徑規劃和全局路徑規劃時都要載入的通用參數,其中包含了傳感器的信息、距離障礙物的安全距離、機器人的尺寸等。②base_local_planner_params文件,該文件設置了基本的本地規劃器參數,設置了機器人的最大和最小速度,也設置了加速度的閾值。③local_costmap_params文件,該文件用于設置本地代價地圖的參數。④global_costmap_params文件,該文件用于設置全局代價地圖的參數。
要實現機器人自主移動的SLAM建圖,需要將導航與SLAM建圖相結合。在使用cartographer進行SLAM建圖的過程中本身就會實時發布地圖信息,所以只需要同時啟動SLAM節點與move_base節點即可實現機器人的自主導航。
小車自主導航實際環境測試效果如圖5所示,可見在rviz中指定一個目標位置后,小車可以避開包括動態障礙物在內的各種障礙物,實現自主導航并建立二維柵格地圖。

圖5 小車自主導航實測效果
2020年6月,Ultralytics公司公開發布了YOLOv5,主要有四種不同規模的版本。YOLOv5的大部分性能改進來自PyTorch,而模型架構仍然接近于YOLOv4。YOLOv5具有快速、精確且易于訓練的優點。YOLOv5核心思想是將整張圖作為網絡的輸入,在輸出層直接回歸出目標的位置坐標和類別,其特點是檢測精度高、檢測速度快,滿足實時監測的需求[3]。
要實現圖像識別,第一步需要制作數據集。我們共制作了30張垃圾的圖片,對圖片進行按順序命名,把這些圖片作為訓練集。對這些圖片進行手工標注。標注完成后,生成格式為.txt的文件。
第二步訓練YOLOv5。創建garbage.yaml文件,該文件用于配置存放數據集路徑等參數。在yolov5s.yaml文件中。找到nc參數,nc為類別數量,修改為16,我們指定垃圾種類有16個類別。打開終端,執行命令,開始訓練。訓練完成后會生成對應的.pt文件,該文件就是我們所需的權重文件。將該權重文件載入到YOLOv5中,啟動神經網絡即可實現圖像識別,效果如圖6所示。

圖6 圖像識別效果
本文設計了基于ROS的自導航智能移動小車,采用cartographer算法建立二維柵格地圖,結合導航算法功能包實現自主導航,采用YOLOv5實現圖像識別。本課題為自主導航和服務型機器人提供了可行的解決思路和方案。未來,智能移動機器人將更多地運用在物流、工業和生活服務等領域。