0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ROS1的通信架構(gòu)的基礎(chǔ)通信方式及相關(guān)概念

jf_78858299 ? 來源:機器人網(wǎng) ? 作者:機器人網(wǎng) ? 2023-05-19 17:23 ? 次閱讀

ROS通信架構(gòu)是ROS的靈魂所在,它包括數(shù)據(jù)處理,進程運行,消息傳遞等 。這篇文章主要介紹ROS1的通信架構(gòu)的基礎(chǔ)通信方式和相關(guān)概念,因為ROS1和ROS2的通信方式相差很大,文章后面會介紹ROS2 的通信框架和差異。

接下來介紹一下三組概念:master<-->node<-->launch、topic<-->msg、service<-->srv<-->parameter <-->action.

一、master<-->node<-->launch

node: ROS最小的進程單元就是節(jié)點node。一個軟件包里面有多個可執(zhí)行文件,可執(zhí)行文件被運行就是進程(process),這個進程就是節(jié)點node。

rosnode list 列出當(dāng)前運行的node信息

rosnode info node_name 顯示出node的詳細信息

rosnode kill node_name 結(jié)束某個node

rosnode ping 測試鏈接節(jié)點

rosnode machine 列出在特定機器或列表機器上運行的節(jié)點

rosnode cleanup 清除不可到達節(jié)點的注冊信息

master: ROS網(wǎng)絡(luò)架構(gòu)的管理中心,管理著各個node。node先在master進行注冊,node之間通信需要經(jīng)過master編排才能點對點的通信。所以ROS程序啟動, 第一步先執(zhí)行roscore指令啟動master,執(zhí)行指令后同時啟動的還有rosout(負責(zé)日志輸出、記錄當(dāng)前系統(tǒng)狀態(tài))和parameter server(參數(shù)服務(wù)器,非node,負責(zé)存儲參數(shù)配置) ,再由節(jié)點管理器按照cmakelists.txt、package.xml配置執(zhí)行rosrun pkgname node_name 依次啟動node 。

launch: 復(fù)雜節(jié)點啟動管理文件。執(zhí)行roslaunch pkg_name file_name.launch 指令后,首先系統(tǒng)先檢測roscore是否啟動,如果沒有啟動會默認自動拉起。然后按照launch配置啟動規(guī)則,有序啟動多個節(jié)點,減少終端輸入。

二、topic<-->msg

ROS1的通信方式有四種:topic主題,service服務(wù),parameter service 參數(shù)服務(wù)器 ,actionlib動作庫。

topic: ROS通信最常用的一種,對實時性、周期性消息,使用topic傳輸是最佳選擇。簡單的說,啟動topic 首先需要publisher和subscriber 節(jié)點到master進行注冊,然后publisher 會發(fā)布topic,subscriber在master指揮下會訂閱topic,從而建立sub-pub之間的通信。一個topic可以有多個publisher,一個publisher可以同時向多個subscriber發(fā)送消息,subscriber 接收消息會進行處理(回調(diào)函數(shù) callback),publisher發(fā)送消息后就繼續(xù)執(zhí)行下一個動作,消息的狀態(tài)和處理結(jié)構(gòu)都不會影響publisher執(zhí)行,subscriber只管消息接受和處理,publisher掛死不會對subscriber節(jié)點狀態(tài)影響,所以topic通信實現(xiàn)了node之間的解耦,此通信方式屬于異步通信。

rostopic list 列出當(dāng)前所有topic

rostopic info topic_name 顯示某個topic的屬性信息

rostopic echo topic_name 顯示某個topic的內(nèi)容

rostopic pub topic_name 向某個topic發(fā)布內(nèi)容

rostopic bw topic_name 查看某個topic的帶寬

rostopic hz 查看某個topic的頻率

rostopic find topic_type 查看某個類型的topic

rostopic type topic_name 查看某個topic類型的msg

message: 直觀查看message就是一種數(shù)據(jù)格式。嚴格說按照規(guī)定的格式發(fā)送的數(shù)據(jù)就是message消息,所以消息既是內(nèi)容也是標準格式。基本的msg包括bool、int8、int16、int32、int64(以及uint)、float、float64、string、time、 duration、header、可變長數(shù)組array[]、固定長度數(shù)組array[C]。

rosmsg list 列出系統(tǒng)消息

rosmsg show msg_name 顯示某個msg的格式

---常見消息名稱--

Vector 矢量; 向量

twist 轉(zhuǎn)動,旋轉(zhuǎn)

covariance 協(xié)方差;協(xié)變性;共離散;

Odometry 里程計

quaternion 四元組

  • 話題的通信機制

此處假設(shè) Talker 首先啟動,可分成圖中所示的七步來分析建立通信的詳細過程:

圖片

  1. Talker 注冊Talker 啟動,通過 1234 端口使用 RPC 向 ROS Master 注冊發(fā)布者的信息,包含所發(fā)布消息的話題名;ROS master 會將節(jié)點的注冊信息加入注冊列表中。

  2. Listener 注冊Listener 啟動,同樣通過 RPC 向 ROS Master 注冊訂閱者的信息,包含需要訂閱的話題名。

  3. ROS Master 進行信息匹配Master 根據(jù) Listener 的訂閱信息從注冊列表中進行查找,如果沒有找到匹配的發(fā)布者,則等待發(fā)布者的加入;如果找到匹配的發(fā)布者信息,則通過 RPC 向 Listener 發(fā)布 Talker 的 RPC 地址信息。

  4. Listener 發(fā)送連接請求Listener 接收到 Master 發(fā)回的 Talker 地址信息,嘗試通過 RPC 向 Talker 發(fā)送連接請求,傳輸訂閱的話題名、消息類型以及通信協(xié)議(TCP/UDP)。

  5. Talker 確認連接請求Talker 接收到 listener 發(fā)送的連接請求后,繼續(xù)通過 RPC 向 Listener 確認鏈接信息,其中包含自身的 TCP 地址信息。

  6. Listener 嘗試與 Talker 建立網(wǎng)絡(luò)連接Listener 接收到確認信息后,使用 TCP 嘗試與 Talker 建立網(wǎng)絡(luò)連接。

  7. Talker 向 Listener 發(fā)布數(shù)據(jù)成功建立連接后,Talker 開始向 Listener 發(fā)送話題消息數(shù)據(jù)。

    從上面的分析中可以發(fā)現(xiàn),前五個步驟使用的通信協(xié)議都是 RPC,最后發(fā)布數(shù)據(jù)的過程才使用到 TCP。ROS Master 在節(jié)點建立連接的過程中起到了重要作用,但是并不參與節(jié)點之間最終的數(shù)據(jù)傳輸。

三、service<-->srv<-->parameter <-->action

service: 請求--查詢雙向同步通信模型,service分層兩部分,客戶端(client)和服務(wù)端(server)??蛻舳?client)發(fā)送請求(request)要等服務(wù)端(server)處理,反饋回復(fù)(reply)才會發(fā)送下一個請求到服務(wù)端(server).

圖片

名稱 topic service
通信方式 異步通信 同步通信
實現(xiàn)原理 TCP/IP TCP/IP
通信模型 publisher/subscriber request/replay
映射關(guān)系 多對多 多對一
特點 subs收到數(shù)據(jù)會回調(diào)callback 遠程過程調(diào)用(RPC)服務(wù)器端的服務(wù)
應(yīng)用場景 連續(xù)、高頻的數(shù)據(jù)發(fā)布 偶爾使用的功能、具體任務(wù)
舉例 激光雷達、里程計發(fā)布數(shù)據(jù) 拍照、逆解計算、開關(guān)傳感器

注意:遠程過程調(diào)用(RPC)可以理解為一個進程里面調(diào)用另外一個進程的函數(shù)。

rosservice list 顯示服務(wù)列表

rosservice info 打印服務(wù)信息

rosservice type 打印服務(wù)類型

rosservice uri 打印服務(wù)ROSRPC uri(統(tǒng)一資源標識,URI包含URL)

rosservice call 使用所提供的args調(diào)用服務(wù)

rosservice args 打印服務(wù)參數(shù)

rosservice find 查找服務(wù)

srv: service的數(shù)據(jù)類型,service通信的數(shù)據(jù)格式定義在*srv中,包含請求(request)和響應(yīng)(reply)兩部分。

rossrv show 顯示服務(wù)描述

rossrv list 列出所有服務(wù)

rossrv md5 顯示服務(wù)md5

rossrv package 列出包服務(wù)

rossrv packages 列出包含服務(wù)的包

  • 服務(wù)通信機制

服務(wù)是一種帶有應(yīng)答的通信機制,通信原理如下圖所示,與話題的通信相比,其減少了 Listener 與 Talker 之間的 RPC 通信。

圖片

  1. Talker 注冊Talker 啟動,通過 1234 端口使用 RPC 向 ROS Master 注冊發(fā)布者的信息,包含所發(fā)布消息的話題名;ROS master 會將節(jié)點的注冊信息加入注冊列表中。
  2. Listener 注冊Listener 啟動,同樣通過 RPC 向 ROS Master 注冊訂閱者的信息,包含需要訂閱的服務(wù)名。
  3. ROS Master 進行信息匹配Master 根據(jù) Listener 的訂閱信息從注冊列表中進行查找,如果沒有找到匹配的服務(wù)提供者,則等待該服務(wù)提供者的加入;如果找到匹配的服務(wù)提供者信息,則通過 RPC 向 Listener 發(fā)布 Talker 的 TCP 地址信息。
  4. Listener 嘗試與 Talker 建立網(wǎng)絡(luò)連接Listener 接收到確認信息后,使用 TCP 嘗試與 Talker 建立網(wǎng)絡(luò)連接,并發(fā)送服務(wù)的請求數(shù)據(jù)。
  5. Talker 向 Listener 發(fā)布數(shù)據(jù)Talker 接收到服務(wù)請求和參數(shù)后,開始執(zhí)行服務(wù)功能,執(zhí)行完成后,向 Listener 發(fā)送應(yīng)答數(shù)據(jù)。

parameter server: 參數(shù)服務(wù)器維護的一般是靜態(tài)數(shù)據(jù)字典,它使用互聯(lián)網(wǎng)傳輸,在節(jié)點管理器master中運行,實現(xiàn)整個通信。

rosparam set param_key param_value 設(shè)置參數(shù)****rosparam get param_key 顯示參數(shù) rosparam load file_name 從文件加載參數(shù) (yaml格式) rosparam dump file_name 保存參數(shù)到文件 (yaml格式)rosparam delete 刪除參數(shù)rosparam list 列出參數(shù)名稱

  • 參數(shù)管理機制

    參數(shù)類似于 ROS 中的全局變量,由 ROS Master 進行管理,其通信機制較為簡單,不涉及 TCP/UDP 的通信。

  • 圖片

  1. Talker 設(shè)置變量Talker 使用 RPC 向 ROS Master 發(fā)送參數(shù)設(shè)置數(shù)據(jù),包含參數(shù)名和參數(shù)值;ROS Master 會將參數(shù)名和參數(shù)值保存到參數(shù)列表中。
  2. Listener 查詢參數(shù)值Listener 通過 RPC 向 ROS Master 發(fā)送參數(shù)查找請求,包含索要查找的參數(shù)名。
  3. ROS Master 向 Listener 發(fā)送參數(shù)值Master 根據(jù) Listener 的查找請求從參數(shù)列表中進行查找,查找到參數(shù)后,使用RPC 將參數(shù)數(shù)值發(fā)送給 Listener。

這里需要注意的是,如果 Talker 向 Master 更新參數(shù)值,Listener 在不重新查詢參數(shù)值的情況下是無法知曉參數(shù)值已經(jīng)被更新的。所以在很多場景中,需要一種動態(tài)參數(shù)更新機制。

action: 動作類似service,屬于請求--查詢雙向同步通信模型,但是通信過程連續(xù)反饋狀態(tài)信息和隨時終止請求。通信雙方在action protocol 下通過消息進行數(shù)據(jù)交流,client和server為用戶提供API來請求目標或者通過函數(shù)調(diào)用和回調(diào)來執(zhí)行目標。

圖片

action protocal: action協(xié)議包含三部分,目標(設(shè)定終點),反饋(實時狀態(tài)信息),結(jié)果(時長、最終姿態(tài))。

圖片

ROS1和ROS2通信架構(gòu)比對

這里主要給大家介紹ROS2和ROS1的通信架構(gòu)區(qū)別,ROS1和ROS2的架構(gòu)如下,可以分成3層:OS層、中間層和應(yīng)用層

圖片

  • OS層:ROS1主要構(gòu)建在Linux上,但ROS2支持多個操作系統(tǒng)
  • 中間層:ROS1通信基于TCPROS/UDPROS,而ROS2通信基于DDS(data distribution service)數(shù)據(jù)分發(fā)服務(wù)。它是專門為RTOS設(shè)計的數(shù)據(jù)分發(fā)/訂閱標準,其技術(shù)關(guān)鍵是以數(shù)據(jù)為核心的發(fā)布/訂閱 模型 DCPS(data-centric publish-subscribe),DCPS模型類似現(xiàn)在流行的容器命名空間技術(shù),創(chuàng)建了一個全局數(shù)據(jù)空間,空間內(nèi)的進程都可以直接訪問。另外ROS2的intra-process 和ROS1的nodelet 數(shù)據(jù)傳輸方式類似,只是更名了而已,哈哈哈。
  • 應(yīng)用層:ROS1強依賴于master單點,只要單點就會降低系統(tǒng)的可靠性,所以ROS1只適用于實驗室研究,無法商用。ROS2取消了master節(jié)點管理器,節(jié)點間使用discover發(fā)現(xiàn)機制幫助彼此建立鏈接。

ROS 2 的通信模型

ROS 1的通信模型主要包含話題、服務(wù)等通信機制,ROS 2的通信模型會稍顯復(fù)雜,加入了很多DDS的通信機制。如下圖所示:

圖片

基于DDS數(shù)據(jù)分發(fā)服務(wù)的ROS2模型包含以下幾個關(guān)鍵概念。

參與者(Participant) :在 DDS 中,每一個發(fā)布者或者訂閱者都成為參與者,對應(yīng)于一個使用 DDS 的用戶,可以使用某種定義好的數(shù)據(jù)類型來 讀/寫 全局數(shù)據(jù)空間。

發(fā)布者(Publisher) :數(shù)據(jù)發(fā)布的執(zhí)行者,支持多種數(shù)據(jù)類型的發(fā)布,可以與多個數(shù)據(jù)寫入器(DataWriter)相聯(lián),發(fā)布一種或多種主題(Topic)的消息。

訂閱者(Subscriber) :數(shù)據(jù)訂閱的執(zhí)行者,支持多種數(shù)據(jù)類型的訂閱,可以與多個數(shù)據(jù)讀取器(DataReader)相聯(lián),訂閱一種或多種主題(Topic)的消息。

數(shù)據(jù)寫入器(DataWriter) :上層應(yīng)用向發(fā)布者更新數(shù)據(jù)的對象,每個數(shù)據(jù)寫入器對應(yīng)一個特定的Topic,類似于ROS 1中的一個消息發(fā)布者。

數(shù)據(jù)讀取器(DataReader) :上層應(yīng)用從訂閱者讀取數(shù)據(jù)的對象,每個數(shù)據(jù)讀取器對應(yīng)一個特定的Topic,類似于ROS 1中的一個消息訂閱者。

話題(Topic) :和 ROS 1 中的概念類似,話題需要定義一個名稱和一種數(shù)據(jù)結(jié)構(gòu),但 ROS 2 中的每個話題都是一個實例,可以存儲該話題中的歷史消息數(shù)據(jù)。

質(zhì)量服務(wù)原則(Quality of Service) :簡稱 QoS Policy,這是 ROS 2 中新增的、也是非常重要的一個概念,控制各方面與底層的通信機制,主要從時間限制、可靠性、持續(xù)性、歷史記錄這幾個方面,滿足用戶針對不同場景的數(shù)據(jù)需求。

圖片

  • 實時性增強:數(shù)據(jù)必須在 deadline 之前完成更新;
  • 持續(xù)性增強:DDS 可以為 ROS 2 提供數(shù)據(jù)歷史服務(wù),新加入的節(jié)點也可以獲取發(fā)布者發(fā)布的所有歷史數(shù)據(jù);
  • 可靠性增強:配置可靠性原則,用戶可以根據(jù)需求選擇性能模式(BEST_EFFORT)或者穩(wěn)定模式(RELIABLE)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6178

    瀏覽量

    137388
  • 通信方式
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    9232
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    285

    瀏覽量

    17570
收藏 0人收藏

    評論

    相關(guān)推薦
    熱點推薦

    基于串口的STM32通過rosserial和ROS系統(tǒng)通信的代碼

    前言最初參考網(wǎng)上資料移植了一份基于串口的STM32通過rosserial和ROS系統(tǒng)通信的代碼。對于小數(shù)據(jù)量格式的消息,可以正常通信,但消息量一大便會出錯(如:發(fā)布ROS提供的odom
    發(fā)表于 08-06 08:54

    無線通信概念

    1、概念1)無線通信無線通信是利用電波信號可以在自由空間那種傳播的特性進行信息交換的一種通信
    發(fā)表于 08-06 10:06

    ROS與STM32是如何進行通信

    ROS與STM32通信2020.8.1主要內(nèi)容制作ROS包,將控制命令傳給STM32,并將接收到的數(shù)據(jù)作為話題進行發(fā)布STM32接收數(shù)據(jù)并將姿態(tài)數(shù)據(jù)傳回給ROS接收:期望角速度、期望線
    發(fā)表于 08-11 07:25

    串口通信的作用及通信方式

    串口通信一、串口通信概念1、串口通信的作用2、串口通信通信
    發(fā)表于 11-18 08:36

    求大佬分享ROS與STM32的串口通信的程序

    求大佬分享ROS與STM32的串口通信的程序
    發(fā)表于 12-06 06:57

    ROS的serial是如何進行通信

    怎樣去安裝seria呢?ROS的serial是如何進行通信的?
    發(fā)表于 12-06 06:31

    如何完成ROS與STM32之間的串口通信

    如何去實現(xiàn)ROS與STM32串口通信測試功能?如何完成ROS與STM32之間的串口通信呢?
    發(fā)表于 12-10 06:54

    配置STM32-ROS通信常見的問題有哪些?

    配置STM32-ROS通信常見的問題有哪些?
    發(fā)表于 12-23 07:32

    RT-Thread實時操作系統(tǒng)與ROS2是怎樣進行通信

    已經(jīng)有了 rosserial 和 micro_ros 軟件包分別能和 ROS1/ROS2 通信,同時也有 Kobuki 機器人底盤軟件包 [5] 和激光雷達 rplidar 軟件包
    發(fā)表于 04-01 11:38

    基于無線wifi網(wǎng)絡(luò)的X3派和PC虛擬機通過ROS2實現(xiàn)跨設(shè)備通信

    1、X3派和PC虛擬機都連接無線wifi網(wǎng)絡(luò)的情況下通過ROS2實現(xiàn)跨設(shè)備通信多機通信ROS的基礎(chǔ)能力之一,相比于
    發(fā)表于 07-13 15:13

    ROS與STM32通信

    ROS與STM32通信2020.8.1主要內(nèi)容制作ROS包,將控制命令傳給STM32,并將接收到的數(shù)據(jù)作為話題進行發(fā)布STM32接收數(shù)據(jù)并將姿態(tài)數(shù)據(jù)傳回給ROS接收:期望角速度、期望線
    發(fā)表于 12-24 19:00 ?12次下載
    <b class='flag-5'>ROS</b>與STM32<b class='flag-5'>通信</b>

    如何初始化ROS并創(chuàng)立鏈接

    的主題(如/odometry)來發(fā)送消息。其他組件通過訂閱該主題來接收消息。本文內(nèi)容基于慕羽★大佬文章進行了增刪。 同時由于Simulink的使用在ROS1ROS2中沒有太多的改動,所以我們就僅對
    的頭像 發(fā)表于 11-15 17:26 ?711次閱讀
    如何初始化<b class='flag-5'>ROS</b>并創(chuàng)立鏈接

    ros的基本概念是什么

    基本概念ROS是一個用于在不同進程間匿名的發(fā)布、訂閱、傳遞信息的中間件。 ROS2系統(tǒng)的核心部分是ROS網(wǎng)絡(luò)(ROS Graph)。
    的頭像 發(fā)表于 11-27 11:21 ?2200次閱讀

    ros1ros2的通信模型

    ros1: talker 注冊 listener 注冊 ROS Master 進行信息匹配 listener 發(fā)送鏈接請求 talker 確認請求 建立連接 talker 給 listener 發(fā)
    的頭像 發(fā)表于 11-27 11:26 ?1196次閱讀
    <b class='flag-5'>ros1</b>和<b class='flag-5'>ros</b>2的<b class='flag-5'>通信</b>模型

    ROS通信接口機制介紹

    ROS通信接口 接口可以讓程序之間的依賴降低,便于我們使用別人的代碼,也方便別人使用我們的代碼,這就是ROS的核心目標,減少重復(fù)造輪子。 ROS有三種常用的
    的頭像 發(fā)表于 12-01 15:03 ?1219次閱讀
    <b class='flag-5'>ROS</b><b class='flag-5'>通信</b>接口機制介紹

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品