ROS学习笔记(八):消息的发布与订阅

xiaoxiao2021-02-28  100

1.创建一个消息发布节点

roscd beginner_tutorials 创建一个src文件夹

mkdir -p src 创建src/talk.cpp

https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/talker/talker.cpp

代码详解

ros::init(argc, argv, "talker"); 初始化ROS,创建映射,命名节点。 ros::NodeHandle n;操作包含节点初始化,最后一个节点操作会清空所有节点使用的资源。ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); 这行代码向服务器声明我们将要发布一个std msg类字符串在chatter主题上,发布队列缓存长度不超过1000. NodeHandle::advertise()函数返回一个ros::Publisher类的目标值,该函数的作用主要有两个,一是包含一个publish()函数可以将发布的消息打印出来,二是一旦超出范围, 会立即停止广播。 ros::Rate loop_rate(10);该函数通过调用Rate::sleep()函数,实现循环频率的功能,比如上述函数的运行频率为10HZ。 87 std_msgs::String msg; 88 89 std::stringstream ss; 90 ss << "hello world " << count; 91 msg.data = ss.str();我们使用标准字符串流来实现要广播的消息。chatter_pub.publish(msg);发布消息。 93 ROS_INFO("%s", msg.data.c_str());ROS_INFO()函数类似于C中的printf()。 105 loop_rate.sleep();这个函数和ros::Rate()一起,使发布频率为指定值。2.创建一个消息订阅节点代码如下:https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/listener/listener.cpp代码详解 34 void chatterCallback(const std_msgs::String::ConstPtr& msg) 35 { 36 ROS_INFO("I heard: [%s]", msg->data.c_str()); 37 }回调函数,每次新消息到达chatter主题调用。 75 ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);向服务器订阅chatter主题,并返回一个ros::Subscribe的值。 3.编译运行 将之前的CMakeList.txt作如下修改 https://raw.github.com/ros/catkin_tutorials/master/create_package_pubsub/catkin_ws/src/beginner_tutorials/CMakeLists.txt 这段代码将会创建两个可执行文件,talker和listener,路径为~/catkin_ws/devel/lib/beginner_tutorials 运行前准备 $ roscore$ cd ~/catkin_ws $ source ./devel/setup.bash运行talker运行listenner这里需要注意的是,如果直接在新命令窗口中输入$ rosrun beginner_tutorials listener 会出现错误,需要重新source才行 $ cd ~/catkin_ws $ source ./devel/setup.bash然后级可以看见,listenner不断将收到的talker消息打印出来了。
转载请注明原文地址: https://www.6miu.com/read-32899.html

最新回复(0)