在前幾天我們大概理解了整個 ROS 的架構,接下來要介紹幾個 ROS 開發上蠻常用到的工具。
今天主要介紹的套件為以下幾種
以上這五款工具是目前 ROS 開發最常用到的幾個工具之一,Gazebo 可以說是目前 ROS 領域中模擬做的最好的一款工具,RViz 則是目前將實時數據進行視覺化部分做的最棒的一款了,rqt 則是一款將資訊流進行可視化的一款軟體,有了他我們可以很方便地去觀察整個資訊的流通方式跟通訊架構。rosbag是一款對 package 進行使用的一個指令,並提供了 API 可以讓我們去使用。 rosbridge 是一款讓 ROS 跟外界能夠進行溝通的一個工具。
依照以上幾個包我們可以整理成四個方向:
當然模擬類型的工具包有很多種,像是 carsim 就是在做汽車模擬的還有 Webots 、 v rep 等等,有在開發人型機器人的應該都有聽過 Webots , 有興趣的讀者也可以去使用看看。
那為什麼我們使用 Gazebo 呢? 主要是他跟 ROS 是一家人,都是由OSRF(Open Source Robotics Foundation)來共同維護,所以他對 ROS 新版本的支援通常是最快的也是最好的,Gazebo 他也支持了很多物理引擎,像是最典型的 ODE (Open Dynamics Engine),他可以進行機器人運動學、動力仿真學、多種感測器與真實場地的模擬。
這邊要注意的是模擬並不只單純只是模擬而已,而是要去設計出一個跟現實應用場景很像的一個場景,你需要去考量光照、物理距離等等的參數,在設定好後再讓我們的機器人在模擬環境中跑跑看,是否可以完成我們所想要他完成的任務,像是自駕車、無人機等等的都是可以先在模擬中進行,並收集相對應的數據來進行改良,畢竟有些實驗是需要機器人在暴雨、颱風等等極端環境下進行測試,若可以在模擬中先進行調整後,可以讓我們在實際實驗時,能節省大量的金錢與時間。
界面的左測是控制區
在這邊只是給一個基本介紹,詳細的使用會在後面的文章中來提到~
RViz(the Robit Visualization tool) , 他是一款可視化工具,他提供了級時的監測,像是 SLAM 蠻長會用到這個工具的,他跟 Gazebo 相同都會彈出一個 3D 的空間,但是他使用上會有點不同,並且 Gazebo 是一個虛擬的空間,但是 RViz 他是真實的空間。 他在左側的插件控制區,相當是一群訂閱者,在負責接收訊息,並將其顯示出來。
平移:鼠标滚轮中键
旋转:鼠标左键
放缩:鼠标滚轮
左侧控制面板,可以添加插件
rqt 他是基於 QT 來進行開發的一個工具,所以他的擴展性很高,我們可以自己去寫一些插件來用。
我們常用的功能有這三個功能
上面是一張小烏龜跟他的控制器所繪製出來的 rqt_graph , 其中圓圈包住的便是我們的 node,你可以看到兩個節點是怎麼去做溝通的,節點跟節點間會有一個箭頭,代表著他訊息發送的方向,然後我們可以把 Nodes only 改成 Nodes Topics 就可以看到裡面的 topic 了
接下來是 rqt_plot 的部分,在這個功能呢我們可以監聽某一個節點他現在的狀態,並將其進行繪圖,你要監聽哪一個 Topic 需要在在面 Topic 那邊去打上你要的 Topic ,這樣就可以了
rqt_console 裡有一些選項,可以讓我們把不要的資訊給隱藏,我們可以利用他來查到我們需要的 log。
他的用途在於查看過去的紀錄並且去看 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 是一個用在 ROS 中和其他系統之間的一個工具,就跟他的名子一樣,把他當成橋梁就對了,讓 ROS 跟其他的系統能夠互相的跑來跑去,而 Rosbridge 給非 ROS 的程式一個 JSON 的 API
Rosbridge 主要包含兩部分: 協議 (Potocol)和 執行 (Implementation)
Rosbridge Protocol 提供了非 ROS 程式 與 ROS 傳輸的具體的格式規範,規範基於 JSON 格式,
包括訂閱 topic,發布 message , 調用server,設置參數,壓縮訊息等等.例如訂閱 topic 的格式
規範如下:
{ "op": "subscribe",
"topic": "/cmd_vel",
"type": "geometry_msgs/Twist"
}
此規範與跟你用哪一種語言和傳輸方式是沒有任何關係的,只要你可以發送 JSON 的傳輸方式都是可以用的,也就是說可以跟 Rosbridge protocol 進行交流,並且與 ROS 進行溝通.
Rosbridge_suite 是滿足了 Rosbridge Protocol 並提供 WebSocket 傳輸層套件的集合。
這些套件包含:
核心 rosbridge 的套件包。 Rosbridge_library 負責拿到 JSON 並將命令發送到 ROS,反過來接收處理 ROS 發過來的訊息,將他轉換為 JSON ,並將結果轉交給非 ROS 程式去跑。
通過服務調用來跟某些 ROS 進行聯繫與運行,這些服務通常為 ROS 客戶端保留的服務. 這些動作包含拿參數和設參數,拿到 topic list 等等。
雖然 Rosbridge_library 提供 JSON 到 ROS 的轉換,但它將傳輸層留給其他人。Rosbridge_server 提供了一個 WebSocket 的串連方式,所以瀏覽器可以與 ROS 進行通訊。
Roslibjs 是一個瀏覽器的 JavaScript 套件 ,可以讓rosbridge_server 跟 ROS 互傳訊息。
他的原程式碼在這邊~ Github
今天的部分就到這邊,今天介紹了一些 ROS 的開發工具如何使用,在後面會有一些實作的部分,會讓讀者更佳的熟悉這些工具如何進行使用
#Arm Arm Platforms