热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Arduino读取GPS数据发送解析并发布ROStopic(一)

概述通过Arduino收集GPS数据,连接至电脑端,在电脑端通过python对数据进行整理,并通过发布TOPIC,本部分主
概述

通过Arduino收集GPS数据,连接至电脑端,在电脑端通过python对数据进行整理,并通过发布 TOPIC,本部分主要记录如何通过Arduino读取GPS数据。

接线方式

在这里插入图片描述

  1. GPS 的 UCC GND 分别接到 arduino板子上的 5v 和 GND
  2. GPS 的 TXD 引脚接 arduino 的RX1引脚 (只需要接受从芯片上发回的数据)
  3. Arduino 连接至串口
    #解析代码

方法一

将gps 发布的数据不加处理,全部发送到串口

void setup() {// put your setup code here, to run once:// put your setup code here, to run once:Serial1.begin(38400);Serial.begin(38400);
}void loop() {// put your main code here, to run repeatedly:if (Serial1.available()) {//Serial.print((char)Serial1.read());Serial.print((char)Serial1.read()); // read each character}
}

结果如下:
在这里插入图片描述
串口受到的数据如下

$GNGLL,0000.0000,N,00000.0000,E,085931.000,V,N*59
$GNGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*2E
$GNRMC,085931.000,V,0000.0000,N,00000.0000,E,000.0,000.0,151118,,,N*63
$GNVTG,000.0,T,,M,000.0,N,000.0,K,N*1C
$GNZDA,085931.000,15,11,2018,00,00*41
$GNGGA,085932.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*76
$GNGLL,0000.0000,N,00000.0000,E,085932.000,V,N*5A
$GNGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*2E

其中“ $GNGGA 所在的行就是GPS 的信息,格式如下:
$GNGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
(1) UTC 时间,格式为 hhmmss.ss;
(2) 纬度,格式为 ddmm.mmmmm(度分格式);
(3) 纬度半球,N 或 S(北纬或南纬);
(4) 经度,格式为 dddmm.mmmmm(度分格式);
(5) 经度半球,E 或 W(东经或西经);
(6) GPS 状态,0=未定位,1=非差分定位,2=差分定位;
(7) 正在使用的用于定位的卫星数量(00~12)
(8) HDOP 水平精确度因子(0.5~99.9)
(9) 海拔高度(-9999.9 到 9999.9 米)
(10) 大地水准面高度(-9999.9 到 9999.9 米)
(11) 差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)
(12) 差分参考基站标号(0000 到 1023,首位 0 也将传送,非差分定位,此项为空)

##方法二 提取信息再发布(采用)

char msg_line[600];
char read;
int i = 0;void setup() {// put your setup code here, to run once:Serial1.begin(38400);Serial.begin(38400);
}void loop() {// put your main code here, to run repeatedly:if (Serial1.available()) {//Serial.print((char)Serial1.read());msg_line[i&#43;&#43;] &#61; (char)Serial1.read(); // read each character into the list//Serial.print(msg_line[i]);if(i >&#61; 580) {int ii &#61; 0;while(ii<i){if(ii&#43;20 < 600 && msg_line[ii] &#61;&#61; &#39;G&#39; && msg_line[ii&#43;1] &#61;&#61; &#39;A&#39;){ //对GA那一行进行提取int t &#61; ii;while(t<ii&#43;73){Serial.print(msg_line[t]);t&#43;&#43;;}//print info }ii&#43;&#43;;}memset(msg_line, 0, 600);i &#61; 0;} //clear info//Serial.print((char)Serial1.read());}
}

接下来将介绍将串口的数据解析后发布 ros topic
Arduino 读取GPS 数据发送解析并发布ROS topic(二) https://blog.csdn.net/Fourier_Legend/article/details/84107998


推荐阅读
author-avatar
mobiledu2502856483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有