gnss报文读取

前情提要

前期准备可以看我之前的文章
1、ros2订阅发布
2、ros2订阅发布1对n
3、ros2串口通信

报文获取

首先尝试从虚拟串口进行报文发送,在代码中设置/dev/pts/x来接收报文。之后选择虚拟机从windows向ubuntu发送报文,更加贴近实际。

在这里插入图片描述

在惯导接收程序中设置了g_qianxun_recv_data的变量,来接收存在recv_buf中的报文数据,并在终端打印。打印结果如下:

在这里插入图片描述

报文解析

报文从recv_buf中复制到g_qianxun_recv_data中,再进入proc函数中进行解析。

在这里插入图片描述

首先判断报文中是否含有$GPYBM,若存在,则进入ntzx_gpybm_proc程序中具体解析。若不存在,则等待报文继续发送。处理好的解析数据放在结构体g_gps_data中。

接收、解析、具体解析函数的每一次跳转都经过打印测试,流程清晰。

报文发布

发布部分,采用鱼香肉丝的发布订阅模块,通过消息发送解析好的数据。

在这里插入图片描述

对结构体中的数据进行操作,在回调函数中发出需要用到的结构体中的数据。

遇到的问题

1、主函数中创建两个线程

在这里插入图片描述

两个线程函数不能同步进行,在接收线程中,存在一个对数据接收的while(1)死循环,不知道如何跳出,进入到proc中。之后查阅资料,采用鱼香肉丝的回头函数。

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

回头函数可以对main中的两个线程不断的循环遍历,问题解决。
2、采用socat虚拟串口助手时,接收到的报文一直显示没有报头($GPYBM),尝试多次后,选择更换虚拟串口助手,问题解决。
3、解析报文时,设备号不能直接通过判断协议格式‘,’来得到完整数据。需要设置dev_GPYBM的变量,存储“SNxxxxxxxxxx”,之后通过提取‘,’前的数据,覆盖原来的dev_GPYBM数据才行。

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

4、报文发布时,借鉴的订阅发布代码不含回调函数,另找了csdn的一位博主的代码,创建了msg后添加变量。

在这里插入图片描述

变量未全部设置好,仅仅测试了时间数据中的一小部分。
以上测试均使用虚拟设备(前期虚拟串口,后期虚拟机),仅收取报文部分用到了RTK实物。
下一步准备在实物上完成完整循环,之后着手准备将rtk安装到小车上,通过gnss对小车进行寻迹测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值