一、目标功能

订阅者订阅海龟的位姿信息。

二、创建功能包

首先创建工作空间,参考【ROS学习笔记】(二)工作空间与功能包的创建

然后创建一个功能包

cd ~/catkin_ws/src
catkin_creat_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

三、创建订阅者代码

进入功能包的src文件夹下,创建一个cpp文件(也可以在图形界面直接创建)

cd ~/catkin_ws/src/learning_topic/src
touch pose_subscriber.cpp
sudo gedit pose_subscriber.cpp

输入以下代码

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************//*** 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose*/#include <ros/ros.h>
#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,订阅名为/turtle1/pose的topic,注册回调函数poseCallbackros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);// 循环等待回调函数ros::spin();return 0;
}

代码思路:

  1. 初始化ROS节点
  2. 订阅需要的话题
  3. 循环等待话题消息,接收到消息后进入回调函数
  4. 在回调函数中完成消息处理

四、配置订阅者代码编译规则

  1. 设置需要编译的代码和生成的可执行文件

  2. 设置链接库

Learning_topic/CMakeList.txt文件的Build下方(Install上方),添加代码如下

add_executable(pose_subscriber src/pose_subscriber.cpp)      #描述要把哪个程序文件编译成哪个可执行文件
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})  #把可执行文件和库做链接

五、编译并运行订阅者SubScriber

1. 编译
cd ~/catkin_ws
catkin_make
source devel/setup.bash

可以在[.bash]文件最后添加source语句,这样就不用每次再在终端输入source命令

sudo vim ~/catkin_ws
source /home/huffie/catkin_ws/devel/setup.bash

2. 运行

打开小海龟的仿真程序,运行subscriber,同时让小海龟动起来,可以看到姿态坐标在实时改变。

roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber
rosrun turtlesim turtle_teleop_key

【ROS学习笔记】(四)订阅者Subscriber的实现相关推荐

  1. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

  2. ROS学习笔记四:用C++编写ROS发布与订阅

    一.创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...

  3. ROS学习笔记-创建订阅cmd_vel话题节点

    创建工作空间 cd ~ mkdir catkin_ws cd catkin_ws mkdir src cd src catkin_init_workspace #初始化工作空间 cd ~/catkin ...

  4. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行

    ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行 一.自定义消息: 1.新建msg文件夹,创建定义Person.msg 文件 mkdir -p ~/catk ...

  5. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  6. ROS学习笔记(1):发布者和订阅者

    ROS学习笔记(1):publishers and subscribers 1.ros通信简介 2.C++中的类与对象 3.publishers/subscribers 4.常用指令 1.ros通信简 ...

  7. ROS学习笔记-ROS订阅和发布节点

    一个简单的ROS包,一个发布者,一个订阅者 刚开始学习ROS,参考网上的资料完成了测试节点的编写,记录一下. 个人习惯在home/Develop目录中做开发,于是在Develop目录下面创建了一个RO ...

  8. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  9. ROS学习笔记(一)补充篇 参考创客制造

    我将ROS的CPP部分分成7个部分: 1.基础的node param 2.动态调节参数 3.关于TF变换 4.actionlib 5.插件技术 6.movebase 7.nodelet技术 前言 相比 ...

最新文章

  1. html自定义datajs,科技常识:HTML5的自定义属性data-*详细介绍和JS操作实例
  2. 大闸蟹谋定功能性养殖-丰收节交易会·李喜贵: 科技示范基地
  3. 新浪微博开放平台开发-android客户端(2)
  4. thinkphp使用问题
  5. 【Android基础】Fragment 详解之Fragment介绍
  6. LeetCode 1550. 存在连续三个奇数的数组
  7. python中可通过()实现代码的复用_(  )是可复用的,提供明确接口完成特定功能的程序代码块。...
  8. JVM虚拟机-Class文件之方法表集合
  9. 解决“Automation 服务器不能创建对象”的问题!
  10. 各种排序算法稳定性比较
  11. android 7.0添加菜单,Android 7.0 settings中添加/删除菜单
  12. 似懂非懂的Comparable与Comparator
  13. “微积分7天搞定”学习记录
  14. 银行对公账户编码规则
  15. 守望先锋外挂(OWG)透视原理分析
  16. 故事分享|B站up主的感悟:粉丝从0到1.4万,我做对了什么?
  17. kindle忘记密码怎么办_如果您的Kindle丢失或被盗怎么办
  18. 迅雷百度网盘不能下载资源 办法总比困难多
  19. [JS] checkbox 选中/全选/反选/不选
  20. 【RISC-V】Trap和Exception

热门文章

  1. 树的点分治(HDU 5977 2016ICPC大连 G: Garden of Eden)
  2. 原生中文版MyBB开源论坛效果展示
  3. [python] 字典:按key排序或按value排序
  4. k8s上安装并初始化Helm,helm基础使用教程
  5. python机器学习库sklearn——逻辑回归
  6. 8086寄存器的配合使用
  7. 怎么修改兼容模式html,HTML5中怎么调兼容性?
  8. 大数据(二)Elasticsearch 分布式搜索引擎(存索引、索引搜索)
  9. Angular4.X 介绍
  10. C语言程序设计I—第五周教学