1. 编写程序
进入我们的 scripts 文件夹,使用 touch 命令创建 subscriber:
cd ~/catkin_ws/src/ros_practice/src/scripts
touch pos_subscriber.py
cd ../..
code .
使用rostopic info
查看 topic 数据类型:
rostopic list
rostopic info /turtle1/pose
查看结果如下:
topic 中只有 publisher 没有 subscriber, 观察到 pose 的数据类型为 turtlesim 中的 Pose,需要我们在python程序中导入相应数据类型。
进入代码页面,编写如下代码:
#!use/bin/env python3
import rospy
from turtlesim import Pose
def pose_callback(msg): #定义循环函数
rospy.loginfo(msg)
if __name__ == '__main__':
rospy.init_node("turtle_pose_subscriber")
sub = rospy.Subscriber("turtle1/pose", Pose, pose_callback)
rospy.loginfo("Node has been started")
rospy.spin() #维持 node
有几点需要注意:
- 一定要写
callback
函数 rospy.Subscriber
中的topic以及数据类型一定与之前保持一致- 记得在程序最后写
rospy.spin
2.运行publisher
键入以下指令:
rosrun turtlesim turtlesim_node
rosrun ros_practice draw_circle.py
rosrun ros_practice pose_subscriber.py
观察运行结果:
使用rostopic info
查看topic信息
观察到 turtlesim 节点分别在两个topic中作 subscriber 和 publisher,运行rqt_graph
观察拓扑结构:
运行成功,我们下期再见!