ROS multi-master——multimaster_fkie配置

多主站ROS配置和mutimaster_fkie

ROS版本:kinetic

操作系統:Ubuntu 16.04。

multimaster_fkie:github

1網絡配置

1.1路由器

  • 設置無線路由器并連接兩臺計算機/機器人。
  • 為這兩臺計算機設置靜態IP地址。
  • 相互測試ping命令和ssh。

1.2主機

我們將計算機0定義為主計算機C0,將計算機1定義為客戶端計算機C1。

在C0和C1上,備份其/ etc / hosts文件并修改這些文件以注冊其IP地址。

注意:最好使用計算機名作為C0和C1的主機名。在這里,“計算機名稱”是/ etc / hosts文件中“ 127.0.1.1”旁邊出現的名稱。ROS和multimaster_fkie的node_manager以不同的方式對待不同種類的“主機名”。只是不要嘗試“配置”它們。您最好再次檢查/ etc / hostname的內容是否與/ etc / hosts中的名稱一致。

一個/ etc / hosts文件示例如下圖1所示。現在,讓我們使用我自己的計算機作為C0(主機名:yyhu-live)。客戶端計算機為C1(主機名:ai-airlab)。

<img>圖1 C0上的示例/ etc / hosts文件。
圖1 C0上的/ etc / hosts文件示例。↑yyhu-live是我的計算機的主機名。127.0.0.1和192.168.5.101被分配了相同的主機名。

從兩端使用新定義的主機名對C0和C1進行ping操作。

1.3 ROS網絡

本節主要通過參考pdf組成。(“ Sergi Hernandez Juan和Fernando Herrero Cotarelo的“多主ROS系統”)

在每臺計算機上,將此行放入其.bashrc文件中。

export ROS_MASTER_URI=http://yyhu-live:11311

要通過SSH使用ROS,在Ubuntu 16系統上,用戶必須在其.bashrc文件中注釋以下行,如圖2所示。(請參見此處。multimaster_fkie的官方網站也提到了此問題。)

<img>圖2在.bashrc文件中要注釋的行。 (第6至9行)
圖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.1

1.4測試多主ROS網絡的可用性

在C0上啟動roscore,然后啟動master_discovery節點。終端輸出如圖3所示。

rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1

<img>圖3在C0上啟動master_discovery節點后的終端輸出。
圖3在C0上啟動master_discovery節點后的終端輸出。↑

在C1上,請使用不同的節點名稱啟動相同的節點。(參考。)

rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai

注意:name參數前有兩個下劃線。

如果節點名稱相同,則C0將抱怨這種情況并自行終止。

在C0上啟動master_sync節點(終端輸出如圖4所示)。

rosrun master_sync_fkie master_sync

<img>圖4啟動master_sync節點號C0后的終端輸出。
圖4啟動master_sync節點號C0后的終端輸出。↑

在C1上,啟動具有不同節點名的?master_sync節點。

rosrun master_sync_fkie master_sync __name:=master_sync_ai

目前,每個master_sync節點都應打印同步信息。此信息將在幾秒鐘的間隔內刷新。

通過每臺計算機上的“ rostopic列表”和“ rosnode列表”列出當前主題和節點,應該會看到相同的結果。如圖5所示。

<img>圖5主題和節點列表。 在C0上執行。
圖5主題和節點列表。在C0上執行。↑

如果一切正常,現在讓我們嘗試發布和訂閱真實數據。在兩臺計算機中的任何一臺上,使用以下命令啟動一個匿名節點。

rostopic pub -r 1 /test std_msgs/Int32 1

上面的命令將啟動一個匿名節點,并發布一個名稱為“ / test”的主題。此節點每秒將發布一個Int32類型值1。現在使用“ rostopic列表”和“ rosnode列表”查看新主題和節點是否存在。結果將類似于圖6。

<img>圖6新的匿名節點。
圖6新的匿名節點。↑

如果/ test在C1上,請使用

rostopic hz /test

在C0上查看C0是否真的可以接收任何實際數據。結果如圖7所示。

<img>圖7對ROS主題的頻率測試。
圖7對ROS主題的頻率測試。↑

2個node_manager GUI

現在,我們已經配置了一個有效的多主ROS網絡,我們可以使用node_manager GUI可視化ROS網絡中節點的信息并與這些節點進行交互。

2.1準備一個測試ROS節點

我們將測試node_manager的一些功能,這需要一個示例ROS節點才能使用。

創建一個簡單的ROS節點。該節點將僅每秒發布一次字符串消息。該節點是用Python編寫的,應該準備啟動文件。關聯的ROS軟件包稱為“ test_pub”,而Python腳本稱為“ simple_pub.py”。腳本和啟動文件可以在這里找到。

由于node_manager嚴重依賴于名為“ screen”的工具,因此我們必須將其安裝在系統中。

目前,任何ROS節點都應在“屏幕”中啟動。node_manager假定“屏幕”具有與ROS節點的“名稱”相關聯的特定“名稱”。在“屏幕”中啟動ROS節點時,我們必須明確指定“屏幕名稱”和“ ROS節點名稱”。以test_pub包為例,我們使用以下命令啟動其ROS節點(由于已配置了系統范圍的ROS_MASTER_URI,因此需要在C0上運行roscore)。

screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch

其中,“ screen”的-S參數指定“ screen”的名稱,而“ screen”的-dm參數告訴“ screen”以分離模式啟動,并執行指定為其余命令行參數的命令。注意,-S參數和“屏幕”的名稱之間有一個空格字符。一旦發出此命令,就可以使用

screen -ls

查看啟動是否正常以及“屏幕”的名稱是否正確設置。

將此示例節點存儲在C1上,以備后用。

2.2測試node_manager

現在,停止C0和C1上所有正在運行的節點,讓roscore在C0上運行。在C0上,通過以下方式啟動node_manager

node_manager

如圖8所示,將顯示node_manager的GUI。

<img>圖8 node_manager。
圖8 node_manager。↑

目前,“ ROS網絡”面板(左上角,圖8中的#1)顯示沒有啟用的網絡。這是因為網絡中沒有運行master_discovery節點。在“ {SYSTEM}”葉(圖8中的#2)下,只有其他兩個ROS節點在運行。我們通過單擊“ ROS網絡”面板上的“開始”按鈕(圖8中的#3)來啟用網絡。然后,我們將看到“開始發現”對話框窗口,如圖9所示。

<img>圖9“開始發現”對話框窗口。
圖9“開始發現”對話框窗口。↑

將所有內容保留為默認值(“ MCast組”除外),然后單擊“確定”。一個新的master_discovery節點(圖10中的#1)將顯示在{SYSTEM}葉子下,而新啟用的ROS網絡id:0將顯示在“ ROS Network”面板中(圖10中的#2)。圖10顯示了此視圖。

<img>圖10 master_discovery節點已啟動。
圖10 master_discovery節點已啟動。↑

現在,我們可以使用圖11(#1)中所示的按鈕啟動master_sync節點。

<img>圖11在node_manager中啟動master_sync節點。
圖11在node_manager中啟動master_sync節點。↑

然后,此按鈕更改其顏色,并啟動一個新的master_sync節點(圖11中的#2)。

為了讓ROS網絡發現新的客戶端,我們必須在客戶端上手動啟動master_discovery節點,本例中為C1。在C1上,使用“其他”節點名稱在“屏幕”內啟動新的master_discovery節點。如圖12所示,我們將看到C1的信息。

screen -S _master_discovery_ai -dm rosrun master_discovery_fkie master_discovery _mcast_group:=224.0.0.1 __name:=master_discovery_ai

<img>圖12 master_discovery節點在遠程客戶端上啟動。
圖12 master_discovery節點在遠程客戶端上啟動。↑

如果master_discovery節點成功啟動,我們可以在node_manager中看到其信息。

現在我們可以通過以下方式在C1上啟動示例節點

screen -S _simple_pub_launch -dm roslaunch test_pub simple_pub.launch

啟動后,C0上的node_manager將顯示其信息,如圖13(#1)所示。

<img>圖13 / simple_pub_launch節點在遠程計算機上啟動。
圖13在遠程計算機上啟動的/ simple_pub_launch節點。↑

我們可以使用node_manager提供的工具(圖13中的#2)在C0上打開SSH會話,以訪問在C1上運行的“屏幕”。選擇“ yyhu-live @ ai-airlab [http:// yyhu-live:11311 /]”下的任何節點,單擊按鈕(圖13中的#2),或使用快捷方式“ F3”啟動到SSH會話。包含該節點的“屏幕”。將彈出一個對話框,如圖14所示,以請求SSH會話的用戶名和密碼。用戶可能必須在打開的SSH會話中第二次輸入他/她的密碼。

<img>圖14 SSH登錄對話框。
圖14 SSH登錄對話框。↑

使用“ Ctrl + a,d”分離并關閉此窗口。

在C1上,用戶可以使用

screen -ls

簽出“屏幕”列表。

在C0上,用戶可以通過單擊node_manager的GUI左側的“停止選擇的服務”按鈕(圖13中的#3)來停止/ simple_pub_launch節點。單擊后,將終止C1上的“屏幕”進程,命令“ rosnode list”將不顯示/ simple_pub_launch的跡象。

2.3 default_cfg

現在,用戶仍然必須手動在C1上(在“屏幕”中)啟動ROS節點,以使node_manager看到并與其交互。實際上,multimaster_fkie提供了一種在遠程客戶端中啟動節點的方法。這是通過default_cfg節點實現的。

default_cfg節點需要啟動文件。在該啟動文件中,用戶列出了他/她希望讓C0上的node_manager管理的所有節點。default_cfg節點提供了一些其他功能,例如自動啟動和重生,延遲啟動和條件啟動。鼓勵用戶查看官方文檔以了解所有可能的功能。

使用我們的test_pub包,我們為default_cfg組成了一個新的啟動文件,如圖15所示。

<img>圖15 default_cfg節點的test_pub啟動文件。
圖15 default_cfg節點的test_pub啟動文件。↑

請注意,我們為simple_pub_launch節點(在此啟動文件中配置的ROS節點名稱)配置了延遲的自動啟動。然后,我們準備了另一個啟動文件,如圖16所示,用于啟動default_cfg本身(文件名為“ default_cfg_test.launch”) )。

<img>圖16用于啟動default_cfg本身的啟動文件。
圖16啟動文件以啟動default_cfg本身。↑

在此啟動文件中,我們啟用了自動啟動功能,并告知defualt_cfg要啟動的節點的信息。然后,我們可以像往常一樣使用“屏幕”啟動default_cfg。

<span style="color:#111111"><code>screen -S _default_cfg -dm roslaunch default_cfg_fkie default_cfg_test.launch
</code></span>

然后如圖17所示,在C0上,我們可以看到有兩個新節點被啟動。

<img>圖17在遠程客戶端上啟動了defult_cfg。
圖17在遠程客戶端上啟動的defult_cfg。↑

如果我們可以快速操作計算機(或設置較大的延遲時間來自動啟動),則可以看到/ simple_pub節點在請求的延遲后被啟動,如圖15所示的啟動文件中所示。

現在,用戶可以通過單擊C0上的node_manager的“開始選擇的服務”和“停止選擇的服務”按鈕(圖13中的#4和#3)來停止或重新啟動ROS節點,以遠程控制該節點。

2.4其他

要停止整個ROS網絡,請退出node_manager,并停止roscore,請使用節點面板(較大的紅叉)上的紅叉按鈕(請參見圖18)。單擊后,“ Close / Stop / Shutdown”(關閉/停止/關閉)對話框將顯示在最前面,如圖19所示。選擇“ stop ROS”以同時退出roscore。請注意,選擇“關閉主機”將關閉C0計算機。

<img>圖18較大的紅叉。
圖18較大的紅叉。↑

<img>圖19“關閉/停止/關閉”對話框。
圖19“關閉/停止/關閉”對話框。↑

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker入門

1. Docker簡介: docker是一個基于LXC的高級容器引擎。簡單地說&#xff0c;docker是一個輕量級的虛擬解決方案&#xff0c;或者說它是一個超輕量級的虛擬機&#xff08;容器&#xff09;。 Docker是一個開源的引擎&#xff0c;可以輕松的為任何應用創建一個輕量級的、可移植的、…

樂器庫的混合

每臺微機一個聲卡&#xff0c;也就是一片D/A&#xff0c;驅動按波特率、采樣位數、采樣通道傳輸給D/A&#xff0c;輸出模擬音頻。播放時僅一種與硬件支持格式對應&#xff0c;其他需驅動&#xff08;有損&#xff09;變換到硬件支持格式。每個應用都可單獨播放聲音&#xff0c;…

kafka認知--(1)

文檔參考&#xff1a;http://kafka.apache.org/documentation.html 下載代碼&#xff1a; tar -xzf kafka_2.11-0.11.0.0.tgz cd kafka_2.11-0.11.0.0 啟動 bin/zookeeper-server-start.sh config/zookeeper.properties 創建topic&#xff08;主題為test&#xff0c;只有一個分…

帶頭尾指針的list的C實現

一、緣起 很早寫了一個帶頭尾指針的list&#xff0c;該list支持從尾部插入元素&#xff0c;在任意位置刪除元素&#xff0c;最近用這個list時發現一個bug&#xff0c;修正了&#xff0c;并加了幾個接口函數。貼出來&#xff0c;希望對C的初學者有用。 二、基本說明 2.1、數據結…

Gmapping——從原理到實踐

概述 在SLAM中&#xff0c;機器人位姿和地圖都是狀態變量&#xff0c;我們需要同時對這兩個狀態變量進行估計&#xff0c;即機器人獲得一張環境地圖的同時確定自己相對于該地圖的位置。我們用x表示機器人狀態&#xff0c;m表示環境地圖&#xff0c;z表示傳感器觀測情況&#xf…

關于git分支

1.關于git分支 git的“分支”乍一聽是一個特別容易讓人產生錯覺的概念&#xff0c;以為它和樹枝一樣是分叉的枝節&#xff0c;其實Git中的分支本質上是個指向commit對象的指針,每次commit&#xff0c;git都把它們串成一條時間線&#xff0c;這條時間線就是一個分支。 2.直接切換…

【機器學習經典算法源碼分析系列】-- 邏輯回歸

1.邏輯回歸&#xff08;Logistic Regression&#xff09;又常被成為“邏輯斯蒂回歸”&#xff0c;實質上是一個二元分類問題。 邏輯回歸代價函數&#xff1a; 代價函數導數&#xff1a; Matlab實現&#xff1a; 采用matlab中自帶的無約束最小化函數fminunc來代替梯度下降法&…

求特殊自然數

總時間限制: 1000ms 內存限制: 65536kB 描述一個十進制自然數,它的七進制與九進制表示都是三位數&#xff0c;且七進制與九進制的三位數碼表示順序正好相反。編程求此自然數,并輸出顯示。 輸入無。輸出三行&#xff1a;第一行是此自然數的十進制表示&#xff1b;第一行是此自然…

ROS——不同版本間ROS進行通信

在相同版本間的ROS進行通信不在贅述了&#xff0c;修改/etc/hosts文件即可。 最近項目遇到在Ubuntu16.04 與Ubuntu18.04兩個系統間進行ROS通信&#xff0c;ROS版本分別為Kinetic和Melodic。配置網絡后&#xff0c;兩邊都能夠ping通&#xff0c;但是在獲取ros數據是&#xff0c…

大數據開發實戰:數據流圖及相關數據技術

1、大數據流程圖 2、大數據各個環節主要技術 2.1、數據處理主要技術 Sqoop&#xff1a;&#xff08;發音&#xff1a;skup&#xff09;作為一款開源的離線數據傳輸工具&#xff0c;主要用于Hadoop(Hive) 與傳統數據庫&#xff08;MySql,PostgreSQL&#xff09;間的數據傳遞。它…

oracle 中時間類型 date 與 long 互轉

我們在保存時間到數據庫時&#xff0c;有時候會保存long型的數據&#xff0c;固定長度是13位&#xff0c;是用當前時間減去1970-01-01&#xff0c;再換算成毫秒得到的結果。 但是要考慮到時區問題中國的時區時8區所以時間要加上8小時 oracle中的實現方式&#xff1a; ---------…

Linux對包管理闡述

Centos/Redhat/Fedora的軟件包&#xff0c;都是rpm后綴的文件。包管理器rpm(Redhat packages manager) linux的哲學思想是簡單命令解決復雜任務&#xff0c;因此每個軟件的功能較單一&#xff0c;所以各種包之間有著復雜的依賴關系&#xff0c;為了解決這種可以使用前端工具&am…

跨時鐘域電路設計——亞穩態及雙鎖存器

一、同步電路 定義&#xff1a;電路中所有受時鐘控制的單元&#xff0c;全部由一個統一的時鐘控制。 優點&#xff1a;在同步設計中&#xff0c;EDA工具可以保證電路系統的時序收斂&#xff0c;避免電路設計中的競爭冒險。 缺點&#xff1a;時鐘樹綜合需要加入大量延遲單元&…

linux setsockopt詳解

1.closesocket&#xff08;一般不會立即關閉而經歷TIME_WAIT的過程&#xff09;后想繼續重用該socket&#xff1a; BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已經處于連接狀態的soket在調用closes…

[TOOLS] 移動端調試進行時 - whistle

1、本地安裝、啟動whistle 安裝實操請查看官方文檔不贅述 復制代碼 2、手機設置代理 實操請查看官方文檔 !!!注意&#xff1a;代理ip填寫whistle右上角online選項中的ip 復制代碼 3、whistle上設置對應rules、weinre whistle設置代理(!!!注意支持tunnel協議)&#xff1a; rules…

函數動態參數實現format

變量賦值一種是字符串格式化&#xff0c;一種是通過format的方式 1.字符串格式化 s"i am %s,age %d"%(Jasper,23)print(s)打印輸出&#xff1a;i am Jasper,age 232.format格式化 s"i am {name},age {age}".format(namejasper,age23)print(s)或 s2"i …

跨時鐘域電路設計——單bit信號

前面提到了簡單的雙電平鎖存器&#xff0c;下面是一些單bit同步電路。 一、慢時鐘域向快時鐘域 邊沿檢測同步器 將慢時鐘域的脈沖搬移并縮小為快時鐘域的脈沖。 既可以檢測上升沿&#xff0c;也可以檢測下降沿。 如上圖&#xff0c;慢時鐘下一個有效脈沖的最短周期為慢時鐘的…

數據同步 rsync+notify架構

rsync 同步命令&#xff0c;非常好用 notify是監控本地文件的變化的 、安裝配置 1. 安裝rsync&#xff0c;inotify-tools sudo apt-get install rsync inotify-tools 2. 拷貝rsync配置文件 mkdir /etc/rsync cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsync/ 3. 服…

OC_KVC與KVO簡單介紹

KVC KVC概述 KVC 即 Key-value coding 鍵值編碼&#xff0c;是指iOS的開發中&#xff0c;可以允許開發者通過Key名直接訪問對象的屬性&#xff0c;或者給對象的屬性賦值。 KVC案例 interface Person : NSObjectproperty (nonatomic,assign) int age; property (nonatomic,copy)…

C語言100例01 PHP版(練習)

題目&#xff1a;有1、2、3、4個數字&#xff0c;能組成多少個互不相同且無重復數字的三位數&#xff1f;都是多少&#xff1f; 程序分析&#xff1a;可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。 代碼&#xff1a; 1 for($i1;$i&l…