夏盛明
(福州理工學院 計算與信息科學學院,福州 350000)
采用開源技術方案構建無人駕駛設備在許多行業中都有廣泛的應用。在某些非關鍵應用領域,采用開源技術建造的無人車輛可以達到滿足實際使用需求的效果。在農業自動化應用領域,可以通過現有的開源技術改造出農業用自動駕駛拖拉機,進行農田自動化開墾作業[1]。在安全領域,用于安全領域巡邏自動駕駛車輛,可自動巡視周邊環境情況,報告潛在安全威脅,進行搜救任務[2]。在城市衛生領域,采用城市清潔衛生自動駕駛車輛[3],按照規劃好的路徑,進行道路的自動化清掃作業,可實現城市衛生的自動化維護。采用開源技術也能夠實現對固定翼無人機的控制[4],以及無人船控制等[5]。
無人車自動駕駛控制系統的構建可采用開源系統方案。選擇使用基于開源技術的硬件系統Pixhawk4[6-7]與開源飛控協議棧系統Ardupilot[8-9]。由Pixhawk4與Ardupilot共同組合成特殊領域無人靶車的控制系統。 Pixhawk4 是一個在開源社區中成熟的開源無人控制系統高級硬件平臺,使用了STM32F765片上處理器,計算速度達到216 MHz, 支持浮點運算。Pixhawk4集成了IMU慣性測量單元,擁有SPI、I2C、Serial等總線端口,方便與外部GPS、雷達、無線電等傳感器模塊相互連接通信。開源飛控協議棧系統Ardupilot功能豐富可用于開發無人駕駛設備,例如固定翼無人機、旋翼無人機、地面無人車輛等[10-12]。Ardupilot擁有較好的系統架構,實現模塊結構清晰易于理解,適宜作為無人系統設備控制基礎軟件平臺。
通過使用開源技術,可以較快的實現系統的開發,同時也可降低系統成本。由于開源技術系統經過了時間累積,系統功能經過實際使用與反饋,對于系統中暴露出的問題逐漸得到了修復。從成本角度來看,基于開源技術系統構建的無人車自動駕駛控制系統[13-14]可以節省系統開發時間,降低系統后期集成測試的難度與復雜度,提升系統開發效率。但是,相對于商業系統,開源技術系統存在著某些功能不完善的缺點,開源技術系統與實際的目標可應用系統往往存在一些差距,需要對開源技術系統進行一系列的二次開發,形成最終與實際目的功能需求相匹配的系統。
特殊領域無人靶車系統目前有通過工控機、LabVIEW、NI-VISION等技術實現的系統[15],采用各類傳感器集成的系統[16]。
本文所討論的特殊領域無人靶車系統主要由無人車自動駕駛控制系統、底層系統平臺(包括動力控制系統與標靶系統)、遠程地面站系統組成。特殊領域無人靶車系統架構圖如圖1所示。在圖1中,特殊領域無人靶車系統由無人車自動駕駛控制系統與底層系統組成。無人車自動駕駛控制系統實現無人車的自動行走策略控制,通過傳感器系統感知當前無人車系統的姿態信息,包括位置、速度、加速度等信息數據,對無人車系統的運動控制量進行計算,將控制量通過PWM信號傳遞給底層系統動力裝置。自動駕駛控制系統將各類控制命令通過Serial線傳輸給底層系統。底層動力系統平臺是特殊領域無人靶車系統的動力平臺,實現了特殊領域無人靶車系統的底層結構單元,包括車輪、電池、動力控制單元等;運行的嵌入式實時操作系統,實現底盤車輪動力與轉向控制、靶標動作控制等。底層動力系統平臺接收上層無人車自動駕駛控制系統發出的運動控制量,進行車輪轉速控制、行進控制等。

圖1 特殊領域無人靶車系統架構圖
用戶可通過遠程地面站系統與特殊領域無人靶車系統進行通信,控制特殊領域無人靶車系統的運動。無線電視遠程地面站系統與特殊領域無人靶車系統的通信媒介使用了Mavlink無線電[17-18]串行數據傳輸協議進行數據通信。針對Mavlink現有的消息格式進行補充,實現Mavlink能夠傳遞靶車的動作控制命令、靶標技術數據等。Mavlink是一個輕量級別的消息傳輸協議,主要用于無人裝備與地面站系統之間的數據通信,Mavlink采用了消息主題發布與注冊的策略,進行消息的傳遞,通過XML[19]文件定義了所支持的消息集合,方便消息的擴展。
自動駕駛控制系統由軟件控制系統Ardupilot與硬件控制平臺Pixhawk所組成,自動駕駛控制系統組成圖如圖2所示。Ardupilot可用于控制固定翼、旋翼飛行器、無人車輛、小型潛水裝置等設備,實現無人車輛的位置控制、速度控制、導航控制、命令與消息數據傳輸等。硬件平臺Pixhawk用于支持Ardupilot運行,包括了CPU與RAM等主要內部計算能力部件、IMU與磁力計等[20-21]用于運動控制計算部件。Pixhawk通過多種類型的總線接口,可與外部GPS/RTK系統[22-23]、無線電、電機、雷達等裝置連接。

圖2 自動駕駛控制系統組成圖
自動駕駛控制系統需要與遠程地面站系統通過無線電通信,接收控制命令與傳輸系統狀態數據等。現有傳輸協議Mavlink可以實現消息數據的傳輸。現有傳輸協議Mavlink消息主要用于傳輸無人車輛的運動控制命令,包括導航自動運動控制、在線運動控制、運動模式切換等,以及包括用于與無人車的數據通信的消息,用于傳輸傳感器數據,行車狀態數據信息等。但是,現有的Mavlink消息未能滿足特殊領域用無人靶車的傳輸命令與數據的功能需求,需要對Mavlink 消息協議進行擴展。自動駕駛控制系統需要實現能夠解析遠程地面站系統所發出的用于控制底層動力系統平臺的控制命令,包括運動控制、標靶控制、成績數據統計等。當前Mavlink 協議中并沒有相關內容,需要對這些命令與數據消息進行格式定義,實現數據通過Mavlink協議消息進行傳輸,所以,通過對Mavlink消息格式定義XML文件中添加新的消息定義,可通過工具自動生成新增功能的消息封裝模塊。在Ardupilot中也需要增加相應功能實現對相應消息的解析處理,以及與底層動力系統平臺的消息通信功能。在Ardupilot工程目錄下的“Rover”目錄中開發無人車項目代碼目錄,可在GCS_Mavlink.cpp文件中定義控制消息的解析與處理函數,用于實現對自定義Mavlink消息功能處理,例如與地面站系統進行自定義消息的傳輸。
用戶可以通過遠程地面站系統向特殊領域無人靶車系統發送運動指令,進行行走路徑規劃與標靶的動作控制。自動駕駛控制系統在接受到地面站系統消息后對消息進行解析,判斷消息的類型然后進行處理,對用于控制底層系統平臺的各類命令消息,自動駕駛控制系統將把消息解析后的命令內容通過格式封裝,傳遞給底層系統平臺進行命令控制,自動駕駛控制系統處理地面站消息流程如圖3所示。

圖3 自動駕駛控制系統處理地面站消息流程

圖4 命令與數據消息交互協議
自動駕駛控制系統與底層動力系統平臺通過Serial接口進行消息數據通信,傳遞遠程地面站系統發送的控制靶標命令、獲取底層動力系統平臺上統計的成績信息等。通過設計數據通信協議,采用異步的消息通信,格式化的消息保證了數據在自動駕駛控制系統與底層動力系統之間可以成功交互。自動駕駛控制系統成功向底層動力系統平臺發送命令消息后,底層動力系統平臺將向自動駕駛控制系統傳遞消息、接收反饋,通知自動駕駛控制系統消息接收成功或失敗,自動駕駛控制系統將不會等待命令的執行結果,將繼續處理后續消息。底層動力系統平臺在處理完成命令后,將獲得數據封裝成消息發送給自動駕駛控制系統處理,自動駕駛控制系統在接收到數據消息后,向底層動力系統平臺發送接收確認消息。命令與數據消息交互協議如圖4所示,消息格式如圖5所示。在Ardupilot的Libraries子目錄中包含著控制系統所使用的各種系統依賴算法庫、功能庫。使用librariesap_serialmanager目錄下所定義Ap_SerialManager函數類可實現系統與底層平臺的Serial端口通信,該功能類可提供打開查找設置的Serial端口,與底層平臺設備發送與接收數據。

圖5 消息格式
自動駕駛控制系統支持手動方式控制與自動方式控制。手動方式控制即指通過手動遙控駕駛無人車。手動遙控駕駛無人車時,自動駕駛控制系統將遙控器上的遙控控制模擬輸入轉換為PWM信號[24]輸出給底層動力系統平臺。自動方式控制即指通過地面站系統規劃自動駕駛無人車行駛路徑,實現無人車自動行駛的方式。通過地面站系統規劃路徑,無人車自動駕駛時,自動駕駛控制系統通過EKF[25-27]算法融合IMU數據、GPS數據,計算無人車系統當前位置、速度、加速度、航向、角速度、角加速度、與目標位置的差距、與目標速度的差距、與目標航向的差距等信息,通過PID算法得出用于控制航向與速度沖量的PWM信號控制量,輸出給底層動力系統平臺。自動駕駛控制系統控制流程如圖6所示。在Ardupilot工程項目的“Rover”目錄下,對RC_Channel.cpp文件進行修改可增加遙控器撥號開關,實現模式切換。例如實現自動行駛模式與手動駕駛模式的切換。對手動駕駛模式可對Mode_manual.cpp內定義的函數進行功能修改,實現手動駕駛動力控制的豐富與優化。在Mode_auto.cpp中實現自動駕駛控制邏輯,需要增加從Serial端口讀取的探測前方障礙物的數據,實現車輛行駛的自動避障功能。

圖6 自動駕駛控制系統控制流程
底層動力系統數據消息包括了底層動力系統平臺運動速度數據、成績數據信息、執行遠程地面站系統命令反饋信息。自動駕駛控制系統接受底層系統傳遞的數據消息,對接收的數據消息解析出數據內容,并將數據內容經過Mavlink消息格式封裝后,傳送給遠程的地面站系統,自動駕駛控制系統處理底層系統消息流程如圖7所示。

圖7 自動駕駛控制系統處理底層系統消息流程
衛星導航系統采用了GPS/RTK系統,原理為:在一定的地面距離范圍內,由已知位置的RTK基站向RTK移動站廣播RTCM[28]數據,RTK移動站在接收到RTCM數據后,可以修正自身的RTK定位信息,獲得更高的定位精度。
在地面固定點布署RTK基站系統,無人靶車上集成了GPS接收器作為RTK移動站,實現更高的定位精度,精度可以達到厘米級別,RTK系統結構圖如圖8所示。使用RTK系統可用于提高特殊領域無人靶車行走路線的準確度,無人車行走路線實際點與計劃點誤差可控制在幾十厘米以內,基本滿足實際應用需求。實際應用過程中,在靠近較高建筑物的環境下,GPS信號容易被建筑物等遮擋,造成定位數據的誤差,但是特殊領域無人靶車主要用于野外,環境中較少存在較高建筑物,即建筑物遮擋GPS信號這類情況發生概率較少,在天氣晴朗云層較少的條件下,實際行走路徑與規劃路徑誤差在可接受范圍內。

圖8 RTK系統結構圖
特殊領域無人靶車在按照規劃路徑自動行駛的過程中,不可避免的在路程上會碰到障礙物,例如野外的大型石塊、較大的臺階、大型的樹木等。底層動力系統平臺上集成了超聲波裝置用于判斷前方是否存在物體,如果存在物體,自動駕駛控制系統將依據障礙物體出現的相對方位進行一定程度的航向調整,嘗試從沒有障礙物的方向行駛。實現方式是在底層動力系統平臺前方左右兩側各安裝一個超聲波裝置,用于探測與前方物體的距離。避免障礙物的設計機制如下:
(1)如果左側超聲波探測到物體距離小于設定距離,自動駕駛控制系統將降低車輛速度,控制車輛向右轉彎,將方向轉彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉向目的點方向繼續行駛。
(2)如果右側探測到物體距離小于障礙物設定距離,自動駕駛控制系統將降低車輛速度,控制車輛向左轉彎,將方向轉彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉向目的點方向繼續行駛。
(3)如果兩側的超聲波裝置同時探測到物體距離小于障礙物設定距離,自動駕駛控制系統將降低車輛速度,并把車輛隨機轉向一個角度,將方向轉彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉向目的點方向繼續行駛。
(4)自動駕駛控制系統在檢測到前方有障礙物時,將會把速度在1秒內降為較慢的速度,避免在轉向的過程中接觸障礙物,采用類似A*算法,嘗試轉向以繞開障礙物。
(5)自動駕駛控制系統通過衛星導航系統計算行駛路徑軌跡,在遇到障礙物后采取繞行避開障礙物,然后將嘗試回到預先設定軌跡上繼續行駛。
當前支持的障礙物繞行方式是在活動開闊,偶爾發現行進路途中存在單一的障礙物條件下進行繞行,實現機制較為簡單,只適用于相對開闊的地區,并且障礙物較為稀少的情況。對于復雜情況下,需要通過單目攝像頭、雙目攝像頭、3D攝像頭等視覺感知傳感器實現計算機視覺避障[29]。
本文討論通過使用開源技術架構設計實現了特殊領域無人靶車的自動駕駛控制系統,在一定程度上可加快最終產品的成型。但是采用的開源技術與商業技術相比還是存在一些功能上的不成熟等缺點,開發者需要對所采用的技術有比較深刻的了解,且必須具有改進現有開源系統的開發能力,在碰到問題時能夠快速定位。文中結論不僅為后續產品的升級開發提供可能,而且對于采用基于開源技術手段來實現一些非關鍵敏感領域的智能化應用系統仍然具有一定的價值。