编写简单的订阅者(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条数据以前的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Errorbot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值