GPS应用开发设计文档

上传人:夏** 文档编号:465774317 上传时间:2023-01-27 格式:DOCX 页数:11 大小:69.32KB
返回 下载 相关 举报
GPS应用开发设计文档_第1页
第1页 / 共11页
GPS应用开发设计文档_第2页
第2页 / 共11页
GPS应用开发设计文档_第3页
第3页 / 共11页
GPS应用开发设计文档_第4页
第4页 / 共11页
GPS应用开发设计文档_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《GPS应用开发设计文档》由会员分享,可在线阅读,更多相关《GPS应用开发设计文档(11页珍藏版)》请在金锄头文库上搜索。

1、GPS模块应用GPS (全球定位系统)接受硬件上已经模块化,这里主要基于我使用过的u-bloxTIMGPS (以下简称 TimGPS)来介绍。TimGPS模块如图(几乎是1:1比例):此模块提供和GPS卫星通信的功能,对外提供FFC20接口,可以给它增加电源,接口板,串口模块, 使之可以通过串口和计算机连接。如何开发串口程序在本文中不再介绍,无论在windows/linux下开发串口串口程序都是很简单的事 情。TimGPS对外提供标准NMEA协议和厂家自己的SiRF二进制协议。1.1 NMEA(National Marine Electronics Association) 0183协 议NM

2、EA 0183是一种航海、海运方面有关于数字信号传递的标准,此标准定义了电子信号所需要的传输协议,传输数据时间。这个协议是文本格式的。大致如下StartSequencePayloadChecksumEndSequence消息头消息体,具体数据和NMEA消息字相关, 数据之间用逗号(,)间隔。2243.4976,N,11414.7289,E,091828.819,A校验 码,格式为 *16进制 数如*2C回车换行4协议头,格式为输出:$GPxxx,xxx为输出消息字如GLL.输入:$PSRFMID为输入消息字.111NMEA协议输出和输入消息NMEA协议有以下输出消息消息字内容GGA时间,位置,

3、定位数据GLL经纬度,UTC格式时间,位置和状态数据GSA接收机模式和卫星工作数据,包括位置和水平/竖直稀释精度等。稀释精 度(Dilution of Precision)是个地理定位术语.一个接收器可以在同一时间 得到许多颗卫星定位信息,但在精密定位上,只要四颗卫星讯号即已足够了GSV接收机能接收到的卫星信息,包括卫星ID,海拔,方位角,信噪比等MSS信号比(SNR),信号强度,频率,比特率RMC日期,时间,位置,方向,速度数据。是最常用的一个消息VTG相对地面的方向和速度数据ZDA时间和日期数据。和地理信息密切的相关的消息如下,各消息之间包含的信息字段有出入也有重复,在一轮消息循环 里,各

4、消息相同的字段中包含相同的地理数据。可以综合多个消息,来获取完整的数据。以下为u-lox厂商扩充的输出消息PSRF150OK-to-send指令,在节电模式中表示进入工作状态PSRF161硬件状态报告工作在NMEA模式时,TimGPS可以有以下输入消息.输入消息一般是用于控制GPS的运行的。消息字内容100设置串口参数和协议101XYZ导航坐标初始化。输入参数按WGS84坐标系确定102设置DGPS端口1设置或查询数据输出频率。可以设置每个NMEA消息的是否输出和输03出频率104输入当前经纬度和海拔来初始化模块105开发调试数据开关106(u-blox)可以改变大地基准坐标系,默认是WGS-

5、84坐标系107(u-blox)配置节电模式108(u-blox)进入下载模式,更新FlashMSK设置MSK信号接收机参数每个协议的具体格式,可以到网上下载具体的NMEA协议。最好将所有的消息输出速率设置为相同的(使用输入指令103),或者根据具体情况打开或关闭一些 不不需要的消息。消息里各字段的格式都不复杂,以下几个稍微注意: 经纬度的表示法为ddmm.mmmm和方向指示,以纬度举例:当纬度为9730.765,方向指示为N,则表示 为北半球的97度30.765分.有的地理信息组件使用经纬度的时候不用度分秒表示法,而是用浮点数 表示法,那么97度30.765分就约等于97.5(97+30.7

6、65/60)度。 方向角以正北向为0度,正东向为90度,也就是顺时针方向从0度增加到359度 校验码为一个消息包(包括消息头和体)里每个ASCII字符的值依次进行异或得到,算法(C+代码) 如下unsigned char CheckSum(string s)unsigned char c = 0;for(int o=l;oS SIZE();O+) SPANunsigned char h = so;c = h;return c;sprintf(StrCheckSum,*%02X,CheckSum(data);一般的地理数据,只取RMC消息包就够了,如果还需要其他的数据,比如当前卫星数,卫星状态等

7、 等,又或者接受机本身关闭了 RMC消息包,只输出其他的消息包,那么就需要解析其他消息包。应用程序逐行分析消息包。我的做法是先将消息包按逗号分割原则解析成一个字符数组,然后根据 包头指令字,按协议含义取数组里的字符串。ParseMessage(sMessage,Array); /将一行消息解析到字符串数组Array里if (Array0.CompareTo($GPRMC) =0) /是 RMC 消息if(Array.size()!=12) /要求有 12 个字段return -1;/以下依次填充RMC数据结构recRMC RmcRmc.UTCTimeArrayl;Rmc.StatusStr2C

8、har(Array2);Rmc.LatitudeArray3;Rmc.Latitude.Dirlndicator =Str2Char(Array4);Rmc.LongitudeArray5;Rmc.Longitude.Dirlndicator =Str2Char(Array6);Rmc.SpeedOverGroundStr2Num(Array7);Rmc.CourseOverGroundStr2Num(Array8);Rmc.Date=Array9;Rmc.MagneticO=Str2Char(Array10);Rmc.Checksum=(int)Str2Hex(Arrayll);/检查 Ch

9、eckSum,return CheckSum(Rmc.CheckSum,sMessage);以类似的方法构造解析其他消息的函数。组消息包则是依次将字段转成字符串连接起来,最后附加 校验码即可。1.2 SiFR 协议.SiFR协议是GPS模块厂商制定的二进制协议,提供了对GPS模块操作的更多接口,厂家号称此协议(用于操作本家的模块)更稳定,更高效,更容易操作。1.2.1协议格式消消息消息体校消息息头体长度验码结束符双字节双字节0双字长度小于1023字节双xA0节的数据字节0xB000xB3xA2具体消息格式可以参考厂家提供的协议文档(GPS.G2-X-01003-E.pdf)。1.2.2日志操作

10、SiFR包括了读取地理数据,刷写Flash,配置GPS模块参数,读取/擦写日志等一系列的操作。以日 志操作最为有用。TimGPS可以脱离计算机运行,将所到之处的地理信息保存在内部存储器里,然后再接上 计算机,获取地理信息日志,得到携带该GPS的载体在一段时间里运行轨迹。读取Log的大致过程是:读取Log Sector信息,得到最小Sector号和最大Sector号,依次发指令读取每个Sector的Log 信息,并解析转换成NMEA协议消息。擦除Log时,虽然u-blox提供了全部擦除指令,实际应用的时候发现该指令成功率不高。还是依次 发指令逐个擦除比较好。TimGPS 的 log 格式定义在厂

11、家提供的 TIM_Data_Logger_Manual(GPS.G2-SW-02015).pdf 里。日志中包含的消息如下消息号消息名字节数内容111NONE1无数据100FIX_FULL9全部地理定位信息100FIX_INCL5地理定位信息,增量数据0FIX_INC4地理定位信息,增量数据,在字节上比FIX_INCL少一00M个110FIX_INCS3地理定位信息,增量数据,使用更少的字节数1GPIO_FU301LL0GPIO IN211C0ESCAPE不01定GPIO数据,增量数据用于扩展以上所有消息都是二进制编码,按位存储,解析消息需要使用二进制位操作。消息解析成功后,u-blox建议按

12、以下逻辑处理这些消息WHILE (Data)读入新数据-获取消息类型,并根据消息类型得到对应消息的字节数IF (Type = EMPTY) THEN 空数据,跳过ELSE IF (Type = FIX_FULL) THEN -保存时间信息,保存位置,速度和其他模式信息ELSE IF (Type = FIX_INCL) OR (Type = FIX_INCM) OR (Type = FIX_INCS) THEN-将时间和位置增量数据叠加到最近一个定位记录上,保存速度数据ELSE IF (Type = GPIO_FULL) THEN 保存时间和 GPIO 数据ELSE IF (Type = GPI

13、O_INC) THEN -叠加时间到最近一个GPIO数据的时间字段上,保存GPIO数据ELSE IF (Type = ESCAPE) THEN 处理自定义数据END IFEND WHILE要得到经纬度和海拔(LLA: Longitude/Latitude/Altitude)坐标,需要一些椭球体、基准面及地图 投影的知识。后来从网上找到一个Fortune77写的WGS84-GLL换算函数,将其转成C/C+的函数:void wgsxyz2lla(double x,double y,double z,double *lat,double *lon,double *alt)double pi = 3.

14、14159265357;longA_EARTH = 6378137;double flattening = 1/298.257223563;double NAV_E2 = (2-flattening)*flattening; / also e2double rad2deg = 180/pi;double wlon,wlat,walt,rhosqrd,rho,templat,tempalt,rhoerror,zerror;double slat,clat,q,r_n,drdl,invdet,aa,bb,cc,dd;if (x = 0.0) & (y = 0.0)wlon = 0.0;elsewlon = atan2(y, x)*rad2deg;printf(WGS xyz at center of earth);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号