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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM