今天接續上一篇,繼續來介紹與話題和服務相關的指令,讓節點使用系統中的話題和服務,並且透過指令來控制 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
到這裡,我們對話題和服務已經有初步的了解了。下一篇就來介紹如何寫出傳遞這些訊息的節點,這麼一來就能利用程式來寫出更精細的指令給機器人了。