做网站什么商品好,信息网络设计,开个游戏服务器要多少钱,自适应 网站文章目录 第 6 课 编写简单的订阅器 Subscriber1. 编写订阅者节点2. 测试发布者和订阅者 第 6 课 编写简单的订阅器 Subscriber 订阅器是基于编辑了发布器的基础上创建的#xff0c;只有发布了消息#xff0c;才有可能订阅。若未编辑发布器#xff0c;可前往ROS第5课 … 文章目录 第 6 课 编写简单的订阅器 Subscriber1. 编写订阅者节点2. 测试发布者和订阅者 第 6 课 编写简单的订阅器 Subscriber 订阅器是基于编辑了发布器的基础上创建的只有发布了消息才有可能订阅。若未编辑发布器可前往ROS第5课 编辑简单的发布器Publisher”查看编辑教程。
1. 编写订阅者节点
这里我们以创建一个的pose_subscriber.py节点为例进行讲解。
输入指令“cd catkin_ws/src/beginner_hiwonder/scripts/”回车。 输入指令“vi pose_subscriber.py”编辑程序复制下面程序。如需修改再按下“i”即可修改。修改完成按下“Esc”输入“wq”保存并退出。
#!/usr/bin/env python
# -*- coding: utf-8 -*-# 导入rospy模块rospy是ROSRobot Operating System的python客户端库
import rospy
# 从turtlesim.msg模块导入Pose消息类型
from turtlesim.msg import Pose# 定义回调函数poseCallback当收到新的Pose消息时会被调用
def poseCallback(msg):# 在ROS日志中记录乌龟的位置信息msg.x和msg.y分别是乌龟在模拟环境中的x、y坐标rospy.loginfo(Turtle pose: x:%0.6f, y:%0.6f, msg.x, msg.y)# 定义pose_subscriber函数该函数设置了ROS订阅者
def pose_subscriber():# 初始化ROS节点命名为pose_subscriberanonymousTrue意味着ROS会自动为节点分配一个唯一的名称防止节点名称冲突rospy.init_node(pose_subscriber, anonymousTrue)# 创建一个Subscriber对象订阅名为/turtle1/pose的topic# 当有消息发布到这个topic时ROS会调用预先设置的回调函数poseCallbackrospy.Subscriber(/turtle1/pose, Pose, poseCallback)# rospy.spin()进入自循环可以让程序等待并调用回调函数直到节点被显式关闭rospy.spin()# 当该脚本作为主程序运行时执行下面的代码
if __name__ __main__:# 调用pose_subscriber函数设置订阅者pose_subscriber()3) 输入指令“chmod x pose_subscriber.py”回车为保存的pose_subscriber.py赋予可执行权限。
2. 测试发布者和订阅者
输入指令“roscore”启动节点管理器。 若已开启则会出现以下提示 再输入指令“rosrun turtlesim turtlesim_node”回车开启小乌龟。 再打开一个新的终端输入指令“rosrun beginner_hiwonder velocity_publisher.py”运行velocity_publisher.py的发布者。按下“CtrlC”即可停止发布者节点的运行。 重新打开一个命令行终端输入指令“rosrun beginner_hiwonder pose_subscriber.py”运行pose_subscriber.py的订阅者。按下“CtrlC”即可停止订阅者节点的运行。 注意 ①启动发布者节点后订阅者节点才能订阅消息。 ②若需要完全接收发布者消息可以先启动订阅者节点再启动发布者节点。