警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

铁尔维尼 (烙铁)

铁尔维尼 以下是 Iron Irwini 自上次发布以来的重要变化和功能亮点。有关自 Humble 发布以来的所有变化,请参阅 长篇更新日志.

支持的平台

Iron Irwini 主要支持以下平台:

1 级平台:

  • Ubuntu 22.04 (Jammy): amd64arm64

  • Windows 10 (Visual Studio 2019): amd64

二级平台:

  • RHEL 9: amd64

三级平台:

  • macOS amd64

  • Debian Bullseye: amd64

有关 RMW 实现、编译器/解释器版本和系统依赖性版本的更多信息,请参见 REP 2000.

安装

安装铁制 Irwini

ROS 2 发布的新功能

为 Python 软件包生成 API 文档

ROS 2 已为多个版本的 C++ 软件包提供了自动 API 文档,例如 https://ros-2.com/rolling/p/rclcpp/generated/index.html.Iron 还为 Python 软件包自动添加了 API 文档,例如 https://ros-2.com/rolling/p/rclpy/rclpy.html.

参见 https://github.com/ros-infrastructure/rosdoc2/pull/28, https://github.com/ros-infrastructure/rosdoc2/pull/49, https://github.com/ros-infrastructure/rosdoc2/pull/51https://github.com/ros-infrastructure/rosdoc2/pull/52 了解更多详情。

服务反思

现在可以按服务启用服务自省。启用后,用户可以查看与请求服务的客户端、接受请求的服务器、发送响应的服务器和接受响应的客户端相关的元数据。客户机/服务器请求/响应的内容也可以选择查看。所有信息都会发布在由服务名称生成的隐藏主题上。因此,如果服务名为 /myservice信息将在 /myservice/_service_event.

请注意,该功能默认为禁用;要启用该功能,用户必须调用 配置自省 在创建服务器客户端或服务器之后。在 https://github.com/ros2/demos/tree/iron/demo_nodes_cpp/src/services (C++)和 https://github.com/ros2/demos/blob/iron/demo_nodes_py/demo_nodes_py/services/introspection.py (蟒蛇)。

参见 REP 2012 以及在 https://github.com/ros2/ros2/issues/1285 了解更多信息。

支持前后设置参数回调

在许多版本中,当节点上的参数被外部实体更改时,用户可以注册一个回调(如 玫瑰2 停止 设置).该回调可以检查已更改的参数类型和值,如果其中一个不符合特定条件,就会全部拒绝。不过,它不能修改参数列表,也不应该修改状态(因为在设置回调之后可能还有其他回调会拒绝参数)。

此版本增加了前回调和后回调。回调按以下顺序调用:

  • 预 "设置参数回调,可根据任意条件修改参数列表。

  • 设置 "参数回调,它不能修改列表,只能根据参数的类型和值接受或拒绝参数(这是现有的回调)。

  • post "设置参数回调,可根据参数更改状态,只有在前两个回调成功后才会调用。

这方面的实例有 https://github.com/ros2/demos/blob/iron/demo_nodes_cpp/src/parameters/set_parameters_callback.cpp (C++)和 https://github.com/ros2/demos/blob/iron/demo_nodes_py/demo_nodes_py/parameters/set_parameters_callback.py (蟒蛇)。

参见 https://github.com/ros2/rclcpp/pull/1947, https://github.com/ros2/rclpy/pull/966https://github.com/ros2/demos/pull/565 了解更多信息。

改进发现选项

以前的 ROS 2 版本提供的发现选项非常有限。基于 DDS 的 RMW 实现的默认行为是发现任何可通过组播到达的节点。通过设置环境变量 仅限本地主机但任何额外配置都需要直接配置中间件,通常是通过中间件特定的 XML 文件和环境变量。ROS Iron 保留了相同的默认发现行为,但废弃了 仅限本地主机 而选择更精细的选项。

  • ros_automatic_discovery_range 控制 ROS 节点尝试发现对方的距离。有效选项包括

    • 子网 - 默认值,对于基于 DDS 的中间件,它将发现任何可通过组播到达的节点。

    • 本地主机 - 只会尝试发现同一台机器上的其他节点。

    • 关闭 - 即使在同一台机器上,也不会试图自动发现任何其他节点。

    • 系统默认值 - 不会更改任何发现设置。当你的中间件已经有了自定义设置,但不想让 ROS 更改它们时,这个功能就很有用了。

  • ros_static_peers(静态同伴 - 分号 (;)分隔的地址列表,ROS 应尝试在这些地址上发现节点。这样,用户就可以连接到特定机器上的节点(只要它们的发现范围没有设置为 关闭).

例如,您可能有几个机器人,它们都有 ros_automatic_discovery_range 设为 本地主机 因此它们不会相互通信。当您想将 RViz 连接到其中一个时,只需将其地址添加到 ros_static_peers(静态同伴 在您的终端中。现在,您可以使用 ROS 2 CLI 和可视化工具与机器人进行交互。

参见 https://github.com/ros2/ros2/issues/1359 了解有关此功能的更多信息。

匹配事件

除 QoS 事件外,任何发布者和订阅建立或中断连接时都会产生匹配事件。用户可以为每个发布者和订阅提供由匹配事件触发的回调函数,并以自己认为合适的方式处理这些事件,这与处理在主题上收到的消息的方式类似。

  • 发布者:当找到与主题匹配且具有兼容 QoS 的订阅,或者已连接的订阅断开连接时,就会发生该事件。

  • 订阅:当找到与主题匹配且具有兼容 QoS 的发布者或已连接的发布者断开连接时,就会发生该事件。

请在以下网址查看跟踪问题 https://github.com/ros2/rmw/issues/330 了解更多信息。

记录仪的外部配置服务

现在可以通过服务远程配置节点记录仪级别。当 启用日志服务 选项在创建节点时启用,则 设置记录仪级别get_logger_levels 将提供服务。

请注意 启用日志服务 选项默认为禁用,因此用户需要在创建节点时启用该选项。

参见 https://github.com/ros2/ros2/issues/1355 了解更多信息。

类型 说明 分配

现在可以交流 ROS 2 消息类型的相关信息,以便同名不同类型的系统可以更透明地发现它们之间的兼容性。这个能力伞由 REP-2011 的一个子集定义:不断发展的消息类型》的一个子集所定义的。

首先,引入新的一揽子计划 类型描述接口 为 ROS 2 通信接口类型(msg、srv、action)的描述提供了一种通用的通信方式。

接下来,我们确定了一种对类型描述进行散列的方法,即 ROS 接口散列标准(RIHS)--从第一个版本 RIHS01 开始。RIHS 哈希值会在构建时自动计算所有已编译 ROS 类型的哈希值,并将其植入生成的代码中,以便检查。这些哈希值也会在发现过程中自动传达,并包含在 rmw_topic_endpoint_info_t 用于图反省查询,例如 按主题获取出版商信息.

全文 类型描述 数据结构,以及原始源文本(例如 .msg 文件),现在默认情况下,它们已被嵌入到消息库中,因此可以被 类型支持 或最终用户。虽然我们希望这些数据能为大多数用户提供价值,但一些用户为了尽量减少安装空间中的字节数,可以在构建 ROS 2 Core 时通过定义 CMake 变量来禁用该功能。 ROSIDL_GENERATOR_C_DISABLE_TYPE_DESCRATION_CODEGEN.

最后,新服务 type_description_interfaces/GetTypeDescription.srv 已被定义为允许节点在遇到未知的 RIHS 类型哈希时,向宣传该类型的节点请求完整的定义。目前正在努力在 ROS 2 节点中提供这一功能,作为节点构建时的一个可选开关。该功能尚未发布,但预计会在 2023 年中期的某个时候移植到 Iron 中。与此同时,用户节点可以使用稳定的服务接口独立实现这项服务。

参见 REP 2011 设计方案。参见 类型 说明 分配 用于跟踪功能集的开发。

动态类型和动态信息

除了上述类型描述分布功能外,还能在运行时构建和访问动态创建的类型(即动态类型)。这一功能在 Iron for Fast DDS 和 rcl新的 rmw 支持将信息作为动态信息(即由动态类型结构构建或遵循动态类型结构的信息)的接口。

首先,公用事业被引入 rosidl 来帮助构建和处理类型描述。

接下来是 动态类型支持 软件包提供了一个与中间件无关的接口,用于在运行时构建动态类型和动态消息。类型可以在运行时以编程方式构建,也可以通过解析一个 type_description_interfaces/TypeDescription 留言

备注

"(《世界人权宣言》) 动态类型支持 该库需要序列化支持库来实现特定于中间件的动态类型行为。快速 DDS 的序列化支持库在 rosidl_dynamic_typesupport_fastrtps.理想情况下,更多的中间件将实施支持库,从而增加支持该功能的中间件数量。

最后,为了支持动态类型和动态信息的使用,在 rmwrcl 支持:

  • 获得特定于中间件的序列化支持的能力

  • 能够在运行时构建使用动态类型的报文类型支持

  • 使用动态类型获取动态信息的能力

在客户端库中使用动态类型创建订阅的工作正在进行中(请参阅 rclcpp 问题),但目前还不确定该功能何时上线或被移植。这将允许用户订阅类型描述只有在运行时才知道的主题。在此期间,用户可以使用新的 rmwrcl 作为该功能集的一部分引入的功能。

参见 REP 2011 设计方案。参见 动态订阅 用于跟踪功能集的开发情况,其中包括 rclcpp 需要完成大部分工作。

启动

PythonExpression 现在支持导入模块

现在可以发射 PythonExpression 导入模块。这对于在评估表达式时调入附加功能非常有用。

参见 https://github.com/ros2/launch/pull/655 了解更多信息。

准备测试 可以从事件处理程序中调用

现在可以注册一个使用 准备测试 在其输出中。这对于在允许测试运行前下载资产等操作非常有用。

参见 https://github.com/ros2/launch/pull/665 了解更多信息。

增加 任意替换全部替换

现在可以指定当任何输入参数为真时发生的替换 (任意替换),或者当所有输入参数都为真时 (全部替换).

参见 https://github.com/ros2/launch/pull/649 了解更多详情。

添加新的替换,以获取启动日志目录

现在可以使用名为 启动日志目录 来获取当前的日志目录,以便启动。

参见 https://github.com/ros2/launch/pull/652 了解更多详情。

发射

添加一个 生命周期过渡 行动

现在可以通过新的 生命周期过渡 行动。

参见 https://github.com/ros2/launch_ros/pull/317 了解更多信息。

添加一个 设置 ROSLogDir 行动

现在可以通过 设置 ROSLogDir 行动。

参见 https://github.com/ros2/launch_ros/pull/325 了解更多信息。

能够为 可组合节点

现在可以指定一个必须满足的条件,以使 可组合节点 插入容器中。

参见 https://github.com/ros2/launch_ros/pull/311 了解更多信息。

启动测试

现在可配置进程启动超时

在此版本发布之前, 准备测试 该操作会等待 15 秒,直到进程启动。如果进程启动时间超过 15 秒,就会失败。现在有了一个新的装饰器,名为 ready_to_test_action_timeout 允许用户配置进程启动的等待时间。

参见 https://github.com/ros2/launch/pull/625 了解更多信息。

rclcpp

增加新的处理模式 节点生命周期节点

"(《世界人权宣言》) 节点生命周期节点 类是相关的,因为它们都提供了相同的基本方法集(尽管 生命周期节点 还提供了其他方法)。出于各种实现上的考虑,它们并不是从一个共同的基类派生出来的。

这给希望接受 节点生命周期节点.一种解决方案是使用两个方法签名,一个接受 节点 和一个接受 生命周期节点.另一种建议的解决方案是使用一种方法来接受 "节点接口 "指针,这种指针可以从两个类中访问,例如

空白 do_thing(rclcpp::节点接口::节点图接口 示意图)
{
  fprintf(stderr, 做一件事\n";);
}

空白 do_thing(rclcpp::节点::SharedPtr 网站)
{
  do_thing(网站->;获取节点图接口());
}

空白 do_thing(rclcpp::生命周期节点::SharedPtr 网站)
{
  do_thing(网站->;获取节点图接口());
}

这种方法是可行的,但当需要许多节点接口时,就会变得有点臃肿。为了更好地解决这个问题,现在有了一个新的 节点接口 类,该类可被构建为包含接口,然后被其他代码使用。

https://github.com/ros2/rclcpp/pull/2041.

引入新的执行器类型:事件执行器

"(《世界人权宣言》) 事件执行器 已被并入主要的 rclcpp 代码库。这种替代执行器实现使用中间件实现的事件驱动回调,在 rclcpp 层。除了基于推送的模式, 事件执行器 还将定时器管理转移到一个单独的线程中,这样可以获得更准确的结果,并降低开销,尤其是在有很多定时器的情况下。

"(《世界人权宣言》) 事件执行器 有大量的文献资料和实际使用情况,使其成为被纳入 rclcpp 代码库。有关初步实施方案和性能基准的信息,请参见 https://discourse.ros.org/t/ros2-middleware-change-proposal/15863.有关设计的更多信息,请参阅设计公关: https://github.com/ros2/design/pull/305.

由于应用程序接口是相同的,因此尝试 事件执行器 就像替换您当前的 Executor 实现(例如 单线程执行器):

#include <rclcpp/experimental/executors/events_executor/events_executor.hpp>;
使用 rclcpp::试验性::执行人::事件执行器;

事件执行器 执行人;
执行人.添加节点(网站);
执行人.后旋();

备注 "(《世界人权宣言》) 事件执行器计时器管理器 目前正处于 试验性 命名空间。虽然它作为独立的实现已经使用了一段时间 https://github.com/irobot-ros/events-executor因此,决定使用 试验性 至少一个版本的命名空间,以便在该版本中更改 API。请谨慎使用,因为它不会像非实验代码那样受到 API/ABI 的保证。

rclpy

等待另一个节点加入图的功能

现在,我们可以用下面的代码等待另一个节点加入网络图:

网站.等待节点('/fully_qualified_node_name';)

参见 https://github.com/ros2/rclpy/pull/930 了解更多信息。

实施 AsyncParameterClient

rclpy 现在有了 AsyncParameterClient 类,使其功能与 rclcpp.该类用于在远程节点上执行参数操作,而不会阻塞调用节点。

参见 https://github.com/ros2/rclpy/pull/959 获取更多信息和示例。

订阅回调现在可以选择性地获取消息信息

现在可以使用同时接收消息和消息信息的函数签名注册订阅回调,例如

捍卫 msg_info_cb(信息, msg_info):
    打印('留言信息:';, msg_info)

网站.创建订阅(msg_type=std_msgs.信息.字符串, 主题='/chatter';, qos_profile=10, 回调=msg_info_cb)

消息信息结构包含各种信息,如消息的序列号、源时间戳和接收时间戳,以及发布者的 GID。

参见 https://github.com/ros2/rclpy/pull/922 了解更多信息。

隐藏信息类断言的可选参数

所有消息类现在都包含一个新的可选参数,允许隐藏消息中每个字段类型的断言。默认情况下,断言是隐藏的,这样可以提高运行时的性能。为了在开发/调试时启用断言,有两种选择:

  1. 定义环境变量 ros_python_check_fields'1' (这会影响项目中的所有信息):

舶来品 os
 std_msgs.msg 舶来品 字符串

os.环境['ros_python_check_fields';] = '1'
新消息=字符串()
  1. 通过在构造函数中明确定义新参数,为单条消息选择特定行为:

 std_msgs.msg 舶来品 字符串

新消息=字符串(检查字段=正确)

参见 https://github.com/ros2/rosidl_python/pull/194 了解更多信息。

ros2param

等待节点时超时的选项。 玫瑰2 停止

现在可以将各种 玫瑰2 停止 命令超时,通过传递 -超时 的命令。

参见 https://github.com/ros2/ros2cli/pull/802 了解更多信息。

删除了过时的选项

--输出--目录--打印 选项 转储 命令已被删除。

参见 https://github.com/ros2/ros2cli/pull/824 了解更多信息。

ros2topic

现在 作为 内置接口 msg.Time汽车 对于 std_msgs.msg.Header

玫瑰2 主题 酒吧 现在可以设置 内置接口 msg.Time 通过 现在 关键词。同样,一个 std_msg.msg.Header 的关键字时,将自动生成消息。 汽车.这一行为与 ROS 1 的行为相吻合。 游标 (http://wiki.ros.org/ROS/YAMLCommandLine#Headers.2Ftimestamps)

相关公关: ros2/ros2cli#749

玫瑰2 主题 酒吧 可配置为等待最长时间

命令 玫瑰2 主题 酒吧 -w 1 在发布信息前至少会等待该数量的订阅者。此版本增加了 --最大等待时间 选项,这样如果没有用户出现,命令在退出前只会等待最长时间。

参见 https://github.com/ros2/ros2cli/pull/800 了解更多信息。

玫瑰2 主题 回响 可配置为等待最长时间

命令 玫瑰2 主题 回响 现在接受 -超时 选项,用于控制命令等待发布的最长时间。

参见 https://github.com/ros2/ros2cli/pull/792 了解更多信息。

已删除过时的选项

--丢失的信息 选项 回响 命令已被删除。

参见 https://github.com/ros2/ros2cli/pull/824 了解更多信息。

自《谦卑》发布以来的变化

更改默认的控制台日志文件刷新行为

这特别适用于默认 spdlog ROS 2 中基于日志的后端,在 rcl_logging_spdlog.日志文件刷新改为每次使用 "错误 "日志信息时刷新,例如每次 RCLCPP_ERROR() 呼叫,也会定期每五秒呼叫一次。

前情提要 spdlog 除了创建记录到文件的汇之外,没有进行任何配置。

我们对这一改动进行了测试,没有发现对 CPU 有明显的影响,即使在磁盘速度较慢的机器上(如 SD 卡)也是如此。不过,如果这一更改给您带来了问题,您可以通过设置 rcl_logging_spdlog_experimental_old_flushing_behavior=1 环境变量。

稍后,我们希望能支持完整的配置文件(见: https://github.com/ros2/rcl_logging/issues/92),使记录方式更加灵活,但这只是目前计划中的工作。

因此 该环境变量应被视为试验性变量,将来可能被删除而不会被弃用。当我们为 rcl_logging_spdlog 日志记录后台。

有关更改的更多详情,请参阅此拉取请求: https://github.com/ros2/rcl_logging/pull/95

ament_cmake_auto

包含的依赖项现在标记为 SYSTEM

使用时 自动添加可执行文件ament_auto_add_library现在,依赖项会自动添加为 系统.这意味着不会报告依赖程序头文件中的警告。

参见 https://github.com/ament/ament_cmake/pull/385 了解更多详情。

ament_cmake_nose

软件包已被弃用并移除

蟒蛇 鼻子 软件包早已弃用。由于目前发布到 Humble 或 Rolling 中的开源软件包都不依赖于该软件包,因此本版本将废弃并移除围绕该软件包的 ament 封装。

参见 https://github.com/ament/ament_cmake/pull/415 了解更多信息。

ament_lint

可将文件排除在筛选器检查之外

现在可以通过设置 自动排除文件 CMake 变量之前调用 ament_lint_auto_find_test_dependencies.

参见 https://github.com/ament/ament_lint/pull/386 了解更多信息。

摄像机信息管理

生命周期节点支持

摄像机信息管理 现在,除了常规的 ROS 2 节点外,它还支持生命周期节点。

参见 https://github.com/ros-perception/image_common/pull/190 了解更多信息。

启动

启动配置等于启动配置不等于 被弃用

"(《世界人权宣言》) 启动配置等于启动配置不等于 条件已被弃用,并将在未来的版本中删除。取而代之的是更通用的 等于不等于 而应使用替代品。

参见 https://github.com/ros2/launch/pull/649 了解更多详情。

发射

重新命名了使用 罗斯 在名称中使用 ROS 符合 PEP8

被更改的班级:

  • launch_ros.actions.RosTimer ->; launch_ros.actions.ROSTimer

  • launch_ros.actions.PushRosNamespace ->; launch.actions.PushROSNamespace

旧的类名仍然存在,但将被废弃。

参见 https://github.com/ros2/launch_ros/pull/326 了解更多信息。

launch_xml

曝光 仿真类型 到 XML 前端

在多个版本中,都可以使用 启动 Python 代码使用伪终端来模拟 TTY(从而实现打印颜色等功能)。现在,通过传递 仿真类型 参数的可执行命令。

参见 https://github.com/ros2/launch/pull/669 了解更多信息。

曝光 sigterm_timeoutsigkill_timeout 到 XML 前端

在多个版本中,都可以在 启动 Python 代码。现在,通过传递 sigterm_timeoutsigkill_timeout 参数的可执行命令。

参见 https://github.com/ros2/launch/pull/667 了解更多信息。

launch_yaml

曝光 仿真类型 到 YAML 前端

在多个版本中,都可以使用 启动 Python 代码使用伪终端来模拟 TTY(从而实现打印颜色等功能)。现在,通过传递 仿真类型 参数的可执行命令。

参见 https://github.com/ros2/launch/pull/669 了解更多信息。

曝光 sigterm_timeoutsigkill_timeout 到 YAML 前端

在多个版本中,都可以在 启动 Python 代码。现在,通过传递 sigterm_timeoutsigkill_timeout 参数的可执行命令。

参见 https://github.com/ros2/launch/pull/667 了解更多信息。

消息过滤器

新的大约时间政策

添加一个更简单的近似时间政策,称为 近似ε时间.该时间政策的工作原理如下 精确时间但允许时间戳在ε公差范围内。参见 https://github.com/ros2/message_filters/pull/84 了解更多信息。

新的上采样时间政策

添加名为 最新时间.它可以通过零阶保持,以上采样率同步多达 9 个报文。参见 https://github.com/ros2/message_filters/pull/73 了解更多信息。

rcl_yaml_param_parser

支持 YAML str 参数文件中的语法

现在可以使用 YAML 命令强制 ROS 参数文件解析器将字段解释为字符串 str 句法。参见 https://github.com/ros2/rcl/pull/999 了解更多信息。

rclcpp

更改了多线程执行器的默认线程数

如果用户没有另行指定,多线程执行器的默认线程数将设置为机器上的 CPU 数量。如果底层操作系统不支持获取该信息,则会设置为 2。

参见 https://github.com/ros2/rclcpp/pull/2032 了解更多信息。

当指定 KEEP_LAST 的 QoS 深度为 0 时,现在会打印警告信息

指定深度为 0 的 KEEP_LAST QoS 是一种毫无意义的安排,因为实体将无法发送或接收任何数据。 rclcpp 现在,如果指定了这种组合,将打印警告,但仍会继续运行,并让底层中间件选择一个合理的值(通常深度为 1)。

参见 https://github.com/ros2/rclcpp/pull/2048 了解更多信息。

已停用 rclcpp_scope_exit 宏被删除

在谦卑,宏观 rclcpp_scope_exit 已被弃用,取而代之的是 rcpputils_scope_exit.铁 rclcpp_scope_exit 宏已被完全删除。

rclpy

更改了多线程执行器的默认线程数

如果用户没有另行指定,多线程执行器的默认线程数将设置为机器上的 CPU 数量。如果底层操作系统不支持获取该信息,则会设置为 2。

参见 https://github.com/ros2/rclpy/pull/1031 了解更多信息。

当指定 KEEP_LAST 的 QoS 深度为 0 时,现在会打印警告信息

指定深度为 0 的 KEEP_LAST QoS 是一种毫无意义的安排,因为实体将无法发送或接收任何数据。 rclpy 现在,如果指定了这种组合,将打印警告,但仍会继续运行,并让底层中间件选择一个合理的值(通常深度为 1)。

参见 https://github.com/ros2/rclpy/pull/1048 了解更多信息。

时间和持续时间与其他类型相比不再引发异常

现在可以比较 rclpy.time.Timerclpy.duration.Duration 与其他类型进行比较而不会出现异常。如果类型不可比,比较会返回 假的.请注意,这是与之前版本相比的行为变化。

打印(  [rclpy.时间.时间(), rclpy.会期.持续时间()])  # 打印 "False" 而不是引发 TypeError

参见 https://github.com/ros2/rclpy/pull/1007 了解更多信息。

rcutils

提高信息记录的性能

时输出日志信息的代码。 RCUTILS_LOG_*RCLCPP_* 进行了优化,以减少开销。这些日志信息现在应该更有效率了,但仍然不应该被高速调用。参见 https://github.com/ros2/rcutils/pull/381, https://github.com/ros2/rcutils/pull/372, https://github.com/ros2/rcutils/pull/369https://github.com/ros2/rcutils/pull/367 了解更多信息。

已停用 rcutils/get_env.h 删除了页眉

在谦卑,标题 rcutils/get_env.h 已被弃用,取而代之的是 rcutils/env.h.铁 rcutils/get_env.h 完全清除。

rmw

将 GID 存储空间改为 16 字节

RMW 层中的 GID 是 ROS 图中写入器的全局唯一标识符。以前,由于旧 RMW 实现中的一个错误,GID 被错误地设置为 24 字节。但是 rmw 包应对此进行定义,所有实现都应符合这一定义。因此,本版本将其定义为 16 字节(DDS 标准),并修改所有实现以使用该定义。

参见 https://github.com/ros2/rmw/pull/345 和(已关闭但相关的) https://github.com/ros2/rmw/pull/328 了解更多信息。

rmw_dds_common

将 GID 存储空间改为 16 字节

随着 rmw 层,将发送 GID 信息的报文改为 16 字节。

参见 https://github.com/ros2/rmw_dds_common/pull/68 了解更多信息。

ros2topic

玫瑰2 主题 hz/bw/pub 肃然起敬 使用模拟时间

在模拟环境中运行时,ROS 2 生态系统通常从一个 /时钟 而不是使用系统时钟)。ROS 2 节点通常会通过设置 使用模拟时间 参数的节点。通过 玫瑰2 主题 指令 赫兹, bw酒吧 现在将尊重该参数,并酌情使用模拟时间。

参见 https://github.com/ros2/ros2cli/pull/754 了解更多信息。

rosbag2

将默认袋文件类型更改为 mcap

在此版本发布之前,rosbag2 默认将数据记录到 sqlite3 数据库中。在测试过程中,我们发现在很多情况下,这样做的性能不够好,而且缺乏某些离线处理所需的功能。

为了满足这些需求,我们采用了一种新的软件包格式(受原始 ROS 1 软件包文件格式的影响),称为 mcap 开发出来的。这种包文件格式具有 sqlite3 文件格式所缺失的许多功能,而且性能应该更好。

此版本改用 mcap 作为编写新文件袋的默认文件格式。旧的 sqlite3 文件格式仍然可用,用户可根据需要选择文件格式进行写入。此版本还可以播放来自 sqlite3 文件格式或 mcap 文件格式。

参见 https://github.com/ros2/rosbag2/pull/1160 了解更多信息。

使用 SQLite3 插件将消息定义存储在袋文件中

现在,我们支持将信息定义保存到 sqlite3 数据库文件的格式与我们将其保存到 mcap 文件。这就为第三方工具提供了一个机会,它们可以在解码 bag 文件的机器上没有所有原始 .msg 文件的正确版本的情况下,反序列化 rosbag2 文件。 sqlite3 插件。

参见 https://github.com/ros2/rosbag2/issues/782https://github.com/ros2/rosbag2/pull/1293 了解更多信息。

新的回放和录制控制

为加强用户对音袋回放的控制,我们添加了几个拉动请求。拉动请求 960 增加了在指定秒数内播放包的功能。拉取请求 1005 允许在指定的时间戳前播放包。另一个拉取请求 1007 添加了通过服务调用远程停止播放的功能。如果播放器处于暂停模式,Stop 将取消暂停;如果播放器正在播放,Stop 将停止播放并强制退出 play() 方法。

通过服务呼叫管理记录

新增了从远程节点控制录制过程的选项。拉取请求 1131 添加了通过服务调用暂停和恢复录制的功能。另一个拉取请求 1115 增加了通过发送服务呼叫在录制过程中拆包的功能。

在播放过程中通过正则表达式过滤主题

用户有时只需要重放录制袋中的部分主题,以下两个请求将增加这种功能。拉取请求 1034 增加了一个新选项 --topics-regex 允许通过正则表达式过滤主题。该 --topics-regex 选项接受多个用空格分隔的正则表达式。拉取请求 1046 中提供正则表达式,从而排除某些主题的重播。 --排除 (和 -x) 选项。

允许插件注册自己的 CLI verb 参数

拉取请求 1209 增加了 rosbag2 插件注册一个可选的 Python 入口点,提供特定于插件的 CLI 参数值。因此,命令行选项 --存储预设配置文件 对于 玫瑰2 背包 记录 根据底层存储插件的不同,verb 会有不同的有效选项。

其他变动

拉动请求 1038 添加了在 metadata.yaml 文件的 "自定义 "字段中记录任意键/值对的功能。当用户需要保存某些硬件的特定 id 或捕获记录的坐标时,这将非常有用。拉取请求 1180 添加了一个选项,可通过提供新的命令行来更改记录器的底层节点名称 --节点名 选项。该选项可用于使用多个 rosbag2 录音机实例创建远程分布式录音。它能向专用的 rosbag2 录音机实例发送服务调用,以管理录音过程。

rosidl_python

修改 __插槽__ 特质

到目前为止,属性 __插槽__ 已被用作包含消息字段名称的成员。在 Iron 中,该属性不再只包含消息结构中的字段名,而是包含所有类成员的字段名。因此,用户不应依赖该属性来获取字段名信息,而应使用方法 get_field_and_field_types().

参见 https://github.com/ros2/rosidl_python/pull/194 了解更多信息。

rviz

地图显示现在可显示为二进制

RViz 地图显示屏现在可以显示二进制地图,并可设置阈值。在某些情况下,这对于检查地图或与具有可设置阈值的规划器结合使用非常有用。

参见 https://github.com/ros2/rviz/pull/846 了解更多信息。

相机显示插件尊重 CameraInfo 信息中的 ROI

如果 CameraInfo 信息中提供了感兴趣区域 (ROI) 设置,CameraDisplay 插件现在也会尊重该设置。这会考虑到相机驱动程序为减少带宽而对图像进行裁剪的情况。

参见 https://github.com/ros2/rviz/pull/864 了解更多信息。

SOLIDWORKS 的二进制 STL 文件工作无误

对 STL 加载器进行了修改,使其可以接受 SOLIDWORKS 中含有 "solid "字样的二进制 STL 文件。从技术上讲,这违反了 STL 规范,但这种情况非常普遍,因此添加了一个特殊情况来处理这些文件。

参见 https://github.com/ros2/rviz/pull/917 了解更多信息。

tracetools

现在,Linux 系统默认包含跟踪工具

ROS 2 内核使用跟踪工具已有一段时间了。不过,它是默认编译出来的。要获得跟踪工具,必须在从源代码重建 ROS 2 之前手动安装 LTTng 跟踪器。在 Iron 中,默认情况下包含了跟踪工具和跟踪点;因此 LTTng 跟踪器现在是 ROS 2 的一个依赖项。

请注意,这只适用于 Linux。

参见 https://github.com/ros2/ros2_tracing/pull/31https://github.com/ros2/ros2/issues/1177 了解更多信息。参见 本操作指南可移除乐器(或使用 Humble 及更高版本添加乐器).

新轨迹点 rclcpp 进程内增加

添加了新的跟踪点,以支持 rclcpp 进程内通信。这样就可以评估进程内通信中从信息发布到回调启动之间的时间。

参见 https://github.com/ros2/ros2_tracing/pull/30https://github.com/ros2/rclcpp/pull/2091 了解更多信息。

已知问题

  • rmw_connextdds 不适用于 Windows 二进制发布包。RTI 不再分发 RTI ConnextDDS 6.0.1 的二进制文件。取而代之的是 RTI ConnextDDS 6.1.0 的 ABI 与生成的二进制文件不兼容。解决办法是依靠 ROS 2 的源代码构建和 rmw_connextdds 在 Windows 上。

  • sros2 要求用户降级 加密 python 模块到 加密==38.0.4 如前所述 这里.

  • ros1_桥 的 ROS Noetic 软件包不工作。 上游乌班图.建议的解决方法是从源代码构建 ROS Noetic,然后构建 ros1_桥 使用它。

发布时间表

2022 年 11 月 - 平台决定

REP 2000 已根据目标平台和主要依赖版本进行了更新。

到 2023 年 1 月 - 滚动平台转移

使用新的平台版本和 Iron Irwini 的依赖版本更新构建农场(如有必要)。

周一2023 年 4 月 10 日 - 阿尔法 + RMW 冻结

初步测试和稳定 ROS 基地 [1] 以及 RMW 提供商软件包的 API 和功能冻结。

周一2023 年 4 月 17 日 - 冻结

冻结 ROS Base 的应用程序接口和功能 [1] 软件包。在此之后,只能发布错误修复版本。新软件包可以独立发布。

周一2023 年 4 月 24 日 - 分部

滚雷德利的分支。 rosdistro 重新开放 ROS Base 的滚动 PR [1] 包。铁的发展从 滚动* 包到 玫红-铁* 打包。

周一2023 年 5 月 1 日 - 测试版

ROS 桌面更新版本 [2] 可提供套餐。一般测试请致电。

周一2023 年 5 月 15 日 - 候选发布版本

构建候选发布版软件包。ROS 桌面的更新版本 [2] 可提供的套餐。

星期四2023 年 5 月 18 日 - 分配器冻结

Freeze rosdistro.熨斗上没有 PR rosdistro 将被合并(发布公告后重新开放)。

星期二2023 年 5 月 23 日 - 全面开放

发布公告。 rosdistro 重新开放供铁 PR 使用。

发展进度

有关 Iron Irwini 的开发和发布进展情况,请参阅 跟踪 GitHub 问题.

关于 Iron Irwini 所遵循的大致流程,请参见 流程描述页面.