ROS学习--(十三)编写简单的订阅器(subscriber),编译,测试

来源:互联网 发布:2016淘宝客微信教程 编辑:程序博客网 时间:2024/05/22 00:43

1.现在在beginner_tutorials package下创建src/listener.cpp。粘贴代码:

#include "ros/ros.h"#include "std_msgs/String.h"void chatterCallback(const std_msgs::String::ConstPtr& msg){  ROS_INFO("I heard: [%s]", msg->data.c_str());}int main(int argc, char **argv){  ros::init(argc, argv, "listener");  ros::NodeHandle n;   ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);  ros::spin();  return 0;}

只说与发布器不同的部分
1.

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

回调函数,消息到达chatter topic时会被调用,消息是以boost shared_ptr指针的形式传输,我们可以存储它而不需要复制数据
2.

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

这是告诉master我们要订阅chatter上的消息,有消息到达topic时,ROS会调用chatterCallback()的函数。第二个参数是队列的大小,同publicer的参数。返回ros::Subscriber。
3.

ros::spin();

ros::spin()进入自循环,尽可能快的调用消息回调函数。如果没有消息到达,不会占用很多CPU,一旦ros::ok()返回FALSE,ros::spin()会立刻跳出自循环。

编译节点
将下列代码加到CMakeLilst.txt的尾

include_directories(include ${catkin_INCLUDE_DIRS})add_executable(talker src/talker.cpp)target_link_libraries(talker ${catkin_LIBRARIES})add_dependencies(talker beginner_tutorials_generate_messages_cpp)add_executable(listener src/listener.cpp)target_link_libraries(listener ${catkin_LIBRARIES})add_dependencies(listener beginner_tutorials_generate_messages_cpp)

这样可以加入两个可执行文件,talker和listener,这两个会自动在devel下生成,路径是~/catkin_ws/devel/lib/share/
add_dependencies(talker beginner_tutorials_generate_messages_cpp)添加对生成的消息文件的依赖
运行catkin_make

测试
1.运行roscore
2.运行talker

$ rosrun beginner_tutorials talker

3.运行订阅器

$ rosrun beginner_tutorials listener

可以看到两个终端分别是发布消息和订阅消息(hello world和heard hello world)

0 0
原创粉丝点击