隨著人工智能技術與機器人關鍵技術的發展[1,2],智能機器人的發展也隨之加快,同時機器人的發展減少了企業在人工方面的投入,提高了企業生產效率與產品質量。在智能制造、智能物流、智慧農業、智能交通等領域都大量應用了機器人,在日常生活中也可見服務型機器人,如在超市、醫院、警用、機場、火車站、銀行等所使用的服務型機器人。
基于ROS(Robot Operating System)系統的倉庫巡邏機器人以工控機為核心,驅動一體控制器為上位機控制中心,通過激光雷達采集外部環境信息來繪制地圖,并結合各類傳感器進行巡邏,如溫度傳感器、濕度傳感器、煙霧傳感器和火焰傳感器獲取外界環境參數。該倉庫巡邏機器人通過激光雷達構建倉庫巡邏地圖,同時對倉庫內的溫度、濕度、煙霧、火情及外人進入進行判斷,實現報警的功能。
機器人操作系統ROS具有點對點、免費的開源軟件包等特點,同時機器人操作系統ROS作為機器人軟件開發平臺可以提供不同機器人的軟件包,使開發者可將原有的軟件包進行改寫、修改參數和直接引用;將原本松散的框架進行耦合,為他們提供通信框架。ROS操作系統中適用的編程語言也非常豐富,如C++、python和java等,為消息之間的相互交互提供高效的支持。而在機器人編程中主要采用的是C++和python語言編程。ROS是通信機制、工具軟件包、機器人技能和機器人生態系統的集合體。而現在ROS已被多種機器人在研究開發中使用,如服務型機器人、無人機、移動機器人等相關機器人。
倉庫巡邏機器人系統其上位機為工控機,且以工控機為核心控制器的卡片式電腦作為控制核心平臺,在ROS的軟件開發框架下可通過激光雷達采集外部環境信息,實現可以集掃描、SLAM和最優路徑規劃為一體的導航功能,通過其他傳感器對倉庫內外環境進行掃描與檢測,將信息傳輸到驅動一體控制器,最后通過驅動一體控制器將數據傳輸到工控機后,通過工控機再傳輸給監控界面,進而實現倉庫巡邏機器人的巡邏、監控、報警等相關功能,同時對自身防撞與防跌進行防范。倉庫巡邏機器人硬件系統框架圖如圖1所示。
機器人定位導航、物體環境建模均建立在激光雷達所采集的信息的基礎上[3,4]。本設計的倉庫巡邏機器人采用思嵐RPLIDAR A1激光雷達。測距范圍為15 cm~600 cm,掃描角度為0~360°,掃描頻率為5 Hz~15 Hz。發送指令控制機器人電機驅動,通過激光雷達360°發射激光并接收激光信息,將激光雷達數據和機器人運動的坐標變換關系TF再以串口的形式傳遞給上位機,通過上位機來發布地圖信息。激光雷達是通過發射器發射激光束并接收目標反射的激光束來對目標進行測量距離的,并利用三角測距的原理,推算出目標或被測物體的距離并生成平面點云地圖信息,進而建立巡邏地圖。激光雷達對環境的要求比較低,基本不受外界環境的影響,同時激光雷達測量精確,可以比較精準地提供角度信息和測量距離信息,使測量角度達到小于1°的精準度和厘米級的距離測量精度。
人機交互在早期經歷了命令行交互階段和圖形用戶階段,而現在人機交互在各方面有著廣泛應用,如可以用在人體測溫中。本設計中倉庫巡邏機器人所采用的深度相機為orbbec深度相機,它的視場為水平70°、垂直60°,工作范圍為80 cm~400 cm,它對倉庫物品的溫度、人員溫度測量起著重要作用,同時機器人可通過深度相機掃描對人員信息進行存儲,當外來人員入侵時對其進行掃描并與庫中人員信息進行對比,以防范盜竊等情況的發生。
倉庫巡邏機器人在移動底盤上裝有三組超聲波傳感器。超聲波傳感器工作電源為5 V、工作電流小于20 mA、有效測距為4 cm~500 cm、分辨率為1 cm,并且內置溫度補償電路。通過超聲波傳感器可測量機器人與物體之間的距離。
碰撞防跌傳感器是由碰撞機械傳感器和紅外燈防跌傳感器組合在一塊構建而成的,其主要是起到使機器人在運動過程中達到一個輔助避障的作用,防止機器人在走到路坑時發生跌倒的情況。機械碰撞傳感器適用電源為3.3 V~5 V,觸點耐壓值為交流125 V,觸點壽命可達到10萬次。紅外防跌傳感器的檢測距離為0.1 cm~60 cm可調,距離越近性能越穩定,白色反射距離最遠,其工作溫度范圍為-10 ℃~50 ℃,工作電流為1 A以上的電源供電。并且,紅外防跌傳感器可直接與單片機I/O連接,碰撞防跌傳感器可以防止機器人在運動過程中跌落。
倉庫巡邏機器人也可以添加一些其他的傳感器來實現其巡邏的功能[5]。例如,煙霧傳感器,對于機器人在發現火災時起著檢測與防范的作用并對煙霧濃度進行檢測;溫濕度傳感器對倉庫內環境進行溫度檢測,檢測溫度的同時將相關數據上傳到上位機與監控界面;攝像頭獲取圖像信息等。同時,倉庫巡邏機器人包括里程計、陀螺儀和加速度計來獲取機器人的角速度和加速度。將數據傳輸到工控機,由工控機結合二者將其姿態數求出,同時在TF坐標變換中進行計算。
ROS Master是ROS的調度中樞,可以看作一個服務器,其余的節點是發布者(tallker)或訂閱者(listener)。在軟件系統設計方面可以將其分為兩層:1)監控操作層。通過裝有的Ubuntu系統來連接巡邏機器人,同時在監控操作層獲取機器人的相關信息。2)感知執行層。通過傳感器獲取外部數據,通過監控界面,使巡邏機器人按既定線路巡邏;通過圖像傳輸節點將圖像信息進行保存,通過運動控制節點使機器人運動,通過激光雷達數據建立地圖信息。巡邏機器人通過已保存的地圖信息實現最優路徑規劃、自主導航、自主定位的功能,最終完成倉庫巡邏機器人的巡邏監控。倉庫巡邏機器人軟件設計框架圖如圖2所示,通過人機交互節點將Unbtun系統與ROS Master進行連接,再通過姿態、自主導航、運動控制、圖像控制、環境感知和報警節點將信息傳輸到ROS Master。
SLAM(Simultaneous Localization And Mapping)也稱同步定位與地圖構建[6,7]。SLAM地圖構建離不開TF坐標變換和激光雷達數據。機器人從未知環境的未知地點運動,通過運動過程觀測地圖目標、特征定位、自身位置和姿態。倉庫巡邏機器人巡邏地圖是基于激光雷達來建立SLAM地圖的。機器人操作系統ROS首先通過map的消息格式來定義地圖的原點和地圖長寬等相關信息,再將自行填充的map數據進行數據發布;通過mappub實現地圖數據初始化填充和地圖數據發布,其初始化主要包括地圖原點、長度、寬度及各點的狀態值,再通過創建發布者,并在map上發布地圖數據;通過TF從外部接收消息,并確定base_link與map的坐標變換關系,通過tfbrd來發布坐標變換關系。創建類用于控制建圖,對其進行初始化發布者并創建激光雷達接收數據,利用bresenham算法存儲激光雷達掃描過的地圖柵格點。最后通過機器人操作系統ROS的可視化工具Rviz便可看到地圖信息。SLAM地圖如圖3所示。
通過對機器人SLAM地圖的構建,可實現機器人巡邏、自主導航和運動控制的功能。機器人SLAM的搭建,可以將機器人所獲得的信息與實際情況進行有效結合。同時,工程師可以更加方便地更改機器人的路徑并實時監控機器人的自身定位。
路徑規劃主要是建立在可靠的柵格地圖基礎上,機器人通過路徑規劃來完成自主導航的功能,而機器人巡邏則是通過全局路徑規劃和局部路徑規劃來實現最優路徑的選擇,使機器人可以更加高效地完成相關功能。本設計中全局路徑規劃主要采用A*算法來實現,而相對于傳統的Dijkstra算法而言,A*算法更加高效,并且使機器人獲得了全局最優路徑,通過局部路徑規劃進而完善全局路徑規劃,A*算法綜合了最良優先搜索和Dijkstra算法的優點,在進行啟發式搜索提高算法效率的同時,保證找到一條最優路徑(基于評估函數)。A*算法核心公式就是F值的計算:F=G+H(F代表方塊總移動代價,G表示開始點到當前方塊的移動代價,H表示當前方塊到結束點的預估移動代價),而對于局部路徑規劃常用的方法為動態窗口法(dwa算法),此算法主要在速度空間中采樣多組速度值,并模擬機器人在下一個時間的軌跡。通過對采樣結果的評價后選擇一條最優的路徑,實現使機器人具有自主避開障礙物和自主移動的能力與功能。通過python編程實現A*算法路徑規劃圖和dwa算法路徑規劃圖,分別如圖4、圖5所示。
機器人仿真地圖通過gazebo仿真來對機器人和地圖進行搭建。1)首先通過URDF創建機器人模型,然后對機器人的攝像頭、激光雷達、深度相機、紅外傳感器和碰撞傳感器進行仿真配置,并通過命令將機器人模型啟動,通過gazebo功能包調用激光仿真器插件,通過對機器人模型的更新并啟動,最后可以通過rostopic echo命令來查看仿真傳感器數據。2)通過gazebo里的模型搭建機器人運行環境,在gazebo中將機器人仿真環境搭建完成后進行保存,保存完成后可生成.sqt文件。3)通過launch文件將機器人導入到搭建的仿真環境。通過機器人仿真對機器人的相關性能進行模擬,可以有效地解決機器人在實際情況中出現的問題,而機器人仿真環境提高了建立真實機器人的效率,可以使開發者和工程師能夠更好地配置機器人,同時使開發者和工程師更加快捷和有效地解決問題,進而提高效率。經過多次建立仿真環境,生成的倉庫巡邏機器人仿真環境圖如圖6所示。
在室內環境中機器人的自主移動導航是機器人對環境進行監控的前提,為實現機器人自主導航,該虛擬機器人搭載激光雷達對機器人實時環境進行更新,攝像頭對機器人在運動過程中的實時環境進行可視化。
自主導航是由acml、odom以及路徑規劃算法構成的。amcl是一個機器人在二維地圖中移動的定位系統;odom原點就是機器人啟動時候的點,通過粒子濾波可以將odom的位置在map上估算出來,在tf中發布。
配置機器人,導航功能包集將使其運動。使用導航功能包集的先決條件:1)TF坐標變換的配置。導航功能包集需要機器人一直發布坐標系之間的關系信息。2)傳感器相關信息。導航功能包集通過調用來自傳感器的信息避開實際環境中的障礙物,它假定這些傳感器在ROS上不斷發布消息來躲避障礙物。3)里程信息。導航功能包集需要使用和nav_msgs消息發布的里程信息。4)底盤控制器。導航功能包集假定它可以通過話題“cmd_vel”來發布geometry_msgs/Twist類型的消息,這個消息是基于機器人的底座坐標系,它傳遞的是運動命令。5)地圖服務器。將代價地圖作為ROS的服務器參數發布,提供了map_saver節點,可以通過命令進行存儲地圖[8,9]。
在以上相關條件下,通過激光雷達來獲取相關數據,acml粒子估算機器人自身定位,這就將底層數據完整地概括,通過地圖服務器將地圖數據加載出來,然后根據地圖的目標位置,做一個全局路徑規劃,在機器人行駛過程中,若出現障礙物時,再通過局部路徑規劃重新規劃一條路徑。自主導航圖示如圖7所示。
通過gazebo來對機器人攝像頭傳感器進行仿真實現,在創建好機器人模型的前提下,編寫一個攝像頭傳感器單獨的xacro文件,來對機器人攝像頭傳感器進行配置。將此文件集成到xacro文件中,再通過gazebo仿真并且通過rviz來對機器人攝像頭傳感器的數據進行顯示。通過機器人攝像頭的仿真模擬,對于機器人在自主移動過程中,可以使得機器人對外部環境的實時畫面進行顯示與檢測。機器人在仿真環境中的攝像頭配置以及攝像頭在仿真環境中的實時圖像顯示如圖8所示。
智能機器人攝像頭檢測異常情況的方法為差影法[10]。倉庫巡邏機器人通過對某一場景進行學習,再將所學習到的場景保存為圖片或者視頻,當有外來物體進入到機器人所保存的場景下時,將機器人所保存的場景與外來物體所產生的場景進行場景抵消,最后產生此外來物體的影子圖像,以達到機器人對外來物體的檢測。
智能機器人深度相機通過掃描將人體信息進行保存后,再次進行掃描后對其閾值進行對比以達到檢測的效果。通過機器人的跟隨節點,編寫launch文件,當打開launch文件時出現圖像,當人物進入時做出動作后,深度圖像上則會有15個骨骼點,構成人的骨骼特征是目標到機器人實際距離與默認距離的差值,其反映機器人應該運動的距離與方向。通過機器人掃描的人體信息與保存的人體信息不同時,則機器人對其進行跟隨報警提示。
智能機器人通過煙霧報警器來對機器人場景中的火災進行檢測,并結合紅外傳感器、碰撞傳感器來判斷火情,以達到多傳感器融合巡邏的效果,進而實現倉庫巡邏機器人巡邏和巡視的功能。
本研究基于ROS系統的倉庫巡邏機器人,是以工控機為核心控制器,通過激光雷達來采集倉庫內部環境信息來建立實時地圖,完成并實現SLAM的相關功能。其他傳感器通過獲取外界環境信息與存儲信息對比以達到巡邏警戒的目的。機器人操作系統ROS使機器人在編程方面簡便化、系統化,提高了機器人在二次開發時的效率。相對于ROS機器人而言,其最為重要的技術是SLAM地圖構建和自主定位導航。而對于倉庫巡邏機器人而言,其關鍵技術不僅要達到ROS機器人關鍵技術,同時也要達到巡邏的目的,通過攝像頭對外界環境的特定位置進行拍攝后與在原有庫中的信息進行對比來初步實現監控、巡邏及報警的目的,最終實現基于ROS系統的倉庫巡邏機器人。