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

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


本文章是针对bilibili古月居up的【ROS入门21讲】所作的笔记,笔记从第8讲开始,主要记录一些关键内容方便查阅。
视频连接:【ROS入门21讲】
课件及源码:
链接: https://pan.baidu.com/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)
{
	// 1
    ros::init(argc,argv,"pose_subscriber");
    ros::NodeHandle n;
	// 2
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback);
    ros::spin();
    return 0;
}

1 “pose_subscriber” 必须这么写,表示创建了一个"pose_subscriber"的节点。
2 “/turtle1/pose” 必须这么写,表示订阅了"/turtle1/pose"这个话题。
3 ros::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下方的终端交替输出。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值