iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

ROS 命令列指令工具中除了有與節點相關的指令 rosnode之外,也有包含與話題和服務相關的指令: rostopicrosservice 。這一篇就來介紹這兩類指令該怎麼用。

話題和服務相關的指令

首先是查看系統資訊的指令,包含查看話題列表、服務列表以及查詢訊息類型等。

rostopic list 查看話題列表

使用 rostopic list 指令可以看到當前有哪些話題正在運作中,執行後的結果會類似這樣:

$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
  • /rosout/rosout_agg

    上一篇已經介紹過 rosout 是一個日誌節點,而這兩個則是該節點的話題。前者會收集系統即時的日誌訊息(警告、錯誤、終端機輸出等);後者則是彙整(aggregate)系統中所有節點的日誌,用於事後整理或分析。

  • /cmd_vel(command velocity):

    這個話題用於控制烏龜機器人 turtle1 的速度。一般在想要控制機器人移動時,會透過向此話題發布指令來控制機器人移動。速度的訊息類型為 geometry_msgs/Twist,這個消息類型包含:

    • 直線速度(Linear Velocity):定義機器人在 X、Y 和 Z 軸上的直線速度。

    • 角速度(Angular Velocity):定義機器人在每個軸上的旋轉速度。

  • /color_sensor

    該話題傳輸烏龜機器人 turtle1 當前感應的顏色。

  • /pose

    這個話題提供了 turtle1 當前的座標、面朝向角度、速度。

rosservice list 查看服務列表

和話題一樣,也可以使用 rosservice list 會查詢當前可使用的服務,執行後的結果會類似這樣:

$ rosservice list
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
  • /get_loggers/set_logger_level

    這兩個服務是由 rospyroscpp 套件提供的,可以用來調整 ROS 系統或特定節點日誌記錄器的等級(Logger level),讓開發者可以自定義日誌輸出內容的詳細程度。

  • 其他服務:

    • /reset(重置烏龜到初始狀態)

    • /spawn(生成新的烏龜)

    • /set_pen(設置烏龜移動軌跡的顏色)

    • /clear(清除軌跡)

    • /kill(刪除烏龜)

    • /teleport_absolute(絕對位置傳送)

    • /teleport_relative(相對位置傳送)

rostopic typerosservice type 顯示話題或服務的訊息類型

如果想要了解某個話題或服務具體使用的訊息格式時,可以使用 rostopic typerosservice type 這兩個指令來查詢,它們會告訴你特定話題或服務上使用的訊息類型(Message type)。

格式:

rostopic type <topic-name>

rosservice type <service-name>

例如對 /turtle1/cmd_vel 使用,它會告訴你 /cmd_vel 這個話題的訊息類型是 geometry_msgs/Twist,這是在 geometry_msgs (幾何訊息)的訊息類型,/Twist表示直線速度和角速度,是機器人或無人機控制中的基本訊息格式。而對 /turtle1/pose 使用則會回傳 turtlesim/Pose,這個是 TurtleSime 自定義的訊息類型。

$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

$ rostopic type /turtle1/pose
turtlesim/Pose

如果是對 /clear 使用,它會回傳 std_srvs/Empty,這代表它是 std_srvs (標準服務)中的訊息類型, /Empty 表示這個服務不需要傳遞任何資料即可運行。

$ rosservice type /clear
std_srvs/Empty

rosmsg show 顯示訊息類型的資料結構

rosmsg show 這個指令會顯示訊息類型的資料結構,包括所有的數值格式(整數、浮點數或是字串),讓你知道這個訊息類型可以包含什麼形式的資訊。

格式:

rosmsg show <message_type>

例如對 geometry_msgs/Twist 使用,會得到 linear (直線速度)和 angular (角速度)這兩個資料,並且它們的資料類別是 geometry_msgs/Vector3 ,代表每一個部分又包含三個軸向(x, y, z)的速度值,數值都是 float64

$ 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

這一篇寫完以後發現話題和服務的指令有點太多了,為了避免篇幅過長,所以這次就只先介紹了查詢相關的指令。下一篇再來介紹使用話題和服務的指令與節點進行互動。


上一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 8:ROS 的話題(Topic)和服務(Service)
下一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 10:利用話題(Topic)和服務(Service)來讓節點通訊(二)
系列文
ROS 筆記:要怎麼叫無人機自己飛25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言