郭 堃
?
基于PXA270嵌入式開發板GPS定位系統的設計
郭 堃
仰恩大學計算機與信息學院
隨著GPS推廣應用,嵌入式GPS系統是目前的一個發展趨勢。GPS模塊結合PXA270嵌入式開發系統對GPS信號進行處理,對電子地圖進行定位、重構并最終顯示在LCD上。
GPS PXA270 嵌入式 定位
作為一種成熟的衛星導航系統,GPS具有性能好、精度高、應用廣的特點,是迄今為止應用最多的導航定位系統。把GPS與嵌入式技術融合在一起,形成一個嵌入式的地理平臺,是當前GPS領域的一個重要趨勢。本文是在PXA270嵌入式開發板和GPS模塊上開發實現。在Linux下的嵌入式開發環境中利用C++設計完成定位。嵌入式系統利用軟件設計主要完成GPS定位信號的處理、電子地圖的移植、地球坐標的轉換、定位的顯示等功能。
嵌入式系統是控制、監視或者輔助裝置、機器和設備運行的裝置。嵌入式系統是軟件和硬件的綜合體,還可以涵蓋機械等附屬裝置。嵌入式系統有著無法比擬的友好人機界面,對于LCD及GPS模塊有很好的支持。嵌入式系統主要完成提取GPS定位信號的數據、坐標轉換、電子地圖的顯示等功能。軟件設計流程如圖1所示。

圖1 設計流程圖
GPS模塊上電后,會自動搜索衛星信號,并且把計算好的數據從串口輸出。所有GPS接收機最通用的數據輸出格式是NMEA[1]。NMEA-0183協議定義的語句非常多,但是常用的或者說兼容性最廣的語句只有:$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。如圖2。

圖2 數據塊
用串口連接宿主機與開發板的串口0。宿主機進入LINUX,打開Minicom終端。設置波特率115200,8位數據,1位停止,無校驗,無流控。串口的設備文件為/dev/ttyS*,其中,ttyS0為串口一,ttyS1為串口二,以此類推。在對串口通信之前,首先要對串口參數進行初始化、設置它的屬性以保證通信雙方的通信參數保持一致。初始化完串口,就可以進行讀取操作了。由于GPS發送的數據類型都是以&GPGGA符號開頭,所以檢測&GPGGA符號,進而進行下一步的處理。關鍵代碼如下:
…
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坐標系。而國內地圖一般是以54北京坐標系作高斯-克呂格平面投影。所以必須作一個坐標轉換,即將GPS坐標(WGS-84坐標系)轉換到電子地圖坐標(54北京坐標系)。坐標轉換的具體步驟:
(1)空間直角坐標轉換成國家大地坐標,國家大地坐標轉換成地圖平面坐標。
(2)x,y的具體推算過程很復雜,在這里就不全部列舉出來,只給出結果:

(3)地圖平面坐標轉換成屏幕坐標。例如,地圖比例尺為1:k,窗口要顯示的區域長、寬各為M、Nkm,窗口像素點位A*B點,則定位數據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;…
一般來說,電子地圖包含的數據格式都不能直接用在嵌入式平臺,所以需要對電子地圖的數據進行提取、存儲、重構[3]。目前主要使用的是桌面電子地圖系統MapInfo。MapInfo是美國MapInfo公司的桌面地理信息系統軟件,是一種數據可視化、信息地圖化的桌面解決方案。MapInfo數據格式主要分為TAB和MIF兩種格式。 MIF格式是MapInfo公司提供的一種與外界交換數據的機制。它主要用來保存空間對象的幾何數據。將電子地圖的數據讀出后,再在嵌入式平臺下,用繪圖工具重新組成電子地圖即可。下面給出一部分實現代碼:
…
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 仿真測試
整個測距定位系統在PXA270嵌入式開發系統下完成,工程系統比較龐大,整個系統基本功能已實現,由于本系統軟硬件平臺有很強的升級能力,許多指標與功能可以進一步完善與提高。GPS定位數據到電子地圖數據的轉換,需要一系列復雜的算法。該算法有待進一步改進和簡化,以提高系統運行效率和數據準確性。
[1] 田家林,陳利學,寇向輝.LINUX嵌入式操作系統在ARM上的移植[J].微計算機信息,2007,23(4):60-61.
[2] 陳未峰,李兵.ARM-Linux平臺下GPS信號的采集與處理研究[J].信息化縱橫,2009,(13): 41-44.
[3] 胡菲菲.SQLite在嵌入式電子地圖中的應用[J].工程地質計算機應用,2008,(2): 31-36.