1. 话题模型

2.创建订阅者
- 初始化ROS节点
- 订阅需要的话题
- 循环等待话题消息,接收到消息后回调函数
- 在回调函数中完成消息处理
ros::spin() 和 ros::spinOnce() 区别及详解
pose_scribe.cpp文件(已修正):
/*
*该例程将用于订阅/turtle/pose话题,消息类型为turtlesim::Pose
*/
#include<ros/ros.h> //很多ROS里的API和函数从里面调用
#include<turtlesim/Pose.h> void poseCallback(const turtlesim::Pose::ConstPtr & msg)
{//将接收到的消息打印出来ROS_INFO("Turtle pose:x:%0.6f,y:%0.6f",msg->x,msg->y);}int main(int argc,char **argv)
{//ROS节点初始化ros::init(argc,argv,"pose_subscriber");//创建节点句柄ros::NodeHandle n;//创建一个Subscriber,发布名为/turtle/pose的topic,注册回调函数ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback);//循环等待回调函数ros::spin();return 0;}
3.配置订阅者代码编译规则
设置需要编译的代码和生成的可执行文件;
设置链接库;
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
将这两行话复制到learning_topic文件夹下的CMakeLists.txt文件夹中:

4. 编译并运行订阅者
在catkin_ws目录下进行编译:

果然还是报错了:有错不要怕,一点点改过来就行,新手上路不要怕错:

系统告诉我们,是CMakeLises.txt文件里215行少了一个),由于后面都是注释,实际上是这里忘记打右括号了。

改正完毕,再次编译。还是有错,继续改。

经过不断修改,终于编译成功:

添加环境变量(如果上一讲之前没有在隐藏文件中添加的话)
运行三个终端:
roscorerosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber
小海龟没有动,我们可以运行上一讲的发布者来让他动。
打开一个新终端:
rosrun learning_topic velocity_publisher