ROS 程序初读一(gps_driver)

2024-03-18 14:58
文章标签 程序 ros driver gps 初读

本文主要是介绍ROS 程序初读一(gps_driver),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先来看到 launch 文件夹,有三个 launch  文件,也不知道从哪看起,就从第一个看看先。

第一个文件为  gps_data_get.launch ,内容如下

 <launch><!-- 获取GPS数据节点 --><include file="$(find gps_driver)/launch/gps_log.launch"/><node name="gps_geter" pkg="gps_driver" type="gps_talker_node" output="screen"></node></launch>

第一个 <launch> 是文件的标签,反正每个 launch 文件都得有

然后就是 <include> 这个 标签允许将另一个 launcha 文件导入到当前文件,就是导入 前面路径 下的 gps_log.launch 文件,我懂。

先看下一条, <node> 这个 标签是启动一个节点,roslaunch 不提供节点开始的顺序保证,这个是特意的,没有办法知道哪个节点完全 初始化了,所以启动 代码必须在启动顺序上鲁棒性比较强。(鲁棒性-健壮和强壮的意思,Robust的音译) 。

启动了一个 名叫“gps_geter”的节点,pkg是节点的包,此个launch文件的包就是在 gps_driver里面。type是节点类型,必须有相应的同名的可执行文件,就是在Cmakelist文件里面修改的生成的可执行文件的名称。

pkg 和 type 两个属性结合起来,就等同于在终端中使用rosrun命令执行节点。

output 为 "screen"时,将节点的标准输出打印到屏幕终端,为 "log"时,将发送到log文件。默认 是log选项。

 

现在跳转 到gps_log.launch文件。

<?xml version="1.0"?><launch><node name="gps_log" pkg="gps_driver" type="gps_log_node"></node></launch>

这个launch 文件开启了一个在"gps_driver"包下叫 gps_log的节点。

 

还有一个 launch文件“GPS_IMU_odom.launch,里面 内容不再当前的 "gps_driver"里,所以暂时不管,按名字看应该是融合gps、imu、odom数据的启动文件。内容如下

<?xml version="1.0"?><launch><node name="gps_conv" pkg="gps_common" type="utm_odometry_node" output="screen"><!-- <remap from="odom" to="vo"/> --><remap from="fix"  to="inspvax" /><param name="rot_covariance" value="99999" /></node></launch>

 

 三个 launch 文件解析完毕,开启了两个节点,“gps_geter”和“gps_log”,先看重要的“gps_geter”。

在src文件找了一圈,没看到gps_geter这个名字的cpp文件,倒是看到了 gps_log.cpp,不,我偏要看gps_geter。

哦哦,弄错了,应该是找gps_talker_node 节点,去CMakeLists.txt文件里面翻了一下,看到这些

add_executable(gps_talker_node src/talker.cpp src/gps.cpp src/message_extractor.cpp src/gpgga.cpp src/gptra.cppsrc/heading.cppsrc/bestpos.cppsrc/inspvax.cppsrc/inspva.cppsrc/corrimudata.cppsrc/parsing_utils.cppsrc/localfile_port.cppsrc/header.cpp)
add_executable(gps_listener_node src/listener.cpp)
add_executable(gps_log_node src/gps_log.cpp)target_link_libraries(gps_talker_node   ${catkin_LIBRARIES})
target_link_libraries(gps_listener_node ${catkin_LIBRARIES})
target_link_libraries(gps_log_node ${catkin_LIBRARIES})add_dependencies(gps_talker_node ${PROJECT_NAME}_generate_messages_cpp)
add_dependencies(gps_listener_node ${PROJECT_NAME}_generate_messages_cpp)
add_dependencies(gps_log_node ${PROJECT_NAME}_generate_messages_cpp)

就是说,这个gps_talker_node可执行文件,是由以下13个cpp文件生成的。 

先来 后到,cpp文件一个个 来。代码就不贴出来了,太多了,到时候直接放工程压缩包。  

1、talker.cpp

// ROS节点初始化ros::init(argc, argv, "gps_geter");

在 ROS 节点初始化这里看到了 gps_geter  这个名字,这个名字和launch文件可以不一样,但是最好一样。这里名字会检测在之前有没有启动同名的节点,有则 会关闭 之前的 节点。

然后发布名为三个的topic,消息类型为gps_driver::Inspvax、gps_common::GPSFix和gps_driver::ReadedBuffer;这三个消息等待填充后进行发布。

  if(publish_inspvax_messages){inspvax_pub_ = node.advertise<gps_driver::Inspvax>("inspvax", 100);}if(publish_manu_gps_common_messages)//此消息由inspvax消息填充,因此发布此消息前,必须先发布inspvax消息{manu_gps_common_pub_ = node.advertise<gps_common::GPSFix>("manugpscommon", 100);}if(publish_readed_buffer_messages){readed_buffer_pub_ = node.advertise<gps_driver::ReadedBuffer>("readed_buffer", 100);}

然后就这句代码,将很多信息进行了解析和填充。

ReadResult result = ProcessData(fd_log);

其中填充了fd_log文件,并且填充了 gpgga_msgs、gptra_msgs、heading_msgs等等这种数据,具体分析在

gps.cpp 和 message_extractor.cpp 文件里面实现,最后通过发布器,将可用信息发布出去。

 

详细分析 gps.cpp 和 message_extractor.cpp 这两个文件的以后再说,暂时没用起来就没太深究,大概了解了一下解析过程。

 

这篇关于ROS 程序初读一(gps_driver)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822713

相关文章

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给