曾梓銳,梁永盛,黃永鵬,劉東湖,李欣
(廣東石油化工學(xué)院 計(jì)算機(jī)學(xué)院,廣東 茂名 525000)
目前,大部分垃圾清理機(jī)器人用于清理灰塵、碎屑等細(xì)小物體,不能處理稍大的物體,應(yīng)用場景也單一,只能在平坦的地板上使用。此類機(jī)器人市場上多采用“即時定位與地圖構(gòu)建(簡稱SLAM)”技術(shù)使用LDS激光雷達(dá)掃描室內(nèi)環(huán)境并繪制地圖,使用算法導(dǎo)航移動,實(shí)現(xiàn)清掃[1]。除此之外,大型的垃圾分揀機(jī)器人應(yīng)用于垃圾回收站,其使用傳送帶對傳入的垃圾進(jìn)行自動分揀并處理,分揀準(zhǔn)確率高,但機(jī)器占地大,位置固定,不利于移動?,F(xiàn)有研究多用機(jī)器視覺識別垃圾物體類別,構(gòu)建機(jī)械手運(yùn)動模型拾取物體[2]。硬件設(shè)計(jì)多采用固定的設(shè)備,使用STM32控制板和電機(jī)驅(qū)動模塊[3,4],若要更換硬件設(shè)備則需要重寫控制代碼。
本設(shè)計(jì)結(jié)合現(xiàn)有的垃圾清理機(jī)器人和垃圾分揀機(jī)器人技術(shù),在機(jī)器人移動平臺上安裝機(jī)械臂。使用ROS技術(shù)實(shí)現(xiàn)靈活更換部件,而不需要重寫控制代碼,實(shí)現(xiàn)機(jī)器人在復(fù)雜環(huán)境中回收中小型垃圾,用于大型活動現(xiàn)場、海灘、商場等不同場景。有效地減少了清潔人員的勞動量,提高工作效率,減少污染,節(jié)能環(huán)保。
機(jī)器人系統(tǒng)主要由遠(yuǎn)程服務(wù)器和移動機(jī)器人組成,系統(tǒng)架構(gòu)如圖1所示。機(jī)器人包括硬件部分和軟件部分,其技術(shù)核心是ROS技術(shù)、圖像識別技術(shù),主要使用Python語言編程,不涉及底層驅(qū)動代碼。服務(wù)層為遠(yuǎn)程服務(wù)器,使用Python編寫服務(wù)端實(shí)現(xiàn)圖像識別,同時在多機(jī)工作中做任務(wù)劃分,協(xié)調(diào)機(jī)器人之間的任務(wù)。應(yīng)用層搭載在機(jī)器人上的Ubuntu系統(tǒng),基于ROS開發(fā)軟件層。硬件部分包括機(jī)器人的電源、上位機(jī)、機(jī)械臂、攝像頭等設(shè)備。
圖1 機(jī)器人系統(tǒng)架構(gòu)
系統(tǒng)硬件部分分為服務(wù)器和移動機(jī)器人。(1)服務(wù)器主要用于運(yùn)行圖像識別服務(wù),需要有較好的性能,并且連接外網(wǎng)。本文選用阿里云服務(wù)器,服務(wù)器配置如下:輕量應(yīng)用服務(wù)器,雙核CPU,4 GB內(nèi)存,40 G系統(tǒng)盤,Ubuntu18.04系統(tǒng)。此外,訓(xùn)練垃圾分類模型需要性能較強(qiáng)的GPU,本文使用圖形服務(wù)器進(jìn)行訓(xùn)練,配置如下:PowerEdge T630,英特爾至強(qiáng)E5 2600 v4處理器CPU型號,16 G DDR4內(nèi)存,4 TB機(jī)械硬盤,2張GTX1080Ti GPU,顯存22 G。(2)移動機(jī)器人分為上位機(jī)和下位機(jī)。上位機(jī)可選用樹莓派4B或支持嵌入式的Linux機(jī)器。本文選用移動機(jī)器人RIA E100,硬件參數(shù)為:Intel i5處理器,4GB內(nèi)存,120 G SSD,系統(tǒng)使用Ubuntu16,裝有ROS Kinetic;車輪與機(jī)械臂各有自身的控制器作為下位機(jī),使用USB與上位機(jī)連接,通過TCP/IP通信;移動機(jī)器人可根據(jù)不同使用場景更換輪式或者履帶式車輪。車身前部搭載一個RGB攝像頭,Pixhawk IMU和2D雷達(dá),電池使用24 V直流鋰電池,容量7.5 Ah。RIA E100機(jī)器人實(shí)物見圖2,硬件系統(tǒng)框架見圖3。
圖2 RIA E100機(jī)器人實(shí)物 圖3 RIA E100系統(tǒng)硬件框架
機(jī)器人搭載5自由度的機(jī)械臂,實(shí)現(xiàn)抓取地面上的物體,實(shí)際使用場景中可以更換機(jī)械夾或機(jī)械爪。本文在仿真環(huán)境下建模,機(jī)械臂的仿真外觀見圖4,其URDF結(jié)構(gòu)描述如圖5所示。圖5中joint為可旋轉(zhuǎn)、移動的關(guān)節(jié),link表示連接。圖5中l(wèi)ink1為圖4底座上的第一個機(jī)械臂(黑色),joint2是連接link1和link2的關(guān)節(jié),以此類推,最后的gripper是末端的兩個機(jī)械爪。
圖4 機(jī)械臂外觀設(shè)計(jì) 圖5 機(jī)械臂結(jié)構(gòu)
ROS主要為機(jī)器人開發(fā)提供硬件抽象、底層驅(qū)動、消息傳遞、程序管理、應(yīng)用原型等功能和機(jī)制。同時,整合了許多第三方工具和庫文件,幫助用戶快速完成機(jī)器人應(yīng)用的建立、編寫和多機(jī)整合[5]。基于ROS開發(fā)解決了難以編寫底層驅(qū)動的問題,為更換硬件提供了方便,不需要重新編寫驅(qū)動程序。軟件層基于ROS的節(jié)點(diǎn)框架模式設(shè)計(jì),由攝像頭節(jié)點(diǎn)、Python節(jié)點(diǎn)、舵機(jī)運(yùn)動節(jié)點(diǎn)、SLAM導(dǎo)航運(yùn)動節(jié)點(diǎn)組成,各節(jié)點(diǎn)之間獨(dú)立運(yùn)行,使用基于TCP/IP的通信方式,實(shí)現(xiàn)模塊點(diǎn)對點(diǎn)的松耦合連接,其工作流程見圖6。
圖6 系統(tǒng)工作流程
機(jī)器人使用統(tǒng)一機(jī)器人描述格式(URDF)表示,包含了機(jī)器人模型的運(yùn)動學(xué)與動力學(xué)描述、機(jī)器人的幾何表示、機(jī)器人的碰撞模型。ROS通過讀取URDF文件獲取機(jī)器人的參數(shù),使用ros_controllers功能包控制機(jī)器人;通過Move It!功能包的Moveit! Setup Assistant工具配置機(jī)械臂的自碰撞矩陣、虛擬關(guān)節(jié)列表、規(guī)劃組定義、機(jī)械臂位姿、末端執(zhí)行器及被動關(guān)節(jié)列表生成SRDF文件,即可通過Move It!功能包的API接口編程控制機(jī)械臂,同時可以選用不同的運(yùn)動規(guī)劃器來實(shí)現(xiàn)機(jī)器人的運(yùn)動規(guī)劃,如RRT[6]。通過URDF、SRDF抽象的描述機(jī)器人和ROS功能包提供的架構(gòu),即可使用同一套控制程序控制不同規(guī)格的機(jī)器人。
識別模塊數(shù)據(jù)通過訂閱攝像頭的數(shù)據(jù)來獲取。并將獲得的圖像數(shù)據(jù)進(jìn)行預(yù)處理,預(yù)處理的方法主要有濾波降噪和圖像分割。圖像預(yù)處理完后通過用 Canny 算子檢測邊緣,以不斷逼近邊緣的方式提取輪廓并畫出來[7]。判斷是否為物體,若是物體則將物體圖像上傳到服務(wù)器,并識別是否為標(biāo)識的垃圾物體,若是則控制機(jī)器人靠近,執(zhí)行抓取;不是則繞開繼續(xù)移動。
使用Python的PyTorch框架進(jìn)行模型的搭建與訓(xùn)練,使用ResNeXt模型做遷移學(xué)習(xí),對采集到的垃圾圖像集進(jìn)行訓(xùn)練,得到結(jié)果模型,使用Flask框架做服務(wù)端識別圖像并返回識別結(jié)果。
(1)訓(xùn)練過程。利用爬蟲從網(wǎng)絡(luò)收集常見的垃圾圖像,以及自行拍攝的圖像組成數(shù)據(jù)集。圖像數(shù)據(jù)按照垃圾分類標(biāo)準(zhǔn)分為:廚余垃圾、可回收垃圾、有害垃圾、其他垃圾。使用Python加載數(shù)據(jù)并進(jìn)行預(yù)處理,定義torch模型訓(xùn)練和驗(yàn)證方法,使用resnext101_32x16d模型,固定特征提取層,不需要更新梯度,凍結(jié)某些層的梯度,調(diào)整分類個數(shù),做遷移學(xué)習(xí),在圖形服務(wù)器上進(jìn)行訓(xùn)練和評估,得到結(jié)果模型。具體工作流程見圖7。
(2)識別過程。在輕量應(yīng)用服務(wù)器上使用Python的Flask框架做網(wǎng)絡(luò)服務(wù)器,接收傳入的圖像并保存,使用torch加載訓(xùn)練好的模型,先對圖像進(jìn)行特征提取再使用模型識別,返回4類垃圾各自的概率。具體工作流程見圖8。
使用ROS的Move It!功能包實(shí)現(xiàn)機(jī)械臂的控制,通過Move It!功能包配置后,得到機(jī)械臂的一些固定屬性,如碰撞參數(shù)、控制組和末端夾爪等。只要機(jī)械臂結(jié)構(gòu)沒有改變,就可以利用這些屬性和Move It!功能包的工具對機(jī)械臂進(jìn)行控制。通過ROS提供的pick和place接口可以在設(shè)定機(jī)器人抓取位姿和放置位姿的情況下利用機(jī)械臂的反向運(yùn)動學(xué)和避障規(guī)劃求解出機(jī)械臂抓取和放置過程中的位姿變換路徑[8]。
使用機(jī)器人中較為常用且成熟的gmapping算法包和hector-slam算法包建圖算法包進(jìn)行ROS建圖。本機(jī)器人應(yīng)用于地面上的垃圾物體,使用成熟的gmapping算法包是更好的選擇。實(shí)現(xiàn)導(dǎo)航功能時,ROS需要使用全局路徑規(guī)劃和本地路徑規(guī)劃與實(shí)時避障兩種代價(jià)地圖。這兩者有一些通用的配置如周圍環(huán)境的障礙信息、需要聲明的地圖關(guān)注點(diǎn)等信息以便于地圖信息的更新;全局路徑規(guī)劃代價(jià)地圖用于存儲全局的代價(jià)地圖的參數(shù),如參考系的選擇、機(jī)器人坐標(biāo)系的選擇、地圖更新頻率等。本地路徑規(guī)劃與實(shí)時避障代價(jià)地圖用來存儲本地的代價(jià)地圖的參數(shù),主要用于調(diào)整發(fā)布的圖像話題的內(nèi)容,方便定位機(jī)器人位置等。代價(jià)地圖記錄了基本的障礙信息、目標(biāo)位置信息、機(jī)器人位置信息以及設(shè)定了統(tǒng)一的坐標(biāo)參考系。
建圖的正確性和代價(jià)地圖的建立為機(jī)器人的路徑規(guī)劃提供了完整的保障。靜止的路面情況,無須任何優(yōu)化即可完成抓取地面上垃圾的功能。路面上有運(yùn)動物體,需要動態(tài)更新地圖的障礙信息,硬件層面上計(jì)算能力不足帶來的延遲問題可以通過添置性能更加優(yōu)越的硬件來解決。對于位姿調(diào)整,避障規(guī)劃考慮到機(jī)器人本身體積和位置的影響,從而防止機(jī)械臂因貼合障礙物邊緣而導(dǎo)致無法通過的問題。
ROS針對機(jī)器人系統(tǒng)的可視化需求,為用戶提供了一款顯示多種數(shù)據(jù)的三維可視化平臺——rviz,該平臺能很好地兼容各種基于ROS軟件架構(gòu)的機(jī)器人平臺。在rviz中,可以使用XML對機(jī)器人、周圍物體等任何實(shí)物進(jìn)行尺寸、質(zhì)量、位置、材質(zhì)、關(guān)節(jié)等屬性的描述,并在界面中呈現(xiàn)。rviz還可以通過圖形化方法,實(shí)現(xiàn)顯示機(jī)器人傳感器的信息、機(jī)器人的運(yùn)動狀態(tài)、周圍環(huán)境的變化等。開發(fā)者可以通過rviz監(jiān)測、控制機(jī)器人。
Gazebo是一個功能強(qiáng)大的三維物理仿真平臺,具有強(qiáng)大的物理引擎、高質(zhì)量的圖形渲染、方便的編程與圖形接口。在模型中加入機(jī)器人和周圍環(huán)境的物理屬性,即可模擬真實(shí)世界的場景進(jìn)行仿真實(shí)驗(yàn)。圖9是Gazebo的一個仿真場景。
圖9 Gazebo仿真場景
本節(jié)使用RIA E100移動機(jī)器人測試SLAM構(gòu)建地圖功能。機(jī)器人在室內(nèi)環(huán)境下使用2D雷達(dá)和gmapping功能包掃描地圖,移動機(jī)器人經(jīng)過不停地掃描,得到如圖10所示的完整地圖。使用2D雷達(dá)構(gòu)建地圖精度和檢測范圍效果較好,能有效地復(fù)原真實(shí)環(huán)境。在建圖過程中,如果機(jī)器人位置發(fā)生偏移,gmapping根據(jù)傳感器信息自動矯正機(jī)器人的位置。
圖10 rviz中機(jī)器人完成地圖掃描 圖11 Gazebo虛擬仿真環(huán)境SLAM
在Gazebo虛擬仿真環(huán)境中,也可以進(jìn)行SLAM建圖。圖11是RIA E100移動機(jī)器人的仿真模型在虛擬環(huán)境中構(gòu)建地圖,使用的掃描程序與上述真實(shí)環(huán)境相同,掃描效果相同。
實(shí)驗(yàn)證明,配置好機(jī)器人的URDF參數(shù)后,即可在仿真環(huán)境和現(xiàn)實(shí)環(huán)境中使用同一套程序。在仿真環(huán)境中開發(fā)可以解決缺少硬件設(shè)備的問題,同時可以為不同的機(jī)器人做適配,達(dá)到通用的效果。
機(jī)械臂運(yùn)動規(guī)劃主要使用笛卡爾運(yùn)動規(guī)劃接口的運(yùn)動規(guī)劃,實(shí)現(xiàn)機(jī)械臂避障移動。在rviz仿真環(huán)境中進(jìn)行機(jī)械臂實(shí)驗(yàn),如圖12所示。機(jī)械臂初始位于兩個物體中間(圖12a),設(shè)置機(jī)械臂移動到畫面左側(cè)(圖12c)。在移動路徑上有一障礙物體,程序調(diào)用笛卡爾運(yùn)動規(guī)劃接口,根據(jù)環(huán)境自動生成避障路徑,從障礙物體上方移動(圖12b),完成機(jī)械臂移動。
圖12 機(jī)械臂運(yùn)動過程 圖13 機(jī)械臂抓取物體過程
在運(yùn)動規(guī)劃的基礎(chǔ)上,進(jìn)行機(jī)械爪抓取物體移動實(shí)驗(yàn),如圖13所示。抓取前控制機(jī)械臂到達(dá)目標(biāo)位姿(圖13a),抓取物體(圖13b),并向目的位置移動。
網(wǎng)絡(luò)爬取得到的訓(xùn)練圖像數(shù)據(jù)共14802張。將實(shí)驗(yàn)圖像數(shù)據(jù)分4個大類:可回收物、廚余垃圾、有害垃圾、其他垃圾。 將實(shí)驗(yàn)圖像數(shù)據(jù)按照不同類型分類,并將實(shí)驗(yàn)圖像數(shù)據(jù)按照8∶2劃分為訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)兩部分,對模型進(jìn)行遷移學(xué)習(xí)從而得到新模型。將驗(yàn)證圖像數(shù)據(jù)在未經(jīng)遷移學(xué)習(xí)的模型和訓(xùn)練后的新模型上進(jìn)行測試,其結(jié)果見表1。
表1 模型測試結(jié)果
由表1可以看出,未經(jīng)遷移學(xué)習(xí)的模型準(zhǔn)確率為16.92%,不能區(qū)分具體的垃圾種類;經(jīng)過遷移學(xué)習(xí)得到的模型,在測試數(shù)據(jù)中平均準(zhǔn)確率有94.87%,識別準(zhǔn)確率有較大的提升。其中其他垃圾和有害垃圾的識別率較低,可能是因?yàn)闃颖緮?shù)量較少或圖像特征不明顯,可以收集更多更有特征的圖像進(jìn)行訓(xùn)練來改進(jìn)模型。
本文基于ROS平臺設(shè)計(jì)并實(shí)現(xiàn)了一種帶有機(jī)械臂的移動抓取機(jī)器人,用于代替人工回收垃圾。設(shè)計(jì)基于ROS的軟硬件架構(gòu),選用移動機(jī)器人RIA E100,依靠激光雷達(dá)感知周圍信息,采用hector_slam功能包構(gòu)建地圖,使用普通RGB攝像頭識別物體;基于Move It!功能包完成機(jī)械臂對設(shè)置坐標(biāo)位置的逆運(yùn)動學(xué)求解;基于遷移學(xué)習(xí)方法訓(xùn)練模型,搭建識別框架。最終實(shí)現(xiàn)通過機(jī)械臂和小車的運(yùn)動完成對物體的抓取、地圖構(gòu)建和導(dǎo)航等功能。本文為機(jī)器人硬件與軟件的設(shè)計(jì)提供了一個切實(shí)可行的設(shè)計(jì)方案,在機(jī)器人的機(jī)器視覺領(lǐng)域具有一定參考價(jià)值。