趙偉成,毛恩兵,莫仁函,葉志毅,王嘉豪
(西南民族大學(xué)電氣工程學(xué)院,四川成都 610225)
隨著物流業(yè)務(wù)的不斷發(fā)展和市場(chǎng)需求的不斷提高,無(wú)人車(chē)配送系統(tǒng)可以極大地提高物流效率和降低成本,逐漸成為一個(gè)備受關(guān)注的領(lǐng)域,具有廣泛的應(yīng)用前景。然而,無(wú)人車(chē)配送系統(tǒng)的研發(fā)仍然面臨著許多技術(shù)挑戰(zhàn),如何實(shí)現(xiàn)精準(zhǔn)的自主導(dǎo)航和配送功能是一個(gè)關(guān)鍵問(wèn)題。隨著機(jī)器人技術(shù)和人工智能技術(shù)的快速發(fā)展,機(jī)器人操作系統(tǒng)(Robot Operating System,ROS)提供了一系列功能強(qiáng)大的工具和算法,幫助研究人員開(kāi)展無(wú)人車(chē)自主導(dǎo)航、路徑規(guī)劃、環(huán)境感知和建圖等功能的開(kāi)發(fā),被廣泛應(yīng)用于無(wú)人駕駛機(jī)器人的研究中。本文基于ROS 設(shè)計(jì)并實(shí)現(xiàn)了一種無(wú)人車(chē)配送系統(tǒng),采用二維激光雷達(dá)感知環(huán)境信息,利用步定位與地圖構(gòu)建(Simultaneous Localization And Mapping,SLAM)技術(shù)進(jìn)行自主建圖,利用時(shí)間彈性帶(Time Elastic Band,TEB)算法進(jìn)行路徑規(guī)劃,實(shí)現(xiàn)無(wú)人車(chē)的運(yùn)動(dòng)控制、自主導(dǎo)航和配送功能。同時(shí),為了實(shí)現(xiàn)與上位機(jī)的通信,本文采用C#編寫(xiě)了上位機(jī)客戶端應(yīng)用程序,并通過(guò)Socket接口實(shí)現(xiàn)上位機(jī)系統(tǒng)與無(wú)人車(chē)配送系統(tǒng)之間的通信,發(fā)布無(wú)人車(chē)啟停、目標(biāo)點(diǎn)位置指令,控制無(wú)人車(chē)自主將貨物運(yùn)動(dòng)至目標(biāo)位置。
無(wú)人車(chē)配送系統(tǒng)實(shí)際上是一個(gè)無(wú)人駕駛的移動(dòng)機(jī)器人,從控制的角度看,其結(jié)構(gòu)框圖如圖1所示,主要包括控制系統(tǒng)、驅(qū)動(dòng)與執(zhí)行機(jī)構(gòu)和傳感器系統(tǒng)。
圖1 移動(dòng)機(jī)器人系統(tǒng)結(jié)構(gòu)
控制系統(tǒng)類(lèi)似于人的大腦,主要實(shí)現(xiàn)任務(wù)及信息的處理,輸出控制命令信號(hào),實(shí)現(xiàn)機(jī)器人的算法處理、運(yùn)動(dòng)控制、人機(jī)交互、系統(tǒng)監(jiān)督等功能。傳感器系統(tǒng)包括內(nèi)部傳感器和外部傳感器,相當(dāng)于人體的感官和神經(jīng),主要完成信號(hào)的采集和反饋,實(shí)現(xiàn)機(jī)器人對(duì)所處環(huán)境的感知。驅(qū)動(dòng)與執(zhí)行機(jī)構(gòu)包括驅(qū)動(dòng)系統(tǒng)和執(zhí)行機(jī)構(gòu),主要將控制系統(tǒng)下達(dá)的命令轉(zhuǎn)化成執(zhí)行機(jī)構(gòu)需要的信號(hào),驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)實(shí)現(xiàn)某種動(dòng)作。移動(dòng)機(jī)器人一般采用直流電機(jī)作為移動(dòng)的執(zhí)行機(jī)構(gòu),機(jī)械臂使用伺服系統(tǒng)作為執(zhí)行機(jī)構(gòu)。
無(wú)人車(chē)配送系統(tǒng)主要實(shí)現(xiàn)物品的無(wú)人配送,其系統(tǒng)硬件結(jié)構(gòu)如圖2 所示,主要包括ROS 主控制器、ROS 底層控制器、伺服電機(jī)、直流電機(jī)和相關(guān)傳感器。ROS主控制器主要實(shí)現(xiàn)無(wú)人車(chē)的建圖、路徑規(guī)劃與導(dǎo)航、控制命令的接收與輸出;ROS 底層控制器實(shí)現(xiàn)無(wú)人車(chē)位姿狀態(tài)參數(shù)的采集,并根據(jù)ROS主控制器下發(fā)的控制指令驅(qū)動(dòng)直流電機(jī)或伺服電機(jī)進(jìn)行行走;傳感器主要用于感知環(huán)境信息,實(shí)現(xiàn)無(wú)人車(chē)的定位、路徑規(guī)劃與自主導(dǎo)航,包含輪式里程計(jì)、慣性測(cè)量單元IMU、位置編碼器、超聲波、激光雷達(dá)、深度相機(jī)。
圖2 系統(tǒng)硬件框架圖
本文設(shè)計(jì)的無(wú)人車(chē)配送系統(tǒng)采用阿克曼運(yùn)動(dòng)型[2]來(lái)描述機(jī)器人的轉(zhuǎn)彎行為,其具有良好的機(jī)動(dòng)性能和控制精度,能夠適應(yīng)復(fù)雜的室內(nèi)環(huán)境。車(chē)體結(jié)構(gòu)由兩個(gè)驅(qū)動(dòng)輪和兩個(gè)轉(zhuǎn)向輪組成,其中驅(qū)動(dòng)輪通過(guò)電機(jī)驅(qū)動(dòng),轉(zhuǎn)向輪通過(guò)伺服電機(jī)實(shí)現(xiàn)。阿克曼運(yùn)動(dòng)模型是指基于車(chē)輛底盤(pán)的特殊運(yùn)動(dòng)模型,用于描述車(chē)輛的轉(zhuǎn)彎行為。在阿克曼運(yùn)動(dòng)模型中,車(chē)輛前輪和后輪轉(zhuǎn)向角度不同,通過(guò)轉(zhuǎn)彎半徑和車(chē)輛的軸距、前后輪之間的距離等參數(shù)來(lái)描述車(chē)輛轉(zhuǎn)彎過(guò)程。設(shè)車(chē)輛的前輪轉(zhuǎn)向角度為δ,則車(chē)輛前進(jìn)方向與車(chē)輛前輪轉(zhuǎn)向角度之間的夾角為β,車(chē)輛轉(zhuǎn)彎半徑為r。根據(jù)車(chē)輛的運(yùn)動(dòng)學(xué)模型可得:
式中,L表示車(chē)輛軸距,W表示前后輪之間的距離。
根據(jù)關(guān)系式(1)可以計(jì)算出車(chē)輛在轉(zhuǎn)彎時(shí)的前進(jìn)方向與轉(zhuǎn)彎半徑之間的關(guān)系。通過(guò)阿克曼運(yùn)動(dòng)模型,可以設(shè)計(jì)出更加精確的路徑規(guī)劃和運(yùn)動(dòng)控制算法,以實(shí)現(xiàn)車(chē)輛的準(zhǔn)確導(dǎo)航和控制。通過(guò)考慮機(jī)器人的阿克曼運(yùn)動(dòng)模型,利用激光SLAM 進(jìn)行實(shí)時(shí)建圖和路徑規(guī)劃,產(chǎn)生精確運(yùn)動(dòng)控制指令,實(shí)現(xiàn)無(wú)人車(chē)的自主導(dǎo)航和精準(zhǔn)避障。在運(yùn)動(dòng)控制中,根據(jù)機(jī)器人的阿克曼運(yùn)動(dòng)模型,可實(shí)時(shí)計(jì)算出機(jī)器人的轉(zhuǎn)彎半徑和前進(jìn)方向,實(shí)現(xiàn)更加準(zhǔn)確地運(yùn)動(dòng)控制和轉(zhuǎn)彎。
為了實(shí)現(xiàn)室內(nèi)環(huán)境的感知和建圖,無(wú)人車(chē)采用激光雷達(dá)和攝像頭[3]等傳感器進(jìn)行數(shù)據(jù)采集,系統(tǒng)各感知裝置的安裝位置如圖3所示。
圖3 感知裝置安裝布局
二維激光雷達(dá)是無(wú)人車(chē)系統(tǒng)的主要感知裝置,能夠提供高精度的環(huán)境地圖感知,為機(jī)器人的導(dǎo)航和路徑規(guī)劃提供重要支持。深度相機(jī)主要用于目標(biāo)識(shí)別和定位,輔助機(jī)器人的導(dǎo)航。超聲波傳感器用于障礙物檢測(cè),用于路徑規(guī)劃和導(dǎo)航時(shí)的避障。IMU單元和編碼器為激光SLAM 和路徑規(guī)劃算法提供參考數(shù)據(jù),實(shí)現(xiàn)高精度的建圖和最優(yōu)路徑規(guī)劃。當(dāng)二維激光雷達(dá)存在局限時(shí),系統(tǒng)通過(guò)深度相機(jī)進(jìn)行路標(biāo)和環(huán)境障礙物識(shí)別,輔助無(wú)人車(chē)進(jìn)行路徑規(guī)劃和控制,形成多傳感器融合建圖策略。同時(shí),深度相機(jī)可以檢測(cè)環(huán)境中的動(dòng)態(tài)障礙物,從而進(jìn)行避障操作,以提高系統(tǒng)的穩(wěn)定性和可靠性,適應(yīng)不同工作環(huán)境下的無(wú)人車(chē)運(yùn)行。
ROS主控制器采用英偉達(dá)Jetson Nano 控制器,搭載四核Cortex-A57 處理器、128 核Maxwell GPU 以及4GB LPDDR內(nèi)存,在ROS操作系統(tǒng)上運(yùn)行激光SLAM建圖和路徑規(guī)劃算法,實(shí)時(shí)依據(jù)激光雷達(dá)、深度相機(jī)產(chǎn)生無(wú)人車(chē)行駛指令。ROS 底層控制器負(fù)責(zé)執(zhí)行ROS主控制器的控制指令,并為ROS主控制器提供輔助數(shù)據(jù),協(xié)助實(shí)現(xiàn)無(wú)人車(chē)的自主導(dǎo)航和路徑規(guī)劃,是無(wú)人車(chē)中最為重要的部分之一。ROS 底層控制器采用STM32F103RCT6 作為控制微處理器,負(fù)責(zé)驅(qū)動(dòng)電機(jī)控制無(wú)人車(chē)的行走和轉(zhuǎn)彎[4]。STM32F103RCT6 的內(nèi)核為ARM Cortex-M3,主頻為72MHz,具有較強(qiáng)的計(jì)算能力和穩(wěn)定性,支持SWD 和JTAG 調(diào)試。STM32F103RCT6 微處理器具有51 個(gè)I/O 引腳、8 個(gè)定時(shí)器、2 個(gè)I2C 接口、5 個(gè)串口、3 個(gè)SPI 接口、1 個(gè)CAN2.0,完全滿足無(wú)人車(chē)運(yùn)動(dòng)控制所需的各種輸入輸出接口及各種傳感器數(shù)據(jù)采集的需要。
ROS 底層控制器主要驅(qū)動(dòng)直流電機(jī)實(shí)現(xiàn)小車(chē)行走,驅(qū)動(dòng)伺服電機(jī)實(shí)現(xiàn)轉(zhuǎn)彎,采集慣性測(cè)量單元IMU、位置編碼器、超聲波傳感器,實(shí)現(xiàn)對(duì)無(wú)人車(chē)位置信息的實(shí)時(shí)采集,并為無(wú)人車(chē)的建圖與自動(dòng)導(dǎo)航提供數(shù)據(jù)依據(jù)。設(shè)計(jì)的ROS 底層控制器微處理器核心電路原理圖如圖4(a)所示,編碼器和慣性測(cè)量單元IMU 接口電路原理圖如圖4(b)所,電機(jī)驅(qū)動(dòng)電路原理圖如圖4(c)所示,與ROS主控制器通信的串口轉(zhuǎn)換電路原理圖如圖4(d)所示。
圖4 ROS 底層控制器電路原理圖
ROS 底層控制器采用PID 控制算法,通過(guò)對(duì)速度、角速度、方向等參數(shù)的實(shí)時(shí)監(jiān)測(cè)和調(diào)節(jié),實(shí)現(xiàn)了無(wú)人車(chē)的精確運(yùn)動(dòng)控制。在實(shí)際控制過(guò)程中,還考慮了阿克曼運(yùn)動(dòng)模型的特點(diǎn),通過(guò)合理地調(diào)整控制參數(shù)和控制方式,有效提高了運(yùn)動(dòng)控制的精度和穩(wěn)定性。為了與ROS主控制器進(jìn)行通信,ROS 底層控制器配備了一個(gè)TTL串口轉(zhuǎn)USB接口電路,方便與ROS主控制器連接,實(shí)現(xiàn)與ROS 系統(tǒng)進(jìn)行數(shù)據(jù)交換和控制指令傳遞。
無(wú)人車(chē)配送系統(tǒng)的軟件主要是實(shí)現(xiàn)無(wú)人車(chē)的SLAM建圖、路徑規(guī)劃和自主導(dǎo)航,其軟件系統(tǒng)框架如圖5所示。
圖5 系統(tǒng)軟件框圖
激光SLAM算法是無(wú)人車(chē)配送系統(tǒng)中的重要組成部分,能夠?qū)崿F(xiàn)自主建圖和定位。本設(shè)計(jì)由于使用的是二維激光雷達(dá),支持Gmapping 算法的數(shù)據(jù)格式,因此本文采用激光Gmapping算法進(jìn)行SLAM建圖[5]。該算法可以同時(shí)實(shí)現(xiàn)建圖和定位,并具有精度高和性能高效,占用的計(jì)算資源較少,能夠滿足實(shí)時(shí)性要求。通過(guò)Gmapping 算法可以獲取地圖信息,并利用地圖信息實(shí)現(xiàn)路徑規(guī)劃和導(dǎo)航。實(shí)現(xiàn)Gmapping 算法流程如圖6所示。
圖6 Gmapping算法流程圖
在無(wú)人車(chē)配送系統(tǒng)中,路徑規(guī)劃和控制是核心問(wèn)題。本文采用了TEB 算法進(jìn)行路徑規(guī)劃[6],該算法可以生成平滑的軌跡,并適應(yīng)阿克曼車(chē)模的運(yùn)動(dòng)特性。TEB算法實(shí)現(xiàn)流程如圖7所示。
圖7 TEB算法實(shí)現(xiàn)流程圖
在進(jìn)行路徑規(guī)劃的同時(shí),利用ROS 提供的Move-Base功能包實(shí)現(xiàn)路徑控制和導(dǎo)航,通過(guò)發(fā)布目標(biāo)點(diǎn)指令,無(wú)人車(chē)可以實(shí)現(xiàn)自主導(dǎo)航,運(yùn)行到目標(biāo)點(diǎn)完成配送功能。然而,由于每輛無(wú)人車(chē)的硬件配置不同,需要對(duì)路徑規(guī)劃配置文件進(jìn)行修改和優(yōu)化。鑒于考慮無(wú)人車(chē)運(yùn)動(dòng)模型和激光雷達(dá)測(cè)量存在誤差、局部地圖建立和更新頻率因素的影響,需要對(duì)路徑規(guī)劃器的四個(gè)配置文件costmap_common_params.yaml、global_costmap_params.yaml、local_costmap_params.yaml和teb_local_planner_params.yaml進(jìn)行了優(yōu)化修改,使之不受測(cè)量誤差和更新頻率的影響。在進(jìn)行優(yōu)化時(shí),需要調(diào)整無(wú)人車(chē)的最大速度、加速度、最小曲率半徑和最大加速度等參數(shù),以適應(yīng)無(wú)人車(chē)的阿克曼運(yùn)動(dòng)模型。同時(shí),需要根據(jù)激光雷達(dá)的掃描范圍和測(cè)量精度,調(diào)整局部地圖的分辨率和更新頻率,以提高路徑規(guī)劃的精度和實(shí)時(shí)性。經(jīng)過(guò)參數(shù)優(yōu)化后,將路徑規(guī)劃TEB算法和控制策略在仿真環(huán)境和實(shí)驗(yàn)平臺(tái)上進(jìn)行了測(cè)試,測(cè)試結(jié)果表明,路徑規(guī)劃TEB算法和控制策略能夠在復(fù)雜環(huán)境中實(shí)現(xiàn)較為穩(wěn)定和高效的路徑規(guī)劃和運(yùn)動(dòng)控制,為無(wú)人車(chē)的自主導(dǎo)航提供了可靠的支撐。
遠(yuǎn)端操控PC主要實(shí)現(xiàn)無(wú)人車(chē)貨物配送的初始設(shè)置、啟動(dòng)/停止控制和運(yùn)行過(guò)程的監(jiān)管。要實(shí)現(xiàn)與無(wú)人車(chē)的操控,需要與無(wú)人車(chē)的ROS 主控制器進(jìn)行通信,實(shí)現(xiàn)控制命令及參數(shù)的交互。隨著5G 技術(shù)的發(fā)展,大多場(chǎng)所均覆蓋了5G信號(hào),本文設(shè)計(jì)的無(wú)人車(chē)通過(guò)5G信號(hào)與遠(yuǎn)端操控PC成一個(gè)局域網(wǎng)絡(luò),通過(guò)無(wú)線網(wǎng)絡(luò)進(jìn)行連接,實(shí)現(xiàn)上位機(jī)與ROS之間的通信。為方便對(duì)無(wú)人車(chē)的操控,本文采用C#編寫(xiě)了PC客戶端,其操作界面如圖8所示??蛻舳顺绦蛲ㄟ^(guò)Socket[7]編程,實(shí)現(xiàn)遠(yuǎn)端操控PC 與ROS 主控制器之間的網(wǎng)絡(luò)通信,向ROS主控制器發(fā)布控制指令,實(shí)現(xiàn)機(jī)器人的遠(yuǎn)程控制和配送功能。同時(shí),客戶端程序還可以接收無(wú)人車(chē)發(fā)送的狀態(tài)信息,實(shí)現(xiàn)對(duì)無(wú)人車(chē)狀態(tài)的實(shí)時(shí)監(jiān)測(cè)。
圖8 遠(yuǎn)端操控PC客戶端界面
遠(yuǎn)程控制和配送是通過(guò)訂閱和發(fā)布不同的話題來(lái)實(shí)現(xiàn)的。具體而言,是利用ROS 提供的導(dǎo)航功能包、視覺(jué)功能包以及Socket通信包來(lái)實(shí)現(xiàn)與遠(yuǎn)端操控PC的通信,進(jìn)而實(shí)現(xiàn)無(wú)人車(chē)的操控。首先,需要訂閱amcl_pose 話題來(lái)獲取小車(chē)在當(dāng)前地圖中的位姿,從而確定小車(chē)的當(dāng)前狀態(tài);然后,通過(guò)上位機(jī)發(fā)布初始坐標(biāo)(啟動(dòng)位置)、裝貨點(diǎn)坐標(biāo)(貨物位置)和卸貨點(diǎn)坐標(biāo)(目的地位置)等信息給MoveBase 功能包;最后,ROS主控制器根據(jù)接收到的位置點(diǎn)信息進(jìn)行建圖、定位,以實(shí)現(xiàn)無(wú)人車(chē)的自主導(dǎo)航和配送功能。
當(dāng)二維激光雷達(dá)受到限制時(shí),如遇到復(fù)雜的障礙物或無(wú)法準(zhǔn)確檢測(cè)到墻角等細(xì)節(jié)時(shí),可以通過(guò)深度相機(jī)進(jìn)行輔助導(dǎo)航。本文設(shè)計(jì)的無(wú)人車(chē)安裝了深度相機(jī),可通過(guò)OpenCV庫(kù)進(jìn)行圖像處理,獲取環(huán)境輔助信息,與激光雷達(dá)信息進(jìn)行融合,輔助無(wú)人車(chē)的自主導(dǎo)航。首先在運(yùn)行環(huán)境路徑中預(yù)定義一些路標(biāo),例如不同形狀和顏色的標(biāo)志,如圖9所示。通過(guò)預(yù)處理讓深度相機(jī)可以識(shí)別出這些標(biāo)志并提取其特征。然后通過(guò)模板匹配技術(shù)來(lái)檢測(cè)這些標(biāo)志,從而確定無(wú)人車(chē)的位置和姿態(tài)。
圖9 路徑上的導(dǎo)航路標(biāo)示意圖
在實(shí)際使用中,首先使用激光雷達(dá)進(jìn)行建圖和路徑規(guī)劃,當(dāng)無(wú)人車(chē)遇到障礙物或無(wú)法準(zhǔn)確檢測(cè)到細(xì)節(jié)時(shí),再通過(guò)深度相機(jī)獲取周?chē)h(huán)境信息,并將其與已有的地圖信息結(jié)合起來(lái)進(jìn)行決策,調(diào)整無(wú)人車(chē)的行駛方向。采用深度相機(jī)輔助導(dǎo)航策略能夠提高系統(tǒng)的魯棒性,使其能夠適應(yīng)更復(fù)雜的環(huán)境。但使用中需要注意的是,深度相機(jī)的安裝位置和視野有限,不能完全依賴深度相機(jī)進(jìn)行導(dǎo)航,因此在控制算法中需要合理安排激光雷達(dá)和深度相機(jī)的融合機(jī)制。
為驗(yàn)證所設(shè)計(jì)的無(wú)人車(chē)配送系統(tǒng)的可行性,在實(shí)驗(yàn)室環(huán)境下進(jìn)行自主導(dǎo)航和配送實(shí)驗(yàn)驗(yàn)證。本文利用英偉達(dá)Jetson Nano控制器、自行設(shè)計(jì)的ROS底層控制器、二維激光雷達(dá)、深度相機(jī)、慣性測(cè)量單元IMU、位置編碼器、超聲波傳感器、直流電機(jī)、伺服電機(jī)等硬件設(shè)備,搭建了如圖3所示的無(wú)人車(chē),并采用ROS作為主要的軟件開(kāi)發(fā)平臺(tái)設(shè)計(jì)了軟件系統(tǒng)。測(cè)試時(shí)通過(guò)遠(yuǎn)端操控PC客戶端向無(wú)人車(chē)發(fā)送目標(biāo)點(diǎn)指令,無(wú)人車(chē)根據(jù)接收到的指令進(jìn)行路徑規(guī)劃和導(dǎo)航,并實(shí)時(shí)將無(wú)人車(chē)的當(dāng)前狀態(tài)反饋回遠(yuǎn)端操控PC客戶端,包括位置、姿態(tài)、實(shí)時(shí)獲取的激光雷達(dá)和深度相機(jī)數(shù)據(jù)等信息。
針對(duì)搭建的包括直線行駛、曲線行駛、障礙物避障等多個(gè)實(shí)驗(yàn)場(chǎng)景,來(lái)驗(yàn)證機(jī)器人系統(tǒng)的建圖、路徑規(guī)劃和自主導(dǎo)航功能,測(cè)試結(jié)果如圖10所示。
圖10 無(wú)人車(chē)自主導(dǎo)航過(guò)程的路徑規(guī)劃圖
在實(shí)驗(yàn)過(guò)程中,筆者對(duì)機(jī)器人的路徑規(guī)劃和運(yùn)動(dòng)控制進(jìn)行了詳細(xì)的分析和優(yōu)化,并進(jìn)行了參數(shù)調(diào)整和實(shí)時(shí)監(jiān)測(cè)。經(jīng)過(guò)多次實(shí)驗(yàn)驗(yàn)證了所設(shè)計(jì)的無(wú)人車(chē)配送系統(tǒng)的可行性和適用性,控制系統(tǒng)能夠在復(fù)雜環(huán)境中實(shí)現(xiàn)較為穩(wěn)定和高效的路徑規(guī)劃和運(yùn)動(dòng)控制。在直線行駛和曲線行駛實(shí)驗(yàn)中,無(wú)人車(chē)能夠準(zhǔn)確跟蹤預(yù)設(shè)的軌跡,實(shí)現(xiàn)較為平穩(wěn)的運(yùn)動(dòng)控制。在障礙物避難實(shí)驗(yàn)中,無(wú)人車(chē)能夠?qū)崟r(shí)檢測(cè)障礙物并進(jìn)行避讓?zhuān)WC了系統(tǒng)的安全性和可靠性。