其实发布程序和订阅程序没有什么不同。
这里我们将订阅者和发布者都放在一个工作空间内,同时让订阅者与发布者处于不同的package中。
Step1 创建一个package
一个工作空间可以有多个package,在工作空间的源文件目录src
中直接调用catkin_create_pkg创建一个package:
catkin_create_pkg receieve-turlepose roscpp rospy std_msgs geometry_msgs turtlesim
Step2 书写接受话题的代码
#include <ros/ros.h>
#include "turtlesim/Pose.h"
void postCallback(const turtlesim::Pose::ConstPtr &msg) //回调函数,参数是turtlesim::Pose::ConstPtr
{
ROS_INFO("Turtle pose:x:%0.6, y:%0.6",msg->x,msg->y);//注意回调时间应该尽可能短
}
int main(int argc,char **argv)
{
ros::init(argc,argv,"GetSubInfo");//初始化这个节点
ros::NodeHandle n; //订阅和发布都需要用到这个句柄
ros::Subscriber getSub=n.subscribe("/turtle1/pose",10,postCallback);//最后一个参数是一个回调函数
ros::spin();//循环等待方法,阻塞以查看队列是否有新消息进来,如果有就调用postCallback
return 0;//因为前面在循环等待,所以一般不会执行到这一句
}
Final:编译并运行
和上一节一样,需要修改对应的CMakeLists.txt。最后在WorkSpace根目录下进行编译catkin_make
,如无意外将会显示:
运行结果如下,打印的就是海龟的姿态了: