-
订阅者专享项目:《GIMP完全指南——近乎涵盖所有内容》
资源介绍
3.4 订阅者程序
到目前为止,我们已经学习了一个发布消息的例程。当然,
这仅仅完成了与其他节点通过消息进行通信的一半工作。现在,
让我们看看一个节点如何订阅其他节点发布的消息
11
。
我们继续使用 turtlesim 作为测试平台,订阅 turtlesim_node
发布的/turtle1/pose 话题。这一话题的消息描述了海龟的位姿(位
置和朝向)。表 3.5 展示了一个订阅这些消息的简短的程序,并且
通过 ROS_INFO_STREAM 为我们输出到终端。尽管目前你已经对
这一程序的某些部分感到熟悉了,但这里还是有三个新的知识点。
编写回调函数 发布和订阅消息的一个重要的区别是订阅者节点
无法知道消息什么时候到达。为了应对这一事实,我们必须把响
应收到消息事件的代码放到回调函数里,ROS 每接收到一个新的
消息将调用一次这个函数。订阅者的回调函数类似于:
void function_name(const package_name::type_name &msg)
{
. . .
}
其中参数 package_name 和 type_name 和发布消息时的相同,它
们指明了我们想订阅的话题的消息类。回调函数的主体有权限访
问接收到消息的所有域,并以它认为合适的方式存储、使用或丢
弃接收到的数据。与往常一样,我们必须包含定义该类的头文件。
本例程中,回调函数接收类型为 turtlesim::Pose 的消息,所
11 http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c++)