ROS2学习(四).ROS 2 核心概念
ROS 2 概念速覽
- 官方文檔
- 圖(Graph)的概念
- 節(jié)點(Node)
- 客戶端庫(Client Libraries)
- 發(fā)現(xiàn)機制(Discovery)
- 參考
ROS2的核心概念主要有:
- 圖
- 節(jié)點
- 客戶端庫
- 發(fā)現(xiàn)機制
官方文檔
Quick overview of ROS 2 Concepts1
圖(Graph)的概念
ROS 2是一個基于匿名的發(fā)布訂閱機制的中間件,允許不同的ROS進程間進行消息傳遞。
任何ROS 2系統(tǒng)的核心都是ROS圖(Graph),它包含:
- 節(jié)點Nodes:
- 一個使用ROS與其他節(jié)點進行通信的實體
- 節(jié)點間通過topic, service,action或parameter進行數(shù)據(jù)傳輸
- 一個可執(zhí)行程序可以包括一個或多個節(jié)點
- 消息Message:
- 當發(fā)布或訂閱一個主題topic時使用到的ROS數(shù)據(jù)類型
- 主題Topic:
- 節(jié)點可以向主題發(fā)布消息
- 節(jié)點可以訂閱主題接收消息
- 發(fā)現(xiàn)Discovery:
- 節(jié)點之間決定如何相互通信的過程
節(jié)點(Node)
- 節(jié)點是ROS圖的參與者
- 使用ROS客戶端庫與其他節(jié)點通信
- 發(fā)布主題
- 訂閱主題
- 使用服務(Service)
- 使用操作(Action)
- 節(jié)點獨立的可配置參數(shù)
- 節(jié)點間的連接通過分布式發(fā)現(xiàn)過程加以建立
- 節(jié)點部署
- 同進程
- 不同進程
- 不同主機
客戶端庫(Client Libraries)
ROS客戶端庫允許用不同編程語言編寫的節(jié)點進行通信。
有一個核心ROS客戶端庫,實現(xiàn)了不同語言的ROS API所需的通用功能。
這使得面向不同語言的庫可以更易于編寫,并保持一致性。
ROS2官方團隊維護了C++和Python兩種語言的客戶端庫(rclcpp/rclpy)。
此外,ROS社區(qū)開發(fā)了其他客戶端庫包括:2
- JVM and Android
- Objective C and iOS
- C#
- Swift
- Node.js
- Ada
- _.NET Core, UWP and C#
- Rust
發(fā)現(xiàn)機制(Discovery)
節(jié)點發(fā)現(xiàn)通過ROS2的底層中間件自動進行,按照下述流程進行:
Created with Rapha?l 2.3.0節(jié)點啟動向相同ROS domain的節(jié)點告知自己的存在(擁有相同的ROS_DOMAIN_ID)收到通告的節(jié)點回復自己的信息建立連接節(jié)點間得以通信廣播周期到?yes在該流程中,節(jié)點會定期發(fā)布自身的存在,這樣就可以與新發(fā)現(xiàn)的實體建立連接
節(jié)點離線時,也會向其他節(jié)點進行通知。
節(jié)點只會同具有兼容的QoS3策略的節(jié)點建立連接。
以之前提到過的的talker-listener Demo4為例: 在一個終端中運行c++ talker節(jié)點將發(fā)布關于一個主題的消息,而在另一個終端中運行的Python listener節(jié)點將訂閱關于同一主題的消息。
可以看到,這些節(jié)點自動發(fā)現(xiàn)彼此,并開始交換消息。
參考
Quick overview of ROS 2 Concepts ??
About ROS 2 client libraries ??
Quality of Service ??
talker-listener Demo ??
總結(jié)
以上是生活随笔為你收集整理的ROS2学习(四).ROS 2 核心概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS2学习(三).ROS2环境配置
- 下一篇: ROS2学习(六).ROS概念 - 服务