Ros学习——Python发布器publisher和订阅器subscriber
1.编写发布器
- 初始化 ROS 系统
-
在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息
- 以每秒 10 次的频率在 chatter 上发布消息
在 beginner_tutorials package 里创建 script/talker.py 文件:
#!/usr/bin/env python
# license removed for brevity
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
赋予文件执行权限:
$ chmod +x listener.py
2.编写订阅器
- 初始化ROS系统
-
订阅 chatter 话题
- 进入自循环,等待消息的到达
-
当消息到达,调用 chatterCallback() 函数
在 beginner_tutorials 目录下创建 script/listener.py 文件:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
# In ROS, nodes are uniquely named. If two nodes with the same
# node are launched, the previous one is kicked off. The
# anonymous=True flag means that rospy will choose a unique
# name for our 'listener' node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
if __name__ == '__main__':
listener()
赋予文件执行权限:
$ chmod +x listener.py
3.编译
- 在catkin_ws目录下运行 catkin_make
4.测试结果: