ROS学习笔记13(测试一个简单的消息发布和消息订阅)

本文介绍如何在ROS环境中使用C++和Python进行消息的发布与订阅。通过在catkin工作空间中运行特定的ROS节点,您可以实现简单的消息通信。首先启动ROS核心,然后分别运行消息发布者和订阅者的示例程序。最后,使用Ctrl-C来优雅地结束进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 运行消息发布

$ roscore
# In your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash
$ rosrun beginner_tutorials talker      (C++)
$ rosrun beginner_tutorials talker.py   (Python)

2 运行消息订阅

$ rosrun beginner_tutorials listener     (C++)
$ rosrun beginner_tutorials listener.py  (Python) 

最后使用Ctrl-C来结束终端运行。

在Robot Operating System (ROS) 2中,一个节点(Node)可以同时发布(Publish)订阅(Subscribe)消息。这是通过ROS消息传递系统(Message Passing)来完成的。以下是基本流程: 1. 发布消息:当你创建一个发布者(Publisher)时,你需要指定你想发布的消息的主题(Topic),以及消息的数据类型(Datatype)。发布者将消息放入该主题,并其他节点可以通过订阅这个主题来接收。 ```cpp #include <rclcpp/rclcpp.hpp> #include <sensor_msgs/msg/image.hpp> class ImagePublisher : public rclcpp::Node { public: ImagePublisher() { img_msg_ = std::make_shared<sensor_msgs::msg::Image>(); // 创建发布者 image_publisher_ = this->create_publisher<sensor_msgs::msg::Image>("image_topic", 10); } void publishImage(const cv::Mat& image) { // 将OpenCV图像转换为ROS Image Message toROSImage(image, *img_msg_); // 发布消息 image_publisher_->publish(*img_msg_); } private: rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr image_publisher_; sensor_msgs::msg::Image img_msg_; }; ``` 2. 订阅消息:另一个节点可以通过创建订阅者Subscriber来监听特定的话题。当发布者发送消息时,订阅者会收到并处理这些消息。 ```cpp class ImageSubscriber : public rclcpp::Node { public: ImageSubscriber() { // 创建订阅者 image_subscriber_ = this->create_subscription<sensor_msgs::msg::Image>("image_topic", 10, [this](const sensor_msgs::msg::Image::SharedPtr msg) { handleReceivedImage(*msg); }); } private: void handleReceivedImage(const sensor_msgs::msg::Image::SharedPtr img_msg) { // 处理接收到的图像消息 cv::Mat received_image; fromROSImage(img_msg, received_image); // ... 进行进一步处理 } rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr image_subscriber_; }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值