iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
自我挑戰組

ROS 筆記:要怎麼叫無人機自己飛系列 第 10

【ROS 筆記:要怎麼叫無人機自己飛】Day 10:利用話題(Topic)和服務(Service)來讓節點通訊(二)

  • 分享至 

  • xImage
  •  

今天接續上一篇,繼續來介紹與話題和服務相關的指令,讓節點使用系統中的話題和服務,並且透過指令來控制 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

到這裡,我們對話題和服務已經有初步的了解了。下一篇就來介紹如何寫出傳遞這些訊息的節點,這麼一來就能利用程式來寫出更精細的指令給機器人了。


上一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 9:利用話題(Topic)和服務(Service)來讓節點通訊(一)
下一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 11:使用 Python 撰寫話題的發布者(Publisher)和訂閱者(Subscriber)
系列文
ROS 筆記:要怎麼叫無人機自己飛25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言