问题1:NMEA有好几种语句,如GGA、RMC等,这些语句是GPS芯片都会发出来的吗?如果是,那么他们发送出来有一定的先后顺系么,就是说按照固定的顺系发出来给我们用?我们要把所有的语句都解析出来吗?
问题2:有的语句它里面的有些字段没有值,对于这种语句我们怎么处理,认为它是无效的吗?比如GGA语句“$GPGGA,182053.00,5106.9802878,N,11402.3037361,W,4,07,1.1,1048.237,M,,,02,AAAA*18”红色部分字段没值,我们怎么对待这条语句?
------解决方案--------------------
Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<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> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
*/
------解决方案--------------------
红色字段的值你可以不用考虑,只要符合0813协议就行。
------解决方案--------------------
没必要吧
如果得不到信息说明接收机收星不好!
------解决方案--------------------
以SiRF 3tw GPS芯片为例来回答楼主的问题:
1:默认的输出语句包括GGA、GSV、GSA、RMC,但SiRF提供了输入指令允许用户修改要输出的语句,比如你可以写一条指令命令GPS芯片只输出GGA、GSV。
2:有先后的顺序,GGA->RMC->GSA->GSV,但开发者无需关心输出的先后顺序是怎样。
3:对于应用的开发者而言,是否要解析所有格式看你的需求怎样。如果你只要获得经纬度数据只需要解析RMC或者GGA格式就可以了;如果你需要获得卫星信息(卫星的ID、仰角、方位角、信号强度)就必须解析GSV格式。
4:对于值为空的部分,请仔细阅读NMEA数据协议文档,看看该字段代表的含义是什么,如果你用不到就无需关心她。
------解决方案--------------------
NMEA 来的顺序不是固定的,由包头来区分来的是什么消息。
------解决方案--------------------
有时没有值,但格式是固定的,没有值就是空的
------解决方案--------------------
精度高点要看模块了,并不是从数据上得到的 ,要么就是采用专业算法 PPP等高精度算法,高精度的GPS模块。你的模块默认的经纬度为小数点后7位如3037361,已经算精度高的 其他只能用算法实现。
------解决方案--------------------
1、GPS模块,拿SIRF模块来说,像SIRF3模块送出来的数据并非标准的NMEA格式数据,需要自己重新解析成NMEA才行。而SIRF4模块送出来的数据就是标准的NMEA格式数据,无需解析。
2、其中没有值的放空就放空,但是逗号格式是固定的。
------解决方案--------------------
有时收不到,很正常,看你的GPS模块稳定性如何了
我们用的是SIRF4,数据都是以NMEA规范流出的,有时也会有空白输出,不管就是了
------解决方案--------------------
(1)GGA、RMC等,这些语句是GPS芯片都会发出来,而且是有一定的顺序的。
楼主说的把所有的数据解析出来,这个是没有必要的。这个看你产品的功能,不如说只需要试试定位的,就需要解析定位的数据,需要时时授时的就要解析时间信息的。
(2)如果像楼主说的有的数据没有捕获到的时候就是两个逗号相连,这表示数据没有捕获到。
看样子楼主是不是在编写算法提取数据。
建议楼主的算法要任性话一些。比如在两个逗号之间提取数据时最好是按逗号提取,不要按字符长度提取。在编写算法是要注意算法的时间代价。在定位导航的软件上对这一点要求比较高的。
我们的北斗正在起航。大家以后可要支持国货啊。
呵呵,不过说实话,技术没有人家的好。
------解决方案--------------------
先做校验,Pass掉不正常的语句,然后你不管模块发过来的是不是固定顺序,你只要解析到一条语句就使用啊,注意串口组包的问题。
------解决方案--------------------
问题1:NMEA有好几种语句,如GGA、RMC等,这些语句是GPS芯片都会发出来的吗?如果是,那么他们发送出来有一定的先后顺系么,就是说按照固定的顺系发出来给我们用?我们要把所有的语句都解析出来吗?
这些语句是GPS芯片处理数据以后传递给我们使用的,他们发出来的数据的顺序如果有先后顺序又如何,第二组来的时候你这些所谓的顺序就没有意义了,如果你要做解析的话$GP就是公用的头,当然,不是所有的数据都是NMEA数据,比如一些工业级的GPS模块,NovAtel以及CSI主板之类的,可以发送命名请求,有0183数据,也有二进制数据等。要不要把所有的数据解析出来根据自己实际应用,比如说你只是要GPS来校准时间,那你只要提取与时间相关的就可以了··
问题2:有的语句它里面的有些字段没有值,对于这种语句我们怎么处理,认为它是无效的吗?比如GGA语句“$GPGGA,182053.00,5106.9802878,N,11402.3037361,W,4,07,1.1,1048.237,M,,,02,AAAA*18”红色部分字段没值,我们怎么对待这条语句?
没有的值就是空的,这是由于接收机收到的该位置的值就是0,你的问题应该是解析的问题吧··虽然有些位置是空的,但是逗号的数量都是固定的,并且没在*后面就是前面除了$意外的所有数据的异或之和,来校验接收到的数据是否是完整的,一般出现数据丢失的情况就是后面的校验位也没有的时候。