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末尾加上这段。
本文来自博客园,作者:FrankPlus,转载请注明原文链接:https://www.cnblogs.com/yztbky/p/16035312.html

本文为b站古月居ROS学习的笔记文章,为个人理解,如有错误欢迎指正。
浙公网安备 33010602011771号