郭 堃
?
基于PXA270嵌入式開發(fā)板GPS定位系統(tǒng)的設(shè)計
郭 堃
仰恩大學(xué)計算機與信息學(xué)院
隨著GPS推廣應(yīng)用,嵌入式GPS系統(tǒng)是目前的一個發(fā)展趨勢。GPS模塊結(jié)合PXA270嵌入式開發(fā)系統(tǒng)對GPS信號進行處理,對電子地圖進行定位、重構(gòu)并最終顯示在LCD上。
GPS PXA270 嵌入式 定位
作為一種成熟的衛(wèi)星導(dǎo)航系統(tǒng),GPS具有性能好、精度高、應(yīng)用廣的特點,是迄今為止應(yīng)用最多的導(dǎo)航定位系統(tǒng)。把GPS與嵌入式技術(shù)融合在一起,形成一個嵌入式的地理平臺,是當(dāng)前GPS領(lǐng)域的一個重要趨勢。本文是在PXA270嵌入式開發(fā)板和GPS模塊上開發(fā)實現(xiàn)。在Linux下的嵌入式開發(fā)環(huán)境中利用C++設(shè)計完成定位。嵌入式系統(tǒng)利用軟件設(shè)計主要完成GPS定位信號的處理、電子地圖的移植、地球坐標的轉(zhuǎn)換、定位的顯示等功能。
嵌入式系統(tǒng)是控制、監(jiān)視或者輔助裝置、機器和設(shè)備運行的裝置。嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。嵌入式系統(tǒng)有著無法比擬的友好人機界面,對于LCD及GPS模塊有很好的支持。嵌入式系統(tǒng)主要完成提取GPS定位信號的數(shù)據(jù)、坐標轉(zhuǎn)換、電子地圖的顯示等功能。軟件設(shè)計流程如圖1所示。
圖1 設(shè)計流程圖
GPS模塊上電后,會自動搜索衛(wèi)星信號,并且把計算好的數(shù)據(jù)從串口輸出。所有GPS接收機最通用的數(shù)據(jù)輸出格式是NMEA[1]。NMEA-0183協(xié)議定義的語句非常多,但是常用的或者說兼容性最廣的語句只有:$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。如圖2。
圖2 數(shù)據(jù)塊
用串口連接宿主機與開發(fā)板的串口0。宿主機進入LINUX,打開Minicom終端。設(shè)置波特率115200,8位數(shù)據(jù),1位停止,無校驗,無流控。串口的設(shè)備文件為/dev/ttyS*,其中,ttyS0為串口一,ttyS1為串口二,以此類推。在對串口通信之前,首先要對串口參數(shù)進行初始化、設(shè)置它的屬性以保證通信雙方的通信參數(shù)保持一致。初始化完串口,就可以進行讀取操作了。由于GPS發(fā)送的數(shù)據(jù)類型都是以&GPGGA符號開頭,所以檢測&GPGGA符號,進而進行下一步的處理。關(guān)鍵代碼如下:
…
if (c==’c’)
{GPS->latitude=get_double_number(&buf[GetComma(3,buf)]);
GPS->NS =buf[GetComma(4,buf)];
GPS->longitude=get_double_number(&buf[GetComma(5,buf)]);
GPS->EW =buf[GetComma(6,buf)];
…}
GPS模塊輸出的地理坐標是WGS-84坐標系。而國內(nèi)地圖一般是以54北京坐標系作高斯-克呂格平面投影。所以必須作一個坐標轉(zhuǎn)換,即將GPS坐標(WGS-84坐標系)轉(zhuǎn)換到電子地圖坐標(54北京坐標系)。坐標轉(zhuǎn)換的具體步驟:
(1)空間直角坐標轉(zhuǎn)換成國家大地坐標,國家大地坐標轉(zhuǎn)換成地圖平面坐標。
(2)x,y的具體推算過程很復(fù)雜,在這里就不全部列舉出來,只給出結(jié)果:
(3)地圖平面坐標轉(zhuǎn)換成屏幕坐標。例如,地圖比例尺為1:k,窗口要顯示的區(qū)域長、寬各為M、Nkm,窗口像素點位A*B點,則定位數(shù)據(jù)xs,ys(平面高斯坐標)在窗口上坐標分別為:
下面給出部分代碼:
#include "stdlib.h"
const double a=6378137.0;
const double flattening=1/298.257223563;
const double delta=0.0000001;
typedef struct tagCRDCARTESIAN{
double x;
double y;
double z;
}CRDCARTESIAN;
typedef CRDCARTESIAN *PCRDCARTESIAN;…
一般來說,電子地圖包含的數(shù)據(jù)格式都不能直接用在嵌入式平臺,所以需要對電子地圖的數(shù)據(jù)進行提取、存儲、重構(gòu)[3]。目前主要使用的是桌面電子地圖系統(tǒng)MapInfo。MapInfo是美國MapInfo公司的桌面地理信息系統(tǒng)軟件,是一種數(shù)據(jù)可視化、信息地圖化的桌面解決方案。MapInfo數(shù)據(jù)格式主要分為TAB和MIF兩種格式。 MIF格式是MapInfo公司提供的一種與外界交換數(shù)據(jù)的機制。它主要用來保存空間對象的幾何數(shù)據(jù)。將電子地圖的數(shù)據(jù)讀出后,再在嵌入式平臺下,用繪圖工具重新組成電子地圖即可。下面給出一部分實現(xiàn)代碼:
…
int n;
int x,y; …
fopen("D:\\data\\XXXX.mif","r");
while(!feof(fp2))
{ fscanf(fp2,"%s",str);
if(strcmp(str,"pline")==0)
{fscanf(fp2,"%d",&n); …
void CMapText::Draw(CDC *pDC)
{ long x1, y1;
long x2, y2;
long fontheight;
m_pDoc->ConvToXY(m_fMaxX, m_fMaxY,x2, y1);
m_pDoc->ConvToXY(m_fMinX, m_fMinY, x1, y2);
m_pDoc->LPtoDP(x1, y1);
m_pDoc->LPtoDP(x2, y2);
CRect rect(x1, y1, x2, y2);//
fontheight=rect.Width() * 2 / m_strText.GetLength();
…}
點測試,線測試,面測試如圖3所示。
圖3 仿真測試
整個測距定位系統(tǒng)在PXA270嵌入式開發(fā)系統(tǒng)下完成,工程系統(tǒng)比較龐大,整個系統(tǒng)基本功能已實現(xiàn),由于本系統(tǒng)軟硬件平臺有很強的升級能力,許多指標與功能可以進一步完善與提高。GPS定位數(shù)據(jù)到電子地圖數(shù)據(jù)的轉(zhuǎn)換,需要一系列復(fù)雜的算法。該算法有待進一步改進和簡化,以提高系統(tǒng)運行效率和數(shù)據(jù)準確性。
[1] 田家林,陳利學(xué),寇向輝.LINUX嵌入式操作系統(tǒng)在ARM上的移植[J].微計算機信息,2007,23(4):60-61.
[2] 陳未峰,李兵.ARM-Linux平臺下GPS信號的采集與處理研究[J].信息化縱橫,2009,(13): 41-44.
[3] 胡菲菲.SQLite在嵌入式電子地圖中的應(yīng)用[J].工程地質(zhì)計算機應(yīng)用,2008,(2): 31-36.