ROS2读源码过程中涉及到的核心点梳理解读

阅读方式,推荐分层阅读——

        先从RCLCPP(C++版本的ROS客户端库)和RCL(ROS Client Library)开始,然后再研究RMW和具体DDS实现(如FastRTPS、OpenSplice等)。

在ROS2(Robot Operating System,第二代机器人操作系统)中,rmw模块(ROS Middleware Wrapper)扮演着核心的桥梁角色。其主要职责是为ROS2客户端库(如rclcpp和rclpy)提供一个标准化的接口,用于与底层不同的中间件实现(Middleware Implementations)交互,如不同的DDS(Data Distribution Service)实现(如Fast RTPS、RTI Connext、Cyclone DDS等)进行通信。

具体来说,rmw模块的主要功能包括:

  1. 抽象化通信接口:rmw定义了一套统一的接口规范,使得上层的ROS2节点能够通过这些接口发送和接收数据,而无需关心底层具体的中间件实现细节。这包括数据的发布、订阅、服务的请求与响应等操作。

  2. 中间件插件化支持:通过rmw层,ROS2支持多种不同的中间件实现。这意味着开发者可以选择最适合自己应用场景的DDS或其他中间件,而上层的ROS应用代码几乎不需要改动。rmw通过加载不同的rmw实现库(如rmw_fastrtps_cpp、rmw_connext_cpp等)来实现这一灵活性。

  3. 标准化数据传输配置:rmw接口规定了数据传输的各种属性配置方式,比如消息的传输可靠性、历史记录策略、生存时间等QoS(Quality of Service)参数,确保这些配置在不同DDS实现之间有一致的定义和行为。

  4. 发现与匹配机制:rmw层还负责节点间的发现过程,确保发布者和订阅者能够正确地找到彼此,并匹配合适的数据流。这一过程依赖于底层DDS的具体实现。

  5. 消息序列化与反序列化:rmw还涉及消息类型的序列化和反序列化,确保不同节点间的数据能够正确地编码和解码,无论这些节点是基于同一种还是不同种类的中间件实现。

综上所述,rmw模块是ROS2通信架构中的关键组件,它不仅增强了系统的可移植性和可互操作性,还使得开发者能够更加专注于应用逻辑,而无需深入底层通信协议的细节。

在ROS 2(Robot Operating System 2)中,rclrclcpp 是两个核心库,它们在ROS 2的架构中扮演着重要角色,但各自负责不同的层面。

rcl (ROS Client Library)

rcl 是ROS 2的底层库,它提供了C语言实现的API,用于与ROS 2的核心功能交互。rcl 直接基于 rmw(ROS Middleware Interface)实现,后者是ROS 2中间件接口,负责消息的发送和接收、节点发现、服务调用等。rcl 的主要职责包括:

  • 节点管理:创建、初始化和销毁ROS节点。
  • 时钟管理:处理系统时钟和ROS时间同步。
  • 参数管理:允许节点读取和设置参数。
  • 通信管理:为发布者和订阅者提供接口,用于数据的发布和接收。
  • 服务和客户端管理:提供接口用于创建服务和客户端,以实现节点间的请求响应通信。
  • 事件和状态管理:提供对ROS状态图和事件的访问功能。

rclcpp (ROS Client Library C++)

rclcpp 是基于 rcl 构建的C++接口,为ROS 2的用户提供更加面向对象、易于使用的API。它封装了 rcl 的底层功能,提供了丰富的C++类和模板,使得开发ROS 2节点变得更加便捷高效。rclcpp 的主要特点和功能包括:

  • 高级抽象:提供类如 NodePublisherSubscriptionService 和 Client,使得C++开发者能够以面向对象的方式编写ROS 2节点。
  • 内存管理:利用智能指针(如 std::shared_ptr)来自动管理对象生命周期,减少内存泄漏风险。
  • 线程和异步支持:内置对多线程的支持,以及异步操作的便利接口,比如定时器、回调函数等。
  • QoS策略:支持灵活的质量服务(QoS)配置,允许用户针对不同的通信场景调整可靠性、延迟和带宽等参数。
  • 类型支持:与 rosidl(ROS Interface Definition Language)紧密集成,自动处理消息类型的序列化和反序列化,使得开发者可以无缝使用自定义消息类型。

综上所述,rcl 提供了ROS 2系统最基础的服务和通信机制,而 rclcpp 则在此基础上构建了更高层次的抽象,使得C++开发者可以更高效地开发ROS 2应用程序,无需直接处理底层细节。

流控

watchdog

过滤

如何把writer跟reader匹配 依赖topic?QOS?——【5. Discovery — Fast DDS 3.0.0 documentation

datashared

如何配置

安全

何时持久化

域隔离? 只有在同一个域内的通信实体才能通信,不同域内的实体间无法进行通信

架构设计细节、扩展性?

代码为什么难读

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值