在ROS中,主題(topic)是一個非常重要的概念,它可以作為節點(node)之間的通信的一種方式。在ROS中,主題基於發佈/訂閱模式,即節點可以發佈一個特定主題的消息,在其它節點可以訂閱該主題並接收消息。ROS提供了rostopic命令行工具,可以方便地查看和調試ROS主題。本篇文章將詳細描述如何使用rostopic進行 ROS主題通信。
一、rostopic命令行工具介紹
rostopic是ROS提供的一個命令行工具,可以用於查看、記錄和調試ROS主題。通過rostopic,我們可以查看當前運行的主題列表、某個主題的信息和消息內容等。
常用命令如下:
– rostopic list:顯示當前運行的主題列表。
– rostopic info topic_name:顯示某個主題的詳細信息,包括類型和發佈者、訂閱者列表等。
– rostopic echo topic_name:實時顯示某個主題的消息內容。
– rostopic pub topic_name topic_type msg:向某個主題發佈消息。
下面將通過實例演示如何使用這些命令。
二、查看主題列表
首先,在啟動ROS之前,在終端中輸入以下命令:
$ roscore
啟動一個新的終端,輸入以下命令:
$ rostopic list
以上命令將顯示當前運行的主題列表,如下:
/rosout
/rosout_agg
這裡rosout是ROS的診斷、調試和出錯輸出系統。下面我們將通過一個簡單的例子來了解如何發佈和訂閱一個ROS主題。
三、發佈和訂閱主題
首先,啟動ROS:
$ roscore
在終端中,啟動一個名為「talker」的節點,用於發佈一個類型為std_msgs/String的消息:
$ rosrun rospy_tutorials talker
在另一個終端中,啟動一個名為「listener」的節點,用於訂閱該消息並顯示:
$ rosrun rospy_tutorials listener
此時,我們可以使用rostopic命令行工具來查看發佈和訂閱的主題列表。在新的終端中輸入以下命令:
$ rostopic list
將輸出:
/chatter
/rosout
/rosout_agg
其中,/chatter主題是由talker節點發佈的。
我們可以使用rostopic命令行工具來查看/ chatter主題的信息:
$ rostopic info /chatter
將輸出:
Type: std_msgs/String
Publishers:
* /talker (http://xxx:xxx/)
Subscribers:
* /listener (http://xxx:xxx/")
其中,/talker節點是該主題的發佈者,/listener節點是該主題的訂閱者。
我們可以使用rostopic命令行工具來實時顯示主題消息的內容:
$ rostopic echo /chatter
現在,當我們在talker節點中創建和發佈字符串時,將在listener節點中看到該字符串的輸出。
要發佈自己的消息,我們可以使用以下命令:
$ rostopic pub /chatter std_msgs/String "hello world"
這將在/chatter主題中發佈消息「hello world」。
四、總結
本文簡單介紹了如何使用rostopic命令行工具進行ROS主題通信。我們了解了如何查看當前運行的主題列表、查看主題的信息、實時顯示主題消息的內容以及如何發佈自己的消息。這些命令使得ROS主題通信更加容易。在實際使用中,我們還需要針對特定的主題類型和接口編寫自己的ROS節點,以滿足我們的需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/207286.html