当前位置: 首页 > news >正文

机器人系统ros2内部接口介绍

内部 ROS 接口是公共 C API ,供创建客户端库或添加新的底层中间件的开发人员使用,但不适合典型 ROS 用户使用。
ROS客户端库提供大多数 ROS 用户熟悉的面向用户的API,并且可能采用多种编程语言。

内部API架构概述

内部接口主要有两个:

  • ROS中间件接口(rmw API)

  • ROS客户端库接口(rcl API)

API rmw 是ROS 2 软件堆栈和底层中间件实现之间的接口。 ROS 2 使用的底层中间件是 DDS 或 RTPS 实现,负责发现、发布和订阅机制、服务的请求-回复机制以及消息类型的序列化。

rcl API是一个稍高级别的API,用于实现客户端库,不直接接触中间件实现,而是通过 ROS 中间件接口 ( rmw API ) 抽象来实现。

在这里插入图片描述
如图所示,这些API是堆叠在一起的,因此典型的 ROS 用户将使用客户端库 API,例如rclcpp,来实现他们的代码(可执行文件或库)。客户端库的实现,例如rclcpp,使用rcl提供对 ROS 图和图事件的访问的接口。该rcl实现又使用rmw API来访问 ROS 图。实现的目的是为各种客户端库rcl可以使用的更复杂的 ROS 概念和实用程序提供通用实现,同时保持对所使用的底层中间件的不可知性。该接口的目的是捕获支持 ROS 客户端库所需的绝对最小中间件功能。最后, API的实现由中间件实现特定包提供。

在上图中,还有一个标记为 的框ros_to_dds,该框的目的是表示一类可能的包,这些包允许用户使用 ROS 等效项访问 DDS 供应商特定的对象和设置。该抽象接口的目标之一是将ROS用户空间代码与正在使用的中间件完全隔离,以便用户代码 对 DDS服务或者中间件的改动影响降到最小。

特定类型接口

通俗来讲下面主要的表达就是注入用户自定义的类对象到ros 系统,让ros 也认识你定义的这些类

在一些特定的业务场景下,有些 API的某些部分必然特定于正在交换的消息类型,例如发布消息或订阅主题,因此需要为每种消息类型生成代码。下图布局了从用户定义的rosidl文件(例如.msg文件)到用户和系统用于执行类型特定功能的类型特定代码的路径:

在这里插入图片描述
图:“静态”类型支持生成的流程图,从rosidl文件到面向用户的代码

该图的右侧显示了如何.msg将文件直接传递到特定于语言的代码生成器,例如rosidl_generator_cpprosidl_generator_py。这些生成器负责创建用户将包含(或导入)的代码,并将其用作文件中定义的消息的内存中表示形式.msg。例如,考虑消息std_msgs/String,用户可能会在 C++ 中使用此文件以及语句,或者他们可能会在 Python 中使用该语句。这些语句之所以有效,是因为这些文件是由这些特定于语言的(但与中间件无关的)生成器包生成的。

#include <std_msgs/msg/string.hpp>from std_msgs.msg import String

rosidl API

该rosidl存储库位于GitHub上的ros2/rosidl,定义了消息 IDL 语法,即.msg文件、.srv文件等的语法,并包含用于解析文件、提供 CMake 基础设施以从消息生成代码、生成与实现无关的包。代码(头文件和源文件),以及用于建立默认的生成器集。该存储库包含这些包:

  • rosidl_cmake:提供CMake函数和模块,用于从rosidl文件(例如.msg文件、.srv文件等)生成代码。

  • rosidl_default_generators:定义默认生成器列表,确保它们作为依赖项安装,但也可以使用其他注入的生成器。

  • rosidl_generator_c:提供为文件生成C头文件(.h)的工具rosidl。

  • rosidl_generator_cpp:提供为文件生成C++头文件(.hpp)的工具rosidl。

  • rosidl_generator_py:提供为文件生成Python模块的工具rosidl。

  • rosidl_parser:提供Python API用于解析rosidl文件。

当然ros还有更多的api 内部接口,有兴趣的小伙伴可以去ros 官网看看

http://www.lryc.cn/news/343262.html

相关文章:

  • 跟随Facebook的足迹:社交媒体背后的探索之旅
  • 面试题分享之Java并发篇
  • bpmn-js 多实例配置MultiInstanceLoopCharacteristics实现或签会签
  • 【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能
  • 带EXCEL附件邮件发送相关代码
  • 【算法作业】均分卡牌,购买股票
  • python作业
  • 【Linux的文件篇章 - 管道文件】
  • C# 局部静态函数,封闭方法中的最佳选择
  • 【MySQL】MySQL 8.4.0 长期支持版(LTS)安装
  • nest中的ORM
  • TCP(Transmission Control Protocol,传输控制协议)如何保证数据的完整性?
  • Numpy库介绍
  • 临时有事无法及时签字盖章?试试用契约锁设置“代理人”
  • 数据库权限管理
  • 如何创建一个 Django 应用并连接到数据库
  • 【算法刷题day44】Leetcode:518. 零钱兑换 II、377. 组合总和 Ⅳ
  • 『51单片机』AT24C02[IIC总线]
  • Jenkins与Rancher的配合使用
  • GIS入门,常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理和使用
  • 气膜体育馆内部的采光效果如何?—轻空间
  • 矩阵的对称正定性判决(复习)
  • 网络安全之DHCP详解
  • 【Proteus】LED呼吸灯 直流电机调速
  • 今天遇到一个GPT解决不了的问题
  • 优化SQL的方法
  • 库存管理系统开源啦
  • 【java】接口
  • Java中的类型转换
  • 定义范围对PFMEA分析的重要性——SunFMEA软件