当前位置: 首页 > news >正文

ros2 消息订阅与发布示例 c++

以下是一个完整的ROS2 C++消息订阅与发布示例,包含节点创建、订阅者、发布者及回调函数实现:

#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>using namespace std::chrono_literals;class MinimalNode : public rclcpp::Node {
public:MinimalNode() : Node("minimal_node"), count_(0) {// 创建发布者(话题名:message,队列大小10)publisher_ = this->create_publisher<std_msgs::msg::String>("message", 10);// 创建订阅者(话题名:chatter,队列大小10)subscription_ = this->create_subscription<std_msgs::msg::String>("chatter", 10, std::bind(&MinimalNode::topic_callback, this, std::placeholders::_1));// 创建定时器(周期2秒)timer_ = this->create_wall_timer(2s, std::bind(&MinimalNode::timer_callback, this));}private:// 定时器回调:发布消息void timer_callback() {auto message = std_msgs::msg::String();message.data = "Hello ROS2! Count: " + std::to_string(count_++);RCLCPP_INFO(this->get_logger(), "发布消息: '%s'", message.data.c_str());publisher_->publish(message);}// 订阅回调:处理接收到的消息void topic_callback(const std_msgs::msg::String & msg) {RCLCPP_INFO(this->get_logger(), "收到消息: '%s'", msg.data.c_str());}rclcpp::TimerBase::SharedPtr timer_;rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;size_t count_;
};int main(int argc, char * argv[]) {rclcpp::init(argc, argv);rclcpp::spin(std::make_shared<MinimalNode>());rclcpp::shutdown();return 0;
}

代码解析

  1. 节点初始化

    • 继承rclcpp::Node创建MinimalNode
    • 构造函数中初始化节点名称为minimal_node
  2. 发布者设置

    • 使用create_publisher创建发布者
    • 话题名称:message
    • 消息类型:std_msgs::msg::String
    • 队列大小:10
  3. 订阅者设置

    • 使用create_subscription创建订阅者
    • 话题名称:chatter
    • 绑定回调函数topic_callback
    • 使用std::bind处理回调参数
  4. 定时器机制

    • 每2秒触发一次timer_callback
    • 发布包含计数器的消息
  5. 回调函数

    • timer_callback:构造并发布消息
    • topic_callback:处理接收到的订阅消息

编译配置(CMakeLists.txt)

cmake_minimum_required(VERSION 3.5)
project(ros2_example)find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)add_executable(minimal_node src/minimal_node.cpp)
ament_target_dependencies(minimal_node rclcpp std_msgs)install(TARGETS minimal_nodeDESTINATION lib/${PROJECT_NAME}
)ament_package()

运行步骤

  1. 编译:
colcon build --packages-select ros2_example
source install/setup.bash
  1. 运行节点:
ros2 run ros2_example minimal_node
  1. 测试效果:
  • 终端1:运行节点
  • 终端2:发布测试消息
    ros2 topic pub /chatter std_msgs/String "data: 'Test Message'"
    
  • 终端3:查看发布的话题
    ros2 topic echo /message
    

关键特性说明

  1. 生命周期管理

    • 自动处理节点初始化、自旋和关闭
    • 使用rclcpp::spin保持节点活跃
  2. QoS配置

    • 默认使用system_default服务质量
    • 可通过rclcpp::QoS自定义配置(如可靠性、历史记录等)
  3. 日志系统

    • 使用RCLCPP_INFO等宏输出日志
    • 支持不同日志级别(DEBUG, INFO, WARN, ERROR)
  4. 时间处理

    • 使用std::chrono_literals定义时间间隔
    • 支持纳秒级精度控制

此示例展示了ROS2 C++开发的核心模式,包括节点创建、话题通信、定时器使用及日志处理,可作为复杂应用的基础模板。

http://www.dtcms.com/a/453818.html

相关文章:

  • 廊坊网站建设廊坊企业文化建设网站
  • 纸做的花朵成品网站个人简介html代码模板
  • 【精品资料鉴赏】证券数据治理项目投标技术方案
  • AI大模型核心概念
  • 企业网站模板seo公益建设网站的作用
  • 阿里巴巴1688怎么做网站自建网站阿里云备案通过后怎么做
  • 成都规划网站佛山网上办事大厅官网
  • AI-RAN Sionna 5G NR 开发者套件
  • 百度商桥怎么添加到网站山东网站
  • iis 里没有网站柯桥网站建设
  • 外汇返佣网站建设有了域名之后怎么做自己的网站
  • 模板网站配置文件域名注册 网站建设 好做吗
  • 网站开发工具安卓版泉州网站建设方案服务
  • 长沙网站建设长沙网站制作淘宝优惠券网站建设总代
  • 河北云网站建设福建联泰建设集团网站
  • 基于单片机的蓝牙可调PWM波形发生器设计
  • 网站如何生成静态页面英国网站建设
  • 网站建设人员分工wordpress菜单导航代码
  • 怎么查网站外链企业小程序注册
  • OpenCV(一):创建显示窗口
  • 国际设计网站有哪些吉林省吉林市天气预报
  • 全响应网站制作北京中燕建设公司网站
  • TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 张量(Tensor)的定义与操作
  • 网站授权合同网站服务器查询
  • 网站建设性能分析淘宝网站店铺请人做
  • 泰州网站专业制作如何免费申请域名和网址
  • C61-结构体数组
  • XPath 节点
  • 乐清公司做网站服务外包公司是干什么的
  • MySQL————数据库基础