如何在ROS上一个节点同时实现发布和订阅

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ROS上一个节点同时实现发布和订阅相关的知识,希望对你有一定的参考价值。

参考技术A 在“重新初始化订阅”对话框中将订阅标记为要重新初始化,该对话框可以在 Microsoft SQL Server Management Studio 的“本地发布”文件夹和“本地订阅”文件夹中打开。也可以从“所有订阅”选项卡和复制监视器中的发布节点中对订阅进行标记。有关启动复...本回答被提问者采纳

ROS订阅者Subscriber的编程实现

编程实现

前言: 和上一个教程创建过程一样,这里不进行详细介绍,上一个教程链接如下

ROS发布者Publisher的编程实现(五)

正文开始

首先,在src文件夹下创建pose_subscriber.cpp的文件。
在这里插入图片描述

然后在上一步创建的文件下编写代码。

代码如何实现:

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

代码如下:

//该例程将订阅/turtle1/pose话题,消息类型turtlesim::pose

#include <turtlesim/Pose.h>
#include <ros/ros.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;

        //创建一个pose_subsciber,订阅名为/turtle1/cmd_vel的topic,注册回调函数poseCallback
        ros::Subscriber pose_sub =n.subscribe("/turtle1/pose",10,poseCallback);

        //设置等待回调函数
        ros::spin();
        
        return 0;
        
 }

在这里插入图片描述

配置CmakeLists.txt中的编译规则

之后打开src/learning_topic下的CMakeList.txt文件
在这里插入图片描述

在该文件中加入如下俩句:

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

在这里插入图片描述

保存并推出。

之后在进行编译,输入

catkin_make

在这里插入图片描述

最后,运行代码:

roscore

rosrun turtlesim turtlesim_node

rosrun learning_topic pose_subscriber

之后可以看到输出了小海龟的位置,也可打开键盘节点,来控制其运动,看其数值是否发生变化。

在这里插入图片描述

以上是关于如何在ROS上一个节点同时实现发布和订阅的主要内容,如果未能解决你的问题,请参考以下文章

如何在ROS下编写自己的节点来订阅话题

ROS订阅者Subscriber的编程实现

ros订阅主题了还需要创建服务吗

ROS 订阅图像节点

ROS 订阅图像节点

订阅者和发布者在同一个节点中的问题