夏盛明
(福州理工學(xué)院 計算與信息科學(xué)學(xué)院,福州 350000)
采用開源技術(shù)方案構(gòu)建無人駕駛設(shè)備在許多行業(yè)中都有廣泛的應(yīng)用。在某些非關(guān)鍵應(yīng)用領(lǐng)域,采用開源技術(shù)建造的無人車輛可以達(dá)到滿足實際使用需求的效果。在農(nóng)業(yè)自動化應(yīng)用領(lǐng)域,可以通過現(xiàn)有的開源技術(shù)改造出農(nóng)業(yè)用自動駕駛拖拉機(jī),進(jìn)行農(nóng)田自動化開墾作業(yè)[1]。在安全領(lǐng)域,用于安全領(lǐng)域巡邏自動駕駛車輛,可自動巡視周邊環(huán)境情況,報告潛在安全威脅,進(jìn)行搜救任務(wù)[2]。在城市衛(wèi)生領(lǐng)域,采用城市清潔衛(wèi)生自動駕駛車輛[3],按照規(guī)劃好的路徑,進(jìn)行道路的自動化清掃作業(yè),可實現(xiàn)城市衛(wèi)生的自動化維護(hù)。采用開源技術(shù)也能夠?qū)崿F(xiàn)對固定翼無人機(jī)的控制[4],以及無人船控制等[5]。
無人車自動駕駛控制系統(tǒng)的構(gòu)建可采用開源系統(tǒng)方案。選擇使用基于開源技術(shù)的硬件系統(tǒng)Pixhawk4[6-7]與開源飛控協(xié)議棧系統(tǒng)Ardupilot[8-9]。由Pixhawk4與Ardupilot共同組合成特殊領(lǐng)域無人靶車的控制系統(tǒng)。 Pixhawk4 是一個在開源社區(qū)中成熟的開源無人控制系統(tǒng)高級硬件平臺,使用了STM32F765片上處理器,計算速度達(dá)到216 MHz, 支持浮點(diǎn)運(yùn)算。Pixhawk4集成了IMU慣性測量單元,擁有SPI、I2C、Serial等總線端口,方便與外部GPS、雷達(dá)、無線電等傳感器模塊相互連接通信。開源飛控協(xié)議棧系統(tǒng)Ardupilot功能豐富可用于開發(fā)無人駕駛設(shè)備,例如固定翼無人機(jī)、旋翼無人機(jī)、地面無人車輛等[10-12]。Ardupilot擁有較好的系統(tǒng)架構(gòu),實現(xiàn)模塊結(jié)構(gòu)清晰易于理解,適宜作為無人系統(tǒng)設(shè)備控制基礎(chǔ)軟件平臺。
通過使用開源技術(shù),可以較快的實現(xiàn)系統(tǒng)的開發(fā),同時也可降低系統(tǒng)成本。由于開源技術(shù)系統(tǒng)經(jīng)過了時間累積,系統(tǒng)功能經(jīng)過實際使用與反饋,對于系統(tǒng)中暴露出的問題逐漸得到了修復(fù)。從成本角度來看,基于開源技術(shù)系統(tǒng)構(gòu)建的無人車自動駕駛控制系統(tǒng)[13-14]可以節(jié)省系統(tǒng)開發(fā)時間,降低系統(tǒng)后期集成測試的難度與復(fù)雜度,提升系統(tǒng)開發(fā)效率。但是,相對于商業(yè)系統(tǒng),開源技術(shù)系統(tǒng)存在著某些功能不完善的缺點(diǎn),開源技術(shù)系統(tǒng)與實際的目標(biāo)可應(yīng)用系統(tǒng)往往存在一些差距,需要對開源技術(shù)系統(tǒng)進(jìn)行一系列的二次開發(fā),形成最終與實際目的功能需求相匹配的系統(tǒng)。
特殊領(lǐng)域無人靶車系統(tǒng)目前有通過工控機(jī)、LabVIEW、NI-VISION等技術(shù)實現(xiàn)的系統(tǒng)[15],采用各類傳感器集成的系統(tǒng)[16]。
本文所討論的特殊領(lǐng)域無人靶車系統(tǒng)主要由無人車自動駕駛控制系統(tǒng)、底層系統(tǒng)平臺(包括動力控制系統(tǒng)與標(biāo)靶系統(tǒng))、遠(yuǎn)程地面站系統(tǒng)組成。特殊領(lǐng)域無人靶車系統(tǒng)架構(gòu)圖如圖1所示。在圖1中,特殊領(lǐng)域無人靶車系統(tǒng)由無人車自動駕駛控制系統(tǒng)與底層系統(tǒng)組成。無人車自動駕駛控制系統(tǒng)實現(xiàn)無人車的自動行走策略控制,通過傳感器系統(tǒng)感知當(dāng)前無人車系統(tǒng)的姿態(tài)信息,包括位置、速度、加速度等信息數(shù)據(jù),對無人車系統(tǒng)的運(yùn)動控制量進(jìn)行計算,將控制量通過PWM信號傳遞給底層系統(tǒng)動力裝置。自動駕駛控制系統(tǒng)將各類控制命令通過Serial線傳輸給底層系統(tǒng)。底層動力系統(tǒng)平臺是特殊領(lǐng)域無人靶車系統(tǒng)的動力平臺,實現(xiàn)了特殊領(lǐng)域無人靶車系統(tǒng)的底層結(jié)構(gòu)單元,包括車輪、電池、動力控制單元等;運(yùn)行的嵌入式實時操作系統(tǒng),實現(xiàn)底盤車輪動力與轉(zhuǎn)向控制、靶標(biāo)動作控制等。底層動力系統(tǒng)平臺接收上層無人車自動駕駛控制系統(tǒng)發(fā)出的運(yùn)動控制量,進(jìn)行車輪轉(zhuǎn)速控制、行進(jìn)控制等。
圖1 特殊領(lǐng)域無人靶車系統(tǒng)架構(gòu)圖
用戶可通過遠(yuǎn)程地面站系統(tǒng)與特殊領(lǐng)域無人靶車系統(tǒng)進(jìn)行通信,控制特殊領(lǐng)域無人靶車系統(tǒng)的運(yùn)動。無線電視遠(yuǎn)程地面站系統(tǒng)與特殊領(lǐng)域無人靶車系統(tǒng)的通信媒介使用了Mavlink無線電[17-18]串行數(shù)據(jù)傳輸協(xié)議進(jìn)行數(shù)據(jù)通信。針對Mavlink現(xiàn)有的消息格式進(jìn)行補(bǔ)充,實現(xiàn)Mavlink能夠傳遞靶車的動作控制命令、靶標(biāo)技術(shù)數(shù)據(jù)等。Mavlink是一個輕量級別的消息傳輸協(xié)議,主要用于無人裝備與地面站系統(tǒng)之間的數(shù)據(jù)通信,Mavlink采用了消息主題發(fā)布與注冊的策略,進(jìn)行消息的傳遞,通過XML[19]文件定義了所支持的消息集合,方便消息的擴(kuò)展。
自動駕駛控制系統(tǒng)由軟件控制系統(tǒng)Ardupilot與硬件控制平臺Pixhawk所組成,自動駕駛控制系統(tǒng)組成圖如圖2所示。Ardupilot可用于控制固定翼、旋翼飛行器、無人車輛、小型潛水裝置等設(shè)備,實現(xiàn)無人車輛的位置控制、速度控制、導(dǎo)航控制、命令與消息數(shù)據(jù)傳輸?shù)?。硬件平臺Pixhawk用于支持Ardupilot運(yùn)行,包括了CPU與RAM等主要內(nèi)部計算能力部件、IMU與磁力計等[20-21]用于運(yùn)動控制計算部件。Pixhawk通過多種類型的總線接口,可與外部GPS/RTK系統(tǒng)[22-23]、無線電、電機(jī)、雷達(dá)等裝置連接。
圖2 自動駕駛控制系統(tǒng)組成圖
自動駕駛控制系統(tǒng)需要與遠(yuǎn)程地面站系統(tǒng)通過無線電通信,接收控制命令與傳輸系統(tǒng)狀態(tài)數(shù)據(jù)等?,F(xiàn)有傳輸協(xié)議Mavlink可以實現(xiàn)消息數(shù)據(jù)的傳輸?,F(xiàn)有傳輸協(xié)議Mavlink消息主要用于傳輸無人車輛的運(yùn)動控制命令,包括導(dǎo)航自動運(yùn)動控制、在線運(yùn)動控制、運(yùn)動模式切換等,以及包括用于與無人車的數(shù)據(jù)通信的消息,用于傳輸傳感器數(shù)據(jù),行車狀態(tài)數(shù)據(jù)信息等。但是,現(xiàn)有的Mavlink消息未能滿足特殊領(lǐng)域用無人靶車的傳輸命令與數(shù)據(jù)的功能需求,需要對Mavlink 消息協(xié)議進(jìn)行擴(kuò)展。自動駕駛控制系統(tǒng)需要實現(xiàn)能夠解析遠(yuǎn)程地面站系統(tǒng)所發(fā)出的用于控制底層動力系統(tǒng)平臺的控制命令,包括運(yùn)動控制、標(biāo)靶控制、成績數(shù)據(jù)統(tǒng)計等。當(dāng)前Mavlink 協(xié)議中并沒有相關(guān)內(nèi)容,需要對這些命令與數(shù)據(jù)消息進(jìn)行格式定義,實現(xiàn)數(shù)據(jù)通過Mavlink協(xié)議消息進(jìn)行傳輸,所以,通過對Mavlink消息格式定義XML文件中添加新的消息定義,可通過工具自動生成新增功能的消息封裝模塊。在Ardupilot中也需要增加相應(yīng)功能實現(xiàn)對相應(yīng)消息的解析處理,以及與底層動力系統(tǒng)平臺的消息通信功能。在Ardupilot工程目錄下的“Rover”目錄中開發(fā)無人車項目代碼目錄,可在GCS_Mavlink.cpp文件中定義控制消息的解析與處理函數(shù),用于實現(xiàn)對自定義Mavlink消息功能處理,例如與地面站系統(tǒng)進(jìn)行自定義消息的傳輸。
用戶可以通過遠(yuǎn)程地面站系統(tǒng)向特殊領(lǐng)域無人靶車系統(tǒng)發(fā)送運(yùn)動指令,進(jìn)行行走路徑規(guī)劃與標(biāo)靶的動作控制。自動駕駛控制系統(tǒng)在接受到地面站系統(tǒng)消息后對消息進(jìn)行解析,判斷消息的類型然后進(jìn)行處理,對用于控制底層系統(tǒng)平臺的各類命令消息,自動駕駛控制系統(tǒng)將把消息解析后的命令內(nèi)容通過格式封裝,傳遞給底層系統(tǒng)平臺進(jìn)行命令控制,自動駕駛控制系統(tǒng)處理地面站消息流程如圖3所示。
圖3 自動駕駛控制系統(tǒng)處理地面站消息流程
圖4 命令與數(shù)據(jù)消息交互協(xié)議
自動駕駛控制系統(tǒng)與底層動力系統(tǒng)平臺通過Serial接口進(jìn)行消息數(shù)據(jù)通信,傳遞遠(yuǎn)程地面站系統(tǒng)發(fā)送的控制靶標(biāo)命令、獲取底層動力系統(tǒng)平臺上統(tǒng)計的成績信息等。通過設(shè)計數(shù)據(jù)通信協(xié)議,采用異步的消息通信,格式化的消息保證了數(shù)據(jù)在自動駕駛控制系統(tǒng)與底層動力系統(tǒng)之間可以成功交互。自動駕駛控制系統(tǒng)成功向底層動力系統(tǒng)平臺發(fā)送命令消息后,底層動力系統(tǒng)平臺將向自動駕駛控制系統(tǒng)傳遞消息、接收反饋,通知自動駕駛控制系統(tǒng)消息接收成功或失敗,自動駕駛控制系統(tǒng)將不會等待命令的執(zhí)行結(jié)果,將繼續(xù)處理后續(xù)消息。底層動力系統(tǒng)平臺在處理完成命令后,將獲得數(shù)據(jù)封裝成消息發(fā)送給自動駕駛控制系統(tǒng)處理,自動駕駛控制系統(tǒng)在接收到數(shù)據(jù)消息后,向底層動力系統(tǒng)平臺發(fā)送接收確認(rèn)消息。命令與數(shù)據(jù)消息交互協(xié)議如圖4所示,消息格式如圖5所示。在Ardupilot的Libraries子目錄中包含著控制系統(tǒng)所使用的各種系統(tǒng)依賴算法庫、功能庫。使用librariesap_serialmanager目錄下所定義Ap_SerialManager函數(shù)類可實現(xiàn)系統(tǒng)與底層平臺的Serial端口通信,該功能類可提供打開查找設(shè)置的Serial端口,與底層平臺設(shè)備發(fā)送與接收數(shù)據(jù)。
圖5 消息格式
自動駕駛控制系統(tǒng)支持手動方式控制與自動方式控制。手動方式控制即指通過手動遙控駕駛無人車。手動遙控駕駛無人車時,自動駕駛控制系統(tǒng)將遙控器上的遙控控制模擬輸入轉(zhuǎn)換為PWM信號[24]輸出給底層動力系統(tǒng)平臺。自動方式控制即指通過地面站系統(tǒng)規(guī)劃自動駕駛無人車行駛路徑,實現(xiàn)無人車自動行駛的方式。通過地面站系統(tǒng)規(guī)劃路徑,無人車自動駕駛時,自動駕駛控制系統(tǒng)通過EKF[25-27]算法融合IMU數(shù)據(jù)、GPS數(shù)據(jù),計算無人車系統(tǒng)當(dāng)前位置、速度、加速度、航向、角速度、角加速度、與目標(biāo)位置的差距、與目標(biāo)速度的差距、與目標(biāo)航向的差距等信息,通過PID算法得出用于控制航向與速度沖量的PWM信號控制量,輸出給底層動力系統(tǒng)平臺。自動駕駛控制系統(tǒng)控制流程如圖6所示。在Ardupilot工程項目的“Rover”目錄下,對RC_Channel.cpp文件進(jìn)行修改可增加遙控器撥號開關(guān),實現(xiàn)模式切換。例如實現(xiàn)自動行駛模式與手動駕駛模式的切換。對手動駕駛模式可對Mode_manual.cpp內(nèi)定義的函數(shù)進(jìn)行功能修改,實現(xiàn)手動駕駛動力控制的豐富與優(yōu)化。在Mode_auto.cpp中實現(xiàn)自動駕駛控制邏輯,需要增加從Serial端口讀取的探測前方障礙物的數(shù)據(jù),實現(xiàn)車輛行駛的自動避障功能。
圖6 自動駕駛控制系統(tǒng)控制流程
底層動力系統(tǒng)數(shù)據(jù)消息包括了底層動力系統(tǒng)平臺運(yùn)動速度數(shù)據(jù)、成績數(shù)據(jù)信息、執(zhí)行遠(yuǎn)程地面站系統(tǒng)命令反饋信息。自動駕駛控制系統(tǒng)接受底層系統(tǒng)傳遞的數(shù)據(jù)消息,對接收的數(shù)據(jù)消息解析出數(shù)據(jù)內(nèi)容,并將數(shù)據(jù)內(nèi)容經(jīng)過Mavlink消息格式封裝后,傳送給遠(yuǎn)程的地面站系統(tǒng),自動駕駛控制系統(tǒng)處理底層系統(tǒng)消息流程如圖7所示。
圖7 自動駕駛控制系統(tǒng)處理底層系統(tǒng)消息流程
衛(wèi)星導(dǎo)航系統(tǒng)采用了GPS/RTK系統(tǒng),原理為:在一定的地面距離范圍內(nèi),由已知位置的RTK基站向RTK移動站廣播RTCM[28]數(shù)據(jù),RTK移動站在接收到RTCM數(shù)據(jù)后,可以修正自身的RTK定位信息,獲得更高的定位精度。
在地面固定點(diǎn)布署RTK基站系統(tǒng),無人靶車上集成了GPS接收器作為RTK移動站,實現(xiàn)更高的定位精度,精度可以達(dá)到厘米級別,RTK系統(tǒng)結(jié)構(gòu)圖如圖8所示。使用RTK系統(tǒng)可用于提高特殊領(lǐng)域無人靶車行走路線的準(zhǔn)確度,無人車行走路線實際點(diǎn)與計劃點(diǎn)誤差可控制在幾十厘米以內(nèi),基本滿足實際應(yīng)用需求。實際應(yīng)用過程中,在靠近較高建筑物的環(huán)境下,GPS信號容易被建筑物等遮擋,造成定位數(shù)據(jù)的誤差,但是特殊領(lǐng)域無人靶車主要用于野外,環(huán)境中較少存在較高建筑物,即建筑物遮擋GPS信號這類情況發(fā)生概率較少,在天氣晴朗云層較少的條件下,實際行走路徑與規(guī)劃路徑誤差在可接受范圍內(nèi)。
圖8 RTK系統(tǒng)結(jié)構(gòu)圖
特殊領(lǐng)域無人靶車在按照規(guī)劃路徑自動行駛的過程中,不可避免的在路程上會碰到障礙物,例如野外的大型石塊、較大的臺階、大型的樹木等。底層動力系統(tǒng)平臺上集成了超聲波裝置用于判斷前方是否存在物體,如果存在物體,自動駕駛控制系統(tǒng)將依據(jù)障礙物體出現(xiàn)的相對方位進(jìn)行一定程度的航向調(diào)整,嘗試從沒有障礙物的方向行駛。實現(xiàn)方式是在底層動力系統(tǒng)平臺前方左右兩側(cè)各安裝一個超聲波裝置,用于探測與前方物體的距離。避免障礙物的設(shè)計機(jī)制如下:
(1)如果左側(cè)超聲波探測到物體距離小于設(shè)定距離,自動駕駛控制系統(tǒng)將降低車輛速度,控制車輛向右轉(zhuǎn)彎,將方向轉(zhuǎn)彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉(zhuǎn)向目的點(diǎn)方向繼續(xù)行駛。
(2)如果右側(cè)探測到物體距離小于障礙物設(shè)定距離,自動駕駛控制系統(tǒng)將降低車輛速度,控制車輛向左轉(zhuǎn)彎,將方向轉(zhuǎn)彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉(zhuǎn)向目的點(diǎn)方向繼續(xù)行駛。
(3)如果兩側(cè)的超聲波裝置同時探測到物體距離小于障礙物設(shè)定距離,自動駕駛控制系統(tǒng)將降低車輛速度,并把車輛隨機(jī)轉(zhuǎn)向一個角度,將方向轉(zhuǎn)彎至檢測到無障礙物后行駛一小段時間t,繞開障礙物后,再將車輛轉(zhuǎn)向目的點(diǎn)方向繼續(xù)行駛。
(4)自動駕駛控制系統(tǒng)在檢測到前方有障礙物時,將會把速度在1秒內(nèi)降為較慢的速度,避免在轉(zhuǎn)向的過程中接觸障礙物,采用類似A*算法,嘗試轉(zhuǎn)向以繞開障礙物。
(5)自動駕駛控制系統(tǒng)通過衛(wèi)星導(dǎo)航系統(tǒng)計算行駛路徑軌跡,在遇到障礙物后采取繞行避開障礙物,然后將嘗試回到預(yù)先設(shè)定軌跡上繼續(xù)行駛。
當(dāng)前支持的障礙物繞行方式是在活動開闊,偶爾發(fā)現(xiàn)行進(jìn)路途中存在單一的障礙物條件下進(jìn)行繞行,實現(xiàn)機(jī)制較為簡單,只適用于相對開闊的地區(qū),并且障礙物較為稀少的情況。對于復(fù)雜情況下,需要通過單目攝像頭、雙目攝像頭、3D攝像頭等視覺感知傳感器實現(xiàn)計算機(jī)視覺避障[29]。
本文討論通過使用開源技術(shù)架構(gòu)設(shè)計實現(xiàn)了特殊領(lǐng)域無人靶車的自動駕駛控制系統(tǒng),在一定程度上可加快最終產(chǎn)品的成型。但是采用的開源技術(shù)與商業(yè)技術(shù)相比還是存在一些功能上的不成熟等缺點(diǎn),開發(fā)者需要對所采用的技術(shù)有比較深刻的了解,且必須具有改進(jìn)現(xiàn)有開源系統(tǒng)的開發(fā)能力,在碰到問題時能夠快速定位。文中結(jié)論不僅為后續(xù)產(chǎn)品的升級開發(fā)提供可能,而且對于采用基于開源技術(shù)手段來實現(xiàn)一些非關(guān)鍵敏感領(lǐng)域的智能化應(yīng)用系統(tǒng)仍然具有一定的價值。