1. 程式人生 > >ubuntu16.04下ROS作業系統學習(四 / 四)ROS基礎-ROS中的關鍵元件

ubuntu16.04下ROS作業系統學習(四 / 四)ROS基礎-ROS中的關鍵元件

ROS當中的關鍵元件:

  1. Launch檔案
  2. TF座標變換
  3. Qt工具箱
  4. Rviz視覺化平臺
  5. Gazebo物理模擬環境
  • Launch檔案

我們之前都是使用rosrun命令來執行具體的節點的。當我們啟動一個比較複雜的功能的時候,我們需要啟動很多個節點。很多時候這種方法非常麻煩。ROS提供了另一種機制來實現多個節點的啟動,同時也可以具體地配置每個節點之間的引數。比rosrun這樣的命令要方便地多。並且launch檔案可以自動啟動ros master。我們接下來看一個比較簡單的launch檔案:

這個檔案裡面有兩個標籤,launch的標籤和node的標籤。

launch標籤是整個launch檔案中的根元素。也就是說內容都要在launch檔案裡面。

node標籤的意思就是啟動ros當中的一個節點。

格式如上圖所示,其中含有以下引數:

  • pkg:節點所在功能包名稱。要啟動的節點的功能包的名字。
  • type:節點的可執行檔名稱。功能包下面的可執行檔案。
  • name:節點執行時的名稱。節點執行成功之後的名字。這個名字會覆蓋程式碼當中的名字的。
  • output、respawn、required、ns、args。除了上述引數之外還有這些引數。output表示的是節點當中的一些內部資訊是否要列印到螢幕上。或者說列印到日誌檔案裡面去。respawn表示的是如果當前節點啟動失敗他會重新啟動。required節點表示的是如果這個節點不啟動的話,那麼整個launch檔案將不會啟動。ns表示的是name space表示節點空間的命名屬性。args表示的是節點當中具體有哪些引數,比如說從命令列輸入兩個引數的加數這樣的。

除了launch標籤和node標籤之外還有另外的一些標籤,比如像引數設定的標籤等

更多的標籤可以在以下連結中進行學習:http://wiki.ros.org/roslaunch/xml

  • TF座標變換

 

在ros裡面TF功能包能夠幫助我們更好地管理使用座標變換。那麼TF功能包具體可以做什麼呢?

  • 我們可以查詢五秒鐘之前,機器人頭部座標系相對於全域性座標系的關係是什麼樣的?
  • 機器人夾取的物體相對於機器人中心座標的位置在哪裡?
  • 機器人中心座標系相對於全域性座標系的位置在哪裡?

我們可以通過廣播TF變換或者監聽TF變換實現座標變換。

接下來我們通過一個簡單的例子來具體說明一下:

安裝一個功能包,是關於小海龜的一個例子

sudo apt-get install ros-kinetic-turtle-tf

接下來執行demo:

roslaunch turtle_tf turtle_tf_demo.launch

這裡報了一個錯誤:ImportError: No module named rospkg。這是由於anaconda裡面的環境變數設定導致的。可以由以下方法解決:

conda install setuptools
pip install -U rosdep rosinstall_generator wstool rosinstall six vcstools

之後我們執行demo,可以看到以下場景:

之後我們啟動鍵盤控制節點:

rosrun turtlesim turtle_teleop_key 

之後我們控制小海龜移動,你會發現一個是跟隨著另一個在做移動的:

在這個例子當中就是展示了座標變換的關係,我們可以通過以下命令看一下它是如何體現座標變換的。

生成的pdf檔案會放到終端執行的根目錄下面:

這裡面是一個樹型結構,可以看到裡面有三個座標系,一個world,一個turtle1和一個turtle2。這三個座標系有什麼關係呢?

我們已知turtle1的位置,也已知turtle2的位置。我們現在的目的是想讓第二隻海龜向第一隻海龜移動。我們可以通過命令列來查詢這兩個座標之間的關係:

我們可以看到平移關係的距離為0,旋轉角度有一點角度的偏差,角度的表示是通過三種方式來表達的。

 

我們如何來通過程式碼展示剛才的這樣一個例子呢?

  • 定義TF廣播器(TransformBroadcaster)
  • 建立座標變換值
  • 釋出座標變換(sendTransform)

我們在我們的工作空間下面單獨編寫一下關於tf的程式碼。建立功能包,然後編寫程式碼:

這兩個檔案分別是tf的給廣播者和監聽者。

我們首先看一下TF的廣播器:

我們看main函式:首先需要訂閱具體的海龜位置,訂閱成功之後呼叫回撥函式。在回撥函式裡面呼叫廣播器,之後封裝一個海龜的座標變換,這個海龜的座標變換是與世界座標系的變換,其實只有z軸有旋轉,x,y軸都是0。之後的話我們通過sendTransform來將其釋出出去。

之後我們看一下TF監聽器:

  • 定義TF監聽器(TransformListener);
  • 查詢座標變換(waitForTransform、lookupTransform)

寫好程式碼之後就可以編譯程式碼了

之後在工作空間目錄下對其進行catkin_make編譯就可以了,編譯成功之後就可以通過launch檔案啟動:

 

  • Qt工具箱

一個視覺化的工具,裡面有多種視覺化的工具,基於qt開發。

rqt__console:日誌輸出工具。

rqt_graph:計算圖視覺化工具。

rqt_plot:資料繪圖工具。

rqt_reconfigure:引數動態配置工具。

 

  • Rviz視覺化平臺

Rviz是一款三維視覺化工具,可以很好的相容基於ROS軟體的機器人平臺。用於顯示資料的,如機器人模型,座標資訊,運動規劃,導航,點雲,影象,slam等。

  1. 在rviz中,可以使用可擴充套件標記語言xml對機器人、周圍物體等任何實物進行尺寸、質量、位置、材質、關節等屬性的描述,並且在介面中呈現出來。
  2. 同時,rviz還可以通過圖形化的方式,實時顯示機器人感測器的資訊、機器人的運動狀態、周圍環境的變化等資訊。
  3. 總而言之,rviz通過機器人模型引數、機器人釋出的感測資訊等資料,為使用者進行所有可監測資訊的圖形化顯示。使用者和開發者也可以在rviz的控制介面下,通過按鈕、滑動條,數值等方式,控制機器人的行為。

rviz還提供了外掛機制,可以提供給我們一種視覺化地程式設計效果。

 

  • Gazebo物理模擬引擎

Gazebo是一款強大的三維物理模擬平臺。具備強大的物理引擎,高質量的圖形渲染,方便的程式設計與圖形介面,開源免費。

gazebo的介面如下圖所示:

我們可以通過以下命令啟動一個gazebo的空的模型:

roslaunch gazebo_ros empty_world.launch

由於這個模型是放在國外的伺服器上面的,我們載入它的話就會比較慢,顯示的gazebo就是黑的,沒有關係你可以等一會,或者在網上找找別的方法。在這裡面我們就可以去新增一個機器人模型。

我們可以在左邊新增一些模型:

gazebo本身是一個開源軟體。跟ros相比其實是比較獨立的。跟ros之間有一個介面,來完成跟ros的連線。

gazebo_ros:主要用於gazebo介面封裝、gazebo服務端和客戶端的啟動、URFD模型生成等。

gazeb_msg:是gazebo的Msg和Srv資料結構。

gazebo_plugins:用於gazebo的通用感測器外掛。

gazebo_ros_api_plugin和gazebo_ros_path_plugin這兩個gazebo的外掛實現介面封轉。

如何使用gazebo來進行模擬?

建立模擬環境

配置機器人模型

開始模擬

我們以後再說