Python寫ROS 訂閱與發布程式

2022-02-01 22:58:45 字數 2662 閱讀 7390

vim ..../src/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)

#呼叫publisher函式 建立發布節點 ,定義資料型別,

#queue_size引數是當其接受者接受不夠快造成訊號堵塞中佇列資訊的數量限制

rospy.init_node('talker', anonymous=true)

#啟動節點同時為節點命名, 若anoymous為真則節點會自動補充名字,實際名字以talker_322345等表示

#若為假,則系統不會補充名字,採用使用者命名。但是一次只能有乙個同名節點,若後面有乙個相同listener

#名字的節點則後面的節點啟動會登出前面的相同節點名。

rate = rospy.rate(10) # 10hz

#延時的時間變數賦值,通過rate.sleep()實現延時

while not rospy.is_shutdown():

# 判定開始方式,迴圈傳送,以服務程式跳出為終止點 一般ctrl+c也可

hello_str = "hello world %s" % rospy.get_time()

# 資料變數的內容 rospy.get_time() 是指ros系統時間,精確到0.01s

# 也可以使用 import time time.strftime('%y%m%d%h%m%s')

rospy.loginfo(hello_str)

#在執行的terminal介面info 出資訊,可不加,可隨意改

pub.publish(hello_str)

#發布資料 必須發布

rate.sleep()

#ros中的延時表示,也可用系統的延時 import time time.sleep(1)

#ros系統中的延時應該比ubuntu自帶好好,盡量用ros的

if __name__ == '__main__':

try:

talker()

except rospy.rosinterruptexception:

pass

vim ..../src/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)

#**函式 收到的引數.data是通訊的資料 預設通過這樣的 def callback(data) 取出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)

#啟動節點同時為節點命名, 若anoymous為真則節點會自動補充名字,實際名字以 listener_322345等表示

#若為假,則系統不會補充名字,採用使用者命名。但是一次只能有乙個同名節點,若後面有乙個相同listener

#名字的節點則後面的節點啟動會登出前面的相同節點名。

rospy.subscriber("chatter", string, callback)

#啟動訂閱,訂閱主題,及標準字串格式,同時呼叫**函式,當有資料時呼叫函式,取出資料

# spin() simply keeps python from exiting until this node is stopped

#迴圈程式

rospy.spin()

if __name__ == '__main__':

listener()

#函式不被用作模組呼叫

chmod +x ..../src/talker.py |chmod +x .../src/listener.py

catkin_make

rosrun exam talker.py

rosrun exam listener.py

ROS與Arduino學習(三)訂閱與發布

ros與arduino學習 三 訂閱與發布 tutorial level helloworld next tutorial 用ros的cmake編譯程式 本節介紹如何在arduino中發布與訂閱訊息。他和ros通過串列埠進行節點通訊。tips 1 訂閱 ros subscribersub wwww ...

ROS中C 編寫發布 python編寫訂閱

執行結果 相關配置 參考部落格 因為在做專案的過程中需要用到c 和python程式,所以想要嘗試一下在ros中能不能用c 編寫訊息的發布者,python編寫訊息的訂閱者。include ros ros.h include std msgs string.h include includeusing ...

發布與訂閱

redis的發布與訂閱功能由publish subscribe psubscribe命令組成。1 subscribe命令 客戶端可以訂閱乙個或多個頻道,從而成為這些頻道的訂閱者 subscriber 每當有其他客戶端向被訂閱的頻道傳送訊息 message 時,頻道的所有訂閱者都會收到這條訊息。127...