學習輕鬆應用 ROS 機器人作業系統的技術 – 理解 ROS 機器人訊息傳遞方式(下)

在開始閱讀本篇文章前,請先確認完成下列事項:

若上述事項已準備就緒,便可以開始閱讀下列的教學文章囉 !

當我們能夠初步的使用 ROS 1.0 系統簡單控制 turtlesim 中的小烏龜後,接下來要挑戰的是,操控別台機器上的小烏龜囉! 在本篇文章中,我們將可以學習到

1. 虛擬機器 Virtualbox 的網路設定與測試

2. 多台機器運行ROS 1.0 的設定方法

3. 虛擬機器遠端遙控樹莓派上的小烏龜測試

本篇文章的重點,是在「室內」使用多台機器一同使用 ROS1.0 系統。為了達成這一個目的,首先需要了解的便是 ROS 1.0系統的遠端通訊架構了,如下圖所示。

在多台機器上運行 ROS 1.0系統遠端通訊架構示意圖

ROS 1.0 系統透過 TCP/IP的通訊協定來完成與多個機器人之間的通訊。用簡單的話語來說,就是只要知道各個機器人間的本地IP位置,便可以在「室內」使用 ROS 1.0系統來完成各種訊息的傳送。

但這種方法有一個限制:

  • 機器人間需要形成「區域網路」後,ROS系統才有辦法透過各自的本地IP位置來完成通訊。

若是想要多個機器人在「室外」使用 ROS 系統,則需要設定「遠程 ROS 1.0系統網路」,相關資訊可以至 ROS的官方教學網址查詢。

因此,我們需要先將想要使用 ROS 1.0 系統的所有機器人,連接到同一個區域網路後,才能夠使用 ROS 1.0 系統進行遠端通訊。1. 虛擬機器 Virtualbox 的網路設定與測試

( 若您並不是使用虛擬機器操作 ROS 1.0 系統,可以直接跳到第 2 步驟:多台機器運行ROS 1.0 的設定方法 )

理解 ROS 1.0 機器人訊息傳遞方式(上) 文章中,我們有提到過 VirtualBox的網路介面卡設定,預設的使用模式是 「NAT」,這會讓 VirtualBox無法與其他機器通訊。因此若是想要使用 VirtualBox 與多台機器一同使用 ROS 1.0 系統的話,第一步便是要更改 Virtualbox的網路介面卡設定。

1-1

先選擇想要使用的虛擬機器專案,本次範例選擇 ros_tutorial 專案,開啟網路設定的畫面

Virtualbox 開啟虛擬機器專案的網路設定

1-2

在網路設定畫面中,我們可以發現到虛擬專案的網路介面卡預設模式為「NAT」,我們需要將此選項更改為「橋接介面卡」。

更改網路介面卡預設模式

1-3

接下來我們需要告知虛擬機器專案要橋接實體電腦中的網路卡名稱。在此我們選擇實體電腦中的無線網路卡名稱。請特別注意,每台電腦所配備的無線網路卡不盡相同,名稱也會有所不同。通常無線網路卡名稱都會擁有 「 Wireless 」字樣。

選擇想要橋接的網路卡名稱

操作到這裡為止,虛擬機器專案中的網路介面卡便可以透過實體電腦中的無線網路卡,向外部的 AP分享器取得一組由該AP分享器所分配的 IP位置了。

這裡需要注意的是,實體電腦一定要先連接 AP分享器,VirtualBox 才能夠向 AP分享器取得一組 本地 IP。

Virtualbox 中 ros_tutorial 專案的網路連接架構示意圖

1-4

接下來,我們將虛擬機器啟動後,開啟 Terminal 開始查詢虛擬機器的本地 IP位置。

Ø 輸入指令:ifconfig

查詢虛擬機器的本地 IP

輸入完成後,可以查詢虛擬機器目前為止,關於網路介面的狀態。我們可以發現到關於「enp0s3」這張網路卡,已經擁有了從 AP分享器所分配出來的 IP位置,本篇文章範例為 「 192.168.1.39 」。

虛擬機器 ros_tutroial 專案的網路狀態資訊

1-5

接著我們來查看第二台已安裝好 ROS系統之電腦或單板電腦的 IP 位置。本篇文章將以單板電腦「樹莓派3 model B」為範例 ( 點此查看購買資訊 ),下圖為樹莓派3 model B 開啟Terminal視窗後,所顯示的使用者帳戶資訊與主機名稱。並且為了方便與虛擬機器專案的 Terminal 視窗有所區別,會在右下角多貼上一個樹莓派的圖案。

樹莓派開啟 Terminal 的畫面資訊

1-6

在已裝好 ROS1.0系統之樹莓派3 model B 中,我們先將樹莓派連線至指定的 AP分享器,需要注意的是,想要使用同一個 ROS系統的所有電腦與機器人,都需要連接到同一個 AP 分享器,如下圖所示。

AP分享器、虛擬機器、樹莓派的連線示意圖

1-7

將樹莓派3 model B連線至指定 AP分享器成功後,在 Terminal 視窗輸入 「 ifconfig 」指令後,一樣可以查看關於網路介面的狀態。樹莓派3 model B中已具備無線網路卡,當使用 「 ifconfig 」指令查詢後,可以發現無線網路卡 「wlan0」已經擁有一組由 AP分享器指派的IP位置。

樹莓派的網路狀態資訊

操作到此步驟後,我們兩台電腦之間的區域網路已經形成了,相關的網路架構圖如下圖所示

AP分享器、虛擬機器、樹莓派的區域網路連線架構示意圖

仔細觀察 AP分享器、 VirtualBox 與樹莓派之間的擁有的 IP,我們可以發現網域皆是「 192.168.1.X」,這表示我們已經利用 AP分享器,讓兩台電腦形成一個簡單的區域網路囉!

1-8

接下來,我們需要使用 「ping 」指令,來測試兩台電腦是否能夠成功地進行通訊。

在虛擬機器上,打開 Terminal 視窗,輸入下面的指令。這裡需要注意的是,輸入的 IP 必須要是 樹莓派的本地 IP 。

Ø 輸入指令:ping 192.168.1.134

虛擬機器 ros_tutorial 與 樹莓派的連線測試成功動畫

若是發現無法成功連線時,主要問題有下面兩個:

1. 實體電腦未連接至指定的 AP 分享器

2. 實體電腦的防火牆未關閉,擋住虛擬機器與樹莓派之間的通訊

若上述兩個問題排除後,連線測試仍舊是失敗的,可以考慮讓虛擬機器掛載一個 USB 型無線網路卡 ,在這裡推薦此型號之 USB無線網路卡 : EDIMAX EW-7822ULC ( 點此查看購買資訊 )

若測試連線成功後,我們便可以開始進行多台機器運行ROS 1.0 的設定方法囉!

2-0

多台機器運行 ROS 1.0的設定方法

當所有機器人都處在同一個區域網路時,我們便可以開始編輯 Terminal 的環境變數設定檔。在此之前,我們可以先將各個機器人的 本地IP位置,放入一開始提及的在多台機器上運ROS 1.0系統網路架構圖,讓自己知道 ROS 1.0系統進行遠端訊息傳輸時的狀態。

本篇文章範例多台機器運行 ROS 1.0 系統時的狀態

我們需要先決定哪一個機器人為 Master ,以上方的架構示意圖為例,是由虛擬機器註冊一個 Master ,之後所有的訊息皆由這個 Master 來管理接收與發放訊息。

2-1 編輯虛擬機器端的環境變數設定檔

因此,我們先開起虛擬機器上的 Terminal ,輸入指令進入其中的環境變數設定檔。

Ø 使用 gedit 編輯環境變數設定檔指令:sudo gedit ~/.bashrc

開啟環境變數設定檔動畫

2-2

開啟環境變數設定檔後,在環境變數設定檔最下方加入兩行指令

虛擬機器端新增的環境變數指令

動畫示意圖如下

在環境變數設定檔最下方加入兩行指令

  • export ROS_MASTER_URI : 此行變數即是告知 ROS 1.0系統將會由哪一台機器註冊 Master
  • export ROS_HOSTNAME : 此行變數即是告知 ROS 1.0 系統本台機器的本地IP

編輯好虛擬機器的Terminal環境變數設定檔後,便可以儲存關閉,並且重新啟動 Terminal。

2-3 編輯樹莓派的環境變數設定檔

接下來我們要編輯的是樹莓派的 Terminal 環境變數設定檔,首先一樣在樹莓派的 Terminal 視窗輸入指令進入樹莓派的環境變數設定檔,隨後在環境變數設定檔下方加入兩行指令。

樹莓派端新增的環境變數指令

需要特別注意的是變數 ROS_MASTER_URI 指定的是註冊 Master 的機器本地IP位置,在本篇文章範例中即是虛擬機器;而變數 ROS_HOSTNAME 則是輸入樹莓派端的本地 IP位置。編輯完成後的結果如下圖所示

確認編輯的環境變數沒有問題後,便可儲存關閉檔案囉! 3. 虛擬機器遠端遙控樹梅派上的小烏龜測試

將上述兩個準備步驟完成後,我們便可以開始進行小烏龜的測試了!

測試的方法非常簡單,在樹莓派上開啟小烏龜的節點後,再至虛擬機器端開起移動的節點,我們便可以使用虛擬機器的鍵盤指令,遠端遙控樹莓派上的小烏龜喔!

詳細的操作步驟如下:

3-1 虛擬機器 ros_tutorial 先在區域網路上註冊一個 Master

Ø註冊 Master 指令 : roscore

虛擬機器 ros_tutroial 註冊 Master

3-2 樹莓派端執行 turtlesim_node 節點

Ø 執行 turtlesim_node 節點 指令 : rosrun turtlesim turtlesim_node

樹莓派端執行 turtlesim_node 節點

3-3 虛擬機器執行 turtle_teleop_key 節點

Ø 執行 turtle_teleop_key 節點 指令 : rosrun turtlesim turtle_teleop_key

虛擬機器執行 turtle_teleop_key 節點

3-4 遠端遙控小烏龜!

在虛擬機器上執行 turtle_teleop_key 節點的 terminal 按下方向鍵,開始控制樹梅派上的小烏龜吧!!

虛擬機器遠端遙控樹莓派的小烏龜本篇範例文章小結

ROS 1.0 系統其實是透過在 terminal 的環境變數 ROS_MASTER_URI 與 ROS_HOSTNAME ,來決定要向哪一台機器所註冊的 Master 發布與訂閱 各種訊息 。只要能夠熟練地應用這項技巧,便可以開始進一步地使用 ROS1.0 的各種 Package ,來打造屬於自己的機器人系統囉!

小小預告一下,下一篇文章小編預計要使用「聲音」,來控制小烏龜與一台真正的全向輪平台 – 「智慧機器人」喔 ! !