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的编程实现(五)》对你有帮助,请点赞、收藏,并留下你的观点哦!