当前车联网领域研究一款智能小设备,可以用于对车辆的运行轨迹和三急数据的采集,需要用到相关的传感器。说道传感器,就有相关的datasheet要读了,为了确定智能设备和后台管理系统之间的数据传输报文格式,这里就有对相关的数据格式要有一点研究。
GPS的接收器芯片有很多,我这里就结合MTK的MT3337V/B为目标,相关的文档,自己可以去我网盘下载(https://pan.baidu.com/s/1JiCKBQq_Tk2WdqCiKVIKZg,提取码:upq8)。这款接收器的数据采集格式,完全符合NMEA-0183的规范,采集到的数据都是标准的ASCII码,结合业务的需要,我们可以重点关注自己感兴趣的部分。
GPS发送数据以行为单位,数据格式如下:
$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x
每行以字符”$”开头,以<CR><LF>为结尾,CR—Carriage Return,LF—Line Feed,表示回车和换行,这些都是NMEA-0813的规范定义的。信息类型有以下几种
信息类型 | 英文语义 | 中文语义 |
GPRMC | Recommended Minimum Specific GPS/TRANSIT Data(RMC) | 推荐定位信息 |
GPVTG | Track Made Good and Ground Speed(VTG) | 地面速度信息 |
GPGGA | Global Positioning System Fix Data(GGA) | 全球定位信息 |
GPGSA | GPS DOP and Active Satellites(GSA) | 当前卫星信息 |
GPGSV | GPS Satellites in View(GSV) | 可见卫星信息 |
GPGLL | Geographic Position(GLL) | 地理定位信息 |
首先,对于NMEA-0183规范做一点简单的介绍(GPS接收器采集的数据都准守这个规则):
下面,这个图可以看出,NMEA-0183不仅仅是针对GPS,还支持很多其他的通信协议的规范支持!
这里的GP就是GPS接收器采集的数据中$GP部分,后面可以带上前文表格中的RMC,VTG等等,所谓的sentence identifier。下面看看RMC这个sentence identifier的相关介绍。
因为我们的采集设备中,要采集经纬度,以及地面速度(节),所以,这个RMC的信息足够,其他的部分,这里不做介绍,可以自行从NMEA-0183里面阅读。
数据详解:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC 时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5>经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7>地面速率(000.0~999.9节,前面的0也将被传输)
<8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC 日期,ddmmyy(日月年)格式
<10>磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
详细说明:
1.时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成北京时间(BTC),BTC和UTC差了8个小时,要在这个时间基础上加8个小时。
2. 定位状态,在接收到有效数据前,这个位是‘V’,后面的数据都为空,接到有效数据后,这个位是‘A’,后面才开始有数据。
3. 纬度,我们需要把它转换成度分秒的格式,计算方法:如接收到的纬度是:4546.40891
4546.40891/100=45.4640891可以直接读出45度, 4546.40891–45*100=46.40891, 可以直接读出46分
46.40891–46 =0.40891*60=24.5346读出24秒, 所以纬度是:45度46分24秒。
4. 南北纬,这个位有两种值‘N’(北纬)和‘S’(南纬)
5. 经度的计算方法和纬度的计算方法一样
6. 东西经,这个位有两种值‘E’(东经)和‘W’(西经)
7.速率,这个速率值是海里/时,单位是节,要把它转换成千米/时,根据:1海里=1.85公里,把得到的速率乘以1.85。
8. 航向,指的是偏离正北的角度
9. 日期,这个日期是准确的,不需要转换
这里关于GPS的经纬度信息,有些小知识需要注意:
全球经纬度的取值范围为:纬度-90~90,经度-180~180 中国的经纬度范围大约为:纬度3.86~53.55,经度73.66~135.05 北京行政中心的纬度为39.92,经度为116.46 越北面的地方纬度数值越大,越东面的地方经度数值越大 度分转换: 将度分单位数据转换为度单位数据,公式:度=度+分/60 例如: 经度 = 116°20.12',纬度 = 39°12.34' 经度 = 116 + 20.12 / 60 = 116.33533° 纬度 = 39 + 12.34 / 60 = 39.20567° 分秒转换: 将度分秒单位数据转换为度单位数据,公式:度 = 度 + 分 / 60 + 秒 / 60 / 60 例如: 经度 = 116°20'43",纬度 = 39°12'37" 经度 = 116 + 20 / 60 + 43 / 60 / 60 = 116.34528° 纬度 = 39 + 12 / 60 + 37 / 60 / 60 = 39.21028°
针对上面的知识的总结:
① 基本规范定义
经度:-180~180,用负号(-)表示西经(W),正号(+)表示东经(E)
纬度:-90~90,用负号(-)表示南纬(S),正号(+)表示北纬(N)
② GPS的经纬度数据采用度分秒表示方式:
1度=60分;1分=60秒
经纬度信息,例如:a度b分c秒,a用2字节表示,b和c分别1个字节表示
对于一般的车载设备定位或者导航而言,只需要经纬度信息即可,无需高度信息