基于PXA270嵌入式开发板GPS定位系统的设计
2011-04-23郭堃
郭 堃
基于PXA270嵌入式开发板GPS定位系统的设计
郭 堃
仰恩大学计算机与信息学院
随着GPS推广应用,嵌入式GPS系统是目前的一个发展趋势。GPS模块结合PXA270嵌入式开发系统对GPS信号进行处理,对电子地图进行定位、重构并最终显示在LCD上。
GPS PXA270 嵌入式 定位
作为一种成熟的卫星导航系统,GPS具有性能好、精度高、应用广的特点,是迄今为止应用最多的导航定位系统。把GPS与嵌入式技术融合在一起,形成一个嵌入式的地理平台,是当前GPS领域的一个重要趋势。本文是在PXA270嵌入式开发板和GPS模块上开发实现。在Linux下的嵌入式开发环境中利用C++设计完成定位。嵌入式系统利用软件设计主要完成GPS定位信号的处理、电子地图的移植、地球坐标的转换、定位的显示等功能。
1 系统概述
嵌入式系统是控制、监视或者辅助装置、机器和设备运行的装置。嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统有着无法比拟的友好人机界面,对于LCD及GPS模块有很好的支持。嵌入式系统主要完成提取GPS定位信号的数据、坐标转换、电子地图的显示等功能。软件设计流程如图1所示。
图1 设计流程图
2 嵌入式系统软件设计
2.1 GPS模块输出的信息的提取
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)];
…}
2.2 坐标转换
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;…
2.3 电子地图重构
一般来说,电子地图包含的数据格式都不能直接用在嵌入式平台,所以需要对电子地图的数据进行提取、存储、重构[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所示。
图3 仿真测试
4 结论
整个测距定位系统在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.