ROS multi-master——multimaster_fkie配置
多主站ROS配置和mutimaster_fkie
ROS版本:kinetic
操作系統(tǒng):Ubuntu 16.04。
multimaster_fkie:github
1網(wǎng)絡配置
1.1路由器
- 設置無線路由器并連接兩臺計算機/機器人。
- 為這兩臺計算機設置靜態(tài)IP地址。
- 相互測試ping命令和ssh。
1.2主機
我們將計算機0定義為主計算機C0,將計算機1定義為客戶端計算機C1。
在C0和C1上,備份其/ etc / hosts文件并修改這些文件以注冊其IP地址。
注意:最好使用計算機名作為C0和C1的主機名。在這里,“計算機名稱”是/ etc / hosts文件中“ 127.0.1.1”旁邊出現(xiàn)的名稱。ROS和multimaster_fkie的node_manager以不同的方式對待不同種類的“主機名”。只是不要嘗試“配置”它們。您最好再次檢查/ etc / hostname的內容是否與/ etc / hosts中的名稱一致。
一個/ etc / hosts文件示例如下圖1所示。現(xiàn)在,讓我們使用我自己的計算機作為C0(主機名:yyhu-live)。客戶端計算機為C1(主機名:ai-airlab)。
圖1 C0上的/ etc / hosts文件示例。↑yyhu-live是我的計算機的主機名。127.0.0.1和192.168.5.101被分配了相同的主機名。
從兩端使用新定義的主機名對C0和C1進行ping操作。
1.3 ROS網(wǎng)絡
本節(jié)主要通過參考pdf組成。(“ Sergi Hernandez Juan和Fernando Herrero Cotarelo的“多主ROS系統(tǒng)”)
在每臺計算機上,將此行放入其.bashrc文件中。
export ROS_MASTER_URI=http://yyhu-live:11311要通過SSH使用ROS,在Ubuntu 16系統(tǒng)上,用戶必須在其.bashrc文件中注釋以下行,如圖2所示。(請參見此處。multimaster_fkie的官方網(wǎng)站也提到了此問題。)
圖2 .bashrc文件中要注釋的行。(第6至9行)↑
?
在每臺計算機上使用以下命令檢查是否啟用了多播功能。
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts在每臺計算機上使用以下命令暫時啟用多播功能。
sudo sh -c "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts"要永久啟用多播功能,請編輯/etc/sysctl.conf文件,添加以下行。
net.ipv4.icmp_echo_ignore_broadcasts=0并使用以下命令重新啟動相關服務。
sudo service procps restart使用此命令顯示當前定義的多播組。通常,應該有一個224.0.0.1組。
netstat -g使用此命令查看是否所有計算機都響應廣播。
ping 224.0.0.11.4測試多主ROS網(wǎng)絡的可用性
在C0上啟動roscore,然后啟動master_discovery節(jié)點。終端輸出如圖3所示。
rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1
圖3在C0上啟動master_discovery節(jié)點后的終端輸出。↑
在C1上,請使用不同的節(jié)點名稱啟動相同的節(jié)點。(參考。)
rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai注意:name參數(shù)前有兩個下劃線。
如果節(jié)點名稱相同,則C0將抱怨這種情況并自行終止。
在C0上啟動master_sync節(jié)點(終端輸出如圖4所示)。
rosrun master_sync_fkie master_sync
圖4啟動master_sync節(jié)點號C0后的終端輸出。↑
在C1上,啟動具有不同節(jié)點名的?master_sync節(jié)點。
rosrun master_sync_fkie master_sync __name:=master_sync_ai目前,每個master_sync節(jié)點都應打印同步信息。此信息將在幾秒鐘的間隔內刷新。
通過每臺計算機上的“ rostopic列表”和“ rosnode列表”列出當前主題和節(jié)點,應該會看到相同的結果。如圖5所示。
圖5主題和節(jié)點列表。在C0上執(zhí)行。↑
如果一切正常,現(xiàn)在讓我們嘗試發(fā)布和訂閱真實數(shù)據(jù)。在兩臺計算機中的任何一臺上,使用以下命令啟動一個匿名節(jié)點。
rostopic pub -r 1 /test std_msgs/Int32 1上面的命令將啟動一個匿名節(jié)點,并發(fā)布一個名稱為“ / test”的主題。此節(jié)點每秒將發(fā)布一個Int32類型值1。現(xiàn)在使用“ rostopic列表”和“ rosnode列表”查看新主題和節(jié)點是否存在。結果將類似于圖6。
圖6新的匿名節(jié)點。↑
如果/ test在C1上,請使用
rostopic hz /test在C0上查看C0是否真的可以接收任何實際數(shù)據(jù)。結果如圖7所示。
圖7對ROS主題的頻率測試。↑
2個node_manager GUI
現(xiàn)在,我們已經(jīng)配置了一個有效的多主ROS網(wǎng)絡,我們可以使用node_manager GUI可視化ROS網(wǎng)絡中節(jié)點的信息并與這些節(jié)點進行交互。
2.1準備一個測試ROS節(jié)點
我們將測試node_manager的一些功能,這需要一個示例ROS節(jié)點才能使用。
創(chuàng)建一個簡單的ROS節(jié)點。該節(jié)點將僅每秒發(fā)布一次字符串消息。該節(jié)點是用Python編寫的,應該準備啟動文件。關聯(lián)的ROS軟件包稱為“ test_pub”,而Python腳本稱為“ simple_pub.py”。腳本和啟動文件可以在這里找到。
由于node_manager嚴重依賴于名為“ screen”的工具,因此我們必須將其安裝在系統(tǒng)中。
目前,任何ROS節(jié)點都應在“屏幕”中啟動。node_manager假定“屏幕”具有與ROS節(jié)點的“名稱”相關聯(lián)的特定“名稱”。在“屏幕”中啟動ROS節(jié)點時,我們必須明確指定“屏幕名稱”和“ ROS節(jié)點名稱”。以test_pub包為例,我們使用以下命令啟動其ROS節(jié)點(由于已配置了系統(tǒng)范圍的ROS_MASTER_URI,因此需要在C0上運行roscore)。
screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch其中,“ screen”的-S參數(shù)指定“ screen”的名稱,而“ screen”的-dm參數(shù)告訴“ screen”以分離模式啟動,并執(zhí)行指定為其余命令行參數(shù)的命令。注意,-S參數(shù)和“屏幕”的名稱之間有一個空格字符。一旦發(fā)出此命令,就可以使用
screen -ls查看啟動是否正常以及“屏幕”的名稱是否正確設置。
將此示例節(jié)點存儲在C1上,以備后用。
2.2測試node_manager
現(xiàn)在,停止C0和C1上所有正在運行的節(jié)點,讓roscore在C0上運行。在C0上,通過以下方式啟動node_manager
node_manager如圖8所示,將顯示node_manager的GUI。
圖8 node_manager。↑
目前,“ ROS網(wǎng)絡”面板(左上角,圖8中的#1)顯示沒有啟用的網(wǎng)絡。這是因為網(wǎng)絡中沒有運行master_discovery節(jié)點。在“ {SYSTEM}”葉(圖8中的#2)下,只有其他兩個ROS節(jié)點在運行。我們通過單擊“ ROS網(wǎng)絡”面板上的“開始”按鈕(圖8中的#3)來啟用網(wǎng)絡。然后,我們將看到“開始發(fā)現(xiàn)”對話框窗口,如圖9所示。
圖9“開始發(fā)現(xiàn)”對話框窗口。↑
將所有內容保留為默認值(“ MCast組”除外),然后單擊“確定”。一個新的master_discovery節(jié)點(圖10中的#1)將顯示在{SYSTEM}葉子下,而新啟用的ROS網(wǎng)絡id:0將顯示在“ ROS Network”面板中(圖10中的#2)。圖10顯示了此視圖。
圖10 master_discovery節(jié)點已啟動。↑
現(xiàn)在,我們可以使用圖11(#1)中所示的按鈕啟動master_sync節(jié)點。
圖11在node_manager中啟動master_sync節(jié)點。↑
然后,此按鈕更改其顏色,并啟動一個新的master_sync節(jié)點(圖11中的#2)。
為了讓ROS網(wǎng)絡發(fā)現(xiàn)新的客戶端,我們必須在客戶端上手動啟動master_discovery節(jié)點,本例中為C1。在C1上,使用“其他”節(jié)點名稱在“屏幕”內啟動新的master_discovery節(jié)點。如圖12所示,我們將看到C1的信息。
screen -S _master_discovery_ai -dm rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai
圖12 master_discovery節(jié)點在遠程客戶端上啟動。↑
如果master_discovery節(jié)點成功啟動,我們可以在node_manager中看到其信息。
現(xiàn)在我們可以通過以下方式在C1上啟動示例節(jié)點
screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch啟動后,C0上的node_manager將顯示其信息,如圖13(#1)所示。
圖13在遠程計算機上啟動的/ simple_pub_launch節(jié)點。↑
我們可以使用node_manager提供的工具(圖13中的#2)在C0上打開SSH會話,以訪問在C1上運行的“屏幕”。選擇“ yyhu-live @ ai-airlab [http:// yyhu-live:11311 /]”下的任何節(jié)點,單擊按鈕(圖13中的#2),或使用快捷方式“ F3”啟動到SSH會話。包含該節(jié)點的“屏幕”。將彈出一個對話框,如圖14所示,以請求SSH會話的用戶名和密碼。用戶可能必須在打開的SSH會話中第二次輸入他/她的密碼。
圖14 SSH登錄對話框。↑
使用“ Ctrl + a,d”分離并關閉此窗口。
在C1上,用戶可以使用
screen -ls簽出“屏幕”列表。
在C0上,用戶可以通過單擊node_manager的GUI左側的“停止選擇的服務”按鈕(圖13中的#3)來停止/ simple_pub_launch節(jié)點。單擊后,將終止C1上的“屏幕”進程,命令“ rosnode list”將不顯示/ simple_pub_launch的跡象。
2.3 default_cfg
現(xiàn)在,用戶仍然必須手動在C1上(在“屏幕”中)啟動ROS節(jié)點,以使node_manager看到并與其交互。實際上,multimaster_fkie提供了一種在遠程客戶端中啟動節(jié)點的方法。這是通過default_cfg節(jié)點實現(xiàn)的。
default_cfg節(jié)點需要啟動文件。在該啟動文件中,用戶列出了他/她希望讓C0上的node_manager管理的所有節(jié)點。default_cfg節(jié)點提供了一些其他功能,例如自動啟動和重生,延遲啟動和條件啟動。鼓勵用戶查看官方文檔以了解所有可能的功能。
使用我們的test_pub包,我們?yōu)閐efault_cfg組成了一個新的啟動文件,如圖15所示。
圖15 default_cfg節(jié)點的test_pub啟動文件。↑
請注意,我們?yōu)閟imple_pub_launch節(jié)點(在此啟動文件中配置的ROS節(jié)點名稱)配置了延遲的自動啟動。然后,我們準備了另一個啟動文件,如圖16所示,用于啟動default_cfg本身(文件名為“ default_cfg_test.launch”) )。
圖16啟動文件以啟動default_cfg本身。↑
在此啟動文件中,我們啟用了自動啟動功能,并告知defualt_cfg要啟動的節(jié)點的信息。然后,我們可以像往常一樣使用“屏幕”啟動default_cfg。
<span style="color:#111111"><code>screen -S _default_cfg -dm roslaunch default_cfg_fkie default_cfg_test.launch </code></span>然后如圖17所示,在C0上,我們可以看到有兩個新節(jié)點被啟動。
圖17在遠程客戶端上啟動的defult_cfg。↑
如果我們可以快速操作計算機(或設置較大的延遲時間來自動啟動),則可以看到/ simple_pub節(jié)點在請求的延遲后被啟動,如圖15所示的啟動文件中所示。
現(xiàn)在,用戶可以通過單擊C0上的node_manager的“開始選擇的服務”和“停止選擇的服務”按鈕(圖13中的#4和#3)來停止或重新啟動ROS節(jié)點,以遠程控制該節(jié)點。
2.4其他
要停止整個ROS網(wǎng)絡,請退出node_manager,并停止roscore,請使用節(jié)點面板(較大的紅叉)上的紅叉按鈕(請參見圖18)。單擊后,“ Close / Stop / Shutdown”(關閉/停止/關閉)對話框將顯示在最前面,如圖19所示。選擇“ stop ROS”以同時退出roscore。請注意,選擇“關閉主機”將關閉C0計算機。
圖18較大的紅叉。↑
圖19“關閉/停止/關閉”對話框。↑
總結
以上是生活随笔為你收集整理的ROS multi-master——multimaster_fkie配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法训练 6-1 递归求二项式系数值
- 下一篇: Gmapping——从原理到实践