最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

3.1 分布式

2023-09-26 10:13 作者:猛獅集訓(xùn)營  | 我要投稿

場景

在許多機器人相關(guān)的應(yīng)用場景中都涉及到多臺ROS2設(shè)備協(xié)作,比如:無人車編隊、無人機編隊、遠程控制等等,那么不同的ROS2設(shè)備之間是如何實現(xiàn)通信的呢?

概念

分布式通信是指可以通過網(wǎng)絡(luò)在不同主機之間實現(xiàn)數(shù)據(jù)交互的一種通信策略。

ROS2本身是一個分布式通信框架,可以很方便的實現(xiàn)不同設(shè)備之間的通信,ROS2所基于的中間件是DDS,當(dāng)處于同一網(wǎng)絡(luò)中時,通過DDS的域ID機制(ROS_DOMAIN_ID)可以實現(xiàn)分布式通信,大致流程是:在啟動節(jié)點之前,可以設(shè)置域ID的值,不同節(jié)點如果域ID相同,那么可以自由發(fā)現(xiàn)并通信,反之,如果域ID值不同,則不能實現(xiàn)。默認情況下,所有節(jié)點啟動時所使用的域ID為0,換言之,只要保證在同一網(wǎng)絡(luò),你不需要做任何配置,不同ROS2設(shè)備上的不同節(jié)點即可實現(xiàn)分布式通信。

作用

分布式通信的應(yīng)用場景是較為廣泛的,如上所述:機器人編隊時,機器人可能需要獲取周邊機器人的速度、位置、運行軌跡的相關(guān)信息,遠程控制時,則可能需要控制端獲取機器人采集的環(huán)境信息并下發(fā)控制指令...... 這些數(shù)據(jù)的交互都依賴于分布式通信。

實現(xiàn)

多機通信時,可以通過域ID對節(jié)點進行分組,組內(nèi)的節(jié)點之間可以自由通信,不同組之間的節(jié)點則不可通信。如果所有節(jié)點都屬于同一組,那么直接使用默認域ID即可,如果要將不同節(jié)點劃分為多個組,那么可以在終端中啟動節(jié)點前設(shè)置該節(jié)點的域ID(比如設(shè)置為6),具體執(zhí)行命令為:

export ROS_DOMAIN_ID=6

上述指令執(zhí)行后,該節(jié)點將被劃分到ID為6的域內(nèi)。

如果要為當(dāng)前設(shè)備下的所有節(jié)點設(shè)置統(tǒng)一的域ID,那么可以執(zhí)行如下指令:

echo "export ROS_DOMAIN_ID=6" >> ~/.bashrc

執(zhí)行完畢后再重新啟動終端,運行的所有節(jié)點將自動被劃分到ID為6的域內(nèi)。

演示

注意

在設(shè)置ROS_DOMAIN_ID的值時并不是隨意的,也是有一定約束的:

  1. 建議ROS_DOMAIN_ID的取值在[0,101] 之間,包含0和101;

  2. 每個域ID內(nèi)的節(jié)點總數(shù)是有限制的,需要小于等于120個;

  3. 如果域ID為101,那么該域的節(jié)點總數(shù)需要小于等于54個。

DDS 域 ID 值的計算規(guī)則

域ID值的相關(guān)計算規(guī)則如下:

  1. DDS是基于TCP/IP或UDP/IP網(wǎng)絡(luò)通信協(xié)議的,網(wǎng)絡(luò)通信時需要指定端口號,端口號由2個字節(jié)的無符號整數(shù)表示,其取值范圍在[0,65535]之間;

  2. 端口號的分配也是有其規(guī)則的,并非可以任意使用的,根據(jù)DDS協(xié)議規(guī)定以7400作為起始端口,也即可用端口為[7400,65535],又已知按照DDS協(xié)議默認情況下,每個域ID占用250個端口,那么域ID的個數(shù)為:(65535-7400)/250 = 232(個),對應(yīng)的其取值范圍為[0,231];

  3. 操作系統(tǒng)還會設(shè)置一些預(yù)留端口,在DDS中使用端口時,還需要避開這些預(yù)留端口,以免使用中產(chǎn)生沖突,不同的操作系統(tǒng)預(yù)留端口又有所差異,其最終結(jié)果是,在Linux下,可用的域ID為[0,101]與[215-231],在Windows和Mac中可用的域ID為[0,166],綜上,為了兼容多平臺,建議域ID在[0,101] 范圍內(nèi)取值。

  4. 每個域ID默認占用250個端口,且每個ROS2節(jié)點需要占用兩個端口,另外,按照DDS協(xié)議每個域ID的端口段內(nèi),第1、2個端口是Discovery Multicast端口與User Multicast端口,從第11、12個端口開始是域內(nèi)第一個節(jié)點的Discovery Unicast端口與User Unicast,后續(xù)節(jié)點所占用端口依次順延,那么一個域ID中的最大節(jié)點個數(shù)為:(250-10)/2 = 120(個);

  5. 特殊情況:域ID值為101時,其后半段端口屬于操作系統(tǒng)的預(yù)留端口,其節(jié)點最大個數(shù)為54個。

上述計算規(guī)則了解即可。

附:

B站有完整的ros系列教程視頻,可以觀看完整內(nèi)容ros課程ROS2理論與實踐

更多內(nèi)容將在猛獅知識星球社區(qū)更新最新課程,后續(xù)將推出更多優(yōu)質(zhì)內(nèi)容——詳情可關(guān)注猛獅集訓(xùn)營公眾號和猛獅集訓(xùn)營官方網(wǎng)站。


3.1 分布式的評論 (共 條)

分享到微博請遵守國家法律
南丹县| 长宁县| 华池县| 石门县| 汉寿县| 雷波县| 赤壁市| 遵化市| 宁都县| 拉萨市| 呼伦贝尔市| 古浪县| 关岭| 辽宁省| 鹿邑县| 永仁县| 乌鲁木齐市| 日喀则市| 五峰| 河北区| 慈溪市| 保康县| 永德县| 隆子县| 楚雄市| 江安县| 沭阳县| 额尔古纳市| 武威市| 松溪县| 准格尔旗| 河曲县| 香港| 横山县| 墨竹工卡县| 阳谷县| 苍南县| 东宁县| 英吉沙县| 陆河县| 铁岭县|