李 鑫,王樹強,李 猛,吳 磊,張天翼
(沈陽化工大學機械與動力工程學院,沈陽 110142)
AGV是現代自動化領域出現的一項高新技術。隨著物流倉儲、智能汽車等行業的快速發展,AGV 技術便依托此類行業快速發展,此技術的應用大大提高了物流運轉的效率。而目前AGV車的行走路徑大多依賴有預設的參照介質進行運動,智能化程度較低,無法應用在某些復雜的場景中,例如在具有可移動障礙物的場景中,就無法有序工作。
相對于有預設參照介質的導引技術的廣泛應用,無預設參照介質的SLAM 導引技術目前的市場規模還遠遠無法與之相比。應用SLAM導引技術的AGV不但可以實現自主避障,還可以實現自主規劃路徑。按照不同的傳感器來劃分,SLAM 技術目前可分為兩種,一種是基于激光雷達的激光SLAM 技術,另一種是基于視覺傳感器的視覺SLAM 技術[1]。激光SLAM 技術主要用于室內,視覺SLAM技術既可以用于室內,也可以用于室外,應用場景更為豐富,但在一些暗處或者一些無紋理區域是無法進行工作的。在精度方面,激光SLAM 技術構建的地圖精度在某種程度要高于視覺SLAM,且可以直接用于定位導航。
通過對現有的AGV智能車進行硬件與軟件方面的優化,設計出了一種以激光SLAM 技術為主,視覺識別技術為輔的搬運智能車。依托ROS 機器人操作系統,通過多種硬件的相互配合,可使智能車完成SLAM 建圖、自主路徑規劃、導航避障與物體識別等功能。
圖1 智能車實物
(1)感知系統。智能車必須能夠感知周圍環境,包括通過傳感器獲取的障礙物、路標、道路標志等信息。這些傳感器可以包括激光雷達、攝像頭、慣性測量單元(IMU)等。
(2)運動控制系統。基于感知系統獲取的環境信息,智能車必須能夠做出決策并控制自身的運動。例如,在自動駕駛模式下,車輛需要確定車速、轉向、剎車等控制指令。
(3)建圖與定位。SLAM 算法用于將傳感器獲取的環境信息融合到一個全局地圖中,同時利用該地圖進行定位。在智能車中,建圖與定位可以幫助車輛精確定位自身位置并規劃路徑[2]。
(4)視覺識別。視覺識別技術可以幫助智能車識別特定物品、交通標志、行人、車輛等物體,并根據這些信息做出相應的決策,如避讓行人等[3]。
圖2 程序流程
綜上所述,該智能車需要通過感知系統獲取環境信息,運動控制系統進行決策和控制,SLAM 算法進行建圖與定位,視覺識別技術進行目標識別和判斷。這些功能的協同工作,使智能車能夠實現自主駕駛,并在行駛過程中能夠感知周圍環境并做出相應的決策和控制。
根據物品的抬升和下降的任務,設計出如圖3 所示的機械臂結構。通過減速箱帶動轉軸進行旋轉使得前臂向前彎曲或向后伸直,后臂在前臂的帶動下進行前曲運動。
圖3 機械臂結構示意圖
歐拉-伯努利梁理論公式用于計算梁在受力時的彎曲變形和應力,即
式中:σ為梁上的彎曲應力;M 為梁上的彎矩;y 為梁上某點到中性軸的距離;I為梁的截面慣性矩[4]。
應變能密度公式為:
式中:u為應變能密度;σ為應力;ε為應變。
彈性模量公式用于計算材料在彈性階段的剛度,即
式中:E為彈性模量;σ為應力;ε為應變。
由于載荷會在由機械臂構建的框架內移動,最后計算得到機械臂承受的最大載荷為6 kg[5]。
機械臂的驅動力由馬達和減速箱組成,減速箱為三級減速,由3 個齒輪相互嚙合而成。馬達主體固定于底板下方,三級減速箱位于底板上方。此機構可使前臂以較慢的速度進行前屈,完成下降動作。如圖4~5 所示。
圖4 減速箱結構
圖5 機械抓手三維圖
該物體抓取系統由兩個舵機、螺旋裝置和一個金屬抓手組成,當識別到相應物品以后,通過機械臂的前屈使得金屬抓手到達相應高度,然后通過螺旋裝置來前后移動金屬抓手的位置,上方舵機調整抓手的方向,下方舵機通過嚙合機構控制抓手的開合,從而對相應物體進行抓取[6]。
主控采用的是英偉達的Jetson Nano。Jetson Nano 是一款基于NVIDIA Maxwell架構的低功耗人工智能計算平臺。它的作用是用于接收深度相機拍攝的圖像和視頻以及激光雷達的信號,并對其進行分析。在內存和存儲方面,它本身配備了4 GB LPDDR4 RAM和16 GB eMMC存儲器,由于需要運行Ubuntu系統來控制智能車,此系統會占用較大內存空間,為滿足內存需求,于是添加了64 GB SD卡來擴展存儲空間,將鏡像系統燒錄在SD 卡中,同樣可以啟動開機大程序。在網絡和連接方面,由于該主控支持千兆以太網和WiFi,進行系統調試時可直接將主板與局域網路由器通過網線連接或通過其自身構建的局域網與終端連接。深度相機、激光雷擴展板等其他硬件可通過主板上的USB 3.0、USB 2.0 等接口與主控連接[7]。如圖6 所示。
圖6 主控接口示意圖
該控制板是此智能車的驅動控制器,也是一款STM32 核心開發板。板載集成了STM32 核心控制單元、MPU9250 九軸姿態傳感器等重要配置,同時提供4 路編碼電機、4 路PWM舵機、串行總線舵機等外設接口。它可以支持Jetson Nano主控通信和供電。該控制板的特點為不需要額外編寫外設的驅動程序,只需要通過串口發送對應控制命令就可以快速控制智能車上的外設,既簡單又高效[8]。如圖7 所示。
圖7 微處理器模塊電路
由于該智能車需要實現建圖、自動避障以及路徑規劃等功能,于是在改智能車前端安裝了一個激光雷達,型號為思嵐A1 激光雷達,該雷達采用的測量方式為三角測距法,最小測量半徑為0.15 m,最大測量半徑可以達到12 m,并且采樣幀率可以達到8 kHz,借助ROS 操作系統,可以完成SLAM 建圖、自動避障、路徑自主規劃等功能。
當光路系統中,激光入射光束與被測物體表面法線夾角小于90°時,該入射方式即為斜射式。
如圖8 所示,激光發射的激光以與物體表面法線成一定角度入射到物體表面,反射(散射)光在B 處通過透鏡會聚成像,最后由感光單元收集。在每個測距過程中,激光雷達都會發射調制的紅外激光信號。激光信號照射目標物體后產生的反射將被激光雷達的視覺采集系統接收,然后通過嵌入激光雷達中的DSP 處理器進行實時計算,隨后將從通信接口輸出被照射目標物體與激光雷達之間的距離值和當前角度信息。在電機機構的驅動下,激光雷達的測距核心將順時針旋轉,以實現對周圍環境的360°掃描測距檢測[9]。
圖8 雷達工作原理示意圖
為了識別并對物體應用KCF追蹤技術進行實時追蹤,該智能車配備了一臺深度相機,同樣位于智能車的前端。深度相機的型號為Astra Pro,其深度范圍0.6 ~8 m,精度為1 m,深度處理芯片為MX400,基本可以滿足對物體的追蹤功能。并且,它還擁有ORB- SLAM2 建圖、Rtabmap三維建圖、Yolov4-tiny 物體識別功能,同時,還可以支持自動駕駛功能。
智能車的全方位運動依靠4 個減速電機與麥克納姆輪,通過編碼電機轉速的差異,配合麥克納姆輪實現全方位移動[10]。同時,為前輪增添懸掛系統,可以保證4個輪子位于同一平面,電機采用的是520 編碼電機。圖9為電機驅動電路。
圖9 電機驅動電路
主控的操作系統采用的是Ubuntu操作系統。該智能車的系統配備了多個功能包,有Open CV及其相關功能,例如物體追蹤、顏色追蹤、物體識別(需事先導入訓練模型)、激光雷達SLAM建圖以及導航避障等功能[11]。
通過智能車內置的M.2無線網卡來創造出一個局域網,終端連接該網絡以后可以通過VNC進行遠程控制該智能車。為了減輕智能車主板計算量,在相應終端配置虛擬機。所用平臺為Workstation 16Pro,鏡像系統為Ubuntu18.04,根據智能車的IP地址來配置虛擬機,即可實現多機通信[12]。
為了實現智能車對物體的實時追蹤功能,需要為智能車安裝相應的功能包。其中常見物體追蹤算法有BOOSTING、MIL、KCF 和CSRT。雖然BOOSTING 算法已經發展超過了10年,技術較為成熟,但由于其速度較慢、精度較差,所以不適合用在智能車這種需要及時作出反應的設備上。MIL 算法缺點和BOOSTING 一樣,同樣也是速度較慢。KCF 和CSRT 算法相比,雖然在精度上不如后者,但其速度較快,應用于智能車上,以便于應對各種復雜情況,并及時做出反應。通過對比幾種算法,最終選擇采用KCF物體追蹤算法[13]。
將帶有KCF算法的功能包下載到主控系統當中,即可通過終端輸入代碼,直接開啟KCF功能,此功能的開啟需要深度相機進行硬件支持。在確定物體實際坐標以后,通過機械臂的前屈以及螺旋裝置,將金屬抓手送到物體正上方,通過Open CV來確定物體擺放的方向,然后通過舵機控制金屬抓手的方向以及開合,完成對物體的抓取工作[14]。物體識別效果如圖10 所示。
圖10 物體識別效果
Gmapping算法是一種常見的基于過濾SLAM 框架的開源SLAM 算法。它的優點是可以實時繪制室內地圖,在構建小場景地圖時所需的計算量小且精度高。缺點是所需的粒子數隨著場景的增長而增加。由于每個粒子都攜帶一幅地圖,因此構建大型地圖所需的內存和計算量將大大增加,并且沒有環回檢測,因此,在回環閉合期間可能會發生地圖錯位。雖然粒子數的增加可以使地圖最終閉合,但它不適合在大型場景中應用,因為這會大大增加計算量和內存[15]。
同樣,Gmapping算法在應用過程中也是通過各個節點進行話題消息的傳輸,如圖11 所示。
該功能以激光雷達為主要硬件基礎,進行障礙物檢測,并進行導航。首先需要開啟Gmapping建圖功能來為場景繪制二維平面圖,隨后在虛擬機中開啟ROS 系統內置的rviz程序。通過rviz 工具可以實現單點導航以及多點導航等功能[16]。
(1)單點導航。使用rviz工具的2D Pose Estimate設置初始位姿,直到仿真中的小車位置,與實際小車的位置一致。然后點擊rviz工具的2D Nav Goal,選擇地圖上沒有障礙物的地方為目標點,松開鼠標即開始導航,只能選擇一個目標點,到達即停止。
(2)多點導航。和單點導航第一步相同,先設置小車的初始位姿。然后點擊rviz工具的Publish Point,隨后在地圖上沒有障礙物的地方選擇目標點,松開鼠標即開始導航,可再次點擊Publish Point,然后選點,機器人就會點與點之間巡航[17]。導航避障功能效果如圖12 所示。
圖12 導航避障功能效果
在足夠寬敞的室內,通過擺放雜物來模擬復雜的場景,測試其自動路徑規劃、導航避障與物體追蹤功能。測試過程中不斷減小兩個障礙物之間的距離,同時在智能車運動過程中加入移動障礙物,測試路徑規劃功能。如表1 所示,通過測試可知,隨著通道寬度不斷增加,系統路徑自動規劃時間也在加長,當寬度小于約0.6 m時,智能車無法通過通道,這與激光雷達的參數有關,隨著激光雷達精度的提高,智能車可以在更狹窄的通道中進行自主路徑規劃。如果采用更高算力的主控,也可以縮短行進時間。
表1 測試結果
測試發現,在物體識別與抓取方面,該智能車有著良好的表現,在多次測驗中,都能夠正確地識別并抓取物品。實地測試效果如圖13 所示。
圖13 實地測試效果
本文介紹了一種基于Jetson Nano 的視覺識別搬運智能車,在原有的AGV基礎上,舍棄了巡線等功能,為其加入了SLAM建圖以及視覺識別等功能,通過SLAM 建圖功能,使得智能車不必受路徑上的參照標識物所限制,可以縮短智能車的現場安裝調試時間[15]。在硬件結構上,設計了一套機械臂系統,該機械臂可進行前屈運動,可抓取小車前方0.5 m 內的物體。在軟件方面,通過ROS機器人操作系統,可實現KCF 物體追蹤、Gmapping建圖等算法,以及自動路徑規劃等功能,可使智能車的應用領域更加靈活多變。通過實地測試,該智能車能適應多種復雜環境,同時初步掌握了該智能車正常工作的各項參數。