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

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)

零.同时运行两个功能包

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

一.发布者功能包

1.1.文件结构

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

1.2.bool_publisher_node.cpp

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯_第3张图片
代码

#include 
#include 

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通讯_第4张图片
代码

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通讯_第5张图片
代码


<package format="2">
  <name>publisher_bool_topicname>
  <version>0.0.0version>
  <description>The publisher_bool_topic packagedescription>

  
  
  
  <maintainer email="[email protected]">usermaintainer>


  
  
  
  <license>TODOlicense>


  
  
  
  


  
  
  
  


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <buildtool_depend>catkinbuildtool_depend>


  
  <export>
    

  export>
package>

二.订阅者功能包

2.1.文件结构

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

2.2.bool_subscriber_node.cpp

ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯_第7张图片
代码

#include 
#include 

// 回调函数,处理接收到的消息
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通讯_第8张图片
代码

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通讯_第9张图片
代码


<package format="2">
  <name>subscriber_bool_topicname>
  <version>0.0.0version>
  <description>The subscriber_bool_topic packagedescription>

  
  
  
  <maintainer email="[email protected]">usermaintainer>


  
  
  
  <license>TODOlicense>


  
  
  
  


  
  
  
  


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <buildtool_depend>catkinbuildtool_depend>


  
  <export>
    

  export>
package>

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

bool_topic.launch
ROS框架——发布者功能包和订阅者功能包进行bool类型数据结构的topic通讯_第10张图片
代码

<launch>
    
    <node name="publisher_bool_node" pkg="publisher_bool_topic" type="bool_publisher_node" output="screen" />

    
    <node name="subscriber_bool_node" pkg="subscriber_bool_topic" type="bool_subscriber_node" output="screen" />
launch>

你可能感兴趣的:(ROS操作系统,数据结构)