黃原有,陽 韜,張楊志,許立蕩,張明劍
(華南理工大學廣州學院,廣州 510800)
SLAM運送機器人主要采用ROS系統(tǒng)的SLAM技術(shù),對機器人所在位置的地圖重建和定位,并基于SLAM 技術(shù),采用AMCL 導(dǎo)航定位算法和路徑規(guī)劃算法,實現(xiàn)機器人的自主運送?,F(xiàn)如今,該技術(shù)主要應(yīng)用于掃地機器人。相比掃地機器人的后輪兩電機差速控制轉(zhuǎn)向,SLAM運送機器人采用的是舵機控制轉(zhuǎn)向。除此之外,無人駕駛汽車也涉及到該技術(shù),可以說該技術(shù)在國內(nèi)外都非常地流行。但許多行業(yè)、許多場所都未能享受該技術(shù)所帶來的人工智能。比如說,在工業(yè)生產(chǎn)中,生產(chǎn)車間用人力運送材料和人力推車的現(xiàn)象。因此本文分析工業(yè)生產(chǎn)技術(shù),結(jié)合目前主流的SLAM 技術(shù)與嵌入式技術(shù),設(shè)計一種能夠應(yīng)用于生產(chǎn)車間的智能運送機器人,能夠?qū)崿F(xiàn)車間點對點的材料運輸,并且能夠擁有自動避障、自主導(dǎo)航、路徑規(guī)劃等功能,增加車間的安全性,減少車間材料運輸?shù)某杀荆涌燔囬g的生產(chǎn)效率。
圖1 所示為系統(tǒng)框架圖,系統(tǒng)分別由智能運送機器人、生產(chǎn)機械檢測、管理后臺3個部分構(gòu)成。而智能運送機器人又由3 個部分組成,分別是小車底盤、樹莓派、PC 端或云服務(wù)器的ROS系統(tǒng)。
系統(tǒng)通過檢測生產(chǎn)機械的生產(chǎn)材料是否用完或者成品是否已經(jīng)制作完成,若制作完成或生產(chǎn)材料用完,則發(fā)送信號給管理后臺。管理后臺則發(fā)送目標位置給智能運送機器人的計算機端或者云服務(wù)器上的ROS 系統(tǒng)(這個項目在研究過程中選擇的是在計算機端安裝ROS系統(tǒng)),讓其通過無線網(wǎng)絡(luò)通信將目標位置的坐標傳送到樹莓派的ROS 系統(tǒng)上并且遠程編譯運行文件,再根據(jù)樹莓派上運行的激光雷達數(shù)據(jù)建立地圖,進行路徑規(guī)劃。最后通過串口通信將ROS 系統(tǒng)發(fā)布的機器人速度指令傳給機器人的底座,導(dǎo)航機器人運動到目標位置,最終實現(xiàn)機器人的智能運送功能。
圖1 系統(tǒng)框架圖
機器人的機械結(jié)構(gòu)主要由小車底盤和儲物箱組成。
小車的底盤如圖2 所示,小車底盤分成3層。第一層是由普通的小車輪胎、2 個帶編碼器的電機、1 個轉(zhuǎn)向軸和1 塊鐵板構(gòu)成,使用4個電機驅(qū)動則不需要轉(zhuǎn)向軸,可以通過控制電機的轉(zhuǎn)速來控制小車的轉(zhuǎn)向,能夠提高機器人的運載重量,小車的輪胎則使用麥克納姆輪的效果更好;第二層是在小車底板上面安裝小車的驅(qū)動板和電源等設(shè)備;第三層可用一個擋板隔開,然后將樹莓派和激光雷達放在上面,但激光雷達除了安裝在第三層,還可以安裝在儲物箱上面,激光需要不斷地掃描周圍環(huán)境的物體,以此安裝得高一點的位置比較合適。
圖2 實驗小車底盤實物圖
儲物箱可安裝在小車的底盤上面,用于運載物品,并且儲物箱的大小可根據(jù)機器人應(yīng)用的場所以及小車的運載能力所決定。
機器人的硬件系統(tǒng)設(shè)計主要由Stm32f407、樹莓派、激光雷達、電機構(gòu)成。
因為上層ROS系統(tǒng)中用move_base算法做路徑規(guī)劃需要小車的角速度和線速度的參數(shù),所以小車底盤需安裝由Acorn公司開發(fā)的32位人工智能微控制器——Stm32f407微控制器,其低成本、高效率、高性能的特點適合應(yīng)用到智能運送機器人上。因此采用這種性能相對較高的微控制器來驅(qū)動九軸角度傳感器去獲取小車運動過程中的IMU 信息(機器人的位置和姿態(tài))。除此之外,Stm32f407 開發(fā)板還驅(qū)動帶編碼器的電機(用于讀取編碼器的讀數(shù),轉(zhuǎn)化成速度,進而換算為里程計信息)、穩(wěn)壓芯片(將電池的12 V 電壓降壓至5 V 電壓)、舵機(控制小車的轉(zhuǎn)向)。
樹莓派是一個微型電腦裝置,具備計算機的基本功能。而研發(fā)過程中使用的是樹莓派3B+,其擁有64 位四核處理器,使得ROS 程序能夠在上面運行。樹莓派3B+的系統(tǒng)是基于Linux,在本實驗中安裝的是ubuntu 18.04,并在ubuntu 命令窗口通過命令安裝ROS(實驗中安裝的是ROS melodic 版本)。除此之外,需要通過樹莓派與底層的Stm32微控制器通信,接受從底層傳送過來的機器人線速度、角速度、位置信息以及imu等信息,并且在ROS系統(tǒng)中move_base包中通過對底層的信息處理和結(jié)合路徑規(guī)劃算法,將會在cmd_vel主題上發(fā)布Twist的機器人速度指令消息,控制機器人底座的運動。
激光雷達(rplidar a1)是由SLAMTEC 公司開發(fā)的一種激光測距儀,其采用紅外激光測距信號,主要通過發(fā)射激光和障礙物反射回來的時間計算距離。rplidar a1 是采用三角測距技術(shù)對二維環(huán)境進行激光掃描,獲取點云信息進而形成點云地圖(即雷達掃描到的物體用一個個點在地圖顯示)。但是驅(qū)動激光雷達需要在樹莓派上的ROS 系統(tǒng)安裝rplidar_ROS 驅(qū)動包,配置激光雷達的參數(shù),進而使ROS 系統(tǒng)獲取激光雷達的深度信息。如圖3 所示,在ROS 系統(tǒng)驅(qū)動rplidar a1 并用Rviz將數(shù)據(jù)變成可視化的圖像,從圖像可看出,在柵格上紅色的點是激光雷達掃描出來的障礙物。
圖3 激光雷達掃描圖
本實驗Stm32f407 微控制器的開發(fā)環(huán)境是keil uVision5 和Stm32 cubemax。Stm32 cubemax是C語言代碼的生成工具,在軟件中可以圖形化的點擊選擇使用哪個GPIO、定時器的開啟等,最終生成配置好的代碼,加快了機器人的開發(fā)速度。而keil uVision5則是將生成的C代碼導(dǎo)入進軟件,讓開發(fā)人員編寫程序代碼和進行編譯調(diào)式,最后通過JLINK 仿真器燒錄進Stm32微控制器。 圖4所示為Stm32的控制流程圖,軟件具體功能如下。
(1)驅(qū)動九軸角度傳感器,讀取IMU 信息。Stm32f407給九軸角度傳感器5 V 電壓,驅(qū)動傳感器,再通過GPIO 讀取傳感器的IMU 信息。Stm32 微控制器將IMU 信息,傳給上層的ROS 系統(tǒng),進行信息的解算,從而確定機器人的位姿信息。
(2)通過PID 算法控制小車的舵機和左右輪的電機。Stm32f407 通過PID 控制算法[1]輸出PWM 值給小車底盤的舵機和左右輪電機,控制電機和舵機的轉(zhuǎn)速,從而控制小車的速度和轉(zhuǎn)向。算法的主要表達式[2]為:
式中:Kp、Ki、Kd分別為通過不斷串口調(diào)試,得到適合控制機器人底座的比例系數(shù)、積分系數(shù)、微分系數(shù),控制輸出PWM 值;e[n]為PWM 和上次PWM 值的誤差值;e[n-1]為上次PWM值和上上次PWM的誤差值;e[n-2]則為上上次PWM和其上次的誤差值。
因此,通過以上PID算法的公式得到Δu增量輸出,傳給左右輪電機和舵機,控制轉(zhuǎn)速。
(3)讀取編碼器的數(shù)值并轉(zhuǎn)化為速度、位姿信息。將獲取的編碼器讀數(shù)需解算成odometry 信息(即機器人底座的位置和速度信息)。實驗的小車是使用舵機來控制小車的轉(zhuǎn)向,而非通過小車左右輪的速度差來控制轉(zhuǎn)向,但這種控制方式在機器人轉(zhuǎn)向時,左右輪編碼器讀數(shù)轉(zhuǎn)換成的左右輪速度也會有差異,因此,可認為和差分機器人類似,運用運動公式得出小車的線速度和角速度。圖4 所示為差分機器人運動分析圖,得出公式如下:
圖4 Stm32的控制流程圖
圖5 差分機器人分析圖
假設(shè)運送機器人從圖5的點B運動到點A,其線速度則為左右輪速度的平均值,角速度則為左右輪速度的差值與機器人左右輪距離的商值。而圖4 機器人從點A 運動到點B 的過程可近似看作繞點O 做圓周運動,半徑r 可由線速度v 和角速度w 的商求出。圓周角α 可由相似三角形得出α=β,β則為左右輪運動距離的差值h 除以左右輪之間的距離l。求出r 和圓周角α后,可根據(jù)下面公式求出機器人相對于初始位置O在x和y方向上的偏移為:
式中:Δ Y為小車相對點O在Y方向的位移;Δ X則相對點O在X方向的位移。
(4) 發(fā)布里程計信息和IMU 信息和接收cmd_vel 話題上的Twist 消息(即為對小車左右電機的期望值)。ROS 系統(tǒng)上編寫的Serial串口通信功能包,實現(xiàn)底層的嵌入式控制器與樹莓派上的ROS通信,將小車底座的里程計信息和IMU信息傳入到ROS中。與此同時,move_base路徑規(guī)劃包會發(fā)布機器人的速度指令,然后Serial功能包將ROS對機器人的期望速度指令傳給底層。Stm32控制板將根據(jù)差分機器人的運動學公式對指令進行結(jié)算,將其轉(zhuǎn)換為小車左右輪電機的速度和舵機的轉(zhuǎn)速。
ROS是一種基于Linux的機器人操作系統(tǒng),擁有很多已經(jīng)封裝好的代碼庫,有很多功能包的算法已經(jīng)編寫好,只需要根據(jù)開發(fā)的實際情況,稍作修改就能實現(xiàn)功能。如圖6所示,SLAM 智能運送機器人運用了Amcl 實現(xiàn)機器人的自主定位導(dǎo)、Move_base 實現(xiàn)機器人運送路徑的規(guī)劃、Slam_gmapping實現(xiàn)機器人環(huán)境的地圖重建。
機器人底層的里程計信息和IMU 信息通過Serial 包的base_controller 節(jié)點傳入,并將底層得到的線速度和角速度信息進行計算得到最終的里程計信息。而底層傳入的IMU 原始數(shù)據(jù)(raw_imu)通過imu_tools 過濾器得到imu/data_raw。對于底層的激光雷達通過ROS 安裝的驅(qū)動包獲取激光雷達的深度信息,并且機器人底座上方的激光雷達坐標(base_laser)和機器人底盤坐標(base_link)通過tf 軟件包將這兩個坐標加入到tf樹中,實現(xiàn)這兩個坐標之間的轉(zhuǎn)換,因為這2個坐標之間存在一些的誤差。底層的信息獲取并處理后,將會傳入到Slam_gmapping、Amcl、Move_base功能包。
圖6 ROS系統(tǒng)的架構(gòu)圖
對于SLAM智能運送機器人的地圖重建的[3]Slam_gmapping[4]則需訂閱imu/data_raw 信息、里程計信息、激光雷達的深度信息,收到的imu/data_raw 會通過濾波[5]和里程計信息進行融合[6],最終發(fā)布一個tf。最終根據(jù)激光雷達的深度信息和tf 坐標,使用SLAM算法實現(xiàn)機器人的即時定位與地圖構(gòu)建,并發(fā)布map主題(獲取地圖數(shù)據(jù),將其鎖定并定期更新)。除此之外,Amcl[7]功能包也是需要訂閱scan(激光雷達的深度信息)、tf(里程計信息中的機器人底盤坐標)、map主題,最終發(fā)布tf(顯示機器人的位姿,并將base_link,odom,map 都加入到tf樹中,使其能夠相互轉(zhuǎn)換)。最后將map數(shù)據(jù)、Amcl的tf、Odometry里程計信息、激光雷達信息輸入到move_base[8]功能包運用Dijkstra 最優(yōu)路徑規(guī)劃算法進行路徑規(guī)劃,并通過cmd_vel 話題上的Twist 消息將機器人的速度指令發(fā)出去。其中,要將imu信息和里程計信息融合是考慮到輪胎打滑時,里程計的位姿可能會有誤差。
圖7 所示為Slam_gmapping 流程圖,SLAM 智能運送機器人在建圖功能開發(fā)時,使用了gmapping 算法,其源碼結(jié)構(gòu)組織是Open_Slam,具體流程分述如下。
圖7 Slam_gmapping 流程圖
4.3.1 創(chuàng)建原始地圖
在Slam_gmapping[9]首先通過laserCallback回調(diào)函數(shù)去調(diào)用其他函數(shù)進行數(shù)據(jù)的采集和處理,并重建地圖。接著laser-Callback 回調(diào)函數(shù)會調(diào)用initMapper 初始化函數(shù),接收激光雷達的點云scan數(shù)據(jù)[5],并創(chuàng)建一個原始地圖。
4.3.2 數(shù)據(jù)處理
等獲取激光數(shù)據(jù)和底層的Odometry 信息后,則調(diào)用processScan函數(shù)對激光雷達的數(shù)據(jù)處理,具體如下。
(1)讀取預(yù)測粒子的位姿,調(diào)用drawFromMotion函數(shù)。
(2)調(diào)用scanMatch函數(shù)來獲得更優(yōu)位姿。首先,在scan-Match 函數(shù)里首先會用optimize 進行6 次位姿的修正和調(diào)用score 函數(shù)運用下面高斯函數(shù)的得分公式獲得每個粒子的得分:并判斷匹配得分是否滿足要求。 其次,調(diào)用likelihoodAndSocre 函數(shù)得出每個粒子的權(quán)重。最后,調(diào)用computeActiveArea 計算每個粒子相應(yīng)的位姿所掃描到的區(qū)域并用Bresenham算法得到非障礙物格點的集合,最后形成可活動區(qū)域的范圍。
圖8 地圖重建的效果圖
(3)調(diào)用Resample()函數(shù)對數(shù)據(jù)重采樣。在函數(shù)里,首先會判斷有效粒子數(shù)是否小于閾值。如果是,則需要進行重采樣。然后調(diào)用registerScan(),使用Bresenham 算法得到激光雷達已掃描的單元格,并標記有障礙物的單元格。最后delete 舊的粒子,add 新的粒子,并將粒子位姿和激光雷達的數(shù)據(jù)實時更新到局部地圖。但如果判斷得到無需重新采用,則創(chuàng)建新的節(jié)點,add到tf樹中。
4.3.3 更新地圖
根據(jù)Slam_gmapping功能包使機器人進行地圖重建的效果圖如圖8所示。
本文研究SLAM 技術(shù)與機器人技術(shù),結(jié)合車間生產(chǎn)的實際情況,通過設(shè)計運送機器人,完成測試機,可以實現(xiàn)機器人的地圖重建、自動避障、自主定位導(dǎo)航等功能。后臺管理可以將材料運送的位置發(fā)往ROS 系統(tǒng),系統(tǒng)則將運送指令發(fā)送給機器人,從而將生產(chǎn)車間材料運送到指定地點,實現(xiàn)無人配送,節(jié)約勞動成本,加快車間的生產(chǎn)效率。此外,SLAM運送機器人還可以應(yīng)用在日常的生活中,例如農(nóng)業(yè)生產(chǎn)過程中收割后的糧食運送,代替馬車、人力驅(qū)車、人力運送等。