失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【ROS入门21讲】订阅者Subscriber的编程使用

【ROS入门21讲】订阅者Subscriber的编程使用

时间:2022-08-12 02:10:40

相关推荐

【ROS入门21讲】订阅者Subscriber的编程使用

【ROS入门21讲】订阅者Subscriber的编程使用

本文章是针对bilibili古月居up的【ROS入门21讲】所作的笔记,笔记从第8讲开始,主要记录一些关键内容方便查阅。

视频连接:【ROS入门21讲】

课件及源码:

链接: /s/1UUGTN1DI-2eCeRc80OUKcg?pwd=e23b

提取码: e23b

1、初始化工作空间与功能包

这里就不细讲了,与上一篇一致:【ROS入门21讲】发布者Publisher的编程使用

2、Subscriber代码编写:

#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){// 1ros::init(argc,argv,"pose_subscriber");ros::NodeHandle n;// 2ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback);ros::spin();return 0;}

1 “pose_subscriber” 必须这么写,表示创建了一个"pose_subscriber"的节点。

2 “/turtle1/pose” 必须这么写,表示订阅了"/turtle1/pose"这个话题。

3ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback)中使用了回调函数poseCallbackros::spin()会对消息进行监听,如果有消息接受到,则会调用poseCallback回调函数进行消息处理。

如何实现一个订阅者

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

3、编写CMakeLists.txt

add_executable(subscriber src/subscriber.cpp)target_link_libraries(subscriber ${catkin_LIBRARIES})

配置号task.json文件后,ctrl + shfit +b编译出subscriber可执行文件

4、vscode运行subscriber

所有指令都是通过ctrl + shfit + p完成,代替了终端。

这里结合上一篇文章编写的发布者程序进行测试。

执行ctrl + shfit + p,输入ROS:Start启动ROSMaster。执行ctrl + shfit + p,输入ROS:Run a executable,然后输入turtlesim,然后输入turtlsim_node。目的启动小海龟节点。执行ctrl + shfit + p,输入ROS:Run a executable,运行publisher程序。执行ctrl + shfit + p,输入ROS:Run a executable,运行subscriber程序。就可以在终端看见小海龟在移动,publisher会持续通过"/turtle1/cmd_vel"话题控制小海龟移动,并且subscriber会持续通过"/turtle1/pose"话题获取小海龟的位姿信息并在终端中实时输出。

5、launch文件多节点运行

需求

上面这个例子你会发现需要启动多个节点,需要启动ROS Master、publisher、subscriber、turtlesim节点。如果每次都调用 rosrun 逐一启动,显然效率低下,官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

实现

1、选定功能包右击 —> 添加 launch 文件夹

2、选定 launch 文件夹右击 —> 添加 launch 文件

3、编辑 launch 文件内容

<launch><node pkg="learning_topic" type="publisher" name="publisher" output="screen" /> <node pkg="learning_topic" type="subscriber" name="subscriber" output="screen" /><node pkg="turtlesim" type="turtlesim_node" name="t1"/></launch>

首先在这里先解释一下,launch文件各个关键字的解释:

node —> 包含的某个节点

pkg -----> 功能包

type ----> 被运行的节点文件

name --> 为节点命名

output-> 设置日志的输出目标

执行ctrl + shfit + p,输入ROS:Run a ROS launch file,然后输入learning_topic,然后输入learning_topic.launch,程序运行起来之后,输出会在vscode下方的终端交替输出。

如果觉得《【ROS入门21讲】订阅者Subscriber的编程使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。