安裝 Gazebo

如果你決定要馬上模擬自己的機器人,那就趕緊來安裝 Gazebo 吧!其實
Gazebo
是一個跨平台的獨立軟體,所以你可以選擇安裝在自己慣用得平台上。但由於我們要讓 ROS
能連得上 Gazebo 做各種模擬,所以這篇只講解在
Linux
上安裝的過程。更多詳細的安裝流程可以參考 Gazebo 官方安裝教學。

內容一覽

  1. 確認應該安裝哪一版本的 Gazebo
  2. 在 Linux 上安裝 Gazebo
    1. 一行安裝
    2. 一步步安裝
  3. 安裝 gazebo_ros_pkgs
    1. 第一種:Debian 安裝
    2. 第二種:自己編譯安裝
  4. 測試整合了ROS的Gazebo
    1. Rosrun啟動Gazebo
    2. Roslaunch啟動Gazebo
    3. 用rostopic 檢查Gazebo
    4. 用rosservice確認Gazebo

1. 確認應該安裝哪一版本的 Gazebo

在安裝之前,請先確認哪一個版本才能支援自己目前使用的 ROS 版本。ROS
只支援稍微舊一點的版本,但儘管說舊一點的版本,其實對機器人模擬上,也已經夠用了。請查看 這裡
來了解自己應該安裝哪一版本的 Gazebo
例如說,我正在使用 ROS Indigo,則需要安裝的 Gazebo 版本是 2.x 開頭。 

2. 在 Linux 上安裝 Gazebo

筆者所使用的環境為 Linux Ubuntu Precise 14.04。先將獨立的
Gazebo
安裝起來,在安裝 gazebo_ros,將
ROS
Gazebo 連結起來。

2.1 一行安裝

1. 打開你的終端機,依照你目前使用的 ROS 版本,安裝支援的 Gazebo 版本(請參考這篇的Installing Gazebo 小節)。例如如果是 ROS Indigo 的話,所能支援的 Gazebo 就是2.x 版本,請輸入:

$ sudo apt-get install gazebo2

這樣應該就安裝起來了,可以直接在終端機上開分頁,執行看看:

$ gazebo

你也可以

2.2 一步步安裝

1. 首先讓你的電腦接受來自  packages.osrfoundation.org. 的下載:

$ sudo sh -c ‘echo “deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list’

2. 加上金鑰:

$ wget http://packages.osrfoundation.org/gazebo.key -O – | sudo apt-key add –

3. 執行以下安裝:

$ sudo apt-get update

$ sudo apt-get install gazebo[你適用的版本,例如說 2]

# 如果之後要開發自己的插件(plugin)的話,請再多安裝一個包裹

$ sudo apt-get install libgazebo[你適用的版本]-dev

4. 檢查有沒有安裝起來:

$ gazebo

檢查你有沒有安裝正確版本的 Gazebo,查看有沒有將 Gazebo 安裝到正確的路徑下:

$ which gzserver

$ which gzclient

如果安裝正確,第一行輸入進去,會回覆:

/usr/local/bin/gzserver

/usr/local/bin/gzclient

第二行則會回覆:

/usr/bin/gzserver>/usr/bin/gzclient

3. 安裝 gazebo_ros_pkgs

3.1 第一種:Debian 安裝

ROS Hydro 後,Gazebo_ros 有很大的變動,可能是為了實際使用上,不要讓獨立的
gazebo
ROS 版本的Gazebo 名稱上發生混淆。從Hydro 後的 debian 安裝方法,若你使用:

ROS Hydro

$ sudo apt-get install ros-hydro-gazebo-ros-pkgs ros-hydro-gazebo-ros-control

ROS Indigo

$ sudo apt-get install ros-indigo-gazebo-ros-pkgs ros-indigo-gazebo-ros-control

ROS Jade

目前2015Jade 並沒有釋出 gazebo-ros-control  封包。詳情請關注https://github.com/ros-controls/ros_control/issues/201

$ sudo apt-get install ros-jade-gazebo-ros-pkgs

3.2 第二種:自己編譯安裝

首先,確認你已經安裝了ROS,架設好 Workspace,並在~/.bashrc 中 source
這個工作空間的路徑。大致上catkin_worspace 的安裝,可以參考這裡。
接著,我們要來克隆 Git 上面的檔案庫,並在本地端編譯。首先,確認 Git 已經安裝,其安裝方法如下:

$ sudo apt-get install git

安裝好後,在終端機移到自己的工作空間/src下,將克隆後的檔案庫放在這裡:

cd ~/catkin_ws/src

若你使用 ROS Jade

$  git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git -b jade-devel

若你使用 ROS Indigo

$  git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git -b indigo-devel

若你使用 ROS Hydro

$  git clone https://github.com/ros-simulation/gazebo_ros_pkgs.git -b hydro-devel

檢查是否有缺少的相依程式庫

$ rosdep update

$ rosdep check –from-paths . –ignore-src –rosdistro jade

然後安裝上缺少的程式庫:

$ rosdep install –from-paths . –ignore-src –rosdistro jade -y

如上所述,ROS Jade 尚未包含 gazebo-ros-control 封包,所以先暫時忽略不編譯:

$ touch gazebo_ros_pkgs/gazebo_ros_control/CATKIN_IGNORE

回到工作空間最上層路徑,編譯:

$ cd ~/catkin_ws/

$ catkin_make

4. 測試整合了ROS的Gazebo

請確認你有在~/.bashrcsource
ROS系統路徑和自己的工作空間 catkin_workspace 的路徑。 
現在,你可以用 roslaunchrosrun或者rosservice的方式啟動Gazebo

4.1 Rosrun啟動Gazebo

首先,在終端機上輸入:

$ roscore

再開一個分頁,輸入

$ rosrun gazebo_ros gazebo

或者把 client 和 server 一起啟動:

$ rosrun gazebo_ros gazebo

也可以各別啟動,例如只開 server

$ rosrun gazebo_ros gzserver

和只開 client

$ rosrun gazebo_ros gzclient

另外,也可以只開Server,用 GDB 進入除錯模式:

$ rosrun gazebo_ros debug

4.2 Roslaunch啟動Gazebo 

你可以輸入以下來載入一個空白的世界:

$ roslaunch gazebo_ros empty_world.launch

4.3 用rostopic 檢查Gazebo

輸入 

$ rostopic list

應該會看到運作中的 topics,如下:

/gazebo/link_states>/gazebo/model_states>
/gazebo/parameter_descriptions>/gazebo/parameter_updates>
/gazebo/set_link_state

/gazebo/set_model_state

表示gazebo_ros_pkgs 運作正常。

4.4 用rosservice確認Gazebo 已安裝

也可以用 rosservice 確認 Gazebo有沒有正常運作,如下輸入:

$ rosservice list

應該會返回:

/gazebo/apply_body_wrench>
/gazebo/apply_joint_effort>/gazebo/clear_body_wrenches>
/gazebo/clear_joint_forces>/gazebo/delete_model>
/gazebo/get_joint_properties>/gazebo/get_link_properties>
/gazebo/get_link_state>/gazebo/get_loggers>
/gazebo/get_model_properties>/gazebo/get_model_state>
/gazebo/get_physics_properties>/gazebo/get_world_properties>
/gazebo/pause_physics>/gazebo/reset_simulation>/gazebo/reset_world>
/gazebo/set_joint_properties>/gazebo/set_link_properties>
/gazebo/set_link_state>/gazebo/set_logger_level>
/gazebo/set_model_configuration>/gazebo/set_model_state>
/gazebo/set_parameters>/gazebo/set_physics_properties>
/gazebo/spawn_gazebo_model>/gazebo/spawn_sdf_model>
/gazebo/spawn_urdf_model>/gazebo/unpause_physics>
/rosout/get_loggers

/rosout/set_logger_level

表示 Gazebo 運作正常。


 

Referece:
http://wiki.ros.org/gazebo_ros_pkgs

http://gazebosim.org/tutorials?tut=install_ubuntu&cat=install

http://gazebosim.org/tutorials?cat=connect_ros

Gazebo 是什麼?為什麼要用它?

Gazebo 這個單字的英文原意是類似 Pavilion 的涼亭,也沒人能解釋這個單字的來源。Anyway,我們不是來上英文課的。在模擬界,Gazebo 是一個功能強大的模擬軟體,如果你覺得還未能滿足你在模擬上的需求(譬如說你想模擬當個創世神中的地獄、或者火星環境、或者月球表面、或者土星環上的狀況時),你可以加上自己的 Plugins。而其實 Gazebo 是一整套跟 ROS 毫無相關的獨立軟體。截至目前為止(2015年11月)已經推到了 6.0.0.0 版,推陳出新的速度可真是驚人!

gazebo-10x14b
所以別人在沙盒裡面堆城堡玩車車,而我們則是在涼亭裡面玩機器人!

那你可能會問,既然 Gazebo 是獨立軟體,那跟 ROS 的模擬又有什麼關係?那就是,ROS 既然是一個包山包海的架構,它當然也連結了 Gazebo 方便開發者把自己的機器人同時匯入 Gazebo 又可以自行存取 Gazebo 中自己辛苦打造的機器人的所有資訊。

Screenshot-from-2014-03-14-07_34_30
Fig.1. Husky 在模擬世界中的樣子

maxresdefault
ATLAS 機器人相對於桌面和箱子的樣子。其實許多家具都是直接拿官方檔案庫中的模型檔直接匯入的

gazebo11
Fig.3. Pioneer 機器人在家具環境中的模擬

14399417397131117
Fig.4. 整個 Willow Garage 的辦公室都已經是可以直接當場匯入的世界檔

我講太快了,我們一步步慢慢來。

  1. Gazebo 是什麼?
  2. 為什麼要用 Gazebo?

1. Gazebo 是什麼?

Gazebo 是一套能真實模擬物理世界中各種模型及物體的軟體,很適合用來實驗機器人如何與周遭環境互動。Gazebo 的參考資源其實跟 ROS 一樣豐富,可以參考 Gazebo Wiki,或者 Gazebo Tutorial。可以先瀏覽完後,再來看我這邊的個人心得,會比較了解我為什麼這樣做。

gazebo_logo

另外,Gazebo實際上由兩個部分,或者兩個執行檔組成,Client和Server 端。Server端主宰了基本的物理運動相關的運算,以及感測器產生數據等,它可以單獨被開啟使用。你只要輸入"run headless"這樣的參數(怎麼讓我想到無頭騎士??XDD),它就可以直接被執行,在這裡可以了解如何啟動。而 Client 端主要就是執行圖形化使用者介面 (GUI),方便視覺化模擬。

Gazebo client server
我把 Server 和 Client 的關係想像成了冰山的樣子,也許整個架構其實是 50: 50 的,兩者佔的比重可能並不是這麼懸殊

PS: 這純屬各人的心得。有時候就算某個軟體的教學很完整,偶爾還是碰到一些文章沒交待到或者只能意會不能言傳的經驗時,便會讓不知情的初學者卡觀的情形,因此,我也將秉持著建議讀者先略讀官方教學文件後,再救自己的開發經驗分享,讓大家能以較少成本的方式,立刻上手,以期縮短學習曲線。

2. 為什麼要用 Gazebo?

就目前而言,Gazebo 所提供的模組與開發彈性遠優於其他模擬器,而這包括環境的建置、空間中的物品種類、可擴充性能與物理特性的彈性、已經建置好的機器人種類多寡、物理特性調整、匯入模型難易度等等,遠遠優於同類軟體。

據說,DARPA 的參賽團隊都有使用 Gazebo 來幫助他們開發各種所需的演算法。

而就個人而言,每次要實機操作時,心理壓力也很大,因為機器人可能會因為許多機構上的耗損或其他問題而突然間無法運作,或者必須時時注意其電量是否準確,儀器有無耗損,線材是否都能正常傳輸訊號,馬達與控制器間是否溝通不良等等,種種非核心的問題,可能就會耗費掉一個早上在硬體上除錯。除非你特別愛修硬體,否則實在是沒什麼產能的苦工。此外,如果因為自己的演算法讓機器人暴衝的話,也會造成一起開發的其他夥伴們實際上的困擾與危險。

如果今天是一個團隊要協作一整個專案的話,實機操作除了要顧慮人手一多會把硬體搞砸外,更重要的就是大家都想檢測自己寫的程式在機器人上會不會出問題,而模擬可以更實際的得出一個相當安全也相對低成本的解答。

但是也有不需要做模擬的時候。如果你覺得自己實體的機器人很容易使用,環境單純,或者操作上很安全,且只是單純跑一個簡單的程式,那麼就不建議實作模擬,畢竟從建立機器人模型到實際操作虛構的機器人,這中間也要耗費不少心力。

總之,一個訣竅就是,請善用自己最熟練的方式,來達成目標,而不是別人怎麼做,自己就要跟著做。


圖片來源:

涼亭 http://www.shawneestructures.com/2009-old-images/gazebo-10x14b.jpg

Gazebo Logo http://gazebosim.org/assets/gazebo_vert-f8ad1a52e3f233c2ff74fb43ee770f75.png

冰山 http://www.pvisoftware.com/blog/wp-content/uploads/2013/11/Pegasus_vertex_Iceberg.png

Fig.1. http://robohub.org/wp-content/uploads/2014/03/Screenshot-from-2014-03-14-07_34_30.png

Fig.2. https://i.ytimg.com/vi/yVICMC_BAiU/maxresdefault.jpg

Fig.3. http://traclabs.com/wp/wp-content/uploads/2010/11/gazebo11.png

Fig.4. http://answers.gazebosim.org/upfiles/14399417397131117.jpg

走進模擬的世界

如果你寫了一個路徑規劃法,或者一個需要動用好幾個感測器才能讓機械手臂抓取物體的演算法,但是你必須與其他10個團隊成員一起使用一台造價昂貴的機器人時,那要怎麼辦?又或者你手邊跟板就不可能有一台 PR2 或者 ATLAS 人型機器人,但卻想在這樣的機器人身上跑一下自己的演算法?

那麼你來對地方了!國外的機器人團隊通常會替自己的機器人製作一個模擬用的機器人模型,一些機器人公司也陸續推出自家的機器人模型,方便大家自己在電腦中跑模擬,評估自己的演算法是否安全或穩定。而模擬界也開發了幾套物理引擎,方便開發者或機器人玩家將模型匯入並模擬在各種環境中,機器人運行的狀態。就筆者接觸過的,就屬 Arbotix 的 rbx1 模擬器以及 Gazebo,其他許多開者也會使用的,有 STDR (做二維模擬)另外還有剛推出的 MORSE Simulator。但 Gazebo 是一個相當老字號的模擬器,我們便從這套成熟的架構逐漸深入。

gazebo_logo
Fig.1.  Gazebo 的標誌

darpa-atlas
Fig.2. ATLAS 人型機器人由每過的機器人公司 Boston Dynamics 開發製造

pr2_gazebo
Fig.3. 應該是該公司製作的 ATLAS 機器人模型

我將以我個人的開發經驗做彙整,當然,若日後還有其他機會接觸,會逐一將心得整理出來。不過就目前為止,我只考慮就最簡單的方式,介紹給大家如何上手這套軟體。若你有相關的使用經驗,也請不吝分享指教!

turtlebot
Fig.4. Willow Garage 推出的 TurtleBot 是一個建構鰻完整的機器人,想要立刻上手的人,可以買一台試試看!

turtlebot_simulado
Fig.5. Gazebo 中的 TurtleBot
Nao_whitebg
Fig.6. Aldebaran Robotics 研製的 NAO 機器人

 

nao_con_piel
Fig.7. NAO 在 Gazebo 中的樣子

 

KUKA_youbot
Fig.8. KUKA 的 youBot 手臂車,這台機器人甚至有一整套很完整的方案

 

youBot_gazebo
Fig.9. Gazebo 中的 youBot

 

Beta_1-5
Fig.10. Willow Garage 推出的 PR2
pr2_gazebo
Fig.11. Gazebo 模擬中的 PR2

 

圖片來源:

Fig.1. https://upload.wikimedia.org/wikipedia/en/thumb/1/13/Gazebo_logo.svg/1024px-Gazebo_logo.svg.png

Fig.2. https://robotfutures.files.wordpress.com/2013/10/darpa-atlas.jpg

Fig.3. http://i.ytimg.com/vi/ER4NnanGiUc/maxresdefault.jpg

Fig.4. http://singularityhub.com/wp-content/uploads/2011/04/Turtlebot-02.jpg

Fig.5. http://jderobot.org/store/bmenendez/uploads/images/mediawiki/turtlebot_simulado.png

Fig.6. http://robotica.unileon.es/mediawiki/images/f/f2/Nao_whitebg.jpg

Fig.7. http://jderobot.org/store/bmenendez/uploads/images/tfm/nao/nao_con_piel.png

Fig.8. http://www.youbot-store.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/3/j/3j8g3115-kopie518273ed20b04.png

Fig.9. https://i.ytimg.com/vi/U2cbUQkFZ0U/maxresdefault.jpg

Fig.10. https://www.willowgarage.com/sites/default/files/robots_pr2/Beta_1-5.jpg

Fig.11. http://answers.ros.org/upfiles/13855650235971625.png