ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯

news2024/12/23 9:19:53

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯

code review!

文章目录

  • ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯
    • 零.同时运行两个功能包
    • 一.发布者功能包
      • 1.1.文件结构
      • 1.2.bool\_publisher\_node.cpp
      • 1.3.CMakeLists.txt
      • 1.4.package.xml
    • 二.订阅者功能包
      • 2.1.文件结构
      • 2.2.bool\_subscriber\_node.cpp
      • 2.3.CMakeLists.txt
      • 2.4.package.xml
    • 三.launch文件(该launch可同时启动两个功能包的rosnode)

零.同时运行两个功能包

请添加图片描述

一.发布者功能包

1.1.文件结构

在这里插入图片描述

1.2.bool_publisher_node.cpp

在这里插入图片描述
代码

#include <ros/ros.h>
#include <std_msgs/Bool.h>

int main(int argc, char **argv) {
    // 初始化ROS节点
    ros::init(argc, argv, "bool_publisher_node");
    ros::NodeHandle nh;

    // 创建一个ROS发布器,发布名为 "bool_topic" 的topic,消息类型为std_msgs::Bool
    ros::Publisher bool_pub = nh.advertise<std_msgs::Bool>("/bool_topic", 1);

    // 在这里执行你希望的操作,比如循环发布bool状态
    ros::Rate loop_rate(1); // 发布频率为1Hz
    bool status = false;
    while (ros::ok()) {
        // 执行你的业务逻辑来更新bool状态,这里仅为示例
        status = !status; // 反转bool状态

        // 创建消息并发布
        std_msgs::Bool msg;
        msg.data = status;
        bool_pub.publish(msg);

        ros::spinOnce(); // 处理订阅的消息(如果有)

        loop_rate.sleep();
    }

    return 0;
}

1.3.CMakeLists.txt

在这里插入图片描述
代码

cmake_minimum_required(VERSION 3.0.2)
project(publisher_bool_topic)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

catkin_package()

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(bool_publisher_node src/bool_publisher_node.cpp)
target_link_libraries(bool_publisher_node ${catkin_LIBRARIES})

install(TARGETS bool_publisher_node
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

1.4.package.xml

在这里插入图片描述
代码

<?xml version="1.0"?>
<package format="2">
  <name>publisher_bool_topic</name>
  <version>0.0.0</version>
  <description>The publisher_bool_topic package</description>

  <!-- One maintainer tag required, multiple allowed, one person per tag -->
  <!-- Example:  -->
  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  <maintainer email="user@todo.todo">user</maintainer>


  <!-- One license tag required, multiple allowed, one license per tag -->
  <!-- Commonly used license strings: -->
  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  <license>TODO</license>


  <!-- Url tags are optional, but multiple are allowed, one per tag -->
  <!-- Optional attribute type can be: website, bugtracker, or repository -->
  <!-- Example: -->
  <!-- <url type="website">http://wiki.ros.org/publisher_bool_topic</url> -->


  <!-- Author tags are optional, multiple are allowed, one per tag -->
  <!-- Authors do not have to be maintainers, but could be -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->


  <!-- The *depend tags are used to specify dependencies -->
  <!-- Dependencies can be catkin packages or system dependencies -->
  <!-- Examples: -->
  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  <!--   <depend>roscpp</depend> -->
  <!--   Note that this is equivalent to the following: -->
  <!--   <build_depend>roscpp</build_depend> -->
  <!--   <exec_depend>roscpp</exec_depend> -->
  <!-- Use build_depend for packages you need at compile time: -->
  <!--   <build_depend>message_generation</build_depend> -->
  <!-- Use build_export_depend for packages you need in order to build against this package: -->
  <!--   <build_export_depend>message_generation</build_export_depend> -->
  <!-- Use buildtool_depend for build tool packages: -->
  <!--   <buildtool_depend>catkin</buildtool_depend> -->
  <!-- Use exec_depend for packages you need at runtime: -->
  <!--   <exec_depend>message_runtime</exec_depend> -->
  <!-- Use test_depend for packages you need only for testing: -->
  <!--   <test_depend>gtest</test_depend> -->
  <!-- Use doc_depend for packages you need only for building documentation: -->
  <!--   <doc_depend>doxygen</doc_depend> -->
  <buildtool_depend>catkin</buildtool_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

二.订阅者功能包

2.1.文件结构

在这里插入图片描述

2.2.bool_subscriber_node.cpp

在这里插入图片描述
代码

#include <ros/ros.h>
#include <std_msgs/Bool.h>

// 回调函数,处理接收到的消息
void boolCallback(const std_msgs::Bool::ConstPtr& msg) {
    bool status = msg->data;
    ROS_INFO("Received bool status: %s", status ? "true" : "false");
}

int main(int argc, char** argv) {
    // 初始化ROS节点
    ros::init(argc, argv, "bool_subscriber_node");
    ros::NodeHandle nh;

    // 创建一个ROS订阅器,用于接收名为 "bool_topic" 的topic
    ros::Subscriber bool_sub = nh.subscribe("/bool_topic", 1, boolCallback);

    // 循环等待接收消息
    ros::spin();

    return 0;
}

2.3.CMakeLists.txt

在这里插入图片描述
代码

cmake_minimum_required(VERSION 3.0.2)
project(subscriber_bool_topic)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

catkin_package()

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(bool_subscriber_node src/bool_subscriber_node.cpp)
target_link_libraries(bool_subscriber_node ${catkin_LIBRARIES})

install(TARGETS bool_subscriber_node
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

2.4.package.xml

在这里插入图片描述
代码

<?xml version="1.0"?>
<package format="2">
  <name>subscriber_bool_topic</name>
  <version>0.0.0</version>
  <description>The subscriber_bool_topic package</description>

  <!-- One maintainer tag required, multiple allowed, one person per tag -->
  <!-- Example:  -->
  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  <maintainer email="user@todo.todo">user</maintainer>


  <!-- One license tag required, multiple allowed, one license per tag -->
  <!-- Commonly used license strings: -->
  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  <license>TODO</license>


  <!-- Url tags are optional, but multiple are allowed, one per tag -->
  <!-- Optional attribute type can be: website, bugtracker, or repository -->
  <!-- Example: -->
  <!-- <url type="website">http://wiki.ros.org/subscriber_bool_topic</url> -->


  <!-- Author tags are optional, multiple are allowed, one per tag -->
  <!-- Authors do not have to be maintainers, but could be -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->


  <!-- The *depend tags are used to specify dependencies -->
  <!-- Dependencies can be catkin packages or system dependencies -->
  <!-- Examples: -->
  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  <!--   <depend>roscpp</depend> -->
  <!--   Note that this is equivalent to the following: -->
  <!--   <build_depend>roscpp</build_depend> -->
  <!--   <exec_depend>roscpp</exec_depend> -->
  <!-- Use build_depend for packages you need at compile time: -->
  <!--   <build_depend>message_generation</build_depend> -->
  <!-- Use build_export_depend for packages you need in order to build against this package: -->
  <!--   <build_export_depend>message_generation</build_export_depend> -->
  <!-- Use buildtool_depend for build tool packages: -->
  <!--   <buildtool_depend>catkin</buildtool_depend> -->
  <!-- Use exec_depend for packages you need at runtime: -->
  <!--   <exec_depend>message_runtime</exec_depend> -->
  <!-- Use test_depend for packages you need only for testing: -->
  <!--   <test_depend>gtest</test_depend> -->
  <!-- Use doc_depend for packages you need only for building documentation: -->
  <!--   <doc_depend>doxygen</doc_depend> -->
  <buildtool_depend>catkin</buildtool_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>

三.launch文件(该launch可同时启动两个功能包的rosnode)

bool_topic.launch
在这里插入图片描述
代码

<launch>
    <!-- 启动publisher_bool_topic节点 -->
    <node name="publisher_bool_node" pkg="publisher_bool_topic" type="bool_publisher_node" output="screen" />

    <!-- 启动subscriber_bool_topic节点 -->
    <node name="subscriber_bool_node" pkg="subscriber_bool_topic" type="bool_subscriber_node" output="screen" />
</launch>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot实战(二十一)集成 TLog 日志

目录 一、简介二、Maven依赖三、启动类集成四、测试1.服务简介2.服务A代码DemoController.javaDemoFeignClient.java 3.服务B代码4.测试结果 补充一&#xff1a;自定义日志标签模板补充二&#xff1a;SpanId的生成规则补充三&#xff1a;业务标签1.打印入参2.指定连接符3.打印常…

【深度学习-卷积神经网络CNN-基础】

文章目录 发展历史卷积神经网络的应用领域卷积的原理和作用卷积和传统的神经网络的区别 卷积网络的整体架构输入层卷积层池化层全连接层卷积和池化叠加多层卷积可以处理什么类型的数据卷积的超参数卷积最大的优势 卷积的细节卷积的原理卷积的参数卷积的次数步长 卷积核尺寸 边缘…

成为UI设计高手:如何规划和创建UI设计组件库!

今天给大家分享一篇关于组件化设计的总结&#xff0c;希望可以带给大家更多设计思考。 什么是组件化 组件化化是构成界面的最基础元素和重复出现控件的集合体&#xff0c;也就是常说的组件库。通过对基础元素和控件的规范命名与排列组合&#xff0c;最终形成一个可快速调用与便…

每日一题——地下迷宫(迷宫问题II)

迷宫问题&#xff08;地下迷宫&#xff09;——II 题目链接 前言&#xff1a; 这题是在昨天迷宫问题——I的基础上进行的变形&#xff0c;因此&#xff0c;如果昨天的题目没看或者对迷宫问题不怎么了解&#xff0c;建议先看看昨天的解析。 迷宫问题——I源代码&#xff1a; …

安装redis,适配阿里云服务器,Liunx安装redis

下载redis以及编译安装 下载redis文件 wget http://download.redis.io/releases/redis-6.0.8.tar.gz #下载redis压缩文件 tar xzf redis-6.0.8.tar.gz #解压缩 cd redis-6.0.8 make 查看是否安装了gcc编译输入gcc --version如果没有…

AtcoderABC236场

A - chukodaiA - chukodai 题目大意 题目要求交换字符串S中第a个字符和第b个字符的位置&#xff0c;并输出结果。 思路分析 借用临时变量t&#xff0c;进行记录交换。 时间复杂度 O(∣S∣) 输出交换后的字符串的时间复杂度为O(∣S∣)&#xff0c;其中∣S∣表示字符串SS的…

autohotkey实战:窗口透明化

文章目录 实现方法代码讲解WinGet和WinSet 注 本文采用的是V1版本语法 实现方法 窗口透明不仅实用性强&#xff0c;关键是非常炫酷&#xff0c;如果用AHK实现一个实时调节窗口透明度的工具&#xff0c;那么就可以一边敲代码&#xff0c;一边透过半透明的IDE&#xff0c;愉快地…

vue 3.0 如何实现 文本框只能输入数字 避免文字和符号

<input v-model.number"form.payTime" :min"0" type"number" οninput"valuevalue.replace(/[^0-9.]/g,)" type"text" /> v-model 后面的.numer 一定要加上不然没效果 οninput"valuevalue.replace(/[^0-9.]/g…

Pdb蛋白质数据库网址!+30蛋白质数据库网站!

蛋白质数据库是指专门存储蛋白质相关信息的数据库。它们收集、整理和存储大量的蛋白质数据&#xff0c;包括蛋白质序列、结构、功能、互作关系、表达模式、疾病关联等信息。蛋白质数据库提供了对这些数据的检索、查询和分析功能&#xff0c;为科学研究人员、生物信息学家和药物…

为什么deferred probe将设备挂入延迟链表而不是将驱动挂入延迟链表

1. 代码流程(drivers/base/dd.c) 可以看到在probe失败的时候(驱动返回-EPROBE_DEFER)是把设备挂到deferred_probe_pending_list上面的。 这就带来了一个疑问: 我当前明明是驱动加载的过程(driver_attach()->bus_for_each_dev()), 为什么要将设备挂到pending list上面而不是…

Maven高级(继承与聚合+私服)

分模块设计和开发 为什么要分模块设计&#xff1f; 一个项目往往是分为好几个模块的 如果不同模块全写在一个项目里面 所有的程序员都要调用这有个项目就难以维护 比如我们之前设计的板块 就不太合理&#xff0c;现在我们把实体类和对应的工具类单独开出两个maven模块存储 然…

安装openai和简单使用

Anaconda的界面创建open ai环境&#xff0c;选择python10 控制台 #或者 conda info -e 注意不是anaconda命令开头 (base) C:\Users\su>conda env list # conda environments: # base * F:\anaconda3 openai F:\anaconda3\envs\opena…

TCP的拥塞控制、提高网络利用率的方法【TCP原理(笔记四)】

文章目录 拥塞控制慢启动 提高网络利用率的规范Nagle算法延迟确认应答捎带应答 拥塞控制 有了TCP的窗口控制&#xff0c;收发主机之间即使不再以一个数据段为单位发送确认应答&#xff0c;也能够连续发送大量数据包。然而&#xff0c;如果在通信刚开始时就发送大量数据&#x…

新能源汽车交流充电桩CP信号详解

随着新能源汽车的推广&#xff0c;交流充电桩迎来了巨大的市场需求&#xff0c;人们对车辆充电的便利性、安全性有着越来越高的要求。CP信号主要用于交流充电桩&#xff0c;充电桩和汽车之间只能通过CP信号进行通讯&#xff0c;判断、控制充电电流和状态。 汽车充电桩CP信号…

QT之自定义表格控件

继承QWidget来绘制的一款自定义控件&#xff0c;设计原因是因为Qt自带的QTableWidget的大批量操作很卡&#xff0c;特别是在嵌入式设备上时。 该控件特色功能&#xff1a; 1、支持拖动自适应。 2、支持各种颜色&#xff0c;字体&#xff0c;行列数设置。 代码如下&#xff1a; …

win10安装cuda11.4及cudnn

查看nvidia驱动版本 在windows终端键入nvidia-smi&#xff0c;查看nvidia显卡驱动。显卡驱动的版本决定了CUDA的版本下限。 如果出现上述的问题&#xff0c;则终端进入C:\Program Files\NVIDIA Corporation\NVSMI文件夹内&#xff0c;再键入nvidia-smi&#xff0c;可以看到我…

[MySQL]MySQL视图特性

[MySQL]MySQL视图特性 文章目录 [MySQL]MySQL视图特性1. 视图的概念2. 视图的基本操作创建视图删除视图 3. 视图规则和限制 1. 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。基表是对…

Git标签管理(对版本打标签,起别名)

tag 理解标签创建标签git tag [name]git show [tagname] 操作标签删除标签git tag -d < tagname > 推送某个标签到远程git push origin < tagname > 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。 …

数据库备份mysqldump、mydumper、xtrabackup

数据库备份&#xff0c;数据库为school&#xff0c;素材如下 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );创建sco…

《面试1v1》如何提高远程用户的吞吐量

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…