上期创建了 msg 文件和发布者,这期创建订阅者 Subscriber。上期入口
本文所用代码为个人独自编写仅用于测试的代码,实现效果为:接收发布者发布的消息并将其打印出来。
创建订阅者 Subscriber
打开终端,开始新建 cpp 文件:gedit ~/catkin_ws/src/ros_topic/src/subscriber_score.cpp
在弹出的框中,粘贴如下测试代码并保存:
#include "ros/ros.h"
#include "ros_topic/score.h"
void infoCallback(const ros_topic::score::ConstPtr& msg);
int main(int argc, char **argv) {
// 初始化 ROS 节点
ros::init(argc, argv, "subscriber_score");
// 创建节点句柄
ros::NodeHandle n;
// 创建一个Subscriber
// 订阅名为 /score 的 topic
// 注册回调函数 infoCallback
ros::Subscriber score_sub = n.subscribe("/score", 10, infoCallback);
// 循环等待回调函数
ros::spin();
return 0;
}
// 接收到订阅的消息后,则进入消息回调函数
void infoCallback(const ros_topic::score::ConstPtr& msg) {
// 将订阅者所接收到的消息打印出来
ROS_INFO("Subcriber: %s got %.1f points in the exam and was rated as %s",
msg->student_name.c_str(),
msg->score,
msg->evaluation.c_str());
}
现在,我们打开文件管理器,打开 /主目录/catkin_ws/src/ros_topic/src
,就可以看到刚才创建的 cpp 文件了:
配置订阅者
打开终端,配置 CMakeLists.txt
文件:gedit ~/catkin_ws/src/ros_topic/CMakeLists.txt
下拉到最后一行,添加如下代码并保存:
add_executable(subscriber_score src/subscriber_score.cpp)
add_dependencies(subscriber_score ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(subscriber_score ${catkin_LIBRARIES})
到此,我们就全部配置完毕。
运行
先返回工作空间主目录下:cd ~/catkin_ws/
进行编译:catkin_make
编译完成后,启动 roscore
:roscore
然后再打开第二个终端 ( Ctrl + Alt + T),输入:rosrun ros_topic subscriber_score
接着再打开第三个终端 ( Ctrl + Alt + T),输入:rosrun ros_topic publisher_score
我们就可以看到订阅者在实时显示发布者的消息。