ROS入门--订阅者的编程实现

ROS入门--订阅者的编程实现

(参考古月居b站视频P11,本文仅为笔记和个人理解)

模型:

 

 承接上一篇发布者的文章。在已经创建好的功能包下面创建一个订阅者

 

cpp代码如下:

#include <ros/ros.h>                    //ROS头文件!
#include "turtlesim/Pose.h"         //消息类型的头文件!

// 接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)     

//回调函数  msg是一个长指针(橙色类型的指针,也就是话题中消息的数据类型)指向类中所有姿态信息的内容,可以使用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,注册回调函数poseCallback
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);    //这里又又队列长度,没有频率,是看订阅者一次接受多少数据

//这里创建了一个订阅器,使用句柄对象中sub..成员函数来添加信息,包含来源话题的名字、队列的长度(一个缓冲区,因为不确定订阅节点的处理能力)、回调函数

//这个回调函数:一旦有相关消息进来,就会调用这个函数处理(因为不知道什么时候会来消息)

// 循环等待回调函数
ros::spin();  //这是个死循环,等待回调函数起作用

return 0;
}

 

编译和运行同上篇流程相同,将文件名更改即可

关于source:学习ros过程中,我们做过两次source一次是在下载ros配置环境时,第二次就是在进行发布者创建时source了一下,一个功能包source一次就够了,因为我们在同一个包里添加代码进行编译,所以我们在这里不需要source了. source代码:source devel/setup.bash,在主目录ctrl+H打开隐藏目录界面,找到.bashrc末尾加上这段。

 

posted @ 2022-03-21 16:34  FrankPlus  阅读(134)  评论(0)    收藏  举报