1. 程式人生 > >ROS的學習(七)ROS的話題

ROS的學習(七)ROS的話題

     首先需要開啟一個終端在裡面執行roscore:
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的話題概念會有一個清楚的認識。