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