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

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3