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处理程序调用的,或者是主程序告诉我们关闭的,或者是手动调用的。
步骤
- 初始化ROS系统
- 订阅chatter话题
- 循环,等待话题数据
- 当接受到话题数据时,执行回调函数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条数据以前的信息。