1. 程式人生 > >ROS——常用工具

ROS——常用工具

本章主要介紹了ROS開發時常常使用的工具,分別是:

  • Gazebo
  • RViz
  • rqt
  • rosbag
  • rosbridge
  • moveit!

這六個工具是我們開發常常用到的工具,gazebo是一種最常用的ROS模擬工具,也是目前模擬ROS效果最好的工具;RViz是視覺化工具,是將接收到的資訊呈現出來;rqt則是非常好用的資料流視覺化工具,有了它我們可以直觀的看到訊息的通訊架構和流通路徑;rosbag則是對軟體包進行操作的一個命令,此外還提供程式碼API,對包進行操作編寫。rosbridge是一個溝通ROS和外界的功能包,moveit!是目前為止應用最廣泛的開源操作軟體。好好學習本章,熟練使用這幾款工具對於我們的ROS學習和開發都有極大的好處,可以事半功倍。

5.1 Gazebo

5.1.1 簡介

ROS中的工具就是幫助我們完成一系列的操作,使得我們的工作更加輕鬆高效。ROS工具的功能大概有以下幾個方向:模擬、除錯、視覺化。本節課我們要學習的Gazebo就是實現了模擬的功能,而除錯與視覺化由Rviz、rqt來實現,我們下節再依次介紹。

5.1.2 認識 Gazebo

對於Gazebo,大家可能並不陌生,因為我們在前面的學習過程中已經數次用到這個模擬環境,無論是在topic通訊還是在service通訊中,我們的demo都是在Gazebo中實現。

Gazebo是一個機器人模擬工具,模擬器,也是一個獨立的開源機器人模擬平臺。當今市面上還有其他的模擬工具例如V—Rep、Webots等等。但是Gazebo不僅開源,也是是相容ROS最好的模擬工具。

Gazebo的功能很強大,最大的優點是對ROS的支援很好,因為Gazebo和ROS都由OSRF(Open Source Robotics Foundation)開源機器人組織來維護,Gazebo支援很多開源的物理引擎比如最典型的ODE。可以進行機器人的運動學、動力學模擬,能夠模擬機器人常用的感測器(如鐳射雷達、攝像頭、IMU等),也可以載入自定義的環境和場景。

5.1.3 模擬的意義

模擬不僅僅只是做出一個很酷的3D場景,更重要的是給機器人一個逼近現實的虛擬物理環境,比如光照條件、物理距離等等。設定好具體的引數,讓機器人完成我們設定的目標任務。比如一些有危險因素的測試,就可以讓機器人在模擬的環境中去完成,例如無人車在交通環境複雜的交通要道的效果,我們就可以在模擬的環境下測試各種情況無人車的反應與效果,如車輛的效能、駕駛的策略、車流人流的行為模式等,又或者各種不可控因素如雨雪天氣,突發事故,車輛故障等,從而收集結果引數指標資訊等等,只有更大程度的逼近現實,才能得出車輛的真實效果。直到無人車在模擬條件下做到萬無一失,才能放心的投放到真實環境中去使用,這即避免了危險因素對實驗者的威脅,也節約了時間和資源,這就是模擬的意義。

通常一些不依賴於具體硬體的演算法和場景都可以在Gazebo上模擬,例如影象識別、感測器資料融合處理、路徑規劃、SLAM等任務完全可以在Gazebo上模擬實現,大大減輕了對硬體的依賴。

5.1.4 演示

和我們前面的例項測試一樣,我們開啟教材的模擬場景,輸入roslaunch robot_sim_demo robot_spawn_launch

操作說明

  • 平移:滑鼠左鍵
  • 旋轉:滑鼠滾輪中鍵
  • 放縮:滑鼠滾輪
  • 介面左側是控制面板
  • 匯入模型就在控制面板的insert,可以直接拖入模擬空間,也可以按需自制模型拖入。

5.1.5 小結

雖然Gazebo目前的功能還稱不上強大,同時還存在著一些BUG,但是對於我們的入門學習也已經是足夠了,隨著版本的更新,Gazebo也在越來越強大。

5.2 RViz

5.2.1 簡介

本節課介紹的是我們在ROS開發中非常常用的一個工具,基本上的除錯和開發都離不開這個工具——RViz(the Robit Visualization tool)機器人視覺化工具,視覺化的作用是直觀的,它極大的方便了監控和除錯等操作。

5.2.2 演示

依然開啟教材的模擬場景,輸入roslaunch robot_sim_demo robot_spawn_launch,之後在命令列開啟新的終端直接輸入$ rviz 開啟工具。

和Gazebo一樣,也會顯示出一個3D環境,不過操作上有所不同,具體操作如下:

  • 平移:滑鼠滾輪中鍵
  • 旋轉:滑鼠左鍵
  • 放縮:滑鼠滾輪
  • 左側控制面板,可以新增外掛

RViz的外掛種類繁多功能強大,非常適合我們開發除錯ROS程式。

5.2.3 差異

雖然從介面上來看,RViz和Gazebo非常相似,但實際上兩者有著很大的不同,Gazebo實現的是模擬,提供一個虛擬的世界,RViz實現的是視覺化,呈現接收到的資訊。左側的外掛相當於是一個個的subscriber,RViz接收資訊,並且顯示。所以RViz和Gazebo有本質的差異。

5.2.4 小結

RViz和Gazebo是我們常用的ROS工具,更好的利用這些工具是我們ROS進階的基礎。具體的操作和使用可以參考我們的官方演示視訊,跟著視訊去實戰演練,熟悉這兩個工具。

5.3 rqt

5.3.1 簡介

rqt是一個基於qt開發的視覺化工具,擁有擴充套件性好、靈活易用、跨平臺等特點,主要作用和RViz一致都是視覺化,但是和RViz相比,rqt要高階一個層次,。

5.3.2 命令

  • rqt_graph :顯示通訊架構
  • rqt_plot :繪製曲線
  • rqt_console :檢視日誌

rqt_graph

rqt_graph是來顯示通訊架構,也就是我們上一章所講的內容節點、主題等等,當前有哪些Node和topic在執行,訊息的流向是怎樣,都能通過這個語句顯示出來。此命令由於能顯示系統的全貌,所以非常的常用。

rqt_plot

rqt_plot將一些引數,尤其是動態引數以曲線的形式繪製出來。當我們在開發時檢視機器人的原始資料,我們就能利用rqt_plot將這些原始資料用曲線繪製出來,非常的直觀,利於我們分析資料。

rqt_console

rqt_console裡存在一些過濾器,我們可以利用它方便的查到我們需要的日誌。

5.3.3 例項測試

  1. 首先開啟我們教材的模擬場景,輸入roslaunch robot_sim_demo robot_spawn_launch
  2. 輸入命令語句rqt_graph,顯示出了當前環境下執行的Node和topic,十分直觀的看到通訊結構以及訊息流向。注意在橢圓形的代表節點,矩形代表topic。
  3. 輸入命令語句rqt_plot,顯示出曲線座標視窗,在上方輸入框裡新增或者刪除topic,比如我們檢視速度,可以在框裡設定好topic後,移動機器人,就可以看到自動繪製的線速度或者角速度曲線。
  4. 輸入命令語句rqt_console,顯示日誌的輸出,配合rqt_logger_level檢視日誌的級別。

5.3.4 小結

rqt_graph這個功能是強大的,它使得我們初學者可以直觀的看到ROS的通訊架構和資訊流,方便我們理解的同時,也使得我們能夠最快的糾錯等等。rqt_plot繪製資料曲線圖,也是極大的幫助我們瞭解資料的變化態勢,理解資料流的作用,用曲線來顯示我們的操作,精確直觀。rqt_console配合rqt_logger_level,檢視日誌,對於查詢錯誤和DeBug都有很大幫助。

5.4 Rosbag

5.4.1 簡介

rosbag是一個這是一套用於記錄和回放ROS主題的工具。它旨在提高效能,並避免訊息的反序列化和重新排序。rosbag package提供了命令列工具和程式碼API,可以用C++或者python來編寫包。而且rosbag命令列工具和程式碼API是穩定的,始終保持向後的相容性。

5.4.2 命令

rosbag對軟體包來操作,一個包是ROS用於儲存ROS訊息資料的檔案格式,rosbag命令可以記錄、回放和操作包。指令列表如下:

命令 作用
cheak 確定一個包是否可以在當前系統中進行,或者是否可以遷移。
decompress 壓縮一個或多個包檔案。
filter 解壓一個或多個包檔案。
fix 在包檔案中修復訊息,以便在當前系統中播放。
help 獲取相關命令指示幫助資訊
info 總結一個或多個包檔案的內容。
play 以一種時間同步的方式回放一個或多個包檔案的內容。
record 用指定主題的內容記錄一個包檔案。
reindex

重新索引一個或多個包檔案。

 

一、bag基本操作指令

 

$rosbag record -a

 

-all 儲存所有的話題

$rosbag record  -O  w   /turtle1/cmd_vel  

接收話題 /turtle1/cmd_vel  的資料包,並命名為w.bag

$rosbag info <bag>

顯示包的詳細資訊

$rosbag play <bag>

播放bag包

 

$rosbag play -r 2 <bag>

以2Hz的頻率播放bag 包

 

 

二、bag_to_pcd

(1)從bag包轉pcd

 

$ rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>
$ rosrun pcl_ros bag_to_pcd data.bag /velodyne_points ./wtj

 

從data.bag中提取/velodyne_points 話題資料到wtj 資料夾中。

(2)  通過釋出,訂閱實時轉

 
  1. 檢查topic:rosbag info XXX.bag

  2. 傳送message: $ rosbag play XXX.bag

  3. 訂閱需要的話題:$rosrun pcl_ros pointcloud_to_pcd input:=/velodyne_points

在當前目錄下將話題實時轉為pcd檔案。

 

(3)顯示生成的pcd檔案

 

$pcl_viewer  1513648255448748.pcd

5.5 Rosbridge

5.5.1 簡介

Rosbridge是一個用在ROS系統和其他系統之間的一個功能包,就像是它的名字一樣,起到一個"橋樑"的作用,使得ros系統和其他系統能夠進行互動.Rosbridge為非ROS程式提供了一個JSON API,有許多與Rosbridge進行互動的前端,包括一個用於Web瀏覽器互動的WebSocket伺服器。Rosbridge_suite是一個包含Rosbridge的元程式包,用於Rosbridge的各種前端程式包(如WebSocket程式包)和幫助程式包。

5.5.2 協議和實現

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_library : 核心rosbridge軟體包。Rosbridge_library負責獲取JSON字串並將命令傳送到ROS,反過來接收處理ROS發過來的資訊,將之轉換為JSON字串,並將結果轉交給非ROS程式。

  • rosapi : 通過服務呼叫來訪問某些ROS操作,這些服務通常為ROS客戶端庫保留的服務.這些操作包括獲取和設定引數,獲取主題列表等等。

    +

  • rosbridge_server : 雖然Rosbridge_library提供JSON到ROS轉換,但它將傳輸層留給其他人。Rosbridge_server提供了一個WebSocket連線,所以瀏覽器可以與ROS“交談”。Roslibjs是一個瀏覽器的JavaScript庫,可以通過rosbridge_server與ROS進行交流。

原始碼

5.5.3 安裝與使用

安裝

Rosbridge是基於ROS的,首先要確保自己正確的安裝完成了ROS之後可以啟動終端執行命令:

sudo apt-get install ros- <rosdistro> -rosbridge-server

中間的為自己的ROS版本,依照自己的版本進行安裝.

使用

關於更深入的使用,可以參考本課程的視訊課程,簡單的入門使用可以參考連結如下:

參考連結

5.6 moveit!

5.6.1 簡介

2012年,一款叫做moveit!的移動操作軟體誕生了,moveit!最初在Willow Garage由Sachin Chitta,Ioan Sucan,Gil E. Jones,Acorn Pooley,Suat Gedikli,Dave Hershberger開發,它融合了研究者在運動規劃、操縱、3D感知、運動學、控制和導航方面的最新進展,為操作者提供了一個易於使用的平臺,使用它可以開發先進的機器人應用,也被廣泛應用於工業,商業,研發和其他領域。由於以上特性,moveit!一躍成為在機器人上最廣泛使用的開源操作軟體,截止2017年,已經被用於超過65臺機器人。

5.6.2 使用

moveit!的使用通過為使用者提供介面來呼叫它,包括C++、Python、GUI三種介面。ROS中的move_group節點充當整合器,整合多個獨立元件,提供ROS風格的Action和service。move_group通過ROS topic和action與機器人通訊,獲取機器人的位置、節點等狀態,獲取資料再傳遞給機器人的控制器。

move_group節點獲取到節點狀態資訊或者機器人變換資訊時候,會通過控制器的介面去處理這些資訊,比如進行座標轉換、規劃場景、3D感知。另外,move_group的結構比較容易擴充套件,不僅具有獨立的能力如抓放,運動規劃,也可擴充套件自公共類,但實際作為獨立的外掛執行。moveit!系統結構圖如下:

官網連結