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.測試結果:

