ROS2-教你如何订阅话题

手把手教你如何订阅话题,并通过终端发布话题,实现回调中打印收到的消息内容。

1)通过指令生成ros2 package包结构:

ros2 pkg create topic_subscription --build-type ament_cmake --dependencies rclcpp std_msgs

2)创建一个 my_subscriber.cpp文件,并在其中订阅/say的话题,并打印日志:

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
/**
* 创建一个继承自rclcpp::Node的类MinimalSubscriber
* 这样可以使用ROS2节点的所有功能。
*/
class MinimalSubscriber : public rclcpp::Node
{
public:
  MinimalSubscriber()
  : Node("minimal_subscriber") // 节点构造函数,设置节点名称为"minimal_subscriber"
  {
    // 创建订阅者,订阅名为"/say"的话题,消息类型为std_msgs::msg::String
    // 10是队列长度,std::bind将成员函数topic_callback绑定为消息到达时的回调函数
    // _1是一个占位符,表示回调函数需要一个参数
    subscription_ = this->create_subscription<std_msgs::msg::String>(
      "/say", 10, std::bind(&MinimalSubscriber::topic_callback, this, std::placeholders::_1));
  }
private:
  /**
   * 定义消息回调函数
   * 当有消息发布到"/say"话题时,这个函数会被自动调用
   * @param msg 接收到的String消息的常量共享指针
   */
  void topic_callback(const std_msgs::msg::String::SharedPtr msg) const
  {
    // 在终端打印接收到的消息内容
    // RCLCPP_INFO是ROS2中用于打印信息日志的宏
    RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
  }
  
  // 声明订阅者成员变量
  rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;
};
/**
* 程序主函数
*/
int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv); // 初始化ROS2 C++客户端库
  rclcpp::spin(std::make_shared<MinimalSubscriber>()); // 创建节点实例并进入自旋,等待消息到来
  rclcpp::shutdown(); // 关闭ROS2
  return 0;
}

3)编译与运行

i. 配置CMakeLists.txt:确保在你的功能包的CMakeLists.txt文件中添加了可执行文件并设置了依赖。

add_executable(my_subscriber src/my_subscriber.cpp)
ament_target_dependencies(my_subscriber rclcpp std_msgs)
install(TARGETS my_subscriber
  DESTINATION lib/${PROJECT_NAME})

ii. 编译工作空间:在你的ROS2工作空间根目录下执行:

colcon build --packages-select topic_subscription

iii. 运行订阅者:打开一个终端,先执行source install/setup.bash设置环境,然后运行:

ros2 run topic_subscription my_subscriber
ros2 topic pub /say std_msgs/msg/String data:\ \'hello_world\'\

打印的日志:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值