谦卑玳瑁 (简陋
)
谦卑的鹰嘴鹦鹉 以下是 Humble Hawksbill 自上次发布以来的重要变化和功能亮点。有关自银河系以来的所有变化,请参阅 长篇更新日志.
支持的平台
Humble Hawksbill 主要支持以下平台:
1 级平台:
Ubuntu 22.04 (Jammy):
amd64
和arm64
Windows 10 (Visual Studio 2019):
amd64
二级平台:
RHEL 8:
amd64
三级平台:
Ubuntu 20.04 (Focal):
amd64
macOS
amd64
Debian Bullseye:
amd64
有关 RMW 实现、编译器/解释器版本和系统依赖性版本的更多信息,请参见 REP 2000.
安装
第 1 版补丁中的更改(2022-11-23)
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#751
ROS 2 发布的新功能
ament_cmake_gen_version_h
生成包含版本信息的 C/C++ 头文件
新增了 CMake 函数,用于生成包含软件包版本信息的头文件。 ament_cmake_gen_version_h
于 ament/ament_cmake#377.下面是最简单的使用案例:
项目(我的项目)
add_library(my_lib ...)
ament_generate_version_header(my_lib)
它会从 package.xml
并将其提供给链接到 my_lib
图书馆
如何包含页眉:
#include <my_project/version.h>;
集管的安装位置:
设置(版本标头 ${cmake_install_prefix}/include/my_project/my_project/version.h)
启动
在分组操作中界定环境变量的范围
与启动配置类似,现在默认情况下,环境变量的状态也适用于组操作。
例如,在以下启动文件中,执行的进程将回显以下值 1
(在 "谦卑 "之前,它将呼应 2
):
启动>;
<set_env 名称"FOO"; value=1"; />;
组>;
<set_env 名称"FOO"; value="2"; />;
</group>;
可执行 cmd="echo $FOO"; 输出="屏幕"; 壳="true"; />;
</launch>;
舶来品 启动
舶来品 launch.actions
捍卫 生成发射描述():
返回 启动.启动说明([
启动.行动.设置环境变量(名字='FOO';, 价值='1'),
启动.行动.群组行动([
启动.行动.设置环境变量(名字='FOO';, 价值='2'),
]),
启动.行动.执行进程(cmd=['echo';, '$FOO';], 产量='屏幕';, 外壳=正确),
])
如果想禁用启动配置和环境变量的范围界定,可以设置 瞄准
参数(或属性)为 false。
相关公关: ros2/launch#601
启动_pytest
我们新增了一个软件包、 启动_pytest
作为 启动测试
.
启动_pytest
是一个简单的 pytest 插件,它提供 pytest 固件来管理启动服务的生命周期。
相关公关: ros2/launch#528
允许使用可调用的
使用目标动作对象进行匹配的事件处理程序现在也可以使用可调用对象进行匹配。
相关公关: ros2/launch#540
计算 Python 表达式时访问数学模块
内部 PythonExpression
替换 (评估
) 现在我们可以使用 Python 数学模块中的符号。例如
启动>;
<log message="$(eval 'ceil(pi)')"; />;
</launch>;
相关公关: ros2/launch#557
布尔替换
新的替换 不替代
, 和替代
和 或替换
提供了执行逻辑运算的便捷方法,例如
启动>;
让 名称"p"; value="true"; />;
让 名称"q"; value="false"; />;
组 如果="$(or $(var p) $(var q))";>;
<log message="第一个条件为真"; />;
</group>;
组 除非="$(and $(var p) $(var q))";>;
<log message="第二个条件为假"; />;
</group>;
组 如果="$(not $(var q))";>;
<log message="第三个条件为真"; />;
</group>;
</launch>;
相关公关: ros2/launch#598
新行动
附加环境变量
会将一个值追加到现有的环境变量中。相关公关: ros2/launch#543
重置启动配置
重置应用于启动配置的任何配置。相关公关: ros2/launch#515
发射
将 ROS 参数传递给节点操作
现在可以提供 ROS 特有的节点参数 无需使用 参数
领先 --ros-args
旗子
启动>;
节点 pkg="demo_nodes_cpp"; exec=健谈; ros_args="--log-level debug"; />;
</launch>;
启动:
- 网站:
包: 演示节点
执行: 话匣子
参数: '--log-level debug';
的相应参数 节点
在 Python 启动文件中的操作是 参数
:
从 启动 舶来品 启动说明
舶来品 launch_ros.actions
捍卫 生成发射描述():
返回 启动说明([
发射.行动.节点(
包装='demo_nodes_cpp',
可执行='talker';,
参数=['--log-level', 'debug';],
),
])
相关公关: ros2/launch_ros#249 和 ros2/launch_ros#253.
前端支持可组合节点
例如,我们现在可以启动节点容器,并从前端启动文件将组件加载到其中:
启动>;
node_container pkg="rclcpp_components"; exec="component_container"; 名称"my_container"; namespace="";>;
可组合节点 pkg=构成"; 插件="composition::Talker"; 名称健谈; />;
</node_container>;
<load_composable_node target="my_container";>;
可组合节点 pkg=构成"; 插件="composition::Listener"; 名称"listener"; />;
</load_compposable_node>;
</launch>;
启动:
- 节点容器:
包: rclcpp_components
执行: 组件容器
名字: 我的容器
命名空间: ''
可组合节点:
- 包: 构成
插头: 构成::谈话者
名字: 话匣子
- 加载可组合节点:
目标: 我的容器
可组合节点:
- 包: 构成
插头: composition::Listener
名字: 听众
相关公关: ros2/launch_ros#235
参数替换
新的 参数替换
可让您用 设置参数
行动。例如
启动>;
<set_parameter 名称"foo"; value="bar"; />;
<log message="参数 foo 的值为 $(param foo)"; />;
</launch>;
相关公关: ros2/launch_ros#297
新行动
RosTimer
就像发射计时器动作
但它使用的是 ROS 时钟(因此可以使用模拟时间)。从文件设置参数
将 ROS 参数文件传送给启动文件中的所有节点(包括节点组件)。
SROS2 安全飞地支持证书吊销列表
证书吊销列表(CRL)是一个可以在特定证书到期前将其吊销的概念。从 Humble 开始,现在可以将 CRL 放入 SROS2 安全飞地并使其生效。请参见 SROS2 教程 以了解如何使用它。
内容筛选主题
内容过滤主题支持更复杂的订阅,表明订阅者不一定希望看到在主题下发布的每个实例的所有值。当底层 RMW 实现支持该功能时,内容过滤主题可用于请求基于内容的订阅。
rmw_fastrtps |
支持 |
rmw_connextdds |
支持 |
rmw_cyclonedds |
不支持 |
要了解更多信息,请参阅 内容过滤 例子
相关设计公关: ros2/design#282.
ros2cli
玫瑰2 启动
有一个 --启动前缀
争论
这样就可以为启动文件中的所有可执行文件传递一个前缀,这在很多调试情况下都很有用。请参见相关的 拉取请求以及 教程 了解更多信息。
与此相关的是 --启动前缀过滤器
命令行选项,以选择性地从 --启动前缀
到可执行文件。参见 拉取请求 了解更多信息。
玫瑰2 主题 回响
有一个 --流程式
争论
这样,用户就可以强制 流动 风格
用于主题数据的 YAML 表示法。如果没有该选项,从 玫瑰2 主题 回响 /tf_static
可以是这样的
变换:
- 页眉:
盖章:
秒钟: 1651172841
纳米: 433705575
frame_id: 单_rrbot_link3
子帧标识: 单_rrbot_摄像机链接
变:
译文:
x: 0.05
y: 0.0
z: 0.9
自转:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
使用该选项后,输出结果将如下所示:
变换: [{页眉: {盖章: {秒钟: 1651172841, 纳米: 433705575}, frame_id: 单_rrbot_link3}, 子帧标识: 单_rrbot_摄像机链接, 变: {译文: {x: 0.05, y: 0.0, z: 0.9}, 自转: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}}]
参见 PyYAML 文档 了解更多信息。
玫瑰2 主题 回响
可根据信息内容过滤数据
这样,用户就可以只打印出符合特定 Python 表达式的主题数据。例如,使用以下参数将只打印以 "foo "开头的字符串信息:
玫瑰2 主题 回响 --过滤 'm.data.startswith("foo")` /chatter
参见 拉取请求 了解更多信息。
rviz2
为任意三角形列表应用纹理
我们增加了 使用 UV 坐标将通过 URI 定义的纹理应用到任意三角形列表的能力.现在,我们可以从纹理贴图而非默认灰度创建渐变。这样就可以对标记进行复杂的着色。要使用此功能,应使用 visualization_msgs/Marker.msg
并填充 纹理资源
, 理
, uv 坐标
和 网格文件
领域。更多信息 这里.

质量特性(包括惯性)可视化
我们还增加了可视化惯性的功能。为此,您可以在机器人模型下的 "质量属性 "中选择启用 "惯性":

下面是惯性的图像。

在 RViz 中可视化 YUV 图像
现在可以在 RViz 中直接可视化 YUV 图像,而不必先转换为 RGB。请参见 ros2/rviz#701 了解详情。
允许渲染 100 米范围内的物体
默认情况下,RViz 只渲染距离摄像头 100 米以内的对象。rviz 相机插件中新增了一个名为 "远平面距离 "的配置属性,允许对渲染距离进行配置。

参见 ros2/rviz#849 了解更多信息。
银河发布后的变化
C++ 头文件安装在子目录
在 Humble 之前的 ROS 2 版本中,所有软件包的 C++ 头文件都安装在一个 include 目录中。例如,在 Galactic 中,目录结构是这样的(为简洁起见缩小了):
/opt/ros/galactic/include/ ├── rcl │ ├─ node.h ├─ rclcpp │ ├─ node.hpp
这种结构会在尝试使用覆盖时造成严重问题。也就是说,很有可能因为包含目录的顺序而得到错误的头文件集。参见 https://colcon.readthedocs.io/en/released/user/overriding-packages.html 问题的详细解释。
为了解决这个问题,Humble(以及今后的所有 ROS 2 版本)的目录结构都发生了变化:
/opt/ros/humble/include ├─── rcl │ └─── rcl │ ├── node.h ├── rclcpp │ └─── rclcpp │ ├── node.hpp
请注意,使用这些标头的下游软件包将 不 必须改变;使用 #include <rclcpp/node.hpp>;
的工作方式一如既往。不过,在使用需要查找包含目录的集成开发环境时,可能需要将各个包含目录添加到搜索路径中。
参见 https://github.com/ros2/ros2/issues/1150 了解更多信息,包括这一变化背后的原因。
通用接口
支持标记信息的纹理和嵌入式网格
这两项新增功能将提高通过标准信息以新方式可视化数据的能力,同时还能在 rosbag 中跟踪这些数据。
纹理 为标记增添了三个新领域:
# 纹理资源是一种特殊的 URI,它既可以在以下文件中引用纹理文件
# 可接受的格式(资源检索器)[https://index.ros.org/p/resource_retriever/]
# 或通过符合格式的字符串嵌入纹理:
# "embedded://texture_name";
字符串 纹理资源
# 将作为此标记的纹理载入渲染引擎的图像。
# 如果 texture_resource 设置为 embedded,则将使用此值。
传感器_msgs/压缩图像 理
# 每个顶点在纹理中的位置;范围为[0.0-1.0]
UVC 坐标[] uv 坐标
RViz 将通过嵌入式格式完全支持纹理渲染。
对于那些熟悉 网格资源
, 资源回收器
应该很熟悉。程序员可以选择从本地文件或网络文件加载数据。为了能将所有数据都记录在rosbag中,我们还提供了嵌入纹理图像的功能。
网格 也做了类似的修改,增加了嵌入原始网格文件进行记录的功能。Meshfile 信息有两个字段:
# 文件名用于调试和提供文件扩展名
# 用于任何解析器。
字符串 文件名
# 这里存储的是网格文件的原始文本。
uint8[] 数据
嵌入式 网格文件
信息在实施中尚未得到支持。
已添加 PRISM
类型改为 SolidPrimitive
"(《世界人权宣言》) 固本培元
信息有了新的 PRISM
类型以及相应的元数据。参见 ros2/common_interfaces#167 了解更多信息。
rmw
结构
类型名称后缀从 _t
至 _s
为了避免在 结构
类型名称及其 类型化
在生成代码文件时,所有"-ed "别名的后缀都将是"-ed"。 结构
类型名称从 _t
至 _s
.别名 _t
后缀仍然保留。因此,这一修改仅对使用完整的 结构
类型说明符,即 结构 type_name_t
.
参见 ros2/rmw#313 了解更多详情。
rmw_connextdds
默认使用 Connext 6
默认情况下,Humble Hawksbill 将 Connext 6.0.1 用作 rmw_connextdds
.仍可使用 Connext 5.3.1 与 rmw_connextdds
但它必须从源头重建。
rcl
结构
类型名称后缀从 _t
至 _s
为了避免在 结构
类型名称及其 类型化
在生成代码文件时,所有"-ed "别名的后缀都将是"-ed"。 结构
类型名称从 _t
至 _s
.别名 _t
后缀仍然保留。因此,这一修改仅对使用完整的 结构
类型说明符,即 结构 type_name_t
.
参见 ROS2/RCL#932 了解更多详情。
添加了 ROS_DISABLE_LOANED_MESSAGES 环境变量
该环境变量可用于禁用对借出信息的支持,与 rmw 是否支持借出信息无关。更多详情,请参阅指南 配置零拷贝借出信息.
rclcpp
支持出版商和订阅的类型调整
定义了类型适配器后,发布者和订阅者可以直接使用自定义数据结构,这有助于避免程序员的额外工作和潜在错误源。这在处理复杂数据类型时尤其有用,例如在转换 OpenCV 的 cv::Mat
到 ROS 的 传感器_msgs/msg/图像
类型
下面是一个类型转换器的示例,它可以将 std_msgs::msg::String
至 std::string
:
模板<>;
结构 rclcpp::类型适配器<;
标准::字符串,
std_msgs::信息::字符串
>;
{
使用 is_specialized = 标准::true_type;
使用 自定义类型 = 标准::字符串;
使用 信息类型 = std_msgs::信息::字符串;
天电
空白
convert_too_ros_message(
缢 自定义类型 及样品; 消息来源,
信息类型 及样品; 目的地)
{
目的地.数据 = 消息来源;
}
天电
空白
convert_too_custom(
缢 信息类型 及样品; 消息来源,
自定义类型 及样品; 目的地)
{
目的地 = 消息来源.数据;
}
};
并举例说明如何使用类型适配器:
使用 我的适配类型 = 类型适配器<;标准::字符串, std_msgs::信息::字符串>;;
// 发布一个 std::string
汽车 酒吧 = 网站->;创建出版商<;我的适配类型>;(...);
标准::字符串 自定义消息 = "我的 std::字符串";
酒吧->;发布(自定义消息);
// 将一个 std::字符串传递给订阅回调
汽车 字幕 = 网站->;创建订阅<;我的适配类型>;(
"主题";,
10,
[](缢 标准::字符串 及样品; 信息) {...});
wait_for_all_acked
方法中添加了 出版商
这种新方法会阻塞,直到发布者队列中的所有信息都被匹配的订阅获取,或者指定的超时到期。它只对可靠的发布者有用,因为在尽力而为的 QoS 情况下,是不存在 "acking "的。示例
汽车 酒吧 = 网站->;创建出版商<;std_msgs::信息::字符串>;(...);
...
酒吧->;发布(my_msg);
...
酒吧->;wait_for_all_acked(); // 或 pub->wait_for_all_acked(timeout)
有关更完整的示例,请参阅 这里.
get_callback_groups
方法中删除了 节点库
和 节点
班级
for_each_callback_group()
方法取代了 get_callback_groups()
提供了一种线程安全的方式来访问 回调组
矢量
for_each_callback_group()
接受一个函数作为参数,遍历已存储的回调组,并对有效的回调组调用所传递的函数。
更多详情,请参阅 拉取请求.
add_too_wait_set
方法从 可等待
类的返回类型从 bool
至 空白
以前,从 可等待
覆盖 add_too_wait_set
在无法将元素添加到等待集时返回 false,因此调用者必须检查该返回值,并抛出或处理错误。现在,错误处理应直接在 add_too_wait_set
方法,必要时抛出。如果没有错误发生,则不需要返回任何内容。因此,这是对下游使用 可等待
.
参见 ros2/rclcpp#1612 了解更多详情。
获取通知保护条件
方法的返回类型 节点基础接口
班级变了
现在 rclcpp
使用 警卫条件
封装 rcl_guard_condition_t
所以 获取通知保护条件
返回节点的 rclcpp::GuardCondition
.因此,这是对沼气下游用途的一个突破性改变。 节点基础接口
和 节点库
.
参见 ros2/rclcpp#1612 了解更多详情。
sleep_until
和 sleep_for
方法添加到 时钟
添加了两个新方法,以便在 ros2/rclcpp#1814 和 ros2/rclcpp#1828.
时钟::sleep_until
会暂停当前线程,直到时钟到达特定时间。
时钟::sleep_for
将暂停当前线程,直到时钟从调用该方法时向前推进一定时间。如果 背景
关闭。
rclcpp_lifecycle
出版商的激活和停用转换将自动触发
以前,用户需要覆盖 LifecylceNode::on_activate()
和 LifecylceNode::on_deactivate()
并调用 生命周期出版商
以实现真正的过渡。现在 生命节点
提供了这些方法的默认接口,它们已经做到了这一点。请参见 生命周期对话者
网站 这里.
rclpy
管理节点
rclpy 添加了生命周期节点支持。完整演示如下 这里.
wait_for_all_acked
方法中添加了 出版商
与 rclcpp 中添加的功能类似。
sleep_until
和 sleep_for
方法添加到 时钟
添加了两个新方法,以便在 ros2/rclpy#858 和 ros2/rclpy#864.
sleep_until
会暂停当前线程,直到时钟到达特定时间。
sleep_for
将暂停当前线程,直到时钟从调用该方法时向前推进一定时间。如果 背景
关闭。
ros1_桥
由于在 Ubuntu Jammy 及以后的版本中没有 ROS 1 的官方发行版、 ros1_桥
现在与 Ubuntu 打包版本的 ROS 1 兼容。 ros1_桥
Jammy 套餐可在 操作指南.
ros2cli
玫瑰2
命令默认禁用输出缓冲
在此版本发布之前,运行类似于
玫瑰2 回响 /唠叨 | grep 你好;
在输出缓冲区满之前不会打印任何数据。用户可以通过设置 pythonunbuffered=1
但这对用户来说并不方便。
相反,所有 玫瑰2
命令现在默认进行行缓冲,因此像上面这样的命令在打印出换行符后立即生效。要禁用此行为并使用默认的 python 缓冲规则,可使用选项 --使用--python--默认缓冲
.参见 原问题 和 拉取请求 了解更多信息。
玫瑰2 主题 酒吧
时,将等待一个匹配的订阅。 --次/--一次/--1
使用时 --次/--一次/--1
国旗、 玫瑰2 主题 酒吧
会等待找到匹配的订阅后才开始发布。这就避免了 ros2cli 节点在发现匹配订阅之前就开始发布,从而导致部分首批报文丢失的问题。在使用可靠的 qos 配置文件时,这种情况尤其难以预料。
可以使用 -等待匹配订阅
旌旗,例如
ros2 topic pub -1 -w 3 /chatter std_msgs/msg/String "{data:'foo'}";
要等待三个匹配的订阅才开始发布。
-w
也可以独立于 --次/--一次/--1
但只有在与它们结合时才会默认为一个,否则 -w
默认为零。
参见 https://github.com/ros2/ros2cli/pull/642 了解更多详情。
玫瑰2 停止 转储
默认输出已更改
玫瑰2 停止 设置
现在接受更多的 YAML 语法
以前,尝试将类似 "off "的字符串设置为字符串类型的参数是行不通的。这是因为 玫瑰2 停止 设置
将命令行参数解释为 YAML,而 YAML 将 "off "视为布尔类型。从 https://github.com/ros2/ros2cli/pull/684 , 玫瑰2 停止 设置
现在接受 YAML 转义序列"!!str off",以确保值被视为字符串。
玫瑰2 包 创建
可以自动生成 LICENSE 文件
如果 --许可证
标志传递给 玫瑰2 包 创建
许可证是已知许可证之一、 玫瑰2 包 创建
将自动在软件包根目录下生成一个 LICENSE 文件。要查看已知许可证列表,请运行 玫瑰2 包 创建 --许可证 ? <package_name>;
.参见相关的 拉取请求 了解更多信息。
机器人状态发布者
已添加 帧前缀
规范
一个新参数 帧前缀
在 ros/robot_state_publisher#159.该参数是一个字符串,会被添加到由 机器人状态发布者
.类似于 tf_prefix
原文中的 tf
在 ROS 1 的库中,该参数可用于以不同的框架名称多次发布相同的机器人描述。
删除过时的 静态使用
规范
已废弃的 静态使用
参数已从 机器人状态发布者
.这意味着静态变换会无条件地发布到 /tf_static
静态变换发布在 瞬态本地
服务质量。这是默认行为,也是 tf2_ros::TransformListener
类,因此大部分代码无需更改。任何依赖于 机器人状态发布者
定期向 /tf
必须更新以订阅 /tf_static
作为 瞬态本地
而不是订阅。
rosidl_cmake
停用 rosidl_target_interfaces()
CMake 函数 rosidl_target_interfaces()
已被弃用,现在调用时会发出 CMake 警告。如果用户希望在生成信息/服务/动作的同一个 ROS 软件包中使用这些信息/服务/动作,则应调用 rosidl_get_typesupport_target()
然后 target_link_libraries()
使其目标取决于返回的 typesupport 目标。参见 https://github.com/ros2/rosidl/pull/606 了解更多详情,以及 https://github.com/ros2/demos/pull/529 使用新函数的示例。
rviz2
几何2
TF2Error::NO_ERROR 等的弃用
"(《世界人权宣言》) tf2
库使用一个名为 TF2Error
来返回错误。不幸的是,其中一个枚举器叫做 NO_ERROR
与 Windows 上的宏冲突。为了解决这个问题,在 TF2Error
创建,每个 TF2
前缀。以前的枚举器仍然可用,但现在已被弃用,使用时会打印弃用警告。所有使用 TF2Error
枚举器应更新为使用新的 TF2
前缀错误。参见 https://github.com/ros2/geometry2/pull/349 了解更多详情。
更直观的 static_transform_publisher 命令行参数
"(《世界人权宣言》) 静态转换发布者
程序曾接受过这样的参数 玫瑰2 运行 tf2_ros 静态转换发布者 0 0 0 0 0 0 1 动物 酒吧
.前三个数字是平移 x、y 和 z,后四个数字是四元数 x、y、z 和 w,最后两个参数是父帧和子帧 ID。虽然这个方法行之有效,但也存在一些问题:
用户必须指定 一应俱全 的参数,即使只设置一个数字
阅读命令行以弄清它在发布什么信息非常棘手
为解决这两个问题,命令行处理方式已改为使用标记,除 --frame-id
和 --儿童帧--ID
是可选项。因此,上述命令行可简化为 玫瑰2 运行 tf2_ros 静态转换发布者 --frame-id 动物 --儿童帧--ID 酒吧
如果只更改翻译 x,命令行应为 玫瑰2 运行 tf2_ros 静态转换发布者 --x 1.5 --frame-id 动物 --儿童帧--ID 酒吧
.
本版本仍允许使用旧式参数,但已被弃用,并会打印警告。它们将在未来的版本中删除。参见 https://github.com/ros2/geometry2/pull/392 了解更多详情。
变换监听器自旋线程不再执行节点回调
tf2_ros::TransformListener
不再在提供的节点对象上旋转。相反,它会创建一个回调组,对内部创建的实体执行回调。这意味着,如果您设置了参数 spin_thread=true
创建变换监听器时,就不能再依赖自己的回调来执行了。您必须调用 后旋
功能(例如 rclcpp::spin
),或将节点添加到自己的执行器中。
相关请求: 几何2#442
rosbag2
新的回放和录制控制
为加强用户对音袋回放的控制,我们添加了几个拉动请求。拉动请求 931 添加了指定开始播放的时间戳的功能。由于拉取请求 789 现在可以按指定时间间隔延迟开始播放。
相关信息 rosbag2
为用户提供了控制播放的新方法。拉取请求 847 添加了键盘控制功能,用于在终端播放过程中暂停、恢复和播放下一条信息。由于拉取请求的支持,暂停播放也成为可能。 905 和 904可让用户轻松启动回放,然后逐步查看消息,例如在调试流水线时。拉取请求 836 增加了一个在袋内寻找的界面,允许用户在播放过程中在袋内移动。
最后,在拉取请求中为记录添加了新的快照模式 851.该模式适用于事件记录,允许记录开始填充缓冲区,但在调用服务之前不会开始向磁盘写入数据。
连续播放模式
虽然实时回放数据包中的数据是数据包文件最著名的用例,但在某些情况下,您也希望数据包中的数据能尽快返回。通过拉取请求 977, rosbag2
已获得从数据包中 "突发 "数据的能力。在 "突发 "模式下,数据会以最快的速度回放。这在机器学习等应用中非常有用。
零拷贝回放
默认情况下,如果可以使用借用信息,回放信息将作为借用信息发布。这有助于减少数据副本的数量,从而为发送大数据带来更大的好处。拉取请求 981 添加 --禁用贷款信息
选项进行播放。
等待确认
这个新选项会等到所有发布的信息都被所有订阅者确认或超时(以毫秒为单位)后才终止播放。特别适用于在短时间内发送大容量信息的情况。只有当发布者的 QOS 配置文件为 RELIABLE 时,该选项才有效。拉动请求 951 添加 --等待--所有--acked
选项进行播放。
袋子编辑
rosbag2
正在采取措施实现编辑信息包,例如删除一个主题的所有信息或将多个信息包合并为一个信息包。拉动请求 921 增加了书包改写和 玫瑰2 背包 转化
动词
其他变动
拉取请求 925 使得 rosbag2
记录时忽略 "叶子主题"(没有发布者的主题)。这些主题将不再自动添加到资料袋中。
已知问题
何时 在 Ubuntu 22.04 Jammy 主机上安装 ROS 2 在安装 ROS 2 软件包之前更新系统非常重要。这是 特别是 必须确保
systemd
和udev
更新到最新版本,否则安装ros-humble-桌面
取决于libudev1
可能导致删除系统关键软件包。详情请见 ros2/ros2#1272 和 启动板 #1974196当 ROS 2 apt 仓库可用时,Ubuntu 中的 ROS 1 软件包无法安装。请参阅 Ubuntu Jammy 上的 ros1_bridge 文件获取更多信息。
一些主要的 Linux 发行版已经开始为 Python 打补丁,以便将软件包安装到
/usr/local
该系统正在破坏ament_package
并与胶管
.特别是,使用 Ubuntu Jammy 与设置工具
会出现这种错误行为,因此不建议使用。目前有一个 建议方案 在广泛发布之前还需要进一步测试。按大小或持续时间分割的 ROS 2 音袋无法正确播放。只能播放最后记录的音袋。建议避免按尺寸或持续时间分割音袋。详情请见 ros2/rosbag2#966.
发布时间表
- 星期一2022 年 3 月 21 日 - 阿尔法 + RMW 冻结
初步测试和稳定 ROS 基地 [1] 以及 RMW 提供商软件包的 API 和功能冻结。
- 周一2022 年 4 月 4 日 - 冻结
冻结 ROS Base 的应用程序接口和功能 [1] 软件包。在此之后,只能发布错误修复版本。新软件包可以独立发布。
- 周一2022 年 4 月 18 日 - 分部
滚雷德利的分支。
rosdistro
重新开放 ROS Base 的滚动 PR [1] 包。谦卑的发展从滚动*
包到玫瑰-谦卑-*
打包。- 周一2022 年 4 月 25 日 - Beta 版
ROS 桌面更新版本 [2] 可提供套餐。一般测试请致电。
- 周一2022 年 5 月 16 日 - 候选版本发布
构建候选发布版软件包。ROS 桌面的更新版本 [2] 可提供的套餐。
- 星期四2022 年 5 月 19 日 - Distro Freeze
Freeze rosdistro.汉布尔在
rosdistro
将被合并(发布公告后重新开放)。- 周一2022 年 5 月 23 日 - 全面开放
发布公告。
rosdistro
重新面向谦卑 PR 开放。