失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ROS机器人操作系统——订阅者Subscriber的编程实现(五)

ROS机器人操作系统——订阅者Subscriber的编程实现(五)

时间:2020-07-14 16:23:56

相关推荐

ROS机器人操作系统——订阅者Subscriber的编程实现(五)

ROS机器人操作系统

文章目录

ROS机器人操作系统前言一、话题模型二、实现功能1.创建订阅者C++2.Python代码3.配置订阅者代码编译规则4.编译并运行订阅者总结

前言

与发布者相对应的是ROS系统里的订阅者,也是ROS里经常使用的知识。

一、话题模型

二、实现功能

1.创建订阅者C++

如何实现一个订阅者

• 初始化ROS节点;

• 订阅需要的话题;

• 循环等待话题消息,接收到

消息后进入回调函数;

• 在回调函数中完成消息处理。

/*** 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose*/#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){// 初始化ROS节点ros::init(argc, argv, "pose_subscriber");// 创建节点句柄ros::NodeHandle n;// 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallbackros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);// 循环等待回调函数ros::spin();return 0;}

2.Python代码

#!/usr/bin/env python# -*- coding: utf-8 -*-# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Poseimport rospyfrom turtlesim.msg import Posedef poseCallback(msg):rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)def pose_subscriber():# ROS节点初始化rospy.init_node('pose_subscriber', anonymous=True)# 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallbackrospy.Subscriber("/turtle1/pose", Pose, poseCallback)# 循环等待回调函数rospy.spin()if __name__ == '__main__':pose_subscriber()

3.配置订阅者代码编译规则

配置CMakeLists.txt中的编译规则

• 设置需要编译的代码和生成的可执行文件;

• 设置链接库;

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

4.编译并运行订阅者

$ cd ~/catkin_ws$ catkin_make$ source devel/setup.bash$ roscore$ rosrun turtlesim turtlesim_node$ rosrun learning_topic velocity_publisher

小海龟是没有动的,可以看的坐标也是固定的,然后我们运行上一讲的发布者代码

可以看的坐标发生了变换,这就是订阅者的功能。

总结

如何实现一个订阅者

• 初始化ROS节点;

• 订阅需要的话题;

• 循环等待话题消息,接收到

消息后进入回调函数;

• 在回调函数中完成消息处理。

如果觉得《ROS机器人操作系统——订阅者Subscriber的编程实现(五)》对你有帮助,请点赞、收藏,并留下你的观点哦!

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