编写简单的订阅者(C++) [ROS1和ROS2对比]

ROS1订阅话题

demo下载:

标题

demo下载:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
wget -O publisher_member_function.cpp https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/listener/listener.cpp

回调函数

  void chatterCallback(const std_msgs::String::ConstPtr& msg)
   {
     ROS_INFO("I heard: [%s]", msg->data.c_str());
   }

这是当chatterCallback话题发布新数据时将调用的回调函数。【类似于中断函数】消息在Boost Shared_PTR中传递。

话题订阅

ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

ROS将在新消息到达时调用chat terCallback()函数。第二个参数是队列大小,表示如果接受到的数据多于1000条时,就丢弃1000条数据以前的信息。

循环

ros::spin();

ros::spin();
进入循环,以尽可能快的速度调用消息回调。不过,它不会占用太多CPU。一旦ros::ok()返回FALSE,ROS::Spin()就会退出,这意味着已经调用了ros::Shutdown(),或者是由默认的Ctrl-C处理程序调用的,或者是主程序告诉我们关闭的,或者是手动调用的。

步骤

  1. 初始化ROS系统
  2. 订阅chatter话题
  3. 循环,等待话题数据
  4. 当接受到话题数据时,执行回调函数chat terCallback()

ROS2订阅话题

demo下载:

标题

demo下载:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
wget -O subscriber_member_function.cpp https://raw.githubusercontent.com/ros2/examples/master/rclcpp/topics/minimal_subscriber/member_function.cpp

回调函数

private:
  void topic_callback(const std_msgs::msg::String::SharedPtr msg) const
  {
    RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
  }
  rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;

该topic_callback函数接收在主题上发布的字符串消息数据,并使用RCLCPP_INFO宏将其简单地写入控制台。

话题订阅

public:
  MinimalSubscriber()
  : Node("minimal_subscriber")
  {
    subscription_ = this->create_subscription<std_msgs::msg::String>(
    "topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
  }

ROS将在新消息到达时调用chat terCallback()函数。第二个参数是队列大小,表示如果接受到的数据多于1000条时,就丢弃1000条数据以前的信息。

猜你喜欢

转载自blog.csdn.net/Feizhai2/article/details/114091447