趙 威,李振華
(北京信息科技大學 信息與通信工程學院,北京 100101)
ROS(Robot Operating System)是一種開源的操作系統(tǒng),使用該系統(tǒng)可以減輕工作量,其主要功能是便于智能小車研發(fā)過程中的代碼復用;它提供了與操作系統(tǒng)類似的各種各樣功能,比如程序間信息的傳遞、底層驅動程序管理、程序發(fā)行包管理等,方便了人們對智能小車的研究和使用;同時,它還提供了一些用于獲取、建立、編寫和運行多機整合的程序,使得開發(fā)者更容易使用ROS系統(tǒng)。
機器人想要在未知的環(huán)境中實現自主移動、自主避障,就必須知道自己的位置、環(huán)境中障礙物情況以及周圍環(huán)境情況等。SLAM技術可以幫助機器人獲得自身定位和周圍環(huán)境狀況。在智能小車中使用激光雷達作為環(huán)境感知的傳感器,再配合SLAM技術,能夠達到同時定位和地圖構建的目的。
如圖1所示,本文智能小車的主要硬件結構分別為:ORBBRC深度相機、激光雷達、Nano無線網卡6 dB增益天線、NVIDA Jetson Nano、扭力懸掛裝置、520編碼器減速電機、雙腔體音響輸出和麥克納姆車輪,并且以STM32F405RGT6單片機作為控制板和開發(fā)板。在該結構下可以完成智能小車的ROS串口傳輸、電機和電池數據反饋、多傳感器數據融合、SLAM定位建圖導航和路徑規(guī)劃等多個功能。在此基礎上,還可以對小車進行二次深度開發(fā),使小車更加完善、功能更加強大。
圖1 小車系統(tǒng)結構
本智能小車采用STM32F405RGT6芯片作為中央控制器的最小系統(tǒng)模塊,主要用于實現驅動功能以及控制功能。該芯片的特征是配備了FPU的ARM32位Cortex-M4 CPU,采用自適應實時Acelector,允許從閃存執(zhí)行0等待狀態(tài),頻率高達168 MHz,性能十分優(yōu)良。
STM32機器人驅動板是一款適用范圍非常廣的ROS雷達車機器人驅動板,具有穩(wěn)壓、驅動、傳感器數據采集等功能,其穩(wěn)壓功能可以將7~12 V的直流輸入電壓降壓到5 V或改變成其他形式的電壓,可用于給主芯片供電或驅動馬達等外部設備。
STM32所具有的驅動功能分為馬達驅動、舵機驅動和傳感器驅動三種。其中,馬達驅動是通過馬達驅動芯片來驅動馬達正轉、反轉、停止、加速、減速,從而實現小車的行進功能。采用舵機驅動時,驅動板帶有8路舵機驅動輸出接口,在使用內部電壓給舵機供電的情況下可以同時驅動8個額定電壓為5 V、最大電流不超過100 mA的舵機。采用傳感器驅動時,驅動板上未被占用的GPIO都被直接連接到了樹莓派上,并在樹莓派上用黃色插針表示,每組GPIO均有VCC-5 V和GND供電插針,分別以紅色和黑色標示。STM32驅動板接口如圖2所示。
圖2 STM32驅動板接口
STM32的傳感器數據采集功能的實現依賴于馬達和陀螺儀等器件,可采集到馬達轉速以及IMU陀螺儀的關鍵數據。
STM32F405RGT6驅動板既可作為控制器,又可作為開發(fā)板,方便操作,也使得小車的外觀更加簡潔明了;STM32F405RGT6的各個引腳功能十分具體,使小車的功能更加完善。
在智能小車的輪式底盤結構中,一般以差速兩輪式和四輪式結構為主。差速兩輪式的結構擁有較高的能量利用率,但是當小車速度較快時很難控制小車的轉向。四輪式的結構可以分為阿克曼轉向式、全向四輪結構、麥克納姆輪結構等。其中麥克納姆車輪結構雖然成本比較高,但是這種結構可以朝全方向移動、摩擦力小、精度高,因此本文選擇了最有保障的麥克納姆車輪作為小車行進裝置的一部分。
麥克納姆車輪的兩個重要組成部分是輪轂和圍繞輪轂的輥子,輥子分布在輪轂的輪緣上,可以實現橫向滑移的功能。當輪子轉動時,分布在輪子邊緣上的各個輥子的包絡線可以形成一個圓柱面,從而可以使小車不斷向前滾動。麥克納姆車輪底座如圖3所示。
圖3 麥克納姆車輪底座展示
假設A輪可以向右前方、左后方運動,那么B輪就會向左前方以及右后方移動。當A輪的速度分量可以分解為水平向右和水平向前時,B輪可以分解為水平向左和水平向前。這樣,水平向左和水平向右的速度分量互相抵消,只剩下兩個水平向前的速度分量,從而實現小車的前進。當A輪的速度分量被分解為水平向左和水平向后時,B輪被分解為水平向右和水平向后。由此,A輪和B輪之間某一方向的速度相互抵消后,可以獲得相同的另一個方向的速度分量,從而實現自主前進。
通過對比普通的車輛能夠發(fā)現,普通的車輛在移動時,輪子都是向同一個方向轉動的;而使用麥克納姆輪的車輛在進行任意方向運動時,每個輪子的運動方向都是不同的,因此麥克納姆輪實現了真正意義上的任意角度移動。麥克納姆車輪如圖4所示。
圖4 麥克納姆車輪展示
經過反復的比較和研討,本文最后選擇了激光雷達作為環(huán)境感知和測距的傳感器。相比于攝像頭和基本的微波雷達,激光雷達具有單色性好、亮度高、方向性強、精度高、分辨力強、設備小而輕等優(yōu)點。思嵐科技的標準版激光雷達的頻率為5.5 Hz,上電之后就可以旋轉。本智能小車采用的是高速版激光雷達,最高頻率可達16 Hz,使得導航動態(tài)性能提升非常明顯,同時可以用開關來控制啟動和停止。
常用的激光測距方法有激光飛行時間法和三角法,其中激光飛行時間法又可以分為脈沖測距和相位測距。本文采用激光時間飛行法(TOF)中的脈沖測距法,滿足高速度和遠距離測量需要。如圖5所示,脈沖測距法的原理為:先由一端的發(fā)射儀器發(fā)出測試脈沖,這束測試脈沖中的一小部分作為參考脈沖,直接被儀器接收端接收,剩余的測試脈沖被反射回來后進入接收端;然后測出參考脈沖與反射脈沖之間的時間差,可求出距離=1/2,式中為光速。此方法實行起來較為簡單,且可快速得到數據;再結合公式,可直接得出結果。
圖5 脈沖測距原理
SLAM也稱為同步定位與地圖構建。SLAM可以描述為:移動的物體借助自身擁有的傳感器等設備,智能地感知周圍環(huán)境,從而獲得自身定位,并不斷地獲取周圍環(huán)境信息,從而得到周圍環(huán)境的地圖。激光雷達SLAM算法基于Python語言,且具有自己獨特的算法函數,使用起來十分方便、容易上手。
本小車使用激光雷達作為測距傳感器來獲知空間物體的角度和距離信息,利用SLAM技術即可獲得占據柵格地圖,以概率的形式表示每個柵格被占用的概率,從而進行路徑規(guī)劃,實現動態(tài)避障。
導航與建圖功能的算法主要是為了完成小車位移增量與角度是否符合要求的判斷,以及實時更新激光數據和小車在世界坐標下的位姿。在算法實現過程中還需要開始尋找mRep->matchDate()函數。具體代碼如下:
小車的地圖構建過程默認三層地圖,分辨率分別為0.1 m、0.05 m和0.025 m,從0.1 m層開始處理。該算法使用分層地圖進行計算,即小車可以獲得當前環(huán)境狀況下不同分辨率的地圖。首先從獲得的最低分辨率地圖進行分析,與周圍環(huán)境進行匹配;然后將得到的數據代入精度更高的地圖進行掃描匹配,重復幾次之后,便可以得到高精度的地圖,實現小車的位姿估計和地圖構建。建圖過程演示如圖6所示。
圖6 建圖過程演示
本文基于ROS平臺,運用SLAM導航、OpenCV圖像識別、深度學習等算法,設計出了一款可以實現三維建圖、室內自主定位導航、動態(tài)避障、視覺巡線等功能的智能小車。該小車配備有STM32驅動板、Jetson Nano芯片、激光雷達等高級硬件設備,使用Ubuntu文件系統(tǒng)和C/C++/Python語言,具有很強的適應性,且使用起來十分方便。