ros2 发布订阅1对n

1对1见ros2发布订阅

在原来基础上建立第二个subscribe

创建topic_subscribe_02.cpp

cd ros2_ws/src/example_topic_rclcpp/src
touch topic_subscribe_02.cpp

编辑topic_subscribe_02.cpp

gedit topic_subscribe_02.cpp

将topic_subscribe_01.cpp的代码复制到里边

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

class TopicSubscribe01 : public rclcpp::Node
{
public:
    TopicSubscribe01(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
          // 创建一个订阅者订阅话题
        command_subscribe_ = this->create_subscription<std_msgs::msg::String>("command", 10, std::bind(&TopicSubscribe01::command_callback, this, std::placeholders::_1));
    }

private:
     // 声明一个订阅者
    rclcpp::Subscription<std_msgs::msg::String>::SharedPtr command_subscribe_;
     // 收到话题数据的回调函数
    void command_callback(const std_msgs::msg::String::SharedPtr msg)
    {
        double speed = 0.0f;
        if(msg->data == "forward")
        {
            speed = 0.2f;
        }
        RCLCPP_INFO(this->get_logger(), "收到[%s]指令,发送速度 %f", msg->data.c_str(),speed);
    };
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    /*产生一个的节点*/
    auto node = std::make_shared<TopicSubscribe01>("topic_subscribe_01");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

将倒数第五行的“topic_subscribe_01”修改为“topic_subscribe_02”,ctrl+s保存

auto node = std::make_shared<TopicSubscribe01>("topic_subscribe_02");

修改CMakelists.txt

cd ..
gedit CMakeLists.txt

添加以下代码到文件夹中

add_executable(topic_subscribe_02 src/topic_subscribe_02.cpp)
ament_target_dependencies(topic_subscribe_02 rclcpp std_msgs)

install(TARGETS
topic_subscribe_02
  DESTINATION lib/${PROJECT_NAME}
)

保存关闭

package.xml文件不需要再作修改

编译项目

cd ros2_ws
colcon build
source install/setup.bash

打开发布者

ros2 run example_topic_rclcpp topic_publisher_01

在这里插入图片描述

打开订阅者

新建终端

cd ros2_ws
source install/setup.bash
ros2 run example_topic_rclcpp topic_subscribe_01

重复上一步操作,打开topic_subscribe_02

cd ros2_ws
source install/setup.bash
ros2 run example_topic_rclcpp topic_subscribe_02

在这里插入图片描述

新建终端,打开rqt

在这里插入图片描述可以看到,此时的发布者有两个订阅者topic_subscribe_01和02。
1对n结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值