五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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 分布式的評論 (共 條)

分享到微博請遵守國家法律
阿拉善盟| 沂南县| 金昌市| 聂荣县| 伊宁市| 行唐县| 城市| 淮安市| 岱山县| 齐齐哈尔市| 上饶市| 赤水市| 保山市| 海南省| 台山市| 建阳市| 准格尔旗| 海淀区| 泽普县| 凤翔县| 博野县| 三都| 云林县| 阿图什市| 吉木乃县| 延边| 平安县| 高雄市| 新源县| 区。| 安乡县| 衢州市| 双鸭山市| 黄浦区| 龙胜| 华坪县| 永清县| 松江区| 安乡县| 聂拉木县| 高平市|