張萬威,張東方,徐德東
(1.武漢大學湖北武漢430079;2.北京遙感設備研究所北京100854)
近年來,衛星導航與位置服務產業的快速發展,使以衛星導航、移動通信和手持終端技術相結合的衛星導航產品向微型智能的消費電子產品方向發展[1]。以這些技術的集成和融合而成的產品,大多建立在嵌入式系統之上,因此在嵌入系統上實現數據的實時采集、解碼、定位處理、傳輸存儲已成為衛星導航產品開發應用的熱點研究方向[2]。
目前的相關研究大多只是從如NMEA-0183數據流中提取定位結果數據并顯示和存儲,缺少關鍵的定位處理核心環節[3-5],而高精度定位解算處理算法是研制自主知識產權衛星導航系統產業化應用產品的關鍵技術之一。
針對目前實驗室高精度衛星定位相關算法在嵌入式系統下測試的實際需求,設計了一種基于DSP的GPS數據實時采集與定位處理系統,詳細闡述了該系統硬件框架方案和系統軟件設計的方法與實現步驟。
基于DSP的GPS實時數據采集與定位處理系統的硬件框圖如圖1所示,主要由GPS天線、GPS導航模塊、DSP微處理器模塊、PC上位機等組成。該系統中各硬件選型及功能作用如表1所示,重點對GPS導航模塊和DSP微處理器模塊這兩個模塊做介紹。

圖1 系統硬件框圖

表1 系統硬件選型與功能
GPS導航模塊選用OEMStar板卡,該板卡是Novatel公司推出的一款高性能低成本的導航接收模塊,具有尺寸小、功耗低等優點,可以用于各種具有高精度定位要求的系統集成[6]。其主要性能指標如表2所示。

表2 OEMStar主要性能指標
通過串口通信向OEMStar板卡發送指令,可以輸出GPS數據(觀測值、星歷、電離層參數),相關指令及其意義如表3所示。

表3 OEMStar相關指令及其意義
OEMStar輸出的二進制數據都是以一完整子幀發送的,每一個子幀由幀頭信息、有效數據、32位CRC校驗碼等組成[6],二進制子幀數據結構如表4所示。

表4 OEMStar二進制子幀數據結構
其中,幀頭信息由幀同步字、幀頭長度、有效數據類型、有效數據長度等信息組成。
DSP模塊選用TMS320C6713DSP,該DSP是Ti公司的32位高速浮點型微處理器,主頻最高可達300 MHz,片上共有264K×8位存儲器,并具有豐富的片上外設資源,可實現高速運算和大容量存儲[7]。
TMS320C6713DSP沒有異步串口通信接口,可采用UART芯片TL16C52B來實現異步串口通信[8-10]。TL16C52B包含兩路相互獨立的異步接收器,其可通過一個CPLD模塊與TMS320C6713的連接,如圖2所示。

圖2 TL16C52B與TMS320C6713的連接
TL16C52B提供兩個中斷請求信號INTA、INTB分別用于UART通道A和B申請C6713中斷,INTA、INTB和USB中斷一起復用C6713的EXT_INT6,下降沿有效[7,10]。
后續將EXT_INT6的中斷服務函數名稱命為c_int6,當UART上有數據輸入時,系統自動進入c_int6來響應UART的中斷請求。
本系統軟件主要包括串口中斷子幀數據接收程序、DSP后臺主程序和導航定位上位機程序。其中,DSP后臺主程序包括GPS模塊子幀數據的解碼、單點定位解算、定位結果編碼及串口輸出等3個模塊。
當DSP模塊串口上收到GPS導航模塊輸出的二進制數據后,系統自動進入串口中斷GPS模塊子幀數據接收程序(c_int6函數),其程序流程圖如圖3所示。
根據OEMstar輸出的數據規律,在c_int6函數中設計數據接收程序,先進行子幀幀頭同步,再判斷已接收長度是否等于子幀總長度,若該幀已接收完成,置子幀數據收齊標記為已完成,另外為避免讀寫數據沖突,一定要進行子幀數據的備份[7]。在c_int6函數中只接收不解碼子幀數據,以免因解碼運算耗時,影響子幀數據的連續穩定中斷接收,對子幀數據的解碼放在DSP后臺主程序中。

圖3 串口中斷數據接收程序流程圖
嵌入式系統軟件后臺主程序設計如圖4所示:

圖4 DSP后臺運行主程序流程圖
在DSP后臺主程序里,初始化完成后,先通過發送表3中指令來配置OEMstar板卡,再判斷c_int6函數中子幀數據收齊標記是否為已收齊,若收齊則進行子幀解碼,當子幀為觀測數據時,調用自研的單點定位程序進行定位解算,最后將解算結果按自定義二進制格式編碼并通過串口輸出[7]。
2.2.1 GPS模塊子幀數據的解碼實現
GPS導航模塊子幀數據解碼程序的流程圖5所示。與GPS導航模塊子幀數據接收程序相比,還需解碼有效數據類型,并做32位CRC校驗,成功后再判斷有效數據類型來對應解碼觀測數據、星歷數據和電離層數據。
2.2.2 偽距單點定位程序及移植測試
本系統自主研制的單點定位程序使用GPS L1偽距觀測值,并用Klobutchar模型和Hopfield模型分別對電離層和對流層延遲進行模型改正,并考慮地球自轉改正和相對論效應[2,11]。采用標準C語言編寫偽距單點定位程序,移植后按照圖6所示的方式來驗證程序移植的一致性。

圖5 GPS子幀數據的解碼流程圖

圖6 程序移植的一致性驗證流程圖
經過實測表明這兩者在WGS84坐標系三軸方向差異都小于1e-8量級,因此認為程序移植前后是一致的,可以滿足米級精度的偽距單點定位測試。
2.2.3 導航定位結果編碼串口輸出
DSP后臺主程序解算結果以表5所示的二進制子幀格式進行編碼并通過串口輸出。

表5 輸出子幀二進制數據結構
有效數據內容由幀類型決定,幀類型可分為定位、觀測值、星歷、電離層等,這里只列出定位有效數據的具體結構,見表6。
導航定位解算上位機軟件的流程圖如圖7所示。使用Qt的QSerialPort串口類[12]開發的導航定位解算上位機軟件界面如圖8所示,該軟件實現了本系統串口輸出數據的接收解碼與實時顯示,并將結果按http協議通過socket[13]上報到服務器(如nginx)。

表6 定位數據結構

圖7 上位機軟件的流程圖

圖8 上位機定位軟件界面
為了驗證本系統的可靠性和穩定性,于2017-10-24日,使用該系統在武漢大學測繪學院樓頂連續進行了14個小時靜態實驗的數據采集。將本系統的計算結果與由Waypoint IE軟件處理得到的事后精密定位[14]結果在WGS84坐標系下進行詳細對比分析,以評估本系統的精度和性能。另外還實現了將定位結果在百度地圖上的實時顯示。
圖9給出了本次實驗中可見衛星數及位置精度因子(PDOP值)隨時間變化情況。GPS可見衛星數在6~10顆之間變化,均值為7.4顆,PDOP值大約在1~5間變化,均值為2.09,沒有發生過數據中斷情況。

圖9 可見星數和PDOP值
本系統在WGS84坐標系下的定位誤差曲線如圖10所示。可看出在2~12小時內定位精度較為平穩,但在2小時附近,誤差變化比較劇烈,特別在Y軸方向誤差達到近15 m,經分析此時星數只有6顆,且PDOP值較大接近5,同時還發現衛星有較頻繁的升降,因此給定位結果帶來了一定的波動,最后一小時內定位精度波動也是同樣原因。

圖10 偽距單點定位誤差結果
表7在均值、標準差和RMS等指標對誤差特性進行了統計,從均值上看Z方向的誤差最小,X方向大于Y方向,從標準差上看Y方向稍大,X和Z方向基本相近,在XYZ3個方向的RMS分別為1.158 m、1.702 m、1.127 m,其三維誤差RMS為2.347 m。
用后臺語言如PHP編寫用于服務器數據獲取及存儲的接口程序[13],將定位結果實時存儲到服務器上。編寫html程序調用基于JavaScript的百度地圖API和服務器數據獲取接口,通過瀏覽器訪問該html文件,即可實時顯示如圖11的定位結果。另外向該html文件中添加繪制星空圖代碼,利用canvas標簽[15-16]以及坐標映射,還可實時動態顯示如圖12所示的導航星空分布效果圖。

表7 定位誤差統計

圖11 定位結果顯示

圖12 星空分布圖
綜上所述,通過實測驗證了該采集與定位處理系統的可靠性和穩定性,可滿足實驗室測試需求。后續還需提高硬件集成度并優化算法做進一步動態試驗測試,本次研究為后續探索偽距差分、相對定位、GNSS定姿等算法的工程化實踐提供了一定的研究基礎。