楊海程, 鄧達強, 黃菁菁, 陳海燕, 何梓樂
(華南理工大學廣州學院,廣州510800)
在隨著室內(nèi)移動機器人應用的興起,移動機器人產(chǎn)生多種定位方式,其常用的定位方式有:正交碼盤加陀螺儀、攝像頭定位、激光雷達定位等,每種定位方式各有優(yōu)劣。基于SLAM(simultaneous localization and mapping),即時定位與地圖構建,機器人在自身位置不確定的條件下,在未知環(huán)境中創(chuàng)建地圖,利用地圖進行自主定位和導航,而利用激光雷達作SLAM傳感器,精度很高,速度快,計算量也不大,且容易做成實時SLAM。SLAM定位通過在位置不斷移動的情況下,不斷獲取傳感器對環(huán)境感知信息,從而實現(xiàn)定位和導航。基于麥克納姆輪技術的小車可以實現(xiàn)前行、橫移、斜行、旋轉及其組合等運動方式,靈活方便。兩者的高度結合,不僅增強了多方位多領域的應用性,且更提高了生活日常的自動化水平。對于企業(yè)而言,從生產(chǎn)到服務層面,靈活運用其小型自動化的特色與其產(chǎn)品相融合,會提高工作效率與效績。
小車的定位問題是整個研究的重中之重,在眾多的車載傳感器中,激光雷達以其靈敏度高、準確性強被廣大科研工作者所青睞。激光雷達是以發(fā)射激光束探測目標的位置、速度等特征量的一種雷達系統(tǒng),加上SLAM技術的輔助,實現(xiàn)機器人的自主定位和導航。本課題研究的小車是一種基于麥克納姆輪式的四輪獨立全方位驅動,能夠實現(xiàn)小車在平面內(nèi)任意方向的移動。首先對小車的整體構造進行詳細的說明,對小車控制系統(tǒng)和運動系統(tǒng)進行設計,為小車實現(xiàn)精準定位與全方位移動奠定了基礎;其次對小車進行運動力學的分析,對研究分析的結果進行試驗總結;最后對小車的定位與導航系統(tǒng)進行研究,尋找最合適的定位系統(tǒng),從而實現(xiàn)小車的精準定位。
基于激光雷達SLAM定位的麥克納姆輪小車能夠在激光雷達和SLAM定位的作用下按照程序設定的路徑進行作業(yè)。我們可以在小車的機身增加一些作業(yè)執(zhí)行輔助工具,如機械臂、滾輪等擴充它自身的功能,由于具備無人駕駛、自動化程度高、定位準確、可以連續(xù)長時間作業(yè)等特點,它可以被應用于倉儲物流領域和醫(yī)療康復領域。
基于激光雷達SLAM定位的麥克納姆輪小車系統(tǒng)結構圖如圖1所示。小車的整體構造分為動力系統(tǒng)、控制系統(tǒng)、電路系統(tǒng)、定位系統(tǒng)。
小車的動力系統(tǒng)由24 V航模電池供電,4個帶編碼器的直流減速電動機,4個麥克納姆輪組成。帶編碼器的直流減速電動機能夠讀取輪子轉一圈反饋回來的脈沖數(shù),然后通過處理脈沖數(shù)據(jù)能夠知道輪子轉一圈的長度,進而推算出輪子轉一圈小車行走的路程。

圖1 小車系統(tǒng)結構圖
小車的電路系統(tǒng)包含1個急停開關、24 V轉12 V穩(wěn)壓模塊、4個電動機驅動器、1個主控板、1個USB轉TTL串口模塊和1個can通訊模塊。各個模塊之間合理布置又相互關聯(lián),實現(xiàn)對整車的供電。
小車的底盤整體設計如圖2所示。考慮到需要放置激光雷達、4塊直流電動機驅動、1塊STM32主控板、電腦等等,使用4個麥克納姆輪的設計。該小車底盤設計具有如下特點:1)擁有足夠的空間放置各種控制設備以及外設;2)該底盤設計是全方位移動平臺,具有靈活移動的特點;3)能夠使用4個麥克納姆輪來解算出小車的里程計信息,即小車當前的位置。

圖2 小車底盤
小車上層為手提電腦,電腦放在小車后面。里面運行ROS機器人操作系統(tǒng),激光雷達安裝在小車的正前方位置,需要給小車激光雷達一個偏移量,這里以小車的中心點為中點,往前偏移0.175 m,往上偏移0.125 m。
1)控制芯片。控制芯片采用STM32F103VET6,這款單片機擁有足夠強大的內(nèi)存和功能來對小車進行控制。STM32上有很多開源的代碼,里面很多代碼寫的很優(yōu)秀,可以在前人的基礎上學習控制經(jīng)驗,再進行小車的開發(fā)。
2)操作系統(tǒng)。小車控制器操作系統(tǒng)采用ROS。ROS是開源的,提供了很多實用的工具包和軟件包,合理利用好這些軟件工具可以使得研究開發(fā)更加快速。
3)操作系統(tǒng) ROS與STM32之間的通訊。ROS是依賴于Linux系統(tǒng)的,Linux系統(tǒng)上面使用boost庫(為C++語言標準庫提供擴展的一些C++程序庫的總稱)來與STM32(嵌入式單片機)進行通訊,通訊方式采用串口通訊,通訊校驗方式采用crc校驗(即循環(huán)冗余校驗碼)。連接電腦與單片機之間需要使用一個USB轉TTL模塊來進行通訊。
上位機部分串口通訊配置代碼:
serial_port sp(iosev,"/dev/ttyUSB001");//設置串口名稱
sp.set_option(serial_port::baud_rate(115200));//設置波特率
sp.set_option (serial_port::flow_control(serial_port::flow_control::none));//設置控制方式
sp.set_option(serial_port::parity(serial_port::parity::none));//設置奇偶校驗
sp.set_option(serial_port::stop_bits(serial_port::stop_bits::one));//設置停止位
sp.set_option(serial_port::character_size(8));//設置字母位數(shù)為8位
ROS與STM32通訊實測效果如圖3所示,上位機為ROS,使用串口與STM32之間進行通訊。

圖3 ROS與STM32通訊實測
1)麥克納姆輪運動模型。麥克納姆輪的這種移動方式是基于一個有許多位于機輪周邊的輪軸的中心輪的原理,這些成角度的周邊輪軸把一部分的機輪轉向力轉化到一個機輪法向力上面,依靠各自機輪的方向和速度,從而實現(xiàn)機器人的全方位移動。運動分析見圖4。
從右上角開始定義為輪子1,逆時針方向開始,依次定義為輪子2、輪子3、輪子4、假設這4個輪子的速度分別為 wheel1、wheel2、wheel3、wheel4。以笛卡爾坐標系為標準,小車輪子向右方向的速度為Vx,小車輪子向前方向的速度為Vy,小車輪子逆時針方向的速度為Vspin(輪子的角速度)。根據(jù)麥克納姆輪的運動模型分析,可以推斷出小車的運動模型公式為:

圖4 麥克納姆輪運動分析

2)小車里程計的獲取。通過安裝在每個輪子的電動機上面的編碼器,來讀取編碼器的值,先計算出每個輪子的線速度,進一步計算出小車整車的x方向的速度,y方向的速度和角速度。
輪子的線速度=單位時間內(nèi)采集編碼器的值×4倍頻×編碼器線速×減速比×輪子轉一圈的周長(即輪子的直徑×π)。
假設小車整車的x方向的速度為Car_Vx,y方向的速度為Car_Vy,角速度為Car_Vth,小車左右輪子之間的距離為distance_of_wheel,小車前后輪子之間的距離為axle_of_wheel,可以推斷出計算公式為:

通過STM32上面的串口通訊,將計算出來的Car_Vx,Car_Vy和Cat_Vth傳輸給上位機ROS,在上位機作進一步的處理,可以得出小車當前的位置信息(即里程計信息)。假設單位時間內(nèi)采集時間間隔為dt,小車整車的x方向速度,y方向速度,角速度分別為vx,vy,vth。
X方向增加的距離為delta_x=(vx*cos(th)-vy*sin(th))*dt;
Y方向增加的距離為delta_y=(vx*sin(th)+vy*cos(th))*dt;
增加的角度為delta_th=vth*dt;
X方向移動的距離為x=x+delta_x;
Y方向移動的距離為y=y+delta_y;
小車轉過的角度為th=th+delta_th。
所以利用上面的公式可以計算出小車當前的里程計信息。
試驗結果表明,麥克納姆輪移動的方向、速度和里程的精確獲取等高度統(tǒng)一,能實現(xiàn)機器人的全方位移動。
小車激光雷達SLAM結構由VO、后端、建圖、回環(huán)檢測組成(如圖6)。

圖5 小車通訊系統(tǒng)
采用日本北陽的激光雷達,型號為UBG-04LX-F01,該雷達的掃描距離是4 m,掃描范圍240°,掃描精度±30 mm (0.06~1.00 m距離內(nèi)),可以滿足在室內(nèi)進行建圖導航的要求,實物如圖7所示。

圖6 小車激光雷達與SLAM結構示意圖

圖7 激光雷達

圖8 gmapping建圖效果
激光雷達的建圖在ROS上面有開源的建圖包gmapping,使用gmapping即可進行地圖構建,建圖效果如圖8。
使用遙控的方式來遙控小車在室內(nèi)環(huán)境完成地圖的構建。在此期間,有兩個因素會影響地圖的質(zhì)量:一個是小車里程計的準確性;一個是激光雷達的精度。這里假設小車不打滑的情況,使用4個麥克納姆輪來解算出小車的里程計還是比較準確的。激光雷達的精度可以滿足要求,所以構建出來的地圖質(zhì)量較好,小車在室內(nèi)的建圖如圖9所示。

圖9 小車的室內(nèi)建圖

圖10 小車的里程計數(shù)據(jù)
小車往x軸方向前進0.5 m,上位機實時監(jiān)測到的數(shù)據(jù)如圖10所示。控制小車往x軸方向前進0.5 m,實時監(jiān)測到的數(shù)據(jù)為0.506 m,在誤差范圍內(nèi),里程計數(shù)據(jù)準確性高。
小車的定位算法使用ROS上面開源的AMCL(自適應蒙特卡洛定位算法),這個算法采用粒子濾波的方式來進行機器人的定位。粒子濾波比較粗淺的來說,就是在一個地方均勻地撒一把粒子,然后通過獲取機器人的動作來移動粒子,如果機器人向前移動了1 m,所有的粒子也就向前移動1 m。然后使用每個粒子的位置信息跟觀察到的傳感器信息(激光)作對比,從而賦予每個粒子一個概率。根據(jù)生成的概率來重新生成粒子,概率越高生成的粒子越多。重復迭代之后,所有的粒子會慢慢地收斂到一起,機器人的位置也就能推算出來了。小車的AMCL定位算法測試效果如圖11所示。

圖11 AMCL定位算法

圖12 小車的室內(nèi)定位
小車的定位主要用到AMCL算法輸出的定位坐標,主要為x,y的坐標和角度。然后通過串口通訊將坐標信息發(fā)送 給 STM32,STM32上面作運動控制處理,先將小車的角度扭轉過來,再將小車移動到ROS上位機發(fā)送過來的x和y的坐標,從而實現(xiàn)小車的室內(nèi)定位。小車的室內(nèi)定位測試效果如圖12所示。

圖13 ROS上位機監(jiān)控效果

圖14 ROS上位機輸出坐標信息
如圖13所示的是ROS上位機進行實時監(jiān)控的小車定位效果圖,深色部分為障礙物的膨脹區(qū)域,箭頭為小車的定位目標點,線表示小車的定位移動線路。
小車定位時候上位機實時監(jiān)測到的輸出定位坐標如圖14所示,position為輸出的x,y坐標,direction為旋轉角度。小車的定位坐標信息是實時更新的,定位坐標信息在誤差范圍內(nèi)。
試驗結果表明,通過AMCL算法得出的定位坐標達到擬合的統(tǒng)一性和準確性,使室內(nèi)小車的位置和移動都得以科學化地控制。但在試驗中,由于激光雷達的建圖和AMCL算法的精確度不夠,導致幾次試驗結果超出誤差范圍,這表明,試驗結果的精準離不開試驗過程控制的準確無誤。
本文系統(tǒng)地介紹了基于激光雷達和SLAM定位的麥克納姆輪小車研究的整體框架以及實現(xiàn)方式。在多次試驗測試中,麥克納姆輪小車展示了其小車里程計的準確性和地圖質(zhì)量構建的完整和準確,使得其定位達到準確、快速、標準,能靈活地完成指定目標的整體運行。基于SLAM算法和激光雷達的聯(lián)合,是麥克納姆輪小車運行的準確性和靈活性的新階段,同樣也是自主移動機器人發(fā)展在形式上的創(chuàng)新。該項目的研究成果將對物流搬運、搭載上機械臂等領域的應用有著科學的意義。
本文以麥克納姆輪小車的定位和導航的精確度研究為核心,靈活運用SLAM算法的理論依據(jù)和準確地構建激光雷達圖,兩者的結合為小車定位的精確度提供了強有力的基礎。該研究的成果將對倉儲物流領域和醫(yī)療康復等領域的自主化水平有一定標準化、科學化的提升。同樣,該研究在試驗測試中存在一定的不確定性,此不確定性也表明對SLAM算法的掌握不夠深入,但經(jīng)過多次的試驗測試,該不足之處已在慢慢改正,可為未來試驗提供經(jīng)驗參考。