从零开始新世界生活!
耕耘于内燃机行业的新手攻城狮。
正题开始!
本文的主题:关于INCA读取手机GPS信号的实现原理。
引言以及概要:早在一年前,我曾经发过一篇文章,讲诉了INCA如何实时从手机中获取GPS信号。今天,我从原理上进行简略解释,以及用串口助手进行模拟,演示如何将虚拟数据发给INCA。
1、GPS全球卫星的定位系统简介(来源百度百科)
GPS全球卫星定位系统由三部分组成:空间部分——GPS星座;地面控制部分——地面监控系统;用户设备部分——GPS 信号接收机。
-
空间部分:GPS的空间部分是由24 颗工作卫星组成,它位于距地表20 200km的上空,均匀分布在6 个轨道面上(每个轨道面4 颗),轨道倾角为55°。
-
地面部分:地面控制部分由一个主控站、5 个全球监测站和3 个地面控制站组成。监测站均配装有精密的铯钟和能够连续测量到所有可见卫星的接受机。
-
设备部分:用户设备部分即GPS 信号接收机,其主要功能是能够捕获到按一定卫星截止角所选择的待测卫星,并跟踪这些卫星的运行。当接收机捕获到跟踪的卫星信号后,即可测量出接收天线至卫星的伪距离和距离的变化率,解调出卫星轨道参数等数据。根据这些数据,接收机中的微处理计算机就可按定位解算方法进行定位计算,计算出用户所在地理位置的经纬度、高度、速度、时间等信息。
2、GPS数据报文信息协议
GPS的报文信息是使用的国际海洋电子协会(National Marine Electronics Association,简称NMEA)的协议。NMEA有两个版本,0183和2000,这里用的是NMEA-0183。
NMEA-0183协议语句按照既定的时间间隔传输,通常选择1秒为输出的时间间隔。该协议还规定了串行通信的默认参数:波特率为4800bps,数据位是8bit,开始位1bit,停止位是1bit,并且没有奇偶校验。
3、NMEA需要发送的数据
NMEA模块实现定位至少需要以下的数据(来源论文):
(1)Reciver的PVT信息(position、velocity、time):包括系统的世界,接收机的定位状态(不可定位/2D/3D),经度,纬度,海拔,速度,运动方向;
(2)有效的卫星信息:用来定位的卫星数,PRN,HDOP,PDOP,VDOP;
(3)可示卫星信息:可示卫星数,可示卫星的PRN,仰角,方位角,SNR信噪比。
实际上,一些软件做定位解析并不需要这么多信息。
4、NMEA 0183报文结构
NMEA 0183的数据流结构:$ttsss,d1,d2,....dn*hh<CR><LF>
-
$:帧命令起始位
-
tt:识别符号,表示“系统ID”,即表示该语句是属于何种系统或设备,GP表示该语句是GPS定位系统的,网络上有说BD代表的北斗定位系统。
-
sss:语句名,如RMC,GGA,GSA。网络有些文章会写RMC、GGA,或GPRMC、GPGGA,或$GPGGA,需要注意理解。
-
d1,d2…dn:数据
-
*:校验和前缀
-
hh:校验和(checksum),$与*之间所有字符ASCII码的校验和。http://www.ip33.com/bcc.html网站可以在线算。)
-
<CR><LF>帧结束,回车和换行
NMEA-0183 格式数据串的所有数据都采用 SASCII 文本字符表示,数据字段以逗号分隔识别,空字段保留逗号。
5、NMEA常用语句
NMEA的语句很多,我这里只简单介绍接下来需要用到的几个语句。
-
$RMC:推荐最小定位信息,包括位置、速度、时间等
-
$GGA:GPS定位信息,包括时间、经纬度位置、解算状态、采用的卫星颗数等。
-
$GSA:当前卫星信息,包括用于解算的当前卫星信息
-
$HCHDG:Heading – Deviation & Variation,Magnetic deviation and variation for calculating magnetic or true heading,翻译说是用来计算航向的,原理未知。
6、NMEA 语句格式
$GPRMC
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段12:模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效
字段13:校验值
案例:$GPRMC,041036.00,A,2232.20243,N,11401.53009,E,0.813,135.19,170908,,,A*60
$GPRMC(Recommended Minimum Specific GPS/TRANSIT Data,RMC)推荐定位信息,
后面的数据按逗号隔开,意思分别是 UTC 时间,定位状态,纬度,纬度半球,经度,
经度半球,步长,地面航向,UCT 日期,磁偏角度数,磁偏角方向,模式指示,
其中“模式指示”一项只有在 NMEA0183 数据标准下才会输出。
从数据包中可以看到,当前的定位是有效的定位,并且这个数据包的采集是在
08年 9 月 17 号,是自主定位的模式。
$GPGGA
例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息
字段1:UTC 时间,hhmmss.sss,时分秒格式
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段3:纬度N(北纬)或S(南纬)
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段5:经度E(东经)或W(西经)
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球椭球面相对大地水准面的高度
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
字段13:校验值
案例:$GPGGA,041035.00,2232.20243,N,11401.52969,E,1,05,15.32,74.9,M,-2.4,M,,*4C
解析:$GPGGA(Global Positioning System Fix Data,GGA)GPS 定位信息,
后面的数据按照逗号隔开,所代表的意思依次分别是 UTC 时间,纬度,纬度半球,
经度,经度半球,GPS 状态,正在使用解算位置的卫星数量,HDOP 水平精度因子,
海拔高度,M,地球球面相对大地水准面高度,M,差分时间,差分站 ID 号。
从以上数据可以看到,这是在纬度半球的北半球,经度半球的东半球,
具体到是在中国深圳市的一个定位数据,此刻的定位状态是非差分定位,
正在用于解算位置的卫星数目是 5 个。由于采用的是非差分定位技术,
所以在“*”前最后一项为空。
$GPGSA
例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
字段0:$GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息
字段1:定位模式,A=自动手动2D/3D,M=手动2D/3D
字段2:定位类型,1=未定位,2=2D定位,3=3D定位
zi段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)
字段15:PDOP综合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校验值
案例:$GPGSA,A,3,25,23,13,21,16,,,,,,,,20.60,15.32,13.77*31
解析:$GPGSA(GPS DOP and Active Satellites,GSA)当前卫星信息,
后面的数据按照逗号隔开,所代表的意思依次分别是,模式,定位类型,
伪随机噪声码(正在用于解算位置的卫星号,保留 12 个位置),
然后是 PDOP 位置精度因子,HDOP水平精度因子,VDOP 垂直精度因子。
从上面的数据可以看到当前是在自动模式下,已经处于了 3D 定位状态,
此刻正有 5 颗卫星真在解算位置坐标,还有 7 个位置是空的。
7、INCA的模拟发送
首先需要借助连个软件,如下:
virtual serial port driver:用来创建虚拟串口的,因为我要在同一台电脑用串口调试助手进行测试。如下图,我已经创建好了一对com1、com2串口,用来进行发送和接收。
串口调试助手:用来发送定位信息。如下图:将com2虚拟串口配置号波特率等信息,配置GPS信号,配置1s定时发送,配置分隔符为CRLT,稍后再进行配置INCA初始化。需要注意的是:gps信号的发送顺序必须是:HDG,RMC,GGA,GSA。
然后打开INCA,借助INCA的demo项目进行测试:
配置INCA的GPS系统,com口设置为com1,波特率对应为9600。其他不理。
然后,进入试验界面:
公众号:柴油机匹配小助手