ROS2学习(七).ROS概念 - ROS客户端库(Ros Client Library)
ROS客戶端庫
- 概述
- 支持的客戶端庫
- 通用功能:RCL
- 語言特有功能
- 同ROS 1的比較
- 小結
- 參考
概述
客戶端庫是開發(fā)者用以開發(fā)ROS代碼時使用的API,使用客戶端庫,開發(fā)者將接觸到ROS的相關概念例如節(jié)點、主題、服務等等。客戶端庫支持多種編程語言以便開發(fā)者更容易使用他們熟悉的環(huán)境進行開發(fā)。例如在原型迭代階段可以使用Python編寫可視化相關的代碼;而涉及效率相關的系統(tǒng)部分,C++會更適合。
使用不同的客戶端庫編寫的節(jié)點之間可以共享消息。因為所有的客戶端庫都實現(xiàn)了基于ROS接口的通信能力。
除了基于特定預研的通信工具外,客戶端庫還提供了ROS的核心功能。例如:
- 名稱與名稱空間
- 時間(真實/模擬)
- 參數(shù)
- 控制臺日志
- 線程模型
- 進程間通信
支持的客戶端庫
官方提供了兩種RCL的維護,rclcpp和rclpy。
社區(qū)提供了以下的RCL:
- JVM and Android
- Objective C and iOS
- C#
- Swift
- Node.js
- Ada
- _.NET Core, UWP and C#
- Rust
通用功能:RCL
大部分客戶端庫的功能與客戶端所用的編程語言無關。例如,參數(shù)的行為和名稱空間的邏輯在理想情況下在不同編程語言中應該是相同的。正因如此,客戶端庫使用公共的核心RCL接口以實現(xiàn)跨語言的ROS概念的行為與邏輯,而不是從頭開始開發(fā)。因此,客戶端庫只需要用外部函數(shù)接口將核心RCL進行二次包裝。這樣就保證了客戶端庫的輕量化,并使得客戶端庫更易開發(fā)。
為了上述目的,通用的RCL功能被封裝為C語言接口,因為C語言是最容易被不同客戶端庫所封裝的。
此外,公共核心保證了跨語言的客戶端庫之間行為的一致性。如果對核心RCL中功能的行為和邏輯進行了任何修改,所有使用RCL的客戶端庫都將反應這些更改。同時在bug修復時可以減少多個客戶端的維護工作量。
詳情可參考RCL API文檔。 1
語言特有功能
需要由語言特性描述的特性和屬性沒有在RCL中實現(xiàn)而是由各客戶端庫加以實現(xiàn)。例如,spin函數(shù)使用的線程模型在不同的客戶端庫中依賴于特定語言執(zhí)行。
同ROS 1的比較
在ROS 1中,所有的客戶端庫都是“從頭開始”開發(fā)的。例如python客戶端庫就完全使用純Python進行開發(fā),這帶來了一些好處,例如無需編譯。然而,命名約定和行為在客戶端間并不總是一致,因此修復問題時需要在多個地方進行,且很多功能僅存在于某一客戶端庫(例如UDPROS)。
小結
通過實現(xiàn)通用功能的核心ROS客戶端庫,客戶端庫能夠更好地適用于不同的編程語言,并且保持一致的行為特征。
參考
RCL API ??
總結
以上是生活随笔為你收集整理的ROS2学习(七).ROS概念 - ROS客户端库(Ros Client Library)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS2学习(六).ROS概念 - 服务
- 下一篇: ROS2学习(八).ROS概念 - RO