[轉]在ROS下使用zeroconf配置多機通信

原文地址:http://www.corvin.cn/635.html,轉載主要方便隨時查閱,如有版權要求,請及時聯系。

0x00 為何需要配置ROS多機通信

眾所周知ROS是分布式系統,因此可以將機器人需要處理的復雜、計算量大的任務分解在多臺機器上分開運行,這樣就可以降低主系統出現異常的風險,因此我們就需要配置網絡保證各ROS主機之間可以互相通信。另外我們在開發時也經常在本地計算機上來監視遠程ROS主系統的運行狀態也需要配置多機通信,在這里我們使用zeroconf來配置多機通信,zeroconf的全稱是Zero Configuration Networking(零配置網絡),是一種用于自動生成可用IP地址的網絡技術,不需要額外的手動配置和專屬的配置服務器。其目標是讓非專業用戶也能便捷的連接各種網絡設備,例如計算機,打印機等。整個搭建網絡的過程都是通過程式自動化實現。如果沒有zeroconf,用戶必須手動配置一些服務,例如DHCP、DNS,計算機網絡的其他設置等。這些對非技術用戶和新用戶們來說是很難的事情。

當然現在使用的ROS1.0還不是真正的分布式系統,因為仍然是需要一個master主節點來協調各分節點的通信。在不久將來的ROS2.0更高程度上實現了去中心化,使用DDS(Data Distribution Service)即數據分發服務,?目前已經廣泛應用于國防、民航、工業控制等領域, 成為分布式實時系統中數據發布/訂閱的標準解決方案,更多關于DDS的介紹可以參考后面的參考資料提供的維基百科DDS的網址。


0x01 安裝軟件包并配置zeroconf

(1)保證多機時間同步

在ROS網絡中,由于tf轉換和很多消息類型都被標上了時間戳,機器之間的時間同步就非常重要了,一種使各計算機保持時間同步狀態的方法就是在各計算機上安裝chrony和ntpdate軟件包,該軟件包會保持計算機的時鐘與網絡上時間服務器的時鐘一致,我們使各計算機的時間與時間服務器時間同步來達到各計算機時間同步的目的,使用如下命令來安裝chrony和ntpdate:

sudo apt-get install -y chrony ntpdate

在這里我使用本地裝有indigo的臺式計算機和樹莓派裝有kinetic的系統作為演示,當然你選擇兩個筆記本電腦也是可以的,下面是安裝過程:

Screenshot from 2018-04-27 13:08:42.png

Screenshot from 2018-04-27 13:14:48.png

當安裝好軟件后就可以來進行時間同步了,時間同步命令如下:

sudo ntpdate -u cn.ntp.org.cn

Screenshot from 2018-04-27 13:48:39.png

(2)使用Zeroconf配置ROS主機間通信

在經常使用的Linux系統上,如ubuntu系統使用avahi來實現zeroconf,avahi 是Zeroconf規范的開源實現,其包含了一整套多播DNS(multicastDNS)/DNS-SD網絡服務的實現。Avahi允許程序在不需要進行手動網絡配置的情況下,在一個本地網絡中發布和獲知各種服務和主機。例如,當某用戶把他的計算機接入到某個局域網時,如果他的機器運行有Avahi服務,則Avahi程式自動廣播,從而發現網絡中可用的打印機、共享文件和可相互聊天的其他用戶。這有點象他正在接收局域網中的各種網絡廣告一樣。Linux下系統實際啟動的進程名,是avahi-daemon,通過以下命令可以查看當前系統上是否啟動了avahi-daemon守護進程:

ps aux|grep avahi

Screenshot from 2018-04-27 14:09:06.png

可以發現兩個ROS主機都已經默認啟動了avahi-daemon守護進程,那么接下來就可以來配置了:

  • 獲取主機名稱并測試主機間連通性

    使用hostname來得到主機名稱,那么相應的zeroconf主機名就是在該主機名稱后面加上“.local”即可:

    Screenshot from 2018-04-27 14:18:11.png

  • 設置ROS_MASTER_URI和ROS_HOSTNAME變量

在ROS網絡中,指定其中一臺設備作為ROS master主機,那么該主機將負責運行roscore進程,其他設備必須配置ROS_MASTER_URI環境變量來指向該master主機。對于所有的設備都必須要設置的是ROS_HOSTNAME變量,這個ROS_HOSTNAME變量就是我們上面得到的zeroconf主機名。

接下來我們分別修改臺式機和樹莓派的home目錄下的.bashrc文件,在其中增加如下框中配置,在這里我們把樹莓派作為ROS master主機,所以ROS_MASTER_URI指向的是自己robot.local。我們又設置了臺式機的ROS_MASTER_URI也指向robot.local,這就說明我們需要把臺式機作為ROS的一個從節點設備,當然如果想修改臺式機為master主機,樹莓派為從節點設備的話只需要將各自的ROS_MASTER_URI中的robot.local修改為臺式機的zeroconf主機名workspace.local即可。

Screenshot from 2018-04-27 14:54:38.png

?


0x02 測試ROS主從機之間的通信

當配置好ROS的ROS_HOSTNAME和ROS_MASTER_URI后,我們需要重新打開一個新終端才能使上述的配置生效。接下來我們就可以在master主機上啟動roscore來測試主從機的ROS通信是否正常了,在臺式機上使用rostopic list來看是否能獲取到話題列表,如果能獲取到說明ROS的主從機通信正常:

Screenshot from 2018-04-27 15:13:23.png

接下來測試使用臺式機來遙控master主機上的turtlesim,查看話題能否正常訂閱和發布:

  • 在樹莓派上啟動roscore后,還需要啟動turtlesim一個仿真小烏龜的節點:

    rosrun turtlesim turtlesim_node

  • 在臺式機上運行鍵盤遙控小烏龜移動的節點:

    rosrun turtlesim turtle_teleop_key

    還可以啟動rqt_plot來同步查看小烏龜的一些數據,直接使用rqt_plot啟動即可,我們在rqt_plot中可視化turtle1/pose中各數據,當然我們在本地臺式機上打開rviz進行調試也是可以的,經常有小伙伴嘗試在樹莓派上打開rivz來進行調試,經常無法在樹莓派上正常啟動,因為rviz特別消耗系統資源,這樣我們就可以在本地臺式機上進行調試了,具體的測試效果如下所示:

    1.gif

  • 接下來我們使用ssh來進行連接ROS主機就比較方便了,即使我們不知道對方的IP地址也可以連接了,只需要直接連接該主機的zeroconf主機名即可:

  • Screenshot from 2018-04-27 15:57:56.png


0x03 注意事項

[1].需要注意該配置過程是基于ROS主從機在同一個路由器下,即必須要求在同一個IP地址段內,如果想通過互聯網將在兩個不同地址段的ROS主機通信就比較復雜了(即一臺ROS主機在公司,你的ROS從機在家里,想通過在家里直接調試公司里的ROS機器人),不在本教程討論范圍內。


0x04 參考資料

[1].更多關于Zeroconf的介紹可以在官網地址查詢[OL].?http://www.zeroconf.org/

[2].維基百科上關于數據分發服務DDS的介紹[OL].?https://en.wikipedia.org/wiki/Data_Distribution_Service

[3].R.帕特里克-戈貝爾?著 J.羅哈斯 劉柯汕 彭也益 劉振東 李家能 黃玲玲 譯. ROS入門實例[M]. 廣州:中山大學出版社. 2016. 13-17.

轉載于:https://www.cnblogs.com/qiuheng/p/9133010.html

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

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

相關文章

python中斐波那契數列_斐波那契數列–在Python,JavaScript,C ++,Java和Swift中進行了解釋...

python中斐波那契數列by Pau Pavn通過保羅帕文(PauPavn) The Fibonacci sequence is, by definition, the integer sequence in which every number after the first two is the sum of the two preceding numbers. To simplify:根據定義,斐波那契數列是整數序列&a…

1583. 統計不開心的朋友

1583. 統計不開心的朋友 給你一份 n 位朋友的親近程度列表,其中 n 總是 偶數 。 對每位朋友 i,preferences[i] 包含一份 按親近程度從高到低排列 的朋友列表。換句話說,排在列表前面的朋友與 i 的親近程度比排在列表后面的朋友更高。每個列…

uva 247(floyd傳遞閉包)

為什么&#xff0c;逗號后面&#xff0c;還有空格........ #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #include <map> using namespace std; const int maxn50; int d[maxn][max…

VS Code 的常用快捷鍵和插件

注:文章摘自 風行天下一萬號 - 博客園 vs code 的常用快捷鍵 1、注釋&#xff1a; 單行注釋&#xff1a;[ctrlk,ctrlc] 或 ctrl/取消單行注釋&#xff1a;[ctrlk,ctrlu] (按下ctrl不放&#xff0c;再按k u)多行注釋&#xff1a;[altshiftA]多行注釋&#xff1a;/**2、移動行&a…

python包numpy_NumPy Python科學計算軟件包的終極指南

python包numpyNumPy (pronounced "numb pie") is one of the most important packages to grasp when you’re starting to learn Python.NumPy(讀作“麻木派”)是您開始學習Python時要掌握的最重要的軟件包之一。 The package is known for a very useful data str…

NGINX原理 之 SLAB分配機制(轉)

1 引言 眾所周知&#xff0c;操作系統使用伙伴系統管理內存&#xff0c;不僅會造成大量的內存碎片&#xff0c;同時處理效率也較低下。SLAB是一種內存管理機制&#xff0c;其擁有較高的處理效率&#xff0c;同時也有效的避免內存碎片的產生&#xff0c;其核心思想是預分配。其按…

apk之間數據共享的方式

1、四大組件之ContentProvider大法2、shareUserId3、apk均去遠端獲取配置文件&#xff08;或接口&#xff09;4、AIDL&#xff08;bindService&#xff09;5、SharePreference設置為MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE模式&#xff0c;由于存在安全問題&#xff0c;已被…

藍橋杯java 基礎練習 十六進制轉十進制

問題描述從鍵盤輸入一個不超過8位的正的十六進制數字符串&#xff0c;將它轉換為正的十進制數后輸出。注&#xff1a;十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。樣例輸入FFFF樣例輸出65535import java.math.BigInteger; import java.util.Scanner;public …

dynamic web module消失不見

2019獨角獸企業重金招聘Python工程師標準>>> 方法1&#xff1a;在project Facets選項中勾選Dynamic Web Module即可 方法2&#xff1a; 我用eclipse對項目進行修改名稱&#xff0c;修改成功后。項目就沒有Deployment Descriptor&#xff08;如下圖紅色框中&#xff…

576. 出界的路徑數

576. 出界的路徑數 給你一個大小為 m x n 的網格和一個球。球的起始坐標為 [startRow, startColumn] 。你可以將球移到在四個方向上相鄰的單元格內&#xff08;可以穿過網格邊界到達網格之外&#xff09;。你 最多 可以移動 maxMove 次球。 給你五個整數 m、n、maxMove、star…

telnet命令發送郵件

下面的例子是用qq的smtp服務器。 set localecho 本地回顯啟用 telnet smtp.qq.com 25 220 smtp.qq.com Esmtp QQ Mail Server helo sis 250 smtp.qq.com//服務器返回250 smtp.qq.com STARTTLS 220 Ready to start TLS//服務器返回 220 準備開啟TLS通訊 auth login 334 VXNlcm5h…

myelcipse和maven搭建項目

偷懶一下&#xff0c;完了補充 轉載&#xff1a;https://www.cnblogs.com/jr1260/p/6438811.html https://www.cnblogs.com/yangmingyu/p/6908519.html https://www.cnblogs.com/henuyuxiang/p/6288476.html 轉載于:https://www.cnblogs.com/0914lx/p/8342343.html

551. 學生出勤記錄

551. 學生出勤記錄 I 給你一個字符串 s 表示一個學生的出勤記錄&#xff0c;其中的每個字符用來標記當天的出勤情況&#xff08;缺勤、遲到、到場&#xff09;。記錄中只含下面三種字符&#xff1a; ‘A’&#xff1a;Absent&#xff0c;缺勤 ‘L’&#xff1a;Late&#xff…

JavaScript實現職責鏈模式

什么是職責鏈模式 職責鏈模式的定義是&#xff1a;使多個對象都有機會處理請求&#xff0c;從而避免請求的發送者和接收者之間的耦合關系&#xff0c;將這些對象連成一條鏈&#xff0c;并沿著這條鏈傳遞該請求&#xff0c;直到有一個對象處理它為止。舉個例子&#xff1a;當你從…

Metrics介紹和Spring的集成

參考&#xff1a; http://colobu.com/2014/08/08/Metrics-and-Spring-Integration/ https://www.cnblogs.com/yangecnu/p/Using-Metrics-to-Profiling-WebService-Performance.html

配置 aws cli_AWS CLI教程–如何安裝,配置和使用AWS CLI了解您的資源環境

配置 aws cliHow to get exactly the account and environment information you need to manage your AWS account using just the AWS CLI如何僅使用AWS CLI準確獲取管理AWS賬戶所需的賬戶和環境信息 Installing the AWS CLI is actually quite simple. The best way to get …

grep遞歸查找頭文件_Grep命令教程–如何使用遞歸查找在Linux和Unix中搜索文件

grep遞歸查找頭文件grep stands for Globally Search For Regular Expression and Print out. It is a command line tool used in UNIX and Linux systems to search a specified pattern in a file or group of files. grep代表全局搜索正則表達式并打印出來 。 它是UNIX和Li…

C++ 前置聲明

&#xff08;一&#xff09;class的前置聲明 class的前置聲明有兩種。 pre.hclass PreA {}; main.hclass PreA; class Main {};//或者 class Main {class PreA* A; }; (二) struct前置聲明 struct的前置聲明只能用第一種。 &#xff08;三&#xff09; 有typedef的前置聲明 Pr…

2.18 特殊權限set_uid 2.19 特殊權限set_gid 2.20 特殊權限stick_bit 2.21 軟鏈接文件 2.22 硬連接文件...

2019獨角獸企業重金招聘Python工程師標準>>> 特殊權限set_uid set_uid:該權限針對二進制可執行文件&#xff0c;使文件在執行階段具有文件所有者的權限&#xff1b; 通俗一點講就是&#xff0c;普通用戶想要訪問一個沒有其他用戶可執行權限的目錄時&#xff0c;暫時…

345. 反轉字符串中的元音字母

345. 反轉字符串中的元音字母 給你一個字符串 s &#xff0c;僅反轉字符串中的所有元音字母&#xff0c;并返回結果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’&#xff0c;且可能以大小寫兩種形式出現。 示例 1&#xff1a; 輸入&#xff1a;s “hello” 輸…