iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
自我挑戰組

ROS自學筆記系列 第 11

Day 11 - 使用Python撰寫Subscriber

  • 分享至 

  • xImage
  •  

昨天我們完成了talker.py這個Publisher,今天要來做負責接收的Subscriber囉!
一樣先到我們放程式的資料夾,並且下載官方範例,以及指定成可執行的檔案:

$ roscd beginner_tutorials/src
$ wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py
$ chmod +x listener.py

可以看到裡面其實是一個很簡單的15行程式:

   1 #!/usr/bin/env python
   2 import rospy
   3 from std_msgs.msg import String
   4 
   5 def callback(data):
   6     rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
   7 
   8 def listener():
   9     rospy.init_node('listener', anonymous=True)
  10     rospy.Subscriber("chatter", String, callback)
  11     # spin() simply keeps python from exiting until this node is stopped
  12     rospy.spin()
  13 
  14 if __name__ == '__main__':
  15     listener()

裡面最主要的就是callbacklistener這兩個函式,先講listener好了,也就是第8~12行:

   8 def listener():
   9     rospy.init_node('listener', anonymous=True)
  10     rospy.Subscriber("chatter", String, callback)
  11     # spin() simply keeps python from exiting until this node is stopped
  12     rospy.spin()

首先一樣先定義了一個叫做listenernode,並且定義了一個Subscriber,會去監聽chatter這個topic,透過String格式的訊息傳輸,並在接收到訊息之後呼叫callback function
接著第12行就是可以讓這個node不停止,就可以持續的監聽topic有沒有新的訊息囉!
在收到訊息以後,會呼叫一個callback function,也就是第5~6行所定義的callback這個函式:

   5 def callback(data):
   6     rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

其實就是收到訊息(data)之後把它印出來啦!
執行畫面會長這樣:
ROS publisher & subscriber執行畫面
左上角是roscore執行畫面,右上可以看到有talkerlistener這兩個node在執行,並且有一個叫做/chattertopic,左下角是publisher,右下就是subscriber接收到的畫面囉!

Subscriber感覺比Publisher簡單,但是要先知道Publisher所定義的Topic名稱和Messenge格式,才能去監聽這個topic


上一篇
Day 10 - 使用Python撰寫Publisher
下一篇
Day 12 - 使用C++撰寫Publisher
系列文
ROS自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言