【自造DIARY】ROS 1.0 訊息傳遞方式教學(下)

作者:創客萊吧 MakerLab

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

  • 準備好兩台已安裝 ROS 1.0 系統之個人電腦或單板電腦,安裝方式可查閱輕鬆應用 ROS的技術 – ROS系統安裝教學
  • 已閱讀完成此篇教學文章:ROS 1.0 訊息傳遞方式教學(上)
  • 本文章範例的 IP 位置皆是在創客萊吧 Makerlab 測試時所使用的,操作時請使用自己查詢到的 IP 位置
  • 了解開啟分頁型 Terminal 的快捷鍵為 「 Ctrl + shift + T」
  • Ø 開頭若是此符號,表示為需要輸入的指令

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

當我們能夠初步的使用 ROS 1.0 系統簡單控制 turtlesim 中的小烏龜後,接下來要挑戰的是,操控別台機器上的小烏龜囉!

本篇文章的重點,是在「室內」讓多台機器一同使用 ROS 1.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 系統進行遠端通訊。(P.S. 若您並不是使用虛擬機器操作 ROS 1.0 系統,可以直接跳到第 2 部分:多台機器運行 ROS 1.0 的設定方法)

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

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

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

Virtualbox 開啟虛擬機器專案的網路設定(圖片來源:創客萊吧提供)

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

更改網路介面卡預設模式(圖片來源:創客萊吧提供)

3. 接下來我們需要告知虛擬機器專案要橋接實體電腦中的網路卡名稱。

在此我們選擇實體電腦中的無線網路卡名稱。請特別注意,每台電腦所配備的無線網路卡不盡相同,名稱也會有所不同。通常無線網路卡名稱都會擁有「Wireless」字樣。

選擇想要橋接的網路卡名稱(圖片來源:創客萊吧提供)

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

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

Virtualbox 中 ros_tutorial 專案的網路連接架構示意圖(圖片來源:創客萊吧提供)

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

Ø 輸入指令:ifconfig

查詢虛擬機器的本地 IP(圖片來源:創客萊吧提供)

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

虛擬機器 ros_tutroial 專案的網路狀態資訊(圖片來源:創客萊吧提供)

5. 查看第二台已安裝好 ROS 系統之電腦或單板電腦的 IP 位置。

本篇文章將以單板電腦「樹莓派 3 model B」為範例(購買資訊),下圖為樹莓派 3 model B 開啟 Terminal 視窗後,所顯示的使用者帳戶資訊與主機名稱。並且為了方便與虛擬機器專案的 Terminal 視窗有所區別,會在右下角多貼上一個樹莓派的圖案。

樹莓派開啟 Terminal 的畫面資訊(圖片來源:創客萊吧提供)

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

AP 分享器、虛擬機器、樹莓派的連線示意圖(圖片來源:創客萊吧提供)

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

樹莓派的網路狀態資訊(圖片來源:創客萊吧提供)

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

AP 分享器、虛擬機器、樹莓派的區域網路連線架構示意圖(圖片來源:創客萊吧提供)

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

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

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

Ø 輸入指令:ping 192.168.1.134

虛擬機器 ros_tutorial 與樹莓派的連線測試成功動畫(圖片來源:創客萊吧提供)

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

  • 實體電腦未連接至指定的 AP 分享器
  • 實體電腦的防火牆未關閉,擋住虛擬機器與樹梅派之間的通訊

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

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

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

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

本篇文章範例多台機器運行 ROS 1.0 系統時的狀態(圖片來源:創客萊吧提供)

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

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

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

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

開啟環境變數設定檔動畫(圖片來源:創客萊吧提供)

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

在環境變數設定檔最下方加入兩行指令(圖片來源:創客萊吧提供)

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

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

3. 編輯樹莓派的環境變數設定檔。

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

樹莓派端新增的環境變數指令(圖片來源:創客萊吧提供)

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

確認編輯的環境變數沒有問題後,便可儲存關閉檔案(圖片來源:創客萊吧提供)

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

將上述兩個準備步驟完成後,我們便可以開始進行小烏龜的測試了!測試的方法非常簡單,在樹莓派上開啟小烏龜的節點後,再至虛擬機器端開起移動的節點,我們便可以使用虛擬機器的鍵盤指令,遠端遙控樹莓派上的小烏龜喔!

詳細的操作步驟如下:

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

Ø 註冊 Master 指令 : roscore

虛擬機器 ros_tutroial 註冊 Master(圖片來源:創客萊吧提供)

2. 樹莓派端執行 turtlesim_node 節點。

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

樹莓派端執行 turtlesim_node 節點(圖片來源:創客萊吧提供)

3. 虛擬機器執行 turtle_teleop_key 節點。

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

虛擬機器執行 turtle_teleop_key 節點(圖片來源:創客萊吧提供)

4. 遠端遙控小烏龜。

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

小結

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

(本文轉載自創客萊吧原文連結;責任編輯:賴佩萱)

創客萊吧MakerLab

分享有趣的創作與教學,提供Maker們創作的軍火庫,DIY 零件 | 套件| 工具。
創客萊吧MakerLab

Author: 創客萊吧MakerLab

分享有趣的創作與教學,提供Maker們創作的軍火庫,DIY 零件 | 套件| 工具。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *