nmea 开源库(C/C++)

NMEA (National Marine Electronics Association) 是一种船舶导航设备的数据通信标准,广泛应用于GPS和其他导航系统。对于C/C++开发者来说,有几个开源库可以用来解析NMEA数据或生成NMEA消息:

  1. libnmea:

    • 一个小巧的C库,用于解析NMEA 0183数据。
  2. NMEA2000 library:

    • 一个用于处理NMEA 2000数据的开源库。
  3. nmeaparser:

    • 一个用于解析NMEA 0183数据的C++库。
  4. NMEA GPS Parser:

    • 一个简单的C++库,用于解析NMEA 0183 GPS数据。
  5. PyrePilot:

    • 虽然这是一个无人机软件,但它包含了NMEA解析的功能,并且是用C++编写的。
  6. gpsd:

    • gpsd是一个守护进程,可以与许多GPS接收器通信,支持NMEA句法。
  7. TinyNMEA:

    • 一个轻量级的C语言库,用于解析NMEA 0183数据。
  8. NMEA0183-C-Library:

    • 一个用于解析NMEA 0183数据的C语言库。
  9. NMEA library for Arduino:

    • 如果你在使用Arduino,这个库可以用来解析NMEA数据。
  10. nmea.js:

    • 虽然这是一个JavaScript库,但它提供了一个清晰的API,可以作为实现其他语言库时的参考。

使用这些库时,请确保它们符合你的项目需求,并且它们的许可证与你的项目兼容。在选择库时,你可能需要考虑库的维护状态、易用性、性能和社区支持等因素。

要找到这些库,你可以在GitHub或其他代码托管平台上搜索,或者在一些开源软件社区和论坛中询问。在使用第三方库时,建议阅读库的文档和源代码,以确保它满足你的特定需求。

NMEA-0183 协议简介

NMEA Revealed
https://gpsd.io/NMEA.html

版权声明:本文为CSDN博主「wonull」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012241570/article/details/90769388


NMEA - 0183 是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了 GPS/北斗导航设备统一的 RTCM(Radio Technical Commission for Maritime services)标准协议。

NMEA-0183 协议采用 ASCII 码来传递 GPS 定位信息,我们称之为帧。

帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF)

1、“$”:帧命令起始位

2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)

3、ddd…ddd:数据

4、“*”:校验和前缀(也可以作为语句数据结束的标志)

5、hh:校验和(check sum),$与*之间所有字符 ASCII 码的校验和(各字节做异或运算,得到校验和后,再转换 16 进制格式的 ASCII 字符)

6、(CR)(LF):帧结束,回车和换行符

NMEA-0183 常用命令如表所示
在这里插入图片描述

NMEA 0183协议解析(NMEA4.1)

NMEA-0183协议是目前GNSS接收机上使用最广泛的协议,大多数常见的GNSS接收机、GNSS数据处理软件、导航软件都遵守或者至少兼容这个协议。

原文地址:https://www.cnblogs.com/wind-under-the-wing/p/13997178.html

下面对其常用字段进行分析

一、XXGGA

  • GGA信息:UTC时分秒、经纬度、GPS状态、卫星数量、高程、差分延迟、基站号

此字段主要表示时间、经纬度位置、解算状态、卫星颗数等相关信息,XX因模式的不同而不同

(1)单GPS
$GPGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*50

(2)单BD
$BDGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*4

(3)单GLONASS
$GLGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*4

(4)多星联合定位
$GNGGA,062938.00,3110.4700719,N,12123.2657056,E,1,25,0.6,58.9666,M,0.000,M,99,AAAA*4

在这里插入图片描述
在这里插入图片描述

二、XXGSA

  • GSA信息:模式、定位状态、

用于解算卫星信息。
(1) 单GPS
$GPGSA,M,3,25,14,15,18,31,27,09,21,22,12,1.5,0.9,1.3*30

(2) 单BD
$BDGSA,M,3,141,143,144,146,147,148,149,150,2.7,1.7,2.2*2B

(3) 单GLONASS
$GLGSA,M,3,47,58,55,46,53,57,56,1.7,1.1,1.3*2D

(4) 多星联合定位
$GNGSA,M,3,27,03,16,21,06,19,31,13,23,1.0,0.6,0.822
$GNGSA,M,3,141,142,143,144,147,148,150,1.0,0.6,0.8
10
$GNGSA,M,3,47,56,55,46,53,44,57,1.0,0.6,0.829
在这里插入图片描述

三、XXGSV

  • GSA信息:卫星数量、编号、信噪比(信号强度)、

可见卫星信息
每条GSV语句最多可以显示4个可见卫星的信息,其他的卫星都会在下一条语句中输出显示。每种卫星系统都会单独显示,如下:GPS有3条GSV报文,北斗有2条GSV报文,GLONASS有3条GSV报文。
$GPGSV,3,1,09,19,46,206,41,16,55,015,43,31,24,120,37,06,82,060,4373

$GPGSV,3,2,09,27,82,183,45,21,15,061,33,23,47,268,43,03,72,228,44*72

$GPGSV,3,3,09,13,34,304,38,*49

$BDGSV,2,1,07,143,53,202,37,145,15,257,40,148,72,234,38,141,49,145,37*67

$BDGSV,2,2,07,151,24,048,41,150,70,327,38,147,77,113,39,*65

$GLGSV,3,1,09,47,07,193,46,43,46,101,50,59,28,309,45,49,28,305,43*68

$GLGSV,3,2,09,48,35,239,45,42,21,040,44,57,24,063,39,44,24,161,47*67

$GLGSV,3,3,09,58, 46,012,45,51
在这里插入图片描述

四、XXRMC

  • GSA信息:解状态、经纬度、地面速度、地面航向角、UTC时间、

位置、速度、时间等信息。
(1) 单GPS
$GPRMC,064457.90,A,3110.4691141,N,12123.2667676,E,0.157,63.0,300713,0.0,W,A05

(2) 单BDS
$BDRMC,064457.90,A,3110.4691241,N,12123.2667666,E,0.157,63.0,300713,0.0,W,A*05

(3) 单GLONASS
$GLRMC,064457.90,A,3110.4691141,N,12123.2667646,E,0.157,63.0,300713,0.0,W,A*05

(4) 双星或多星联合定位
$GNRMC,064401.65,A,3110.4706987,N,12123.2653375,E,0.604,243.2,300713,0.0,W,A*3E
在这里插入图片描述

NMEA 示例数据包

XXGGA 示例数据

设备命令:microcom -s 115200 /dev/ttymxc1 | grep GGA

$GNGGA,025030.400,3016.6134500,N,12000.6081451,E,1,12,0.791,51.8582,M,6.9910,M,*47
$GNGGA,025030.500,3016.6134500,N,12000.6081451,E,1,12,0.791,51.8582,M,6.9910,M,*46
$GNGGA,025030.600,3016.6134500,N,12000.6081451,E,1,12,0.791,51.8582,M,6.9910,M,*45

主要数据:UTC时分秒、经纬度、GPS状态

XXRMC 示例数据
设备命令:microcom -s 115200 /dev/ttymxc1 | grep RMC

$GNRMC,034432.500,A,3016.6181806,N,12000.6207537,E,0.000,,110122,,,A,V*27
$GNRMC,034432.600,A,3016.6181806,N,12000.6207537,E,0.000,,110122,,,A,V*24
$GNRMC,034432.700,A,3016.6181806,N,12000.6207537,E,0.000,,110122,,,A,V*25

主要数据:UTC时分秒日月年、经纬度、定位状态、速度、航向角

XXGSA 示例数据
设备命令:microcom -s 115200 /dev/ttymxc1 | grep GSA

$GNGSA,A,1,,,,,,,,,,,,,1.190,0.822,0.860,3*3E
$GNGSA,A,3,101,114,116,126,,,,,,,,,1.190,0.822,0.860,4*3C
$GNGSA,A,3,4,16,26,27,29,31,,,,,,,1.190,0.822,0.860,1*05

XXGSV 示例数据

$GPGSV,2,1,8,3,20,272,,4,24,318,,16,55,256,,26,69,354,,*6F
$GPGSV,2,2,8,27,23,186,,29,17,43,,31,50,60,,32,,,,*5C
$GBGSV,3,1,9,101,45,138,33,110,48,230,,112,25,149,26,114,42,228,26,1*48
$GBGSV,3,2,9,116,81,53,20,124,58,345,25,126,36,57,,133,42,267,25,1*4B
$GBGSV,3,3,9,135,23,62,30,1*7E

GBGSV是哪种?
https://www.pianshen.com/article/9570653904/

NMEA 查看卫星数量、信号强度、时间、坐标、GPS状态

NMEA 查看卫星数量

  • XXGSV:卫星数量、信号强度(信噪比、越大越好)
  • XXGGA:

NMEA 查看信号强度

  • XXGSV:卫星数量、信号强度(信噪比、越大越好)

NMEA 查看时间

  • XXGGA:UTC时分秒
  • XXRMC:UTC时分秒、UTC日月年

NMEA GPS状态

  • XXGGA:GPS状态(0=未定位,1=单点定位,2=伪距/SBAS,3=无效PPS,4=RTK固定,5=RTK浮动,6=正在估算,7=手动启动基准站,8=RTK宽巷解,9=伪距)
  • XXGSA:定位模式,A=自动手动2D/3D,M=手动2D/3D
  • XXGSA:定位类型,1=未定位,2=2D定位,3=3D定位
  • XXRMC:定位状态,A=有效定位,V=无效定位
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐