警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
铁尔维尼 (烙铁
)
铁尔维尼 以下是 Iron Irwini 自上次发布以来的重要变化和功能亮点。有关自 Humble 发布以来的所有变化,请参阅 长篇更新日志.
支持的平台
Iron Irwini 主要支持以下平台:
1 级平台:
Ubuntu 22.04 (Jammy):
amd64
和arm64
Windows 10 (Visual Studio 2019):
amd64
二级平台:
RHEL 9:
amd64
三级平台:
macOS
amd64
Debian Bullseye:
amd64
有关 RMW 实现、编译器/解释器版本和系统依赖性版本的更多信息,请参见 REP 2000.
安装
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/51和 https://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/966和 https://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 中。与此同时,用户节点可以使用稳定的服务接口独立实现这项服务。
动态类型和动态信息
除了上述类型描述分布功能外,还能在运行时构建和访问动态创建的类型(即动态类型)。这一功能在 Iron for Fast DDS 和 rcl
新的 rmw
支持将信息作为动态信息(即由动态类型结构构建或遵循动态类型结构的信息)的接口。
首先,公用事业被引入 rosidl 来帮助构建和处理类型描述。
接下来是 动态类型支持 软件包提供了一个与中间件无关的接口,用于在运行时构建动态类型和动态消息。类型可以在运行时以编程方式构建,也可以通过解析一个 type_description_interfaces/TypeDescription
留言
备注
"(《世界人权宣言》) 动态类型支持
该库需要序列化支持库来实现特定于中间件的动态类型行为。快速 DDS 的序列化支持库在 rosidl_dynamic_typesupport_fastrtps.理想情况下,更多的中间件将实施支持库,从而增加支持该功能的中间件数量。
最后,为了支持动态类型和动态信息的使用,在 rmw 和 rcl 支持:
获得特定于中间件的序列化支持的能力
能够在运行时构建使用动态类型的报文类型支持
使用动态类型获取动态信息的能力
在客户端库中使用动态类型创建订阅的工作正在进行中(请参阅 rclcpp
问题),但目前还不确定该功能何时上线或被移植。这将允许用户订阅类型描述只有在运行时才知道的主题。在此期间,用户可以使用新的 rmw
和 rcl
作为该功能集的一部分引入的功能。
参见 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(网站->;获取节点图接口());
}
这种方法是可行的,但当需要许多节点接口时,就会变得有点臃肿。为了更好地解决这个问题,现在有了一个新的 节点接口
类,该类可被构建为包含接口,然后被其他代码使用。
引入新的执行器类型:事件执行器
"(《世界人权宣言》) 事件执行器
已被并入主要的 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 了解更多信息。
隐藏信息类断言的可选参数
所有消息类现在都包含一个新的可选参数,允许隐藏消息中每个字段类型的断言。默认情况下,断言是隐藏的,这样可以提高运行时的性能。为了在开发/调试时启用断言,有两种选择:
定义环境变量
ros_python_check_fields
至'1'
(这会影响项目中的所有信息):
舶来品 os
从 std_msgs.msg 舶来品 字符串
os.环境['ros_python_check_fields';] = '1'
新消息=字符串()
通过在构造函数中明确定义新参数,为单条消息选择特定行为:
从 std_msgs.msg 舶来品 字符串
新消息=字符串(检查字段=正确)
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
现在,依赖项会自动添加为 系统
.这意味着不会报告依赖程序头文件中的警告。
ament_cmake_nose
软件包已被弃用并移除
蟒蛇 鼻子
软件包早已弃用。由于目前发布到 Humble 或 Rolling 中的开源软件包都不依赖于该软件包,因此本版本将废弃并移除围绕该软件包的 ament 封装。
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_timeout
和 sigkill_timeout
到 XML 前端
在多个版本中,都可以在 启动
Python 代码。现在,通过传递 sigterm_timeout
或 sigkill_timeout
参数的可执行命令。
参见 https://github.com/ros2/launch/pull/667 了解更多信息。
launch_yaml
曝光 仿真类型
到 YAML 前端
在多个版本中,都可以使用 启动
Python 代码使用伪终端来模拟 TTY(从而实现打印颜色等功能)。现在,通过传递 仿真类型
参数的可执行命令。
参见 https://github.com/ros2/launch/pull/669 了解更多信息。
曝光 sigterm_timeout
和 sigkill_timeout
到 YAML 前端
在多个版本中,都可以在 启动
Python 代码。现在,通过传递 sigterm_timeout
或 sigkill_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.Time
和 rclpy.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/369和 https://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 字节。
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/782 和 https://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()
.
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/31 和 https://github.com/ros2/ros2/issues/1177 了解更多信息。参见 本操作指南可移除乐器(或使用 Humble 及更高版本添加乐器).
新轨迹点 rclcpp
进程内增加
添加了新的跟踪点,以支持 rclcpp
进程内通信。这样就可以评估进程内通信中从信息发布到回调启动之间的时间。
参见 https://github.com/ros2/ros2_tracing/pull/30 和 https://github.com/ros2/rclcpp/pull/2091 了解更多信息。
已知问题
发布时间表
- 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 所遵循的大致流程,请参见 流程描述页面.