一文搞定GPS接收机定位

本文介绍了如何使用GPS接收机进行定位,讲解了NMEA-0183协议和常见语句如GPRMC、GPGGA等的含义。通过pySerial库在Python中读取GPS串口数据,并展示了如何将经纬度信息在百度地图上显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结课大作业,把我网上找到的资料和我制作的过程整合了一下,希望对大家有所帮助

什么是GPS接收机

GPS接收机是接收全球定位系统卫星信号并确定地面空间位置的仪器。GPS卫星发送的导航定位信号,是一种可供无数用户共享的信息资源。对于陆地、 海洋和空间的广大用户,只要拥有能够接收、跟踪、变换和测量GPS信号的接收设备, 即GPS信号接收机。

一般的GPS接收机长这样:

 

而我们今天要用的就比较简陋了,它长这样

 

使用其usb串口与电脑相连,并进行相关环境的配置,我们就可以用电脑接受其数据流了。

数据流解读

GPS接收机协议

我们利用GPS接收机接收到的数据流格式是基于NMEA-0183 协议,NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、MCU等设备。

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

数据格式

$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x
  • $ 为起始标志;

  • , 为域分隔符;

  • * 为校验和识别符,其后两位数为校验和,代表了 $* 之间所有字符的按位异或值(不包括这两个字符);

  • \r\n 为终止符(不可见),所有的语句必须以来结束,也就是 ASCII 字符的“回车”(十六进制的 0D)和“换行”(十六进制的 0A)。

NMEA-0183 协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有 GPGGA、GPGSA、GPGSV、GPRMC、GPVTG、GPGLL 等。下面给出这些常用 NMEA 0183 语句的字段定义解释:

GPRMC

Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息

 $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

各字段描述如下:

  • <1> UTC 时间,格式 hhmmss.ssss,代表时分秒.毫秒

  • <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.0 版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

  • 最后两个字节是校验和

注意:

  • 如果字段 4 的值等于 N,则字段 3 的值等于 ddmm.mmmmmm

  • 如果字段 4 的值等于 S,则字段 3 的值等于 -ddmm.mmmmmm

  • 如果字段 6 的值等于 E,则字段 5 的值等于 ddmm.mmmmmm

  • 如果字段 6 的值等于 W,则字段 5 的值等于 -ddmm.mmmmmm

  • 十进制北纬度数 = dd + mm.mmmmmm/60

  • 十进制南纬度数 = -(dd + mm.mmmmmm/60)

  • 十进制东经度数 = ddd + mm.mmmmmm/60

  • 十进制西经度数 = -(ddd + mm.mmmmmm/60)

GPGGA

Global Positioning System Fix Data(GGA)GPS定位信息

 $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh

各字段描述如下:

  • <1> UTC 时间,hhmmss(时分秒)格式

### NLP基础知识与学习路径 自然语言处理(Natural Language Processing, NLP)作为计算机科学和人工智能的重要分支,其目标在于使计算机能够理解和生成人类语言。这是一门融合了语言学、计算机科学以及数学等多个学科的综合性科学[^2]。 #### 数学基础的重要性 对于初学者而言,扎实的数学基础是不可或缺的一部分。线性代数、概率论与统计学构成了NLP的核心工具集。这些知识不仅帮助理解算法原理,还支持构建更高效的模型架构。 #### 词向量技术简介 在现代NLP实践中,`词向量(Word Embedding)`扮演着极为重要的角色。这是一种将词汇映射到连续空间上的高维数值表示方法。通过这种方式,可以有效地捕获词语间的语义相似性和句法结构特性。常见的预训练模型如`Word2Vec`, `GloVe` 和基于Transformer架构的`BERT`均依赖于此类嵌入机制来增强表达能力[^3]。 以下是实现简单版本word embedding的一个Python代码片段: ```python import numpy as np from sklearn.decomposition import PCA from matplotlib import pyplot def create_word_embedding(sentences, vocab_size=100, embed_dim=5): from gensim.models import Word2Vec model = Word2Vec(sentences=sentences.split(), vector_size=embed_dim, window=5, min_count=1, workers=4) words = list(model.wv.index_to_key) X = model.wv[words] pca = PCA(n_components=2) result = pca.fit_transform(X) pyplot.scatter(result[:, 0], result[:, 1]) for i, word in enumerate(words): pyplot.annotate(word, xy=(result[i, 0], result[i, 1])) pyplot.show() create_word_embedding("The cat sat on the mat.") ``` 此脚本展示了如何利用gensim库创建基本单词嵌入并可视化它们的关系图谱。 #### 推荐的学习平台 为了更好地掌握上述理论和技术细节,“ai-learning”是一个值得探索的学习站点。该平台上提供了丰富的课程资料覆盖从基础概念到高级应用各个层面的内容[^1]。 ### 结束语 综上所述,进入NLP领域需具备良好的编程技巧、坚实的数学功底以及对最新研究成果的关注度。随着深度学习框架的发展,越来越多强大的开源项目可供实践检验所学到的知识点。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值