張吉圭,楊艷龍,曹澤洪,劉東雪
(貴州城市職業學院,貴州 貴陽 550025)
近年來, 隨著技術的進步, 開源ROS(Robot Operating System)系統快速發展,機器人的智能化水平不斷提高,并逐漸進入了人們的生活,特別是廣泛應用的室內移動機器人。 但目前還存在諸多須解決的技術問題,特別是算法控制和室內定位導航等核心問題。 在復雜的大型環境下,機器人能否準確定位和按照規劃的路徑自主導航顯得尤為重要。本文將以智能車為載體,利用ROS 和SLAM(Simultaneous localization and mapping)等進行設計研究。
智能車的自主導航系統主要實現在室內自主導航、按照規劃路徑行駛、確保智能車自身和周圍環境的安全性、避開障礙物等功能。實現這些功能,主要包括以下技術要點:
(1)2D/3D 地圖的構建
底層控制器利用激光雷達傳感器或深度相機,把采集到的環境數據傳送到樹莓派, 通過谷歌Cartographer SLAM 或卡爾濾波器(EKF-SLAM)等算法在平臺上構建環境感知地圖。
(2)智能車的定位
智能車在行走移動的過程中,通過激光雷達等傳感器感知當前位置信息,實現定位。
(3)路徑規劃
通過Python 語言對需求進行設計, 結合ROS系統實現智能車的路徑規劃。
文中的主要工作是搭建智能車軟件平臺和硬件平臺, 并在Ubuntu 平臺下調試程序和地圖的構建仿真等。 經過場地的實際測試,驗證了系統和方案的可行性。
自主導航智能車主要由硬件層、驅動層和操作層構成,系統整體的架構設計如圖1 所示。

圖1 系統整體架構設計Figure 1 System architecture design
智能車硬件層主要搭建了由STM32F4 和樹莓派4B 的控制系統,包括思嵐激光雷達、攝像頭、編碼電機、深度相機和麥克風陣列等傳感設備。 其中基于ARM Cortex-M4 單片機的底盤控制器能夠進行 RT-Thread 等微型實時操作系統的開發, 采集由阿克曼底盤組成的電機編碼信息、 舵機信息、激光雷達信息,與樹莓派進行信息通信和交互;使用PID 算法和 MFAC (Model-free Adaptive Control)無模型自適應控制算法精確控制小車的速度和轉向角度。 樹莓派4B 主要內置了 Ubuntu18.04 操作系統,并安裝了ROS-melodic 版本的機器人開發框架, 可以進行嵌入式 Linux 系統以及ROS 系統的實踐與開發,同樣能夠非常方便快捷的實現各種機器人控制算法與程序。
驅動層包括各硬件的驅動, 為硬件和操作系統提供接口和數據交互。 其中包括ROS 工作空間驅動代碼和底層控制器驅動代碼。 ROS 工作空間驅動代碼主要安裝ROS 工作框架,實現進程消息傳遞、底層設備控制和程序包管理。它是一種分布式機器人軟件框架和面向服務的軟件技術。 該框架封裝到堆棧和數據包中, 具有不依賴語言、精簡、開源和集成的特點。底層控制驅動代碼主要實現編碼電機的驅動、 激光雷達的驅動、 舵機的控制, 與樹莓派進行信息交互和執行上位機發布的導航控制命令。
操作層包括Ubuntu18 操作系統和ROS 開源機器人系統,實現智能車在室內的自主導航、避障、循跡、上位機信息交互顯示等其他輔助功能。
以STM32F407VET6 為核心的控制電路組成的底層控制器,實現智能車環境數據的采集和遠程控制命令的執行、小車的運動控制。 樹莓派4B 控制器作為ROS 開源操作系統的實現載體和Ubuntu18 操作系統的交互平臺,通過硬件接口連接底層控制器實現信息的通信。激光雷達用于地圖的掃描構建和環境的感知。 編碼電機實現智能車速度、角度的感知和控制。 IMU_MPU6050 慣性測量單元包含了3 個單軸的加速度計和陀螺儀,測量物體在三維空間中的角速度和加速度,并以此解算出物體的姿態。 其模塊圖如圖2 所示。

圖2 硬件結構模塊Figure 2 Hardware architecture module
智能車硬件電路包括STM32F407VET6 主控制器工作電路、電源電路、電機驅動及接口電路和激光雷達及樹莓派電路。 主控制器工作電路包括8MHz 及32.768kHz 的晶振電路、 按鍵復位電路、BOOT 選擇電路、三極管驅動的蜂鳴器及指示燈電路。電源電路包括CN3703 充電電路、TPS5450DDA組成的5V 壓降電路、AMS1117 組成的5V 轉 3.3V轉換電路和L78L09ABUTR 雷達電機供電電路。 電機驅動電路包括舵機接口電路以及A4950ELJTR組成的電機驅動電路。接口電路包括MPU-6050 組成的陀螺儀姿態電路、W25Q128FVSG 組成的串行FLASH 電路、 藍牙模塊接口、OLED 接口、WIFI 模塊電路接口。 激光雷達及樹莓派電路包括由CH340N 及USB_M_Double 組成的激光雷達接口電路,Rr aspberry Pi 樹莓派4B 電路。 智能車層次電路如圖3 所示。

圖3 智能車層次電路Figure 3 Smart Car Hierarchical Circuit
根據服務和需求功能, 在開源ROS 平臺上設計室內自主導航智能車,主要實現小車在環形區域內的自主導航運動。 軟件部分主要包括ROS 工作空間模塊以及底層控制模塊。 如圖4 所示為ROS工作空間模塊,其多點自主導航的路徑規劃軟件在Scripts 腳本文件里用Python 語言來實現, 在ROS工作空間編譯運行, 發布控制指令到底層控制器,與上位機進行數據交互和實現RVIZ 地圖信息數據傳輸等功能。

圖4 ROS 工作空間模塊圖Figure 4 ROS workspace module diagram
使用腳本語言分別編寫智能車驅動代碼,形成智能車控制系統所需的激光SLAM 采集、姿態采集數據處理、 地圖控制算法和機器人控制軟件包,編寫節點即可調用相應的軟件包。 應用 ROS 提供的程序接口進行GCC(GNU Compiler Collection)編譯,并移植到 ROS 相對應的模塊中,ROS 的通信機制將各個獨立的模塊串接起來,完成智能車控制系統的設計。 各節點間通信的關系鏈接如圖5 所示。 其中方框為消息,橢圓為節點,矩形為話題。節點通過采集到的信息發布到話題,節點之間可以通過發布和訂閱話題來傳遞消息。消息是節點之間進行通信的方式,也是最重要的通信機制。

圖5 節點間通信的關系鏈接Figure 5 Relationship links for communication between nodes
2.2.1 RVIZ 地圖構建
激光SLAM 算法是實現導航的重要途徑,也是地圖構建和定位的重要實現方法。 常用的算法有 Gmapping 和 Cartographer 。 本文采用 Cartographer 算法來實現智能車的地圖構建與定位, 其是基于圖形優化的算法, 與Gmapping 算法比較,不僅估計智能機器人在運行中的姿態, 還要估算在建圖過程中的實時運行軌跡。 通過調用Cartographer 核心算法, 訂閱多傳感器數據(/odom、/scan、/imu 等),并發布地圖、機器人位置信息(/tf、/map)。作為SLAM 算法的核心, 實現特征提取、 子圖構建、閉環檢測、全局優化等。 Cartographer 算法框架如圖6 所示。

圖6 Cartographer 算法框架圖Figure 6 Framework of Cartographer algorithm
在ROS 平臺上啟動Gazebo 和RVIZ 地圖仿真平臺, 訂閱Cartographer 發布的地圖和坐標信息,通過Cartographer 算法和RVIZ 可視化仿真平臺實現地圖的可視化構建、 實時仿真和路勁規劃等操作。 移動式智能車在室內環境運行一圈, 在RVIZ上的2D 地圖可視化如圖7 所示。

圖7 2D 地圖可視化Figure 7 2D map visualization
2.2.2 智能車多點路徑規劃
主要采用時間彈性帶TEB(Time Elastic Band)算法做局部路徑規劃,A*算法做全局路徑規劃。A*算法是從初始位置對每一個方向進行路徑搜索并評估,從而得到最優的位置,再從最優的位置搜索評估直到終點位置。TEB 算法主要優化與障礙物的距離、路徑長度和軌跡運行時間等因素。 TEB 生成的局部軌跡由一系列帶有時間信息的離散位姿(pose)組成,G20(General Graph Optimization)算法優化的目標即這些離散的位姿,使最終由這些離散位姿組成的軌跡能達到時間最短、距離最短、遠離障礙物等目標,同時限制速度與加速度使軌跡滿足機器人的運動學。
在路徑規劃應用端采用Python 腳本語言編寫路徑規劃程序,只需要在遠程服務端發布Python 腳本執行命令即可完成智能車的自主導航運行。多點路徑規劃應用端為環形賽道設置5 個運行點,智能車每到一個運行點就發布即將運行的下一個點,利用TEB 算法實現路徑的規劃。 在設置5 個運行點時,利用RVIZ 可視化工具和Bitvise SSH Client 終端信息來選取坐標值, 寫入Python 腳本實現多點的規劃,其坐標取值如圖8 所示。 多點規劃應用端Python 算法實現如圖9 所示。

圖8 運行點坐標值選取Figure 8 Selection of run point coordinate values

圖9 多點規劃應用端Python 算法實現Figure 9 Application-side Python algorithm implementation for multipoint planning
在室內搭建了測試環境, 通過軟件和硬件安裝部署、激光雷達SLAM 和RVIZ 可視化二維地圖的構建以及 ROS 開源機器人系統、Ubuntu18 平臺、Bitvise SSH Client 終端交互等軟硬件聯調測試, 實驗結果驗證了移動式智能車設計方案的可行性和多點路徑規劃的有效性。 其測試結果如圖10 所示。

圖10 系統軟硬件聯調測試結果圖Figure 10 System Software and Hardware Debugging Test Result
本文設計的自主導航車主要應用于教育服務,可作為職業教育人工智能、物聯網技術、計算機技術、電子信息技術和新能源汽車等專業的實驗實訓平臺,能夠開展ROS 開源操作系統、編程語言、無人駕駛技術、電子電控和智能網聯等相關課程教育學習。 其實物如圖11 所示。

圖11 自主導航智能車Figure 11 Autonomous Navigation Smart Car
本文設計了基于ROS 和激光雷達SLAM 的自主導航智能車, 以阿克曼底盤、STM32F4、 樹莓派4B,激光雷達SLAM 等作為硬件基礎,通過ROS 開源機器人系統、TEB 路徑規劃、RVIZ 可視化地圖、Ubuntu18 操作系統和Python 腳本等設計軟件系統實現室內環境移動式智能車的自主導航。測試結果表明本設計方案基本滿足需求,為自主導航和服務型機器人提供了解決思路和方案。 未來,將基于現有硬件平臺,繼續深入研究定位導航的穩定性和精準性。