范志兴,翟 肖,王忠友
(湖北科技学院 计算机科学与技术学院,湖北 咸宁 437100)
GPS定位技术广泛应用于飞机、船只、车辆等可移动和需移动的设备、设施和物品中,进行定位、导航和监控[1~4]。随着我国各种交通设施的完备、物品运输的需要,便携式的实时的导航和监控设备越来越受到人们的普遍关注[5~7]。这种便携式的GPS定位导航监控系统往往基于嵌入式芯片中开发,如有基于单片机、基于FPGA、基于DSP、基于ARM等开发的GPS系统[8,9],而ARM由于性价比较高成为广大开发者首选的核心部件,本文介绍的便是基于ARM11芯片基础上开发的一种便携式、有定位和监控报警功能的GPS系统。
该系统包括以三星ARM芯片S3C6410为主要核心芯片的控制模块、接收全球定位信号的GPS模块、显示用的液晶显示模块、DM9000的网络接口模块,启动和程序用的Nand flash和64MB的SRAM。系统硬件结构图如图1所示。
系统工作过程是:GPS模块从卫星上获取当时所处地理位置经纬度数据(数据格式遵从NEMA0183协议[10,11]),通过串口将数据导入ARM系统进行处理,处理后的数据一方面送到有地图的液晶显示屏进行定位;另一方面通过DM9000网卡芯片处理后与PC系统监控端相互通信,传递定位地点信息和控制命令。本系统开发采用开源的linux系统。
本系统主要目标是在ARM11开发板的液晶显示屏上实现定位信息显示和导航线路提示,并将相应信息提供给PC端监控。为此系统中GPS数据采集、地图信息显示、导航路径计算和系统监控均需通过软件实现。在Linux环境中,利用QT开发平台编写完成上述有关功能。本系统采用多线程的程序设计思想,一方面在显示定位数据和导航的同时与PC完成数据通信。通过定时器实现定位数据的更新和数据的发送。具体的程序工作流程如图2所示。
图2 程序工作流程图
1.GPS数据的获取
本系统中对GPS数据的获取是使用韩国产的GPS模块,其接口使用的是串转USB的接口形式,对该USB接口的驱动操作,可以像操作串口一样操作该模块。在QT中,对串口的操作,常用的Posix_QextSerialPort类来实现,程序中只需要对串口的参数进行设置,然后打开串口设备,再对串口进行读写即可。主要代码如下:
myCom=new Posix_QextSerialPort(“/dev/ttyUSB0”,QextSerialBase::Polling); //打开设备
myCom->open(QIODevice::ReadWrite); //设置USB转串口的一些参数
myCom->setBaudRate(BAUD9600); //设置波特率
myCom->setDataBits(DATA_8); //设置数据位
myCom->setParity(PAR_NONE); //设置校验位
myCom->setStopBits(STOP_1); //设置停止位
本系统中用到GPS定位数据是遵从NMEA0183协议的GPGGA格式,提取GPGGA格式输出数据的主要代码如下:
myCom->readData(temp,340);
for(i=0;i { if(temp[i]=='G'&&temp[i+1]=='G'&&temp[i+2]=='A') {//通过循环找到GGA标志 int start=i+15; for(int j=0;j<10;j++) latitude[j]=temp[start+j]; latitude[9]=' '; for(int k=0;k<11;k++) longitude[k]=temp[start+12+k]; longitude[10]=' '; } } 将读取到的经纬度坐标数据存放在字符串变量longitude和latitude中。 2.导航设计 本系统采用迪杰斯特拉算法(又称最短路径算法)[12],是在一个有向图结构中找到从一个端点到其余各个端点的最短路径的算法。 迪杰斯特拉算法描述: (1)假设用带的邻接矩阵arcs来表示带权有向图,arcs[i][j]表示弧< >上的权值。若< >不存在,则置arcs[i][j]为∞(在计算上可用允许的最大值代替)。S为已找到从v出发的最短路径的重点的集合,它的初始状态为空集。那么,从v出发到图上其余个顶点(终点) 可能达到的最短路径长度的初值为: D[i]=arcs[locate Vex(G,v)[i]] ∈ V (1) (2)选择 ,使得 D[j]=Min{D[i]| ∈V-S} (2) 就是当前求得的一条从v出发的最短路径的重点。令 S=S∪{j} (3) (3)修改从v出发到集合V-S上任意顶点可达的最短路径长度。如果 D{j}+arcs[j][k] (4) 则修改D[k]为 D[k]=D[j]+arcs[j][k] (5) (4) 重复操作(2),(3)n-1次。由此求得从v到图上其余个顶点的最短路径是依路径长度递增的序列。 本算法通过逐次寻找当前顶点到达其余各点的最短路径的思想,逐步扩充已经找到最短路径的顶点的范围,直到涵盖到地图数据库中所有的定位点。 3.Sqlite3数据库操作 本系统为了导航,要进行GPS定位数据查询,使用的数据库是Sqlite3[13]。Sqlite3是一小型专用于嵌入式的数据库,该数据库为用户提供的头文件主要包含有四个函数,即sqlite3_open(),sqlite3_close(),sqlite3_exec(),sqlite3_get_table()函数。 在使用sqlite3的库函数之前,首先需要在QT工程的.pro文件中引入sqlite3的动态库:LIBS += -LD:/lib/libsqlite3.so。sqlite3。嵌入式数据库不同于常用的数据库,它的查询功能只能通过sqlite3_get_table()函数将所有元组以字符串数组的形式返回,要查找指定的元组,只能通过类似数组的关系定位元组的位置,代码如下: char *sql=“SELECT * FROM position”; //SQL语句 sqlite3_get_table(gps,sql,&azResult,&nrow,&ncolumn,&errMsg); //读取数据库中数据 for( i=0;i<( nrow + 1 ) * ncolumn ; i++ ) //循环读取表中的内容 if(strcmp(azResult[i],longtitude)&&strcmp(azResult[i+1],latitude)); 监控系统包括定位仪端的监控和PC机端的监控,并且他们之间是相互通信的,定位仪像PC端发送定位地点数据。PC端向定位仪发送控制命令,如果没有异常发生,发送的将是“normal”信号,有异常发生时,由用户控制发送报警命令。 1.定位仪端监控 只有在成功定位的时候才能够使用导航功能,因为在定位仪无法定位的时候,不知道自身所在的地点,从而无法确定到地图中的某个地方的最短路径。为了防止用户的误操作,在无法定位的时候,如用户使用导航功能,将会弹出无法定位的警告窗口。具体的软件设计流程如图3所示。 2.PC端监控 程序启动后试图通过TCP/IP协议连接服务器,连接失败则弹出对话框提示用户。成功连接,定位仪端的LED灯将会以程序设定的方式流动起来。接着PC端监控软件能通过获取定位仪发送过来的location数据,找到定位点显示在地图上。另外还可以通过定位仪发送过来的定位数据记录定位目标的移动轨迹,程序运行流程如图4所示。 将USB接口的GPS模块插上6410开发板,将6410开发板的网口与PC的网口用网线直接相连。修改linux系统的配置文件,将GPS定位程序设置为开机启动,由于定位需要实地采集经纬度数据,限于实际原因,只选取校内的几个地点来实现定位和导航功能,地图是截取的google地图上的相应地点的卫星图片。图5所示为学校学生宿舍阳台上测试的定位数据和在数据库中匹配到的相应地点信息。 程序中还设置了相应判断,如果无法定位,将不能使用导航功能,定位后可使用。通过触屏点击要到达的地点按钮,在文本框会显示目标地点的信息,点击“GO”按钮,在文本框中将输出计算得到的最短路径结果。 本文基于ARM开发板和GPS模块进行GPS定位系统的研究与设计,采用迪杰斯特拉导航算法。在ARM11上进行linux内核移植,根文件系统的制作以及一些相关应用软件的移植,如SQLite3数据库、QTE等,并使用QTE开发出图形界面软件。在VC上编写PC端监控程序,实现实时监控和记录监控目标的移动轨迹的功能,实现了GPS定位导航功能的目标,并且能够远程监测。 参考文献: [1]GPS.维基百科[EB/OL].http://zh.wikipedia.org/wiki/%E5%85%A8%E7%90%83%E5%AE%9A%E4%BD%8D%E7%B3%BB. [2]罗攻坤,潘绍明,陈政强,等.基于ARM的GPS定位信息系统设计与实现[J].嵌入式技术,2009,32(9):114~117. [3]刘国锦,周波.GPS远端定位监控系统的设计[J].电子工程师,2007,33(8):47~50. [4]Wang.B,Jia.X.D.The System of GPS Navigation Based on ARM Processor[J].International Forum on Information Technology and Applications,2010,3(5):308-312. [5]潘成源.基于ARM的嵌入式linux的车载导航系统研究[D].长沙:湖南大学,2005. [6]刘瑞华.MCS-51单片机与GPS-OME板的串行通信[J].电讯技术,2004,44(5):93~96. [7]杨永,杜文龙.51单片机接收GPS数据的算法与实现[J].现代电子技术,2008,31(22):50~52. [8]王忠,刘光赋,张博.基于DSP+FPGA的多频GPS接收机系统设计[J].计算机测量与控制,2010,18(8):1 919~1 923. [9]Zhu Y.Y,Liu Y.R.Application of GPS technology in high cut slope safety monitoring[J].Hydro-Science and Engineering,2009,9(3):103~105. [10]钱德俊,张哲,胡晨.NMEA0183协议解析[J].电子器件,2007,2(30):698~701. [11]何香玲,郑钢.GPS通信的NEMA协议及定位数据的提取[J].计算机应用与软件,2004,21(12):112~114. [12]张歆奕,吴今培,张其善.车载导航仪中路径规划算法及其实现[J].计算机自动测量与控制,2001,9(4):15~17. [13]张广斌,宫金林,陈爽.SQLite嵌入式数据库系统的研究与实现[J].单片机与嵌入式系统应用,2008,(6):11~13.三、监控程序设计
四、运行与测试
五、结语