ROS的學習(七)ROS的話題
阿新 • • 發佈:2019-01-24
首先需要開啟一個終端在裡面執行roscore:
再開啟一個終端,在裡面執行一個turtlesim_node節點:
開啟另一個終端,在裡面輸入:
首先按照ROS學習(六)部落格中講到的例子執行一下,即通過按鍵來控制烏龜的移動。我們在終端中輸入命令:
就可以看到一個表示節點之間的關係的圖。將滑鼠放在圖片上面可以看到圖片會變為高亮。可以看到兩個節點是通過/turtle1/command_velocity 話題來進行通訊的。
例如,我們可以輸入:
之後我們在執行turtle_teleop_key節點的視窗下按方向鍵,就可以在剛才的視窗看到輸出的資料如下:
現在我們重新執行:
就可以看到話題剛才只有一個訂閱者 現在又多了一個訂閱者。
使用
可以檢視每一個話題的釋出者和訂閱者的個數。
來檢視/turtle1/cmd_vel的訊息型別。你得到的返回型別如下:
我們可以使用rosmsg來檢視一個訊息型別的詳細資訊:
得到的結果如下:
現在我們已經知道了turtlesim接收的訊息型別,現在我們可以給它釋出訊息了。rostopic pub命令用來發布訊息,它的使用方法如下:
例項如下:
我們可以看到,烏龜運動了一個弧度。這是一個非常複雜的命令,我們詳細分析一下:
這個命令釋出話題,
這個引數的意思是隻釋出一個命令,然後退出。
這是要釋出訊息的話題,
這兩個引數我們可以先不用深究。我們可以使用rostopic pub -r命令讓烏龜持續運動,如:
我們可以看到,烏龜圍繞著一個圈在不停的運動。
roscore
再開啟一個終端,在裡面執行一個turtlesim_node節點:
rosrun turtlesim turtlesim_node
開啟另一個終端,在裡面輸入:
rosrun turtlesim turtle_teleop_key
在執行完這條命令後,在這個終端下,按鍵盤上的方向鍵可以看到,之前我們執行的烏龜開始移動,:-),很有意思吧。
turtlesim_node和turtle_teleop_key通過ROS的話題來相互通訊。turtle_teleop_key把使用者按下的鍵釋出到話題上,turtlesim_node也訂閱了同一個話題用來接收使用者按下的鍵,並做出相應的動作。我們有這個例子可以體會到話題的作用,更加深刻的認識到了節點的概念。
rqt_graph建立了一個當前系統中執行的節點的動態圖。如果你沒有安裝rqt的話,請首先安裝:
sudo apt-get install ros-hydro-rqt
sudo apt-get install ros-hydro-rqt-common-plugins
首先按照ROS學習(六)部落格中講到的例子執行一下,即通過按鍵來控制烏龜的移動。我們在終端中輸入命令:
rosrun rqt_graph rqt_graph
就可以看到一個表示節點之間的關係的圖。將滑鼠放在圖片上面可以看到圖片會變為高亮。可以看到兩個節點是通過/turtle1/command_velocity
使用rostopic echo命令可以檢視在一個話題上釋出的資料。它的使用方法如下:
rostopic echo [topic]
例如,我們可以輸入:
rostopic echo /turtle1/cmd_vel
之後我們在執行turtle_teleop_key節點的視窗下按方向鍵,就可以在剛才的視窗看到輸出的資料如下:
linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 --- linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
現在我們重新執行:
rosrun rqt_graph rqt_graph
就可以看到話題剛才只有一個訂閱者 現在又多了一個訂閱者。
使用rostopic list可以列舉出當前系統中的話題:
rostopic list
使用
rostopic list -v
可以檢視每一個話題的釋出者和訂閱者的個數。
話題上的通訊通過節點之間傳送訊息來完成。對於釋出者(turtle_teleop_key)和接收者(turtlesim_node)的通訊,釋出者和接收者必須使用型別相同的訊息。也就是說,一個話題的型別是通過在它上面釋出的訊息的型別來定義的。可以通過:
rostopic type /turtle1/cmd_vel
來檢視/turtle1/cmd_vel的訊息型別。你得到的返回型別如下:
geometry_msgs/Twist
我們可以使用rosmsg來檢視一個訊息型別的詳細資訊:
rosmsg show geometry_msgs/Twist
得到的結果如下:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
現在我們已經知道了turtlesim接收的訊息型別,現在我們可以給它釋出訊息了。rostopic pub命令用來發布訊息,它的使用方法如下:
rostopic pub [topic] [msg_type] [args]
例項如下:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
我們可以看到,烏龜運動了一個弧度。這是一個非常複雜的命令,我們詳細分析一下:
rostopic pub
這個命令釋出話題,
-1
這個引數的意思是隻釋出一個命令,然後退出。
/turtle1/cmd_vel
這是要釋出訊息的話題,
--
2.0 1.8
這兩個引數我們可以先不用深究。我們可以使用rostopic pub -r命令讓烏龜持續運動,如:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
我們可以看到,烏龜圍繞著一個圈在不停的運動。
通過上面豐富的例項,相信大家會對ROS的話題概念會有一個清楚的認識。