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

这篇具有很好参考价值的文章主要介绍了ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

code review!

零.同时运行两个功能包

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

一.发布者功能包

1.1.文件结构

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

1.2.bool_publisher_node.cpp

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

#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

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

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

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

<?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.文件结构

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

2.2.bool_subscriber_node.cpp

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

#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

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

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

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码

<?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
ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯,ROS操作系统,数据结构
代码文章来源地址https://www.toymoban.com/news/detail-605681.html

<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>

到了这里,关于ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AdvancedCombine/高级组合,Futures/转义闭包转换为未来发布者 的详细使用

    1. 创建详细使用的高级组合 View AdvancedCombineBootcamp.swift 2. Futures 用于转义闭包转换为未来发布者,作用于统一接口   2.1 创建实例 View,FuturesBootcamp.swift

    2024年02月07日
    浏览(39)
  • 您想允许来自未知发布者的以下程序对此计算机进行更改码?

    问题 当开发的程序运行在客户的电脑上会弹出该提示框,对用户体验不好。 现象的原因与解决方案, 方法1: 一个是客户的电脑的【用户账户控制设置】权限设置【始终通知】太高(这个是win10) 可以设置为【从不通知】,就不会出现弹框了。但是这样对开发人员发布软件

    2024年02月04日
    浏览(81)
  • Pycharm安装后打开提示:此应用无法在你的电脑上运行,若要找到合适于你的电脑的版本,请咨询发布者。

    电脑做了新系统,windows10专业版,64位, 下载的是:pycharm-professional-2022.3.2-aarch64.exe ,安装后提示“无法在电脑上运行”好奇怪的问题,我怀疑是之前安装过重作系统后过了试用期导致的,又卸载后安装了一个社区版的:pycharm-community-2022.3.2-aarch64.exe,安装后同样的提示 查了半

    2024年02月16日
    浏览(141)
  • C++发布订阅者模式:实现简单消息传递系统

      概述: 这个C++示例演示了发布者-订阅者模式的基本实现。通过 `Event` 类,发布者 `Publisher` 发送数据,而订阅者 `Subscriber` 订阅并处理数据。通过简单的回调机制,实现了组件间松散耦合的消息传递。 好的,我将为你提供一个简单的C++实例,演示如何使用发布者-订阅者模式

    2024年03月17日
    浏览(55)
  • Microsoft Defender SmartScreen 阻止了无法识别的应用启动,Windows已阻止此软件和无法验证发布者两个问题的解决方法(以腾讯云服务器为例的三种保姆级图文解决方法)

    提示:转到日常小技巧专栏,观看更多内容! 点我直达–日常小技巧专栏 在使用腾讯云服务器2019server的时候(这个安全提示好像是win7和win10的特色),运行一些网上下载的软件的时候有安全提示: 强行进行本次运行(本次可以运行,但是之后可能还是会有弹窗) 信任单个

    2024年02月03日
    浏览(91)
  • flutter StreamSubscription 订阅者 stream

    当您使用[Stream.listen]收听[Stream]时 则返回[StreamSubscription]对象 ListStreamSubscription? subscriptions = []; Flutter异步编程-Stream Future和stream的区别(Future返回一个异步的结果。stream返回多个结果,持续监听) Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步

    2024年02月07日
    浏览(54)
  • ROS学习笔记(二):ROS话题的发布与订阅

    第十讲  发布者Publisher的编程 1. 创建功能包 learning_topic  $ cd ~/test1/src  $ catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs turtlesim 2.执行C++文件程序如下:放在创建的功能包的/learning_topic/src里 程序名为velocity_publisher.cpp 2.如何实现一个发布者(发布到ros自带节点 ) (1)初

    2024年02月04日
    浏览(79)
  • 【ROS】ROS 发布和订阅压缩图像消息 CompressedImage

    参考 cv_bridge 文档 其中 “jpg” 表示将图像压缩的目标格式,还有很多其他参数可选,如下所示 但亲测 “jpg” 压缩比最大,图像传输占用的带宽最少 其中 “bgr8” 表示将图像解析为 “bgr8” 格式,也是 opencv 默认的图像格式 参考 rospy wiki 教程 参考 opencv 中 imencode 与 imdecod

    2024年04月16日
    浏览(39)
  • 推荐一个拥有386万订阅者,10000多免费学习视频的频道

    自从开始搞YouTube中文配音以来,我们一直是7*24小时,夜以继日的在批量处理一些优质的学习资源,一方面是翻译,另一方面是配音。这样用户在打开的时候,就能获得经过我们优化的翻译和配音了。 这次我们刚刚处理完一个油管上非常火爆的​IT类学习频道: Edureka 。 该频

    2024年02月08日
    浏览(36)
  • ROS实现一个节点同时发布订阅多个话题(C++版)

      如果想在一个节点同时发布订阅多个话题就要使用到多线程机制,在C++中如何使用多线程,在C++中开多线程模板已经有了介绍,就是下面这个:    但是有一点需要注意的是,创建节点的涉及到一个主线程,如果想同时发布订阅是不能使用主线程的(也就是不能主线程发

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包