Loading

ROS 订阅者的创建及使用

上期创建了 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

编译完成后,启动 roscoreroscore

然后再打开第二个终端 ( Ctrl + Alt + T),输入:rosrun ros_topic subscriber_score

接着再打开第三个终端 ( Ctrl + Alt + T),输入:rosrun ros_topic publisher_score

我们就可以看到订阅者在实时显示发布者的消息。

posted @ 2020-03-12 20:51  滑稽果  阅读(701)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end