iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Arm Platforms

ROS with Deep learning 開發與實戰系列 第 7

Day7 ROS 工具介紹

在前幾天我們大概理解了整個 ROS 的架構,接下來要介紹幾個 ROS 開發上蠻常用到的工具。

今天主要介紹的套件為以下幾種

  • Gazebo
  • RViz
  • rqt
  • rosbag
  • rosbridge

以上這五款工具是目前 ROS 開發最常用到的幾個工具之一,Gazebo 可以說是目前 ROS 領域中模擬做的最好的一款工具,RViz 則是目前將實時數據進行視覺化部分做的最棒的一款了,rqt 則是一款將資訊流進行可視化的一款軟體,有了他我們可以很方便地去觀察整個資訊的流通方式跟通訊架構。rosbag是一款對 package 進行使用的一個指令,並提供了 API 可以讓我們去使用。 rosbridge 是一款讓 ROS 跟外界能夠進行溝通的一個工具。

依照以上幾個包我們可以整理成四個方向:

  • 模擬
    • Gazebo
  • 可視化
    • RViz
    • rqt
  • 指令
    • rosbag
    • rosbridge

Gazebo

當然模擬類型的工具包有很多種,像是 carsim 就是在做汽車模擬的還有 Webots 、 v rep 等等,有在開發人型機器人的應該都有聽過 Webots , 有興趣的讀者也可以去使用看看。

那為什麼我們使用 Gazebo 呢? 主要是他跟 ROS 是一家人,都是由OSRF(Open Source Robotics Foundation)來共同維護,所以他對 ROS 新版本的支援通常是最快的也是最好的,Gazebo 他也支持了很多物理引擎,像是最典型的 ODE (Open Dynamics Engine),他可以進行機器人運動學、動力仿真學、多種感測器與真實場地的模擬。

這邊要注意的是模擬並不只單純只是模擬而已,而是要去設計出一個跟現實應用場景很像的一個場景,你需要去考量光照、物理距離等等的參數,在設定好後再讓我們的機器人在模擬環境中跑跑看,是否可以完成我們所想要他完成的任務,像是自駕車、無人機等等的都是可以先在模擬中進行,並收集相對應的數據來進行改良,畢竟有些實驗是需要機器人在暴雨、颱風等等極端環境下進行測試,若可以在模擬中先進行調整後,可以讓我們在實際實驗時,能節省大量的金錢與時間。

操作

界面的左測是控制區

  • 平移:滑鼠左鍵
  • 旋转:滑鼠滾輪中鍵
  • 放缩:滑鼠滾輪
  • 導入模型的位置在控制區的 insert ,或是直接拖曳進去空間。

在這邊只是給一個基本介紹,詳細的使用會在後面的文章中來提到~

RViz

RViz(the Robit Visualization tool) , 他是一款可視化工具,他提供了級時的監測,像是 SLAM 蠻長會用到這個工具的,他跟 Gazebo 相同都會彈出一個 3D 的空間,但是他使用上會有點不同,並且 Gazebo 是一個虛擬的空間,但是 RViz 他是真實的空間。 他在左側的插件控制區,相當是一群訂閱者,在負責接收訊息,並將其顯示出來。

平移:鼠标滚轮中键
旋转:鼠标左键
放缩:鼠标滚轮
左侧控制面板,可以添加插件

rqt

rqt 他是基於 QT 來進行開發的一個工具,所以他的擴展性很高,我們可以自己去寫一些插件來用。

我們常用的功能有這三個功能

  • rqt_graph
    • 顯示通訊架構
  • rqt_plot
    • 繪製曲線
  • rqt_console
    • 查看 log ,並且會依照嚴重等級來做區分,幫助我們看 log

rqt_graph

上面是一張小烏龜跟他的控制器所繪製出來的 rqt_graph , 其中圓圈包住的便是我們的 node,你可以看到兩個節點是怎麼去做溝通的,節點跟節點間會有一個箭頭,代表著他訊息發送的方向,然後我們可以把 Nodes only 改成 Nodes Topics 就可以看到裡面的 topic 了

rqt_plot

接下來是 rqt_plot 的部分,在這個功能呢我們可以監聽某一個節點他現在的狀態,並將其進行繪圖,你要監聽哪一個 Topic 需要在在面 Topic 那邊去打上你要的 Topic ,這樣就可以了

rqt_console

rqt_console 裡有一些選項,可以讓我們把不要的資訊給隱藏,我們可以利用他來查到我們需要的 log。

rosbag

他的用途在於查看過去的紀錄並且去看 VCR(回放) 我們的資訊, 我們通常會用 record 這個指令,並指定說我們要去記錄哪一個 topic ,接下來他會生成一個 .bag 檔,我們可以拿它來做回放,查看那一段時間發生了什麼。

指令

紀錄某些 topic 到 bag 中

rosbag record <topic 名稱>

紀錄所有 topic

rosbag record -a

回到 bag , 也就是去回放剛剛錄下來的東西

rosbag play <bag-files>

其他的指令

指令 作用
cheak 確定一個 package 是否可以在系統中運行,或者是否可以遷移。
decompress 壓縮一個或多個 package 文件。
filter 解壓一個或多個 package 文件。
fix 在 package 中修復消息,以便在目前的系統中播放。
help 獲取幫助訊息
info 總結一個或多個 package 的內容。
reindex 重新索引一個或多個 package 文件。

Rosbridge

Rosbridge 是一個用在 ROS 中和其他系統之間的一個工具,就跟他的名子一樣,把他當成橋梁就對了,讓 ROS 跟其他的系統能夠互相的跑來跑去,而 Rosbridge 給非 ROS 的程式一個 JSON 的 API

Rosbridge 主要包含兩部分: 協議 (Potocol)和 執行 (Implementation)

Protocol

Rosbridge Protocol 提供了非 ROS 程式 與 ROS 傳輸的具體的格式規範,規範基於 JSON 格式,
包括訂閱 topic,發布 message , 調用server,設置參數,壓縮訊息等等.例如訂閱 topic 的格式

規範如下:

{ "op": "subscribe",
"topic": "/cmd_vel",
"type": "geometry_msgs/Twist"
}

此規範與跟你用哪一種語言和傳輸方式是沒有任何關係的,只要你可以發送 JSON 的傳輸方式都是可以用的,也就是說可以跟 Rosbridge protocol 進行交流,並且與 ROS 進行溝通.

Implementation

Rosbridge_suite 是滿足了 Rosbridge Protocol 並提供 WebSocket 傳輸層套件的集合。

這些套件包含:

  • Rosbridge_library

核心 rosbridge 的套件包。 Rosbridge_library 負責拿到 JSON 並將命令發送到 ROS,反過來接收處理 ROS 發過來的訊息,將他轉換為 JSON ,並將結果轉交給非 ROS 程式去跑。

  • rosapi

通過服務調用來跟某些 ROS 進行聯繫與運行,這些服務通常為 ROS 客戶端保留的服務. 這些動作包含拿參數和設參數,拿到 topic list 等等。

  • rosbridge_server :

雖然 Rosbridge_library 提供 JSON 到 ROS 的轉換,但它將傳輸層留給其他人。Rosbridge_server 提供了一個 WebSocket 的串連方式,所以瀏覽器可以與 ROS 進行通訊。
Roslibjs 是一個瀏覽器的 JavaScript 套件 ,可以讓rosbridge_server 跟 ROS 互傳訊息。

他的原程式碼在這邊~ Github

結語

今天的部分就到這邊,今天介紹了一些 ROS 的開發工具如何使用,在後面會有一些實作的部分,會讓讀者更佳的熟悉這些工具如何進行使用
#Arm Arm Platforms


上一篇
DAY 6 ROS 通訊架構2
下一篇
Day 8 ROS Client Library 與 Roscpp
系列文
ROS with Deep learning 開發與實戰11

尚未有邦友留言

立即登入留言