(上海大學 機電工程與自動化學院,上海 200444)
隨著科學技術的日益發(fā)展,機器人技術逐漸滲透到各個領域,這些領域?qū)ψ詣踊约爸悄芑囊笠苍絹碓礁?,移動機器人就是其中的熱點之一。智能車又稱作輪式移動機器人,是一種集環(huán)境感知、車輛定位、運動控制三大基本功能于一體的綜合系統(tǒng)[1]。由于移動機器人的定位、導航、避障、規(guī)劃與決策算法都需要用硬件平臺來進行實驗驗證,所以對于移動機器人平臺的研究是整個移動機器人技術研究的基石。當下,市場上也有一些應用于科學研究的移動機器人平臺,例如Pioneer 3-DX、TurtleBot、EAI、Autolabor等[2]。
研究表明,市面上現(xiàn)有的移動機器人平臺仍然存在一些不足之處:① 雖然性能優(yōu)良,運行也較為穩(wěn)定,但是底層設計細節(jié)幾乎是封閉式的,不支持完全開源且移植性能差,不利于二次維護和開發(fā);② 方便搭載多個傳感器且外形合適的硬件平臺大多數(shù)產(chǎn)于國外,價格昂貴,中小型科研團隊難以承擔高昂費用[2]?;谝陨显?,本文提出了一套適用于智能車的運動控制系統(tǒng)的硬件平臺方案,完成了運動控制系統(tǒng)的相關線控設計,實現(xiàn)了低成本、以ROS(Robot Operating System)為主要軟件平臺的運動控制系統(tǒng)解決方案。
所研究的智能車的最終目標是能夠在園區(qū)、學校等一些公共場合,實現(xiàn)無人自主駕駛。這就表明智能車需要具有以下模塊:① 環(huán)境感知模塊,能夠檢測車體周圍各種境況;② 車體定位模塊,能夠?qū)h(huán)境感知模塊檢測到數(shù)據(jù)信息進行綜合處理,進而確定車輛當前位置[3];③ 可靠的運動控制線控模塊,在確認了車輛當前位置后,通過該模塊實現(xiàn)對車輛速度和方向上的整體控制。所設計的智能車控制結構圖如圖1所示。
圖1 智能車控制結構圖
ROS是一個廣泛使用的機器人系統(tǒng)的軟件框架。ROS的基本原理就是無須改動就能夠在不同的機器人上復用代碼。它起源于斯坦福大學人工智能實驗室的項目和機械人研發(fā)公司W(wǎng)illow Garage的個人機器人項目(Personal Robot Program)之間的合作,現(xiàn)在有很多的研究機構通過增加ROS支持的硬件或開放軟件源代碼的方式加入ROS的開發(fā)中[4]。
ROS提供一些標準的操作系統(tǒng)服務,如硬件抽象描述、底層驅(qū)動程序管理、共用功能的執(zhí)行、程序間消息傳遞、程序發(fā)行包管理等。它基于一個集中式拓撲的圖結構,在節(jié)點中接收許多傳感器、控制、狀態(tài)、規(guī)劃、執(zhí)行器數(shù)據(jù)進行計算處理并發(fā)送[4-5]。各個庫與功能包都是面向類UNIX系統(tǒng)的。智能車是一種輪式移動機器人,基于ROS以上優(yōu)點,本文使用ROS為軟件平臺設計智能車的運動控制線控系統(tǒng)。
根據(jù)對智能車的整體分析,所設計的運動控制線控系統(tǒng)主要分為上位機和下位機兩層,上位機主要是車載工控機,是整車的中央控制系統(tǒng),負責控制全車的所有功能[6]。下位機是由STM32F013作為主控芯片負責控制信號的輸出,實現(xiàn)對智能車的速度和方向的控制。另外,上下位機采用RS485總線進行通信,確保數(shù)據(jù)交流的實時性和可靠性。整個線控系統(tǒng)的硬件框架如圖2所示。
圖2 控制系統(tǒng)硬件框架圖
下位機由車體、車輪、輪轂電機、電機驅(qū)動器、增量式編碼器、STM32F103核心板、蓄電池電源組成。整個車體的運動控制分為橫向控制和縱向控制兩個部分。其中,橫向控制是通過控制轉向電機的旋轉角度實現(xiàn)的。在轉向電機的轉向軸上安裝增量式編碼器用于提供轉角反饋,結合轉向電機的伺服電機驅(qū)動器,實現(xiàn)方向盤轉角的閉環(huán)控制。縱向控制是通過控制前輪的兩個輪轂電機轉動速度實現(xiàn)的,輪轂電機采用兩個直流無刷電機,并且安裝增量式編碼器提供速度反饋,通過雙直流無刷電機驅(qū)動器實現(xiàn)縱向速度閉環(huán)控制。下位機的主要作用包括:① 將上位機發(fā)出的控制指令轉換為驅(qū)動電機的速度控制信號和轉向電機的方向控制信號,并將其輸出到電機驅(qū)動器,實現(xiàn)智能車不同形式的運動;② 充當Modbus RTU從站。
上位機是裝有ROS的車載計算機,ROS在環(huán)境模塊和定位模塊的基礎上,計算智能車的位姿信息和里程信息以及速度信息等,最后負責下發(fā)智能車的移動指令。另外,上位機還是一個Modbus主站節(jié)點,能夠?qū)崿F(xiàn)和下位機之間的基于Modbus RTU通信協(xié)議的主從站通信。車載計算機采用普通筆記本,配置為:英特爾酷睿i5-4200H處理器、NVIDIA GTX 950M獨立顯卡、4G運行內(nèi)存、 Linux操作系統(tǒng)為Ubuntu 14.04 LTS、 ROS的版本為indigo。
根據(jù)車體運動控制的設計要求,系統(tǒng)軟件主要是針對上位機和下位機進行設計的。上位機軟件設計基于ROS,主要是在Linux平臺下。上位機的功能主要是能夠?qū)χ悄苘嚨男畔⑦M行綜合計算處理,然后負責向下位機發(fā)送移動指令。下位機軟件設計主要基于嵌入式系統(tǒng),負責接收上位機的移動指令,并轉換為相應的控制信號實現(xiàn)車體運動控制。
智能車上位機的功能都是通過ROS節(jié)點實現(xiàn)的,每個節(jié)點程序?qū)崿F(xiàn)不同功能,節(jié)點之間通過發(fā)布和訂閱主題的方式進行通信。上位機ROS中的節(jié)點總體框架圖如圖3所示。
圖3 ROS節(jié)點總體框架圖
各個節(jié)點的功能如下。
Decision_cmd:通過環(huán)境模塊和定位模塊的處理結果,生成具有運動控制層所需的速度和方向信息的Twist類型的消息,并通過/cmd_vel主題進行發(fā)布。
Teleop_keybord:模擬發(fā)布Twist類型消息,用于測試本文設計方案是否能夠有效地完成運動控制。
Ros_stm32_modbus:綜合計算處理智能車信息,并且是ROS系統(tǒng)下的Modbus主站,實現(xiàn)和下位機之間的基于Modbus RTU通信協(xié)議的主從站通信,在/odom話題上發(fā)布里程計消息。
Rviz :提供一個可視化界面,主要是用來顯示上位機的所有節(jié)點狀態(tài)。
下位機的主要作用是接收并解析上位機發(fā)送的移動指令。為了能和上位機進行通信,在主控芯片STM32F103移植FreeModbus協(xié)議,搭建了Modbus RTU從站,實現(xiàn)了基于Modbus RTU通信協(xié)議的主從站通信[7-9]。下位機接收到上位機的移動指令后,將其解析生成輪轂電機驅(qū)動器所需的PWM控制信號和轉向電機驅(qū)動器所需的RS485電平信號,實現(xiàn)了速度的閉環(huán)控制和轉向的閉環(huán)控制。下位機的軟件設計流程如圖4所示。
下位機軟件程序運行過程如下:首先執(zhí)行整個系統(tǒng)的初始化工作,包括GPIO口、串口、定時器等,此外,Modbus傳輸協(xié)議的初始化也是必要的。然后使之能通信協(xié)議棧,并且檢測是否有事件發(fā)生。如果沒有一個事件發(fā)生,則繼續(xù)檢測。如果有一個事件發(fā)生,則開始讀取上位機發(fā)送的數(shù)據(jù),然后解析并且生成控制信號。最后將解析后生成的信號輸出到對應電機驅(qū)動器,實現(xiàn)對智能車的運動控制。
整個運動控制線控系統(tǒng)設計完成后,為了驗證本文設計的線控系統(tǒng)方案是否能夠有效地控制車輪速度和方向盤轉角,在搭建的智能車硬件平臺車上進行實驗,智能車實物圖如圖5所示。
圖4 下位機軟件設計流程圖
在ROS中,Twist類型消息包含了運動控制層所需的速度和方向信息,通過在ROS中設計測試節(jié)點,用于發(fā)布Twist類型消息進行實驗。為了方便試驗,還需要準備另外一臺手持的筆記本電腦,通過局域網(wǎng)的方式加入車載計算機的ROS通信網(wǎng)絡,這樣就能夠通過手持的筆記本電腦控制發(fā)布Twist類型消息,從而觀察所設計的運動控制線控系統(tǒng)解決方案的控制效果。
圖5 智能車實物圖
實驗的操作流程為:首先啟動智能車整車系統(tǒng),待一切正常后,由手持的筆記本電腦的鍵盤向上位計算機ROS中發(fā)布Twist類型的消息。觀察上位機發(fā)送的控制信號能否控制智能車進行相應的運動。
實驗前,先完成各部分接線,并且進行安全檢查。然后將手持的筆記本電腦和上位計算機連上同一Wi-Fi。隨后配置好兩臺計算機的 ROS_MASTER_URI 和ROS_HOSTNAME。ROS_MASTER_URI應該設置為一樣,但是ROS_HOSTNAME則需要設為各自的IP。然后在上位機的筆記本電腦上運行roscore,并啟動ROS中所有的節(jié)點。最后在手持的筆記本電腦上運行測試節(jié)點文件Teleop_keybord,然后通過鍵盤上的方向鍵控制智能車的運動。通過ROS的內(nèi)置插件rqt_plot,可以監(jiān)測到實時數(shù)據(jù)變化。實驗過程圖如圖6~圖9所示,其中圖6~圖8中的曲線表示轉向軸轉角的變化,圖9中的曲線表示小車速度的變化,橫軸是時間軸。
圖6 轉向軸左轉到60°曲線圖
圖8 轉向軸橫向控制轉角曲線圖
圖9 縱向運動控制速度曲線圖
從圖6和圖7的實驗結果可知,實驗分別單次控制了轉向軸左轉到60°位置和右轉到60°位置,控制效果良好。圖8實驗中控制轉向軸由0°位置先左轉到90°位置,然后再由90°位置右轉回到0°位置,表明本文方案可以完成轉向軸左右轉的切換,實現(xiàn)轉向的閉環(huán)控制。圖9實驗中控制小車以1 m/s的速度行駛,小車速度相對平穩(wěn),可以看出低速情況下的縱向閉環(huán)控可行有效。
實驗結果表明,與人工駕駛控制系統(tǒng)相比,該方案擺脫了對人工的依賴性,更加智能化;另外該方案執(zhí)行上層決策結果,能夠較為準確地執(zhí)行具體運動指令,而人工駕駛可能需要不斷調(diào)整??傮w來說,所設計的運動控制線控系統(tǒng)可以實現(xiàn)小車的縱向運動和橫向運動控制,并且是有效可行的。
本文提出一種基于ROS和嵌入式的智能車控制系統(tǒng)方案,然后詳細闡述了該方案的硬件和軟件的設計及實現(xiàn)細節(jié)。通過使用Modbus通信協(xié)議將ROS和嵌入式系統(tǒng)相結合,使設計的系統(tǒng)具有成本低、可擴展性強的特點,為后續(xù)研究智能車的控制方案提供了基礎。本設計僅適用于低速的無人車平臺設計,如果提高速度,需要采用頻率更快的通信協(xié)議,如Modbus TCP協(xié)議等。