今天接續上一篇,繼續來介紹與話題和服務相關的指令,讓節點使用系統中的話題和服務,並且透過指令來控制 TurtleSim 的烏龜。
rostopic echo 訂閱並監聽話題rostopic echo 這個指令會訂閱指定話題,並在終端機中即時顯示所有該話題上的訊息。
格式:
rostopic echo <topic>
在下面的範例中訂閱了 /turtle1/cmd_vel 這個話題,當利用鍵盤操作節點(turtlesim_teleop_key)控制烏龜時,這個指令就會得到機器人本身的速度資訊,並持續輸出在終端機視窗中。
$ rostopic echo /turtle1/cmd_vel
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: -2.0
---
# ...以下省略...
在執行這個指令時,系統會自動生成一個臨時的節點負責訂閱話題,因此這時更新 rqt_graph 生成的圖形會看到出現了一個系統亂數生成名稱的話題節點 /rostopic_<一串數字> ,並且同時也新增一個箭頭(資訊流)指向它。

如果嘗試訂閱另一個話題 /turtle1/pose,那就會顯示當前的座標、面向角度和當前速度。
$ rostopic echo /turtle1/pose
x: 4.959312438964844
y: 8.520332336425781
theta: -3.0831851959228516
linear_velocity: 0.0
angular_velocity: 0.0
---
# ...以下省略...
rostopic pub 發布主題rostopic pub 這個指令可以用來發布訊息到指定的話題上,
格式:
rostopic pub <topic-name> <topic-type> [data]
[data]:這是你想要發布的訊息具體的內容,需要根據訊息類型的資料結構格式(利用上一篇提過的 rosmsg show 查詢)來填寫。例如,對 /turtle1/cmd_vel 這個話題發布訊息,訊息類型選定 geometry_msgs/Twist ,設定訊息內容為 '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]',分別代表直線速度和角速度。另外額外設定 -r 1 表示以 1 Hz(每秒一次)的頻率持續發布,這時會看到烏龜機器人因為訊息持續發布而持續繞圈。
$ rostopic pub --r 1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rosservice call 呼叫服務rosservice call 這個指令會呼叫系統中可以使用的服務。
格式:
rosservice call <service-name> [service-args]
[service-args]:這是使用服務時提供的參數,同樣也需要根據訊息類型的資料結構格式來填寫。但如果資訊類型是 Empty 則填上 “{}”。以下範例中,呼叫了一個名為 /turtle1/teleport_absolute 的服務,可以讓烏龜移動到指定位置,並且在後面指定 xyz 座標。
$ rosservice call /turtle1/teleport_absolute 5.0 5.0 0.0
到這裡,我們對話題和服務已經有初步的了解了。下一篇就來介紹如何寫出傳遞這些訊息的節點,這麼一來就能利用程式來寫出更精細的指令給機器人了。