如何在ROS上一个节点同时实现发布和订阅
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ROS上一个节点同时实现发布和订阅相关的知识,希望对你有一定的参考价值。
参考技术A 在“重新初始化订阅”对话框中将订阅标记为要重新初始化,该对话框可以在 Microsoft SQL Server Management Studio 的“本地发布”文件夹和“本地订阅”文件夹中打开。也可以从“所有订阅”选项卡和复制监视器中的发布节点中对订阅进行标记。有关启动复...本回答被提问者采纳ROS订阅者Subscriber的编程实现
编程实现
前言: 和上一个教程创建过程一样,这里不进行详细介绍,上一个教程链接如下
正文开始
首先,在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上一个节点同时实现发布和订阅的主要内容,如果未能解决你的问题,请参考以下文章