更加認識 Gazebo

這篇文章實際上參考了Gazebo的官方教學,不過之後我會講解自己的實作過程。

首先,讓我們來了解組成 Gazebo 模擬的幾個中大關鍵要素。

世界檔!

這類文件主要由 Gazebo server 開啟,這類文件的格式被稱為 SDF
(Simulation Description Format),其副檔名為 .world。Gazebo已經內附了許多已經完成的世界模型,都放置在這個路徑下:<install_path>/share/gazebo-<version>/worlds.

模型檔!

顧名思義,就是描述機器人模型或者任何要放置在世界當中的文件。這類文件通常會被
<model> … </model> 的標籤包覆著。如果你想把你的模型加進一個世界檔中的話,你可以在世界檔中加加上:

 <include>
<uri>model://model_file_name</uri>
</include>
其實Gazebo已經有很多建立好的模型,你可以在官方位於 Bitbucket上的檔案庫內找到所需要的模型,執行的時候就會執行時間(Runtime)內載入,可以說是相當方便。如果你熟悉另外一種版本控制軟體 Mercurial
的話,你可以把整個模型資料庫克隆到你的本地端來:

$ hg clone https://bitbucket.org/osrf/gazebo_models

喔!別忘了先安裝 Hg (Mercurial)。
官方的教學網站都以實作 SDF格式為主,包括更進階的如何將自己的模型加入meshes、加上顏色、加上物理特性、貢獻到公共遠端檔案庫作分享,不過我將不會再多加解釋如何撰寫 SDF 文件,因為我使用另外一種方式匯入模型,想知道我怎麼做的,請看這邊

插件!(Plugins)

插件,就像在瀏覽器加了某個小軟體,就可以擋掉 Youtube
的討厭的廣告,或者提供更多方便的功能一樣,在模擬界,插件也能賦予模型或者世界更多采多姿的可能性,甚至改變 Gazebo
顯示物件的方法(據說)。插件可以直接用終端機以指令召喚,或者寫在世界檔內默默召喚。插件通常會被server啟動,但有時候 Client
也可以啟動,方便使用者即時做調整。
 
其他更多資訊,請看官方網站的介紹
 

相關主題文章:

更多精采文章,請回目錄瀏覽!

廣告

安裝 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

相關主題文章:

更多精采文章,請回目錄瀏覽!

ROS 遠端連線

其實機器人本身就是一台電腦,不管你今天是用什麼主機板或開發版,到最後,一定得再接上網路,才可能跑 ROS (除非你把機器人有連上網卡的主機設成熱點,不過這樣好像治標不治本),否則會顯示「找不到 master」等錯誤訊息。其實,我們常常也會碰到需要遠端監控或操作的狀況,除了看起來比較酷以外,還有更實際的原因:我們需要將比較需要做運算的演算法,在另外一台電腦上執行,而機器人上的主機,只需要收感測器資料加控制馬達就可以了。ROS便提供了多台主機共享
Topics 的方法,藉由乙太網路存取資源,實際上多台電腦用起來,跟用一台電腦差不多,但省去許多要熟悉 Socket架設之類的麻煩。好,不囉嗦,步驟如下:

內容一覽:

1         準備步驟

1.1        自我連線檢測

1.2        雙方連線檢測

2         遠端連線

3         ROS 資源共享

1. 準備步驟
1.1 自我連線檢測

我們實際的例子,就是一台電腦連機器人:

Fig. 1.

遠端連線機器人示意圖

首先,必須先確認 Robot 端主機和 Client 端主機皆連線到同一個乙太網內。我們打開機器人電腦上的終端機,用ping 做連線檢測。這邊有兩種方式:
(1)  
IP 來檢測。如果不知道自己的IP的話,在終端機輸入:

$ ifconfig

終端機應該會輸出以下訊息:

請看 wlan0中 inet addr IP位址,這就是這台電腦的 IP 位址。看你是用什麼方式連線,如果網路是直接接在數據機上的話,應該是看 io 那部分找對應的 IP。這樣的位址會隨著你連線到不同的路由器或子網路而變更,因此如果今天要是由其他裝置遠端
ping 這台機器的話,必須先在這端知道自己的 IP。不過好處是,你將會很確定自己的位址只是對,因此連不上去可能是另外一台的網路設定出問題。

那麼現在就可以來 ping 自己。假設我取得了我的 IP,是192.168.120.101,現在來試試看:

$ ping 192.168.2.109

順利的話,終端機會出現以下訊息,

PING 192.168.2.109 (192.168.2.109) 56(84) bytes of data.
64 bytes from 192.168.2.109: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 192.168.2.109: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 192.168.2.109: icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from 192.168.2.109: icmp_seq=4 ttl=64 time=0.042 ms
^C
— 192.168.2.109 ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.042/0.044/0.046/0.008 ms

表示自我連線測試成功。如果沒有,請確認實體連線是否正常,然後再檢測 Linux上網路連線設定是否正確。可以參考「埃羅魯巴特」中的疑難排解。
(2)  
使用 Zeroconf 的方式 ping 自己。Zeroconf 是一系列能自動整合網路連線的技術。你可以直接使用 Zeroconf 的名稱來取代 IP,因此就算你有多台機器都同時連線在另外一個網域上,在不清楚每台的IP情況下,仍然可以透過 Zeroconf 找到對方。Zeroconf
的名稱,就是:

[hostname的名稱].local
直接在終端機上打:

$ hostname

回覆的訊息,就是你這台主機的 hostname,譬如我的是 charly-MSI,那麼zeroconf就是 charly-MSI.local,如下:

charly-MSI

Ping 自己:

$ ping charly-MSI.local

回覆的訊息跟方法 (1) 中一樣,連線正常。

PING charly-MSI (127.0.1.1) 56(84) bytes of data.
64 bytes from charly-MSI (127.0.1.1): icmp_seq=1 ttl=64 time=0.012 ms
64 bytes from charly-MSI (127.0.1.1): icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from charly-MSI (127.0.1.1): icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from charly-MSI (127.0.1.1): icmp_seq=4 ttl=64 time=0.047 ms
^C
— charly-MSI ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.012/0.037/0.047/0.015 ms

 1.2. 雙方連線檢測

我們再次使用 ping 來互測對方連線,如果從 Client 端能連線到 Robot 端,並且反之亦然,表示連線正常。那麼我們就可以進入到下一個步驟。

Client 端終端機輸入:

$ ping myRobot.local

接著在 Robot端終端機輸入:

$ ping myClient.local

都能連上,跳到下一步。

2. 遠端連線

我們可以使用 ssh從 Client 端連線到 Robot 端:

$ ssh myRobot.local

如果你機器人的 ssh 要求比較多的話,那就連登入的使用者名稱都寫下去:

$ ssh myRobot@myRobot.local

那如果你還想要遠端連線時遠端存取圖形化使用者介面(GUI),那記得把 Xorg 打開,如下:

$ ssh –X myRobot.local

連線得到的話,輸入被遠端連線的電腦密碼,登入。

3. ROS資源共享

為了讓每台主機上的 ROS 都能共用資源,我們必須確認 Client 能知道誰是 Master,因此,我們可以打開用起來最順手的文件編輯器,譬如說我打開 vim,將以下指令存入 ~/.bashrc

$ vim ~/.bashrc

譬如說我的機器人 hostname叫 myRobot,那我們則拉到文件最後一行,在下面寫:

export ROS_HOSTNAME=myRobot.local

Client 端則也寫上

export ROS_HOSTNAME=myClient.local

那現在要讓大家知道誰是老大。如果你像我們的例子一樣,一個電腦連一個接器人的話,通常機器人會被設為 Master,電腦則為 Client,那麼就在 Client 端的 ~/.bashrc中,加入:

export ROS_MASTER_URI=http://myRobot.local:11311

這樣 Client 就知道機器人是老大。記得後面的 :11311 要加上去喔!其實你也可以將
Master 設在 Client 端,但是不管怎麼樣,永遠只能有一個 Master!這很重要,所以請容許我強調三次:

永遠只能有一個 Master

永遠只能有一個 Master

永遠只能有一個 Master

那你可能會問,那萬一有時候我想要在一台機器測完某個功能後,再連上
Master 怎麼辦?很簡單,涼拌!開玩笑的!你可以回到
~/.bashrc
中,把 export ROS_MASTER_URI那行給註解掉,儲存離開,關掉你現在在使用的終端機以及裡面的所有分頁,然後再打開新的終端機,啟動
roscore,這樣子,你就可以將這台電腦與 master
的主機徹底切割!(可謂又是另一種別開生面的神切割啊啊啊啊啊!)

接著,為了讓兩台以上的電腦同步,請記得使用
chrony
來同步時間,如果沒有這個軟體的話,在終端機中這樣安裝:

$ sudo apt-get install chrony

安裝完後,再安裝 ntpdate,一切就緒後,在 Client端終端機打:

$ ntpdate myRobot.local

如果一切正確,電腦會顯示兩者電腦的時間差,並會自動同步。

相關主題文章:

更多精采文章,請回目錄瀏覽!