ROS 程序初读一(gps_driver)

2023-05-16

先来看到 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.cpp
  src/heading.cpp
  src/bestpos.cpp
  src/inspvax.cpp
  src/inspva.cpp
  src/corrimudata.cpp
  src/parsing_utils.cpp
  src/localfile_port.cpp
  src/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 这两个文件的以后再说,暂时没用起来就没太深究,大概了解了一下解析过程。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS 程序初读一(gps_driver) 的相关文章

  • linux 抓包tcp

    tcpdump是linux下的网络数据包截获分析工具 在linux的日常网络管理中 xff0c tcpdump的使用频率很高 xff0c 熟练掌握对提高工作效率很有帮助 支持针对网络层 协议 主机 网络或端口的过滤 并提供and or no
  • STM32串口中断接收一帧数据

    STM32串口中断接收一帧数据 IDLE即串口空闲中断 xff0c 串口收到一帧数据后 xff0c 发生的中断 比如说给单片机一次发来1个字节 xff0c 或者一次发来8个字节 xff0c 这些一次发来的数据 xff0c 就称为一帧数据 x
  • shell中各种括号的作用()、(())、[]、[[]]、{}

    一 小括号 xff0c 圆括号 xff08 xff09 1 单小括号 命令组 括号中的命令将会新开一个子shell顺序执行 xff0c 所以括号中的变量不能够被脚本余下的部分使用 括号中多个命令之间用分号隔开 xff0c 最后一个命令可以没
  • 双极性(相)四线步进电机TC1508S(双通道直流马达驱动器)

    实验现象 xff1a 下载程序后 xff0c 步进电机旋转 接线说明 xff1a 具体接线图可见开发攻略对应实验的 实验现象 章节 1 xff0c 单片机 gt 四线双极性步进电机模块 P10 gt IA P11 gt IB P12 gt
  • c语言实现广播(udp协议)

    广播 xff1a 顾名思义可以把自己的数据发送给在特定范围内的所有人 xff1b 我们网络编程中的广播一般是通过特定的广播地址把自己的数据发送给局域网内当前在线的客户端 我们可以使用命令查看我们Linux下当前的广播地址 xff1a ifc
  • C++中的结构体与类

    C 43 43 中继承了C语言中的结构体 xff0c 但同时也在C语言的基础上新增了一个类 class 的概念 xff0c 类可以说是C语言中结构体的升级版 这里主要细讲C 43 43 中的类 1 C 43 43 结构体 2 C 43 43
  • 在VMware的Ubuntu18.04搭建vsftp(上传文件)和apache2(http服务)

    在VMware的Ubuntu18 04下 xff1a 搭建vsftp xff08 本机win上传文件 xff09 xff1a 第一步安装vsftp xff1a 直接安装可能会报错Ubuntu 34 E Unable to locate pa
  • 安装ROS时, rosdep update出错解决办法

    网上查了一下 原因基本指向一个 网速问题 按如下步骤进行操作 步骤1 将电脑连接到手机热点 寄希望可以提高网速 依然出错 出错内容大致如下 reading in sources list data from etc ros rosdep s
  • get请求的参数包含中括号[]时,报错400

    1 问题描述 在正式环境中 xff0c 上传文件 2003年鉴 docx 时 xff0c 报错400 但是 xff0c 只有此文件上传时会报错 xff0c 其他文件是正常的 xff08 后文为了方便描述 xff0c 将问题文件称为a xff
  • GPS模块实验

    一 GPS简介 全球定位系统 Global Positioning System GPS 是一种以空中卫星为基础的高精度无线电导航的定位系统 它在全球任何地方以及近 空间都能够提供准确的地理位置 车行速度及精确的时间信息 GPS主要由三大组
  • Python异常捕捉try except else finally有return时执行顺序探究

    在没有return的情况下 try 尝试执行的代码 except 错误类型1 xff1a 针对错误类型1 xff0c 对应的代码处理 except 错误类型2 针对错误类型2 xff0c 对应的代码处理 except 错误类型3 xff0c
  • Linux curl命令最全详解

    目录 一 最常用的curl命令 1 发送GET请求 2 发送POST请求 3 发送json格式请求 xff1a 二 curl命令语法与curl命令参数详解 1 curl命令语法 2 curl命令参数详解 三 Linux curl命令退出码
  • ubuntu16.04安装NS2出现问题及解决办法

    NS2安装与使用 下载NS2软件包到工作目录 地址http nchc dl sourceforge net sourceforge nsnam ns allinone 2 33 tar gz 解压tar zxf ns allinone 2
  • 阿里评测—空闲时间/公益机会/公益积分

    公益机会需要从开始到结束全程参与才能获得积分 span class token keyword import span java span class token punctuation span io span class token p
  • 求二叉树的结点个数

    求二叉树的结点个数 xff0c 如果根节点为空 xff0c 则返回 0 include lt iostream gt include lt malloc h gt using namespace std static int D 61 0
  • 记录android studio 遇到的错误和解决办法

    1 关于android studio 出现Error Execution failed for task app preDebugAndroidTestBuild 39 的解决办法 https blog csdn net fighting
  • 与WebRTC实时通信

    与WebRTC实时通信 一 介绍 WebRTC是一个开源项目 xff0c 可以在Web和本机应用程序中实现音频 xff0c 视频和数据的实时通信 WebRTC有几个JavaScript API xff1a getUserMedia xff1
  • webRTC Android与Web 视频通信

    对于视频聊天 xff0c 首先需要访问用户的音频和视频 在web上 xff0c 有getUserMedia API 调用此API xff0c 它会为您提供MediaStream对象 xff0c 用于来自摄像头和麦克风的音频和视频 下面是代码
  • Android studio安装的痛苦历程

    安装需要IDE和SDK xff0c 安装位置一致 xff0c 我是D Android AndroidStudio 目录下as和sdk 我在第一次装AndroidStudio 创建第一个项目时 在没有创建成功的时候就取消了 然后再次导入别人的
  • CentOS7 无法上网问题分析

    主机现象 xff0c IP及Mac地址都配置完后 xff0c 却ping不通baidu com xff0c 只能ping通局域网 xff0c 一直出现 xff1a ping unknown host baidu com 查看DNS服务器 网

随机推荐