1 前言
GPS(全球定位系統)由24顆衛星支持,具備全球性,全天候,連續的導航與定位。由于其高精度,高速度,低成本,使用方便的特點,不僅在軍事上獲得廣泛的關注,在民用部門的應用也越來越多。目前,國內對GPS的應用主要集中在車輛信息服務系統和鐵路、公路施工勘測上。對鐵、公路路線的勘測可分兩種情況,一是建設路線的需要,利用 GPS進行初測導線點與水準點的定位,一是對現有路線通過GPS采集路線數據,還原出實際路線圖。對后一種情況,由于路線采集點密度和測量誤差的因素,在實際應用中,需要利用所得數據進行一定的擬合。
2 課題背景
在國內 ,現有機車頭燈都是固定的,當機車進入彎道時,光線并不能實時照射在前方鐵軌上。設計一種活動頭燈,以機車路線數據為基礎,通過GPS獲得機車當前位置,并實時調整頭燈轉角,可以大大提高機車行車安全。該系統框圖如下:
圖1 機車頭燈控制系統框圖
在車載控制器中,GPS接收機獲得的位置、速度數據與預先存儲的路線數據表進行比較計算,最終得出當前機車所在位置需要發出的控制轉角信號量。預先存儲的路線數據表需要在個人計算機機中提前進行處理,即前言提到的擬合。無論是在車輛信息服務系統還是其他與地理路線相關的應用系統中,路線數據的采集與擬合都是極為重要的環節。
3 GPS數據的采集
GPS接收機接收到的數據是按一定報文格式的數據流以串口方式輸出的。其格式為:
$GP RMC,081546,A,105.7038,N,30.3624,E,0.000,0.0,220406,1.1,W*78
以逗號為分隔符,各數據項依次表示新數據幀的開始標志、格林威治標準時間、數據有效標志、緯度 、南北緯標志 、精度 、東西經標志、移動速度、日期 、磁變、東西磁變標志與校驗和。對于路線的擬合,實際需要的只是每個點的經緯度,為此需要進行提取處理,具體可通過便攜計算機隨車采集,計算機與GPS接收機之間通過串口通信, 通信控制可利用微軟公司的MSCcomm串行通信控件進行簡單靈活的編程,另外也可以直接調用Windows API函數或動態鏈接庫進行更底層豐富的設計。這些方法有很多文章進行專門的論述,本文就該系統實際采用的PC104微型主板通過串口通信的方法做個簡單介紹。PC104微型主板體積小,加上GPS接收機仍然非常小巧,便于攜帶,采集路線數據時置于機車上,采集的數據存儲在自身FLASH上,采集完畢可以通過IDE接口拷貝到個人計算機硬盤上。PC104裝載的是DOS6.0系統, 對串口操作分軟中斷和硬中斷兩種方式,硬中斷相對效率要高些。采用C語言在DOS下進行硬中斷方式的串口通信編程步驟及注意事項如下:
1. 串行通信以通用異步發送/接收器8250進行控制,8250有10個可編程的單字節寄存器,占用7個端口地址,復用地址通過讀/寫操作和線路控制寄存器的第7位來區分。COM1、COM2對應的7個端口地址分別為3F8H~3FEH、2F8H~2FEH。初始化串口主要是寫波特率因子寄存器以設定通信速率,其次是讀取接收寄存器和中斷標志寄存器以清除現有的接收或發送中斷標志。
2. 硬中斷通道IRQ4(COM1)和IRQ3(COM2)分別對應中斷向量0BH和0CH,在載入新的中斷服務程序之前必須獲取并保存原中斷服務程序的入口地址,相應函數為getvect()和setvect()。
3. 中斷控制器8259有兩個口線用作COM1和COM2硬中斷通道,可通過設置其中斷屏蔽寄存器位(bit4對應IRQ4,bit3對應IRQ3)來開啟或屏蔽,中斷屏蔽寄存器的端口地址為21H。每次中斷服務程序返回必須往中斷命令寄存器(地址20H)寫入20H以使8259清除相關寄存器位。
4. 在中斷服務程序中,通過讀取中斷標志寄存器判別中斷類型。按優先級高低依次為:接收出錯中斷、接收到數據中斷、發送寄存器空中斷、MODEM狀態寄存器改變中斷。響應中斷后,8250自動復位中斷標志。
5. 采用硬中斷方式的串口通信必須設置合適的接收和發送緩沖區,緩沖區的讀取和寫入可以通過緩沖區首尾索引變量來操作。
4 三次樣條插值的原理
隨車采集的路線數據是一個個離散的點,對這些點數據進行平滑過渡,形成一條平滑曲線便得到機車行車路線。一般一條機車路線的數據采集點是有限的,對相鄰點進行簡單連線過渡是比較粗糙的。在工程上,通常采取插值的方法來構造曲線,插值也叫擬合。插值有線性插值,立方插值和三次樣條插值等方法。線性插值應用比較廣泛,但它只適用于離散點變化緩和,波動不大的情況,對于波動較大的情況,三次樣條函數具有優良的性能。目前GPS在民用定位上還有5米左右的誤差,考慮到該因素以及采集點相對稀疏,采用三次樣條插值是比較合適的選擇。
樣條也就是彈性細木條或金屬條,早期工程技術人員利用樣條的彈性彎曲使之通過一系列離散點來得到平滑曲線。在數學上,利用樣條函數進行插值的方法即為樣條插值。
假設在區間[a ,b]上,存在n+1個點滿足:a=x0
1. S(x)在區間[xi-1,xi](i=1,2,…,n)上均為三次多項式
2. S(x)通過上述所有節點,即S(xi)=f(xi)=yi(i=0,1,…,n)
3. S(x)存在一階二階導數在區間[a,b]上連續
則S(x)即稱為三次樣條函數,三次樣條函數以多項式的方式表示如下:
S(x)=aix3+bix2+cix+di xi-1
根據條件2和3,可以得出以下兩個方程組:
Si(xi)=aixi3+bixi2+cixi+di=yi
Si(xi-1)=aix i-13+bix i-12+cix i-1+di=y i-1 (i=1,2,3,…,n)
3ai-1x i2+2bi-1x i+ci-1=3aixi2+2bixi+ci
6ai-1x i+2bi-1=6aixi+2bi (i=2,3,4,…,n)
這兩個方程組共有4n個未知系數,確定的方程只有4n-2個,必須附加兩個條件才能求解,為此可根據三次自然樣條插值法,增加兩個自然邊界條件:
S〞(x0)=y0〞=0
S″(xn)=yn″=0
若令Mi=S″(xi),hi=xi-xi-1則
S″(x)=(xi-x)Mi-1/hi+(x-xi-1)Mi/hi (i=1,2,3,…,n)
對上式進行兩次積分得到:
S(x)=(xi-x)Mi-1/hi/6+(x-xi-1)Mi/hi/6+c1(xi-x)+c2(x-xi-1) xi-1
根據條件2,S(x)=yi,可以確定c1,c2,最終得到S(x)表達式:
S(x)=(xi-x)Mi-1/hi/6+(x-xi-1)Mi/hi/6+(xi-x)(yi-1/hi-hiMi-1/6)+(x-xi-1)(yi/hi-hiMi/6)
根據條件3,對上式求左右導數并令其相等,可得到n-1個方程:
hiMi/2-(Mi-Mi-1)hi/6+(yi-yi-1)/hi=-hi+1Mi/2-hi+1(Mi+1-Mi)/6+(yi+1-yi)/hi+1 (i=1,2,3…,n-1)
令ui=hi+1/(hi+hi+1),vi=[(yi+1-yi)/hi+1-(yi-yi-1)/hi]/hi+hi+1,上述方程可簡化為:
(1-ui)Mi-1+2Mi+uiMi+1=vi (i=1,2,3,…,n-1)
再結合考慮兩端邊界條件:2M0+u1M1=v1和unMn-1+2Mn=vn,最后方程矩陣如下:
如果邊界條件假定為如前所述的自然邊界,則u0=0,v0=0,un=0,vn=0,也即M0=Mn=0。
求解方程組得到Mi(i=0,1,2,… ,n),代入S(x)即為相臨兩點間的三次樣條函數,n段三次樣條曲線以已知數據點為臨界銜接點進行連接便可得出一條通過所有數據點的平滑曲線。
5 MATLAB實現樣條插值
在本系統中,路線數據的采集點以經緯度描述,整條路線類似于二維曲線,以實驗測試路段為例,其采集點如下:
表一 路線采集點數據
三次樣條插值過程實質上就是求解三次樣條函數的過程,在實際應用中,首先必須根據具體樣本點情況構造出合適的三次樣條函數,但這需要工程技術人員具備良好的數學功底和數據分析能力。此外,對于離散樣本點較多的情況,編制計算機程序求解大方程組也不簡單。
MATLAB將高性能的數值計算和可視化集成在一起,并提供了大量專業領域的內置函數,從而被廣泛地應用于科學計算、控制系統、信息處理等領域的分析、仿真和設計工作。就數值插值而言,MATLAB提供有一維、二維、三維插值方法,對于一維插值可通過函數interp1(x,y,xi,'method')實現,其中x,y是已知數據點的值,xi是要內插的數據點,method是內插方法,可以指定為一次(linear)、三 次(cubic)方程式或spline函數,其預設方法是linear。如果數據的變化較大,以 spline函數內插所形成的曲線最平滑 ,所以效果最好。而三次方程式所得到的內插曲線平滑度,則介于線性與spline函數之間。
對表一數據進行插值,步驟如下:
1. 分析經緯兩組數據,以相對單調性較好的一組為自變量確定插值精度。表一數據比較簡單,可以經度為自變量,0.1’為步長確定需要內插數據點矩陣(GPS接收機輸出的經緯度數據由度數和分數組合在一起,如10352.0329表示103度52.0329分,在應用中需要統一轉換成以分為單位。本文的實驗測試路線較短,不涉及度數部分的變化,為了直觀,暫不做轉換)。
2. 將已知數據點列成12*2矩陣形式。
3. 調用interp1(x,y,xi,'method')函數,選擇內插方法為spline,所得結果與內插數據點構成2*27矩陣,該矩陣每列上的兩個數據即為擬合路線上位置點經緯度。
對應程序如下:
x=[10352.0329 10352.3988 10353.0197 10353.2919 10353.246 10353.3482 10353.5829 10353.7319 10354.1310 10354.2028 10354.5745 10354.6678; 3018.2936 3018.6298 3018.7247 3019.1021 3019.2701 3019.5516 3019.844 3020.0859 3020.9478 3021.167 3022.5694 3022.7908]';
h= [10352.0329:0.1:10354.6678];%需要內插數據點的矩陣
rlt=[h;interp1(x(1:12),x(13:24),h,’spline’)]
輸出結果:
Rlt=[1.03520329000000 1.03521329000000 1.03522329000000 1.03523329000000 1.03524329000000 1.03525329000000 1.03526329000000 1.03527329000000 1.03528329000000 1.03529329000000 1.03530329000000 1.03531329000000
1.03532329000000 1.03533329000000 1.03534329000000 1.03535329000000 1.03536329000000 1.03537329000000 1.03538329000000 1.03539329000000 1.03540329000000 1.03541329000000 1.03542329000000 1.03543329000000
1.03544329000000 1.03545329000000 1.03546329000000 ; 0.30182936000000 0.30186004069566 0.30187182180522 0.30186964693605 0.30185845969551 0.30184320369097 0.30182882252981 0.30182025981940 0.30182245916710 0.30184036418029 0.30187889352712 0.30192733665639 0.30193266863021 0.30193987411039 0.30199701768689 0.30198992627645 0.30198730620686 0.30200882997022 0.30203060327638 0.30205012896416 0.30207062461427 0.30209530780615 0.30212717111085 0.30216587747376 0.30220651085041 0.30224372965360 0.30227219229616]
由于步長足夠小,產生的數據相對原數據豐富的多,擬合出的路線曲線平滑,這可通過函數plot()進行效果顯示。在具體路線的擬合過程中,可根據GPS數據采集點的密度改變插值步長,以達到實際控制要求。
6 小結
GPS在應用過程中的工作主要集中在定位數據的采集和后續處理,特別是在與GIS(地理信息系統)的結合應用中,為了描繪實際地理形狀或路線,必須采取一定的算法盡量見減小結果誤差。三次樣條插值以其優良的數學特征正好滿足這方面的需求,結合功能強大的MATLAB工具,其實現簡單方便,大大提高了相關設計目標的質量。
論文創新點:結合串行通信和三次樣條插值,實現簡便高效的GPS道路路線測繪。
參考文獻:
1. 袁安存.全球定位系統(GPS)原理與應用.大連海事大學出版社.1999
2. 張維維,謝忠.GPS信號在嵌入式GIS中的處理和應用.現代計算機.2004,No12
3. 宋秀琴等.直線擬合算法在車輛監控系統中的研究與實現.微計算機信息.2005,Vol21,No12
4. 宋又廉. 基于三次樣條插值的采樣數據光滑曲線形成法.數據采集與處理.1999,Vol.14,No.2