• 【ROS2原理4】interface 接口


    一、提要

            本文专门针对ROS2传递的数据结构或叫数据协议进行说明。所谓接口有几个要素:

    1)命名空间 2)数据类型 3)默认值 。

    二、接口定义

            所谓接口,就是被传递数据的格式。

            随着在 ROS 2 Dashing 中使用 IDL 指定接口的过渡,本文已被使用 .msg / .srv / .action 文件的接口定义文章取代。

    2.1 范围

            本文指定了描述用于在组件之间交换信息的数据结构的文件格式。数据结构以与编程语言无关的方式定义。请参阅其他文章以了解与编程语言特定类型和 API 的映射。

    2.2 概述

            数据结构由一组字段定义。字段的顺序无关紧要。每个字段由类型和名称描述。

    2.3 消息

            单个数据结构称为消息。每条消息都有一个名称。与包的名称一起,可以唯一标识一条消息。

    2.4 服务

            对于请求/回复式通信,两个交换的数据结构是相关的。这些数据结构对称为服务 服务由其名称和所在的包标识。每个服务描述两条消息,一条用于请求数据结构,一条用于回复数据结构。

    2.5 字段类型

            字段的类型可以是原始类型,也可以是其他数据结构。这些中的每一个都可以选择是动态或静态大小的数组。

    1)主字段类型

    类型有下列方面:

    • bool
    • byte
    • char
    • float32float64
    • int8uint8
    • int16uint16
    • int32uint32
    • int64uint64
    • string

    TODO:考虑 wchar、wstring、u16string、u32string

    TODO:字符串还没有指定任何编码并且传输对它是不可知的,这意味着它通常只能包含 ASCII 但所有端点也可以“同意”使用特定的编码

    TODO:考虑在指定到 C++ 和 Python 的映射后删除 byte、char

    1)非原始字段类型
            除了原始类型之外,还可以引用其他消息来描述“复杂”字段的类型。复杂字段类型由包和消息名称标识。

    2)具有静态大小的数组
            一个静态数组正好有 N 个指定类型的元素。 N 必须大于 0。

    3)具有动态大小的数组
            动态数组可以有 0 到 N 个指定类型的元素。 N 可能没有上限,并且可能仅受内存或其他系统特定限制的限制。

    4)上界
            字符串和动态数组的大小可以通过上限来限制。这可以为使用动态大小数据的数据结构预分配内存。

    三、 默认值

    字段可以选择指定默认值。如果未指定默认值,则使用通用默认值:

    • for bool it is false
    • for numeric types it is a 0 value
    • for string it is an empty string
    • for static size arrays it is an array of N elements with its fields zero-initialized
    • for bounded size arrays and dynamic size arrays it is an empty array []

    3.1 数组的默认值

    数组类型的字段可以选择指定默认值。

    • 数组的默认值必须以左方括号 ([) 开头并以右方括号 (]) 结尾
    • 数组中的每个值都必须用逗号 (,) 分隔
    • 数组中的所有值必须与字段的类型相同
    • 数组的第一个值之前不能有逗号
    • 忽略数组最后一个元素后的逗号

    3.2 字符串数组的附加规则:

             字符串数组必须只包含符合以下规则的字符串: 可以选择用单引号 (') 或双引号 (") 引用的字符串值 双引号 (") 字符串(分别是单引号 ('))应该有任何内部双引号(分别是单引号)转义 TODO:复杂字段当前不支持默认值

    3.3 常数 

            常量由原始类型、名称和固定值定义。

    四、约定

    4.1 约定:消息和服务的命名
            每个文件都包含一个消息或服务。消息文件使用扩展名 .msg,服务文件使用扩展名 .srv。

            两个文件名都必须使用大写的驼峰式名称,并且只能由字母数字字符组成。

    4.2 字段命名

            字段名称必须是带有下划线的小写字母数字字符,用于分隔单词。它们必须以字母字符开头,不能以下划线结尾,并且不能有两个连续的下划线。

    4.3 常量的命名

            常量名称必须是带有下划线的大写字母数字字符,用于分隔单词。它们必须以字母字符开头,不能以下划线结尾,并且不能有两个连续的下划线。

    五、句法

    消息和服务定义是文本文件。

    5.1 注释

    字符 # 开始一个注释,它在它出现的行的末尾终止。

    5.2 消息文件格式

            一行可以包含字段定义或常量定义。虽然必须使用单个空格来分隔标记,但可以选择在标记之间插入额外的空格。

    5.3 字段定义

            字段定义具有以下结构:

            <类型> <名称> <可选默认值>


    5.4 常量定义

    常量定义具有以下结构:

    <类型> <名称>=<值>

    5.5 类型

    由其基本类型和可选的数组说明符定义。

    基本类型可以是以下之一:

    • 上面列表中的原始类型:例如int32
    • 具有上限的字符串:string<=N 将字符串的长度限制为 N 个字符
    • 引用另一条消息的复杂类型:
    1. 消息的绝对引用:例如some_package/SomeMessage
    2. 同一包中消息的相对引用:例如其他留言

    数组说明符可以是以下之一:

    • 静态数组由后缀 [N] 描述,其中 N 是数组的固定大小
    • 无界动态数组由后缀 [] 描述
    • 有界动态数组由后缀 [<=N] 描述,其中 N 是数组的最大大小

    5.6 价值观

            根据类型,以下值有效:

    1)布尔:

    真的,1
    假,0


    2)字节:

    以下区间 [0, 255] 中的无符号整数值
    字符:

    以下区间 [-128, 127] 中的整数值

    3)浮点 32 和浮点 64:

            使用点 (.) 作为整数部分和小数部分之间的分隔符的十进制数。


    4)int8、int16、int32 和 int64:

            以下区间 [- 2 ^ (N - 1), 2 ^ (N - 1) - 1] 中的整数值,其中 N 是 int 后面的位数
    uint8、uint16、uint32 和 uint64:

            以下区间 [0, 2 ^ N - 1] 中的无符号整数值,其中 N 是 uint 后面的位数。


    5)字符串类型:

    1. 可以选择用单引号 (') 或双引号 (") 引用的字符串值
    2. 双引号 (") 字符串(分别是单引号 ('))应该有任何内部双引号(分别是单引号)转义:
    • string my_string "I heard \"Hello\""  --是有效的
    • string my_string "I heard "Hello"" --是无效的
    • string my_string "I heard 'Hello'" --有效
    • string my_string 'I heard \'Hello\'' 有效
    • string my_string 'I heard 'Hello'' --无效
    • string my_string 'I heard "Hello"' --有效

    Interface definition (ros2.org)

  • 相关阅读:
    百度SEO优化技巧(选择、网站结构、内容优化、外链建设、数据分析)
    小程序与公众号:编程的异同
    火爆全网的“亿级流量高并发系统设计v1.0”,七大专题+47W字
    浏览器中输入网址到看到网页内容经历了哪些过程
    【原理篇】四、自定义starter
    Android系统10 RK3399 init进程启动(二十八) SeAndroid政策兼容性
    推荐一款采用 .NET 编写的 反编译到源码工具 Reko
    【Java面试题】请说一下Netty中Reactor模式的理解
    人工智能知识全面讲解:最简单的神经元模型
    Linux·驱动中的并发
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126197469