GPS开发数据提取的问题,跪求大家帮忙!!!!

pselect 2012-02-16 10:44:31
问题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”红色部分字段没值,我们怎么对待这条语句?
...全文
452 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
leosunshanghai 2012-05-12
  • 打赏
  • 举报
回复

请教坛里各位DX,本人有个SIRF3 GPS模块,串口数据输出顺序为:GGA-> RMC-> GSA-> GSV;

想找个能用在CE5系统下的工具,可以将GPS模块串口数据顺序调整为GGA-> GSA-> RMC-> GSV,然后将串口数据虚拟到新的虚拟串口,供软件使用;

不知可有这样的现成工具可以推荐下?

另外看到benkaoyaDX说:“GPS模块,拿SIRF模块来说,像SIRF3模块送出来的数据并非标准的NMEA格式数据,需要自己重新解析成NMEA才行。而SIRF4模块送出来的数据就是标准的NMEA格式数据,无需解析。”

那么SIRF4送出的数据顺序是否就是GGA-> GSA-> RMC-> GSV? 如果是的话,有无SIRF3 输出格式转 SIRF4的工具?可以再CE5系统运行的;

本人不懂编程,只好求助各位DX帮忙了,谢谢!
pselect 2012-02-21
  • 打赏
  • 举报
回复
再补充问下- -
假如GPS的频率是1HZ,那么在1s内是不是把GGA,GSV,RMC,GSA等语句顺系发完。然后下1s内又把他们再发一遍(另一个位置的信息了)?那么GPS在1s内发送的数据量有没有限制,也就是说最多可以发多少条NMEA语句?
pselect 2012-02-21
  • 打赏
  • 举报
回复
谢谢楼上几位的回答,很给力哈哈,我再问下:
1、GPS定位精度和GPS的刷新频率有关吗?也就是说假如GPS的刷新频率是1HZ,那么我要在下一秒才能拿到最新的NMEA数据,而在这1s内车实际上已经开出好多米了。我总觉得GPS的刷新数据频率对定位精度影响很大?
2、定位后的后处理是指哪些?怎么处理,差分定位难吗?
3、如果NMEA语句有字段为空,它的校验和会错吗?还是一般也没校验和这个字段了?
northcan 2012-02-21
  • 打赏
  • 举报
回复
1 格式固定,有顺序。楼主可以实际拿个GPS模块,把接收到的串口数据全部写入到一个log文件中,看看就知道了。

2 就是按照NMEA0183协议,把GPS数据读到缓冲区中,利用c++ stl里面那些现成的算法函数,包括查找函数等等。解析就OK了。

3 我最近也简单调了一下GPS,不过没太去深入。

GPS模块编程之NMEA0183协议
northcan 2012-02-21
  • 打赏
  • 举报
回复
1 格式固定,有顺序,你可以拿GPS模块,把收到的数据输入到一个Log文件中看看。

2 就是按照NEMA0183协议,把接收回来的数据放到一个缓冲区中,通过c++ stl那些标准库函数,比如查找函数等等解析即可。

GPS模块编程之NMEA0183协议
四极管 2012-02-21
  • 打赏
  • 举报
回复
1、GPS定位精度和GPS的刷新频率有关吗?也就是说假如GPS的刷新频率是1HZ,那么我要在下一秒才能拿到最新的NMEA数据,而在这1s内车实际上已经开出好多米了。我总觉得GPS的刷新数据频率对定位精度影响很大?
有关系的,比如说你一秒出来十个数据和一秒出来一百个数据,然后你再对数据做处理,就会影响精度了。影响的大小得开你对数据的处理情况如何。


2、定位后的后处理是指哪些?怎么处理,差分定位难吗?
车载的后处理我不是很了解,但是测量型的测地型接收机主要用于精密大地测量和精密工程测量。这类仪器主要采用载波相位观测值 进行相对定位,定位精度高。仪器结构复杂,价格较贵。根据使用用途和精度,又分为静态(单频)接收机和动态(双频)接收机即RTK等等。这是门很高的学问,听说过武测么?全亚洲最好的测绘学院。。据说是。。
3、如果NMEA语句有字段为空,它的校验和会错吗?还是一般也没校验和这个字段了?
空那就空校验咯,校验错了就是有数据丢失。。没错不管有没有数据,即使全部是空的,校验也照样正确。
如果校验位都没有了,那这条数据肯定就有丢失的部分了。

假如GPS的频率是1HZ,那么在1s内是不是把GGA,GSV,RMC,GSA等语句顺系发完。然后下1s内又把他们再发一遍(另一个位置的信息了)?那么GPS在1s内发送的数据量有没有限制,也就是说最多可以发多少条NMEA语句?
这个可以设置的,不知道你的GPS板子是不是可以自己设置频率,也就是说发送多少条,是由你的实际需要来做的,看你的处理器能解析得多快。。
四极管 2012-02-20
  • 打赏
  • 举报
回复
问题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,你的问题应该是解析的问题吧··虽然有些位置是空的,但是逗号的数量都是固定的,并且没在*后面就是前面除了$意外的所有数据的异或之和,来校验接收到的数据是否是完整的,一般出现数据丢失的情况就是后面的校验位也没有的时候。

要求精度高的?
就是你解析的这几条数据是做不出来的,精度的原因有很多方面,最关键的是GPS是否是高精度的,一般的民用的GPS模块,就是那种所谓在室内都可以收到卫星的那种精度是高不到哪里去的,工业级的GPS模块会避免多路径效应,在空旷的地方才能够收到卫星,已做高精度测量使用。
还有就是后处理,比如说最简单的,你采集1000个数据,求平均。。当然,在严肃的测绘知识里面,是不允许的,差分定位,PPP技术等等,都是现在比较先进的技术。
阁下还有什么疑问?
StarSoft_ZXB 2012-02-20
  • 打赏
  • 举报
回复
先做校验,Pass掉不正常的语句,然后你不管模块发过来的是不是固定顺序,你只要解析到一条语句就使用啊,注意串口组包的问题。
  • 打赏
  • 举报
回复
有时收不到,很正常,看你的GPS模块稳定性如何了
我们用的是SIRF4,数据都是以NMEA规范流出的,有时也会有空白输出,不管就是了
李氏康荣 2012-02-19
  • 打赏
  • 举报
回复
(1)GGA、RMC等,这些语句是GPS芯片都会发出来,而且是有一定的顺序的。
楼主说的把所有的数据解析出来,这个是没有必要的。这个看你产品的功能,不如说只需要试试定位的,就需要解析定位的数据,需要时时授时的就要解析时间信息的。
(2)如果像楼主说的有的数据没有捕获到的时候就是两个逗号相连,这表示数据没有捕获到。
看样子楼主是不是在编写算法提取数据。
建议楼主的算法要任性话一些。比如在两个逗号之间提取数据时最好是按逗号提取,不要按字符长度提取。在编写算法是要注意算法的时间代价。在定位导航的软件上对这一点要求比较高的。
我们的北斗正在起航。大家以后可要支持国货啊。
呵呵,不过说实话,技术没有人家的好。
ffeige1984 2012-02-17
  • 打赏
  • 举报
回复
精度高点要看模块了,并不是从数据上得到的 ,要么就是采用专业算法 PPP等高精度算法,高精度的GPS模块。你的模块默认的经纬度为小数点后7位如3037361,已经算精度高的 其他只能用算法实现。
guiguxinwei123 2012-02-17
  • 打赏
  • 举报
回复
GPS模块
许振坪 2012-02-17
  • 打赏
  • 举报
回复
1、GPS模块,拿SIRF模块来说,像SIRF3模块送出来的数据并非标准的NMEA格式数据,需要自己重新解析成NMEA才行。而SIRF4模块送出来的数据就是标准的NMEA格式数据,无需解析。

2、其中没有值的放空就放空,但是逗号格式是固定的。
91program 2012-02-16
  • 打赏
  • 举报
回复
有时没有值,但格式是固定的,没有值就是空的
91program 2012-02-16
  • 打赏
  • 举报
回复
NMEA 来的顺序不是固定的,由包头来区分来的是什么消息。
pselect 2012-02-16
  • 打赏
  • 举报
回复
#6楼:
还有些语句里面有定位状态啊什么的字段,我拿到这种语句要不要先检测该字段的值?比如说1楼提供的$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
语句,它的字段<2> 定位状态,A=有效定位,V=无效定位 和字段 <12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
那么我拿到该语句时,要不要先检测定位状态为有效,模式指示不为N后再去用它?否则不能用该语句?

jojjay 2012-02-16
  • 打赏
  • 举报
回复
以SiRF 3tw GPS芯片为例来回答楼主的问题:
1:默认的输出语句包括GGA、GSV、GSA、RMC,但SiRF提供了输入指令允许用户修改要输出的语句,比如你可以写一条指令命令GPS芯片只输出GGA、GSV。
2:有先后的顺序,GGA->RMC->GSA->GSV,但开发者无需关心输出的先后顺序是怎样。
3:对于应用的开发者而言,是否要解析所有格式看你的需求怎样。如果你只要获得经纬度数据只需要解析RMC或者GGA格式就可以了;如果你需要获得卫星信息(卫星的ID、仰角、方位角、信号强度)就必须解析GSV格式。
4:对于值为空的部分,请仔细阅读NMEA数据协议文档,看看该字段代表的含义是什么,如果你用不到就无需关心她。
pselect 2012-02-16
  • 打赏
  • 举报
回复
再听听大家的意见,你们做过这方面的开发吗?怎么对待如同$GPGSA,A,1,,,,,,,,,,,,,,,*1E
这样的数据的,难道GPS接收机发出来的报文都是完整(每个字段都有值)的吗?
eraser2011 2012-02-16
  • 打赏
  • 举报
回复
没必要吧
如果得不到信息说明接收机收星不好!
pselect 2012-02-16
  • 打赏
  • 举报
回复
可是我们项目想要精度高点,现在要我把从串口读到的字节流都分割出NMEA语句来,然后把每条分割出的NMEA语句再解析掉,大家觉得有必要这样做吗?

另外,要是红色部分(字段为空)不考虑的话,那么如果GPS发的是下面的语句,那我岂不是得不到什么信息了?
$GPRMC,034324.719,V,,,,,,,240810,,,N*4F
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,034325.718,,,,,0,00,,,M,0.0,M,,0000*5B
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,034325.718,V,,,,,,,240810,,,N*4F
$GPVTG,,T,,M,,N,,K,N*2C
加载更多回复(2)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧