」節點「是ros術語,它連線到ros網路的可執行檔案。在這裡,我們將建立發布器(「talker」)節點不斷廣播訊息。
進入之前建立的beginner_tutorials包
$ roscd beginner_tutorials
**
首先建立scripts目錄存放python**
$ mkdir scripts
$ cd scripts
$ wget
/ros_tutorials/kinetic‐devel/rospy_tutorials/001_talker_
listener/talker.py
$ chmod +x talker.py
$ rosed beginner_tutorials talker.py
內容如下:
#!/usr/bin/env python
#每個python的ros節點會在頂部描述,,第一行確保你的指令碼是使用python執行的指令碼
# license removed for brevity
import rospy
from std_msgs.msg import string
#需要匯入rospy客戶端庫,匯入std_msgs.msg重用std_msgs/string訊息型別
deftalker
():pub = rospy.publisher('chatter', string, queue_size=10)
rospy.init_node('talker', anonymous=true)
#定義talker 介面,pub = rospy.publisher("chatter", string, #queue_size=10)表示節點發布chatter 話題,使用string 字元型別,實際上就是類#std_msgs.msg.string。queue_size 表示佇列的大小(適合hydro以後版本),如果#佇列訊息處理不夠快,就會丟棄舊的訊息。
rate = rospy.rate(10) # 10hz
#建立rate 物件,與sleep()函式結合使用,控制話題訊息的發布頻率。
while
not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
#rospy.is_shutdown()返回false 就會退出(例如按下ctrl-c)
#程式執行pub.publish(string(str)),在chatter 話題發布string 訊息
#r.sleep()通過睡眠來,保持訊息傳送頻率
#rospy.loginfo(str)函式在螢幕輸出除錯資訊,同時寫入到節點日誌檔案和rosout 節#點
#if __name__ == '__main__':
try:
talker()
except rospy.rosinterruptexception:
pass
#標準的python main 檢查,這個會捕獲rospy.rosinterruptexception 異常,當按#下ctrl-c 或節點關閉的話,即使在rospy.sleep()和rospy.rate.sleep()函式裡都#會丟擲異常。
**$ roscd beginner_tutorials/scripts/
$ wget
/ros_tutorials/kinetic‐devel/rospy_tutorials/001_talker_
listener/listener.py
檔案內容如下:
#!/usr/bin/env python
import rospy
from std_msgs.msg import string
defcallback
(data):
rospy.loginfo(rospy.get_caller_id() + "i heard %s", data.data)
deflistener
():# 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
我們使用cmake 作為構建系統,即使是python 節點也需要使用。
這確保針對訊息和服務能自動生成python **
進入catkin 工作空間,執行catkin_make:
$ cd ~/catkin_ws
$ catkin_make
啟動發布器
啟動訂閱器
確保roscore 可用,並執行:
$ roscore
catkin specific 如果使用catkin,確保你在呼叫catkin_make 後,在執行你自己的程式前,已經source
了catkin 工作空間下的setup.sh 檔案:
# in your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash
$ rosrun beginner_tutorials talker (c++)
$ rosrun beginner_tutorials talker.py (python)
你將看到如下的輸出資訊:
[info]
[walltime: 1314931831.774057]
hello
world 1314931831.77
[info]
[walltime: 1314931832.775497]
hello
world 1314931832.77
[info]
[walltime: 1314931833.778937]
hello
world 1314931833.78
[info]
[walltime: 1314931834.782059]
hello
world 1314931834.78
[info]
[walltime: 1314931835.784853]
hello
world 1314931835.78
[info]
[walltime: 1314931836.788106]
hello
world 1314931836.79
發布器節點已經啟動執行。現在需要乙個訂閱器節點來接受發布的訊息。
我們編寫了乙個名為」listener」的訂閱器節點。現在執行它:
$ rosrun beginner_tutorials listener (c++)
$ rosrun beginner_tutorials listener.py (python)
你將會看到如下的輸出資訊:
[info] [walltime: 1314931970.262246] /listener_17657_1314931968795i heard hello world
1314931970.26
[info] [walltime: 1314931971.266348] /listener_17657_1314931968795i heard hello world
1314931971.26
[info] [walltime: 1314931972.270429] /listener_17657_1314931968795i heard hello world
1314931972.27
[info] [walltime: 1314931973.274382] /listener_17657_1314931968795i heard hello world
1314931973.27
[info] [walltime: 1314931974.277694] /listener_17657_1314931968795i heard hello world
1314931974.28
[info] [walltime: 1314931975.283708] /listener_17657_1314931968795i heard hello world
1314931975.28
ROS教程(十二) 測試訊息發布器和訂閱器
description 本教程將測試上一教程所寫的訊息發布器和訂閱器。tutorial level beginner next tutorial 寫乙個簡單的服務端和客戶端 python c 目錄 啟動發布器 啟動訂閱器 確保roscore可用,並執行 roscore catkin specific...
ROS中自定義訊息的發布和訂閱
因為需要傳輸目標跟蹤的結果,因此需要進行自定義訊息的發布和訂閱。首先,如果我們需要傳輸自定義訊息的話,需要建立一系列的準備檔案。我是直接修改的經典教程中的beginner tutorials中的talker.cpp和listen.cpp檔案,因此,均是在beginner tutorials這個pac...
ROS訊息發布器與接收器(C )注意事項
1 直接在package目錄下的src中建立 talker.cpp和listener.cpp。在qt或者gedit中編輯都可以,不建議新手上來就使用vim編輯程式或者複製貼上!2 在beginner tutorials資料夾下的cmakelists.txt的末尾中新增以下 include direc...