在開始閱讀本篇文章前,請先確認完成下列事項:
- 準備好兩台已安裝 ROS 1.0 系統之個人電腦或單板電腦,安裝方式可查閱 輕鬆應用ROS的技術 – ROS 1.0機器人操作系統安裝教學
- 開啟分頁型 Terminal 的快捷鍵為 「 Ctrl + shift + T」
- 已閱讀完成此篇教學文章:輕鬆應用 ROS 機器人作業系統的技術 – 理解 ROS 1.0 訊息傳遞方式(上)
- 本文章範例的 IP位置皆是在CIRCUS Pi 測試時所使用的,操作時請使用自己查詢到的 IP位置
- Ø 開頭若是此符號,表示為需要輸入的指令
若上述事項已準備就緒,便可以開始閱讀下列的教學文章囉 !
當我們能夠初步的使用 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 ,來打造屬於自己的機器人系統囉!
小小預告一下,下一篇文章小編預計要使用「聲音」,來控制小烏龜與一台真正的全向輪平台 – 「智慧機器人」喔 ! !