您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.

银河地壳虫 (银河)

银河地心 以下是银河系地理信息系统自上次发布以来的重要变化和功能亮点。如需了解自 Foxy 发布以来的所有变化,请参阅 长篇更新日志.

支持的平台

Galactic Geochelone 主要支持以下平台:

1 级平台:

  • Ubuntu 20.04 (Focal): amd64arm64

  • Windows 10 (Visual Studio 2019): amd64

二级平台:

  • RHEL 8: amd64

三级平台:

  • Ubuntu 20.04 (Focal): arm32

  • Debian Bullseye (11): amd64, arm64arm32

  • OpenEmbedded Thud (2.6) / webOS OSE: arm32arm64

  • Mac macOS 10.14 (Mojave): amd64

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

安装

安装银河地理信息系统

ROS 2 发布的新功能

可指定每个日志记录器的日志级别

现在可以在命令行上为不同的记录仪指定不同的记录级别:

玫瑰2 运行 演示节点 话匣子 --ros-args --日志级 警告 --日志级 talker:=DEBUG

上述命令将全局日志级别设置为 WARN,但将对话者节点消息的日志级别设置为 DEBUG。日志级别 --日志级 命令行选项,为每个日志记录器设置不同的日志级别。

可通过环境变量配置日志记录目录

现在可以通过两个环境变量来配置日志记录目录: ROS_LOG_DIRROS_HOME.逻辑如下

  • 使用 $ROS_LOG_DIR 如果 ROS_LOG_DIR 已设置且不为空。

  • 否则,请使用 $ROS_HOME/log使用 ~/.ros 对于 ROS_HOME 如果未设置或为空。

因此默认值保持不变: ~/.ros/log.

相关公关: ros2/rcl_logging#53ros2/launch#460.

例如

ROS_LOG_DIR=/tmp/foo 玫瑰2 运行 演示节点 话匣子

将所有日志放入 /tmp/foo.

ROS_HOME=/path/to/home 玫瑰2 运行 演示节点 话匣子

将所有日志放入 /path/to/home/log.

能够调用 rosidl 管道

现在可以直接调用 rosidl 接口生成管道。源代码生成器和接口定义翻译器可通过统一的命令行界面访问。

例如,给定一个 演示 在某些 演示 像这样的包装

mkdir -p demo/msg
CD 演示猫 msg/Demo.msg
std_msgs/Header 标头
几何_msgs/扭曲扭转
几何_msgs/Accel加速度
EOF

可轻松生成 C、C++ 和 Python 支持源代码:

rosidl 生成 -o 基因 -t c -t cpp -t py -I$(玫瑰2  词头 --分享 std_msgs)/.. \
  -I$(玫瑰2  词头 --分享 几何参数)/.. 演示 msg/Demo.msg

生成的源代码将放在 基因 目录。

也可以将信息定义转换成不同的格式,供第三方代码生成工具使用:

rosidl  -o 基因 --到 idl -I$(玫瑰2  词头 --分享 std_msgs)/.. \
  -I$(玫瑰2  词头 --分享 几何参数)/.. 演示 msg/Demo.msg

翻译后的报文定义将放入 基因 目录。

请注意,这些工具生成源代码,但并不构建源代码--这仍然是调用者的责任。这是实现 rosidl 在 CMake 以外的编译系统中生成接口。参见 设计文件 供进一步参考和采取下一步措施。

启动时从外部配置 QoS

现在可以在启动时从外部配置节点的 QoS 设置。QoS 设置包括 它们只能在启动时配置。节点作者必须选择启用在启动时更改 QoS 设置。如果在节点上启用了该功能,那么在节点首次启动时就可以使用 ROS 参数设置 QoS 设置。

C++ 和 Python 演示可在此处找到。

参见 设计文件,了解更多详情.

注意,使用已注册回调处理参数更改的用户代码应避免拒绝未知参数的更新。在银河系之前,这种做法被认为是不好的,但启用了外部可配置的 QoS 后,这种做法将导致严重故障。

相关公关: ros2/rclcpp#1408ros2/rclpy#635

可用的 Python point_cloud2 实用程序

点云2 信息 在 Python 中是 移植到 ROS 2.通过这些实用程序,可以从 PointCloud2 信息中获取点列表 (读取点数读取点列表) ,以及从点列表创建点云2 信息 (创建云创建_云_xyz32).

创建 PointCloud 2 信息并回读的示例:

舶来品 传感器_msgs_py.point_cloud2
 std_msgs.msg 舶来品 页眉

名单 = [[0.0, 0.1, 0.2]]

点云 = 传感器_msgs_py.云点2.创建_云_xyz32(页眉(frame_id='frame';), 名单)

对于   传感器_msgs_py.云点2.读取点数(点云):
    打印()

RViz2 时间面板

Rviz2 时间面板可显示当前的墙面时间和 ROS 时间,以及已耗费的墙面时间和 ROS 时间。 移植到 RViz2.要启用时间面板,请单击面板 -> 添加新面板,然后选择 "时间"。就会出现类似下面的面板:

../_images/rviz2-time-panel-2021-05-17.png

ros2 主题 echo 可以打印序列化数据

调试中间件问题时,查看 RMW 发送的原始序列化数据可能很有用。中间件 -命令行标志 加入了 玫瑰2 主题 回响 来显示这些数据。要查看实际效果,请运行以下命令。

1 号航站楼

$ 玫瑰2 主题 酒吧 /chatter std_msgs/msg/String "数据:'你好'";

2 号航站楼

$ 玫瑰2 主题 回响 --生 /chatter b'\x00\x01\x00\x00\x06\x00\x00\x00hello\x00\x00\x00'
---

获取信息的 YAML 表示形式

现在可以使用 to_yaml 功能。打印 YAML 表示法的代码示例:

#include <cstdio>;

#include <std_msgs/msg/string.hpp>;

int 主要()
{
  std_msgs::信息::字符串 信息;
  信息.数据 = hello world";;
  printf("%s";, 生成器特质::to_yaml(信息).c_str());
  返回 0;
}

运行时可通过 ros2 命令加载参数文件

ROS 2 很早就能在启动时指定参数值(通过命令行参数或 YAML 文件),并将当前参数转储到文件中(通过 玫瑰2 停止 转储).银河系统增加了以下功能 运行时加载参数值 使用 玫瑰2 停止 负荷 动词。例如

1 号航站楼

$ 玫瑰2 运行 演示节点 参数黑板

2 号航站楼

$ 玫瑰2 停止 设置 /参数黑板 动物 酒吧  # 将 'foo' 参数设置为值 'bar';
$ 玫瑰2 停止 转储 /参数黑板  # 将参数的当前值转储到 ./parameter_blackboard.yaml 中
$ 玫瑰2 停止 设置 /参数黑板 动物 不同的  # 将 'foo' 参数设置为值 'different';
$ 玫瑰2 停止 负荷 /参数黑板 ./parameter_blackboard.yaml  # 重新加载参数之前的状态,'foo' 返回到 'bar';

检查 QoS 不相容性的工具

建立在新的 QoS 兼容性检查 API 之上、 ros2doctorrqt_graph 现在可以检测和报告发布者与订阅之间的 QoS 不兼容问题。

给定一个发布者和一个订阅 不兼容的 QoS 设置:

1 号航站楼

$ 玫瑰2 运行 演示节点 talker_qos -n 1000  # 即 best_effort 出版商

2 号航站楼

$ 玫瑰2 运行 演示节点 listener_qos --可靠 -n 1000  # 即可靠的订阅

ros2doctor 报告:

$ 玫瑰2 医生 --报告
# ...
   服务质量 兼容性 列表主题 [类型]            : /chatter [std_msgs/msg/String]
出版商 网站          : talker_qos 用户 网站         : 监听器_qos 兼容性 地位    : 错误: 最佳 费力 出版商  可靠 订阅费;
# ...

虽然 rqt_graph 显示:

../_images/rqt_graph-qos-incompatibility-2021-05-17.png

相关公关: ros2/ros2cli#621, ROS-VISualization/RQT_GAPH#61

在参数文件中使用启动替换

就像 rosparam ROS 中的标签 1 玫瑰发射, 发射 现在可以评估参数文件中的替换。

例如,给定一些 parameter_file_with_substitutions.yaml 比如说

/**:
  参数:
    发射日期: $(命令日期)

设置 allow_substs正确 时对替换进行评估 节点 发射:

舶来品 启动
舶来品 launch_ros.parameter_descriptions
舶来品 launch_ros.actions

捍卫 生成发射描述():
    返回 启动.启动说明([
        发射.行动.节点(
            包装='demo_nodes_cpp',
            可执行='parameter_blackboard';,
            参数=[
                发射.参数说明.参数文件(
                    参数文件='parameter_file_with_substitutions.yaml';,
                    allow_substs=正确)
            ]
        )
    ])

XML 启动文件也支持这一点。

启动>;
  节点 pkg="demo_nodes_cpp"; exec="parameter_blackboard";>;
    参数 从="parameter_file_with_substitutions.yml"; allow_substs="true";/>;
  </node>;
</launch>;

相关公关: ros2/launch_ros#168

支持独特的网络流

现在,应用程序可能要求基于 UDP/TCP 和 IP 的 RMW 实现提供独特的 网络流量 (即唯一的 差异化服务代码点 和/或独特的 IPv6 流量标签 和/或 IP 包头中的唯一端口),从而在支持此类功能的网络架构(如 5G 网络)中为这些 IP 流提供 QoS 规范。

要查看实际运行情况,您可以运行这些 C++ 示例(可在 ros2/examples 存储库):

1 号航站楼

玫瑰2 运行 examples_rclcpp_minimal_publisher 具有唯一网络流端点的发布者成员函数

2 号航站楼

玫瑰2 运行 examples_rclcpp_minimal_subscriber 具有唯一网络流端点的用户成员功能

参见 独特的网络流程设计文件 供进一步参考。

Rosbag2 新功能

按时间分割记录

在 Foxy 中,您只能在记录时按包的大小分割包,现在您还可以按经过的时间分割包。下面的命令将把袋文件分割成 100 秒的小块。

玫瑰2 背包 记录 --全部 --最大装袋时间 100

ROS2 袋清单

这条新命令列出了 rosbag2 使用的各类已安装插件。

$ 玫瑰2 背包 清单 存储 rosbag2_v2 sqlite3 $ 玫瑰2 背包 清单 转换器 rosbag_v2_converter

压缩实现是一个插件

在 Foxy 中,rosbag2 压缩是通过 Zstd 库实现的硬编码。经过重新架构,压缩实现成为一个插件,可以在不修改核心 rosbag2 代码库的情况下更换。与 ros-galactic-rosbag2 仍然是 Zstd 插件,但现在可以发布和使用更多的 Zstd 插件,而且通过选择性安装软件包,可以将 Zstd 从安装中排除。

按信息压缩

在 Foxy 中,您可以在分割每个 rosbag 文件时自动对其进行压缩(按文件压缩),但现在您也可以指定按信息压缩。

玫瑰2 背包 记录 --全部 --压缩格式 zstd --压缩模式 信息

Rosbag2 Python 应用程序接口

一个新的软件包 rosbag2_py 已在 Galactic 中发布,它提供了一个 Python API。该软件包是一个 pybind11 与 C++ 应用程序接口绑定。从最初的 Galactic 版本开始,它还没有公开通过 rosbag2_cpp API 的唯一连接。 玫瑰2 背包 CLI 工具,因此可以使用大量功能。

性能测试包和性能改进

自 Foxy 发布以来,我们对 rosbag2 进行了全面的性能分析。初步报告全文见 https://github.com/ros2/rosbag2/blob/galactic/rosbag2_performance/rosbag2_performance_benchmarking/docs/rosbag2_performance_improvements.pdf .包装 rosbag2 性能基准测试 提供了运行性能分析的工具,尤其是在记录方面,这有助于我们维护和改进 rosbag2 的性能。

根据这份报告,我们开展了关键工作,将性能提高到更适合实际机器人工作流程的状态。这里要强调一个关键指标--在高带宽压力测试(200Mbps)中,Foxy 版本的信息丢失率高达 70%,而 Galactic 版本的信息保留率约为 100%。更多详情,请参阅链接报告。

--重复--排除 选题选项

新的录音选项 --重复--排除 允许微调记录袋中的主题,而无需明确列出所有主题。这些选项可以一起使用,也可以单独使用,还可以与 --全部

以下命令将只记录名称中包含 "扫描 "的主题。

玫瑰2 背包 记录 --重复 "*扫描*";

以下命令将记录除 /my_namespace/

玫瑰2 背包 记录 --全部 --排除 "/my_namespace/*";

玫瑰2 背包 重新索引

ROS 2 的包以目录而不是单个文件表示。该目录包含一个 metadata.yaml 文件和一个或多个袋文件。当 metadata.yaml 文件丢失或遗失、 玫瑰2 背包 重新索引 $bag_dir 将尝试通过读取目录中的所有包文件来重建它。

播放时间控制

rosbag2 播放器新增了暂停、恢复、改变速率和下一步播放等控制功能。在 Galactic 版本中,这些控制仅作为 rosbag2 播放器节点上的服务公开。目前正在进行开发,以便在 玫瑰2 背包 游戏在此之前,用户应用程序可以通过按钮或键盘控制来调用这些服务。

# 在一个外壳中
$ 玫瑰2 背包 游戏 我的包

# 在另一个 shell 中
$ 玫瑰2 服务 清单 -t /rosbag2_player/get_rate [rosbag2_interfaces/srv/GetRate]
/rosbag2_player/is_paused [rosbag2_interfaces/srv/IsPaused]
/rosbag2_player/pause [rosbag2_interfaces/srv/Pause]
/rosbag2_player/play_next [rosbag2_interfaces/srv/PlayNext]
/rosbag2_player/resume [rosbag2_interfaces/srv/Resume]
/rosbag2_player/set_rate [rosbag2_interfaces/srv/SetRate]
/rosbag2_player/toggle_paused [rosbag2_interfaces/srv/TogglePaused]

# 检查播放是否暂停
$ 玫瑰2 服务 致电 /rosbag2_player/is_paused rosbag2_interfaces/IsPaused

# 暂停播放
$ 玫瑰2 服务 致电 /rosbag2_player/pause rosbag2_interfaces/Pause

# 恢复播放
$ 玫瑰2 服务 致电 /rosbag2_player/resume rosbag2_interfaces/Resume

# 将暂停的播放状态改为相反的状态。如果正在播放,则暂停。如果暂停,则恢复播放。
$ 玫瑰2 服务 致电 /rosbag2_player/toggle_paused rosbag2_interfaces/TogglePaused

# 获取当前播放速率
$ 玫瑰2 服务 致电 /rosbag2_player/get_rate

# 设置当前播放速率(必须为 0)
$ 玫瑰2 服务 致电 /rosbag2_player/set_rate rosbag2_interfaces/SetRate "率:0.1";

# 播放下一条信息(仅在暂停时有效)
$ 玫瑰2 服务 致电 /rosbag2_player/play_next rosbag2_interfaces/PlayNext

回放发布/时钟

Rosbag2 还可以通过发布到 /时钟 在播放过程中。以下命令将定时发布时钟信息。

# 按默认速率 - 40Hz 发布
玫瑰2 背包 游戏 我的包 --时钟

# 以特定速率发布 - 100Hz
玫瑰2 背包 游戏 我的包 --时钟 100

自 Foxy 发布以来的变化

默认 RMW 更改为 Eclipse Cyclone DDS

在银河开发过程中,ROS 2 技术指导委员会 投票 将默认的 ROS 中间件 (RMW) 更改为 Eclipse Cyclone DDS 项目 日蚀基金会.在不做任何配置更改的情况下,用户将默认获得 Eclipse Cyclone DDS。Fast DDS 和 Connext 仍是受支持的一级 RMW 供应商,用户可通过使用 rmw_implementation 环境变量。参见 使用多个 RMW 实施指南 了解更多信息。

Connext RMW 更改为 rmw_connextdds

Connext 的新 RMW 称为 rmw_connextdds 为银河系合并。该 RMW 性能更佳,并修复了旧版 RMW 的许多问题 rmw_connext_cpp.

测试和整体质量大幅提高

Galactic 包含许多修改,这些修改修复了竞赛条件、堵塞了内存泄漏,并修复了用户报告的问题。除了这些改动,银河系在开发过程中还通过实施以下措施,努力提高系统的整体质量 REP 2004.......。 rclcpp 软件包及其所有依赖包(其中包括大部分 ROS 2 非 Python 核心软件包)都被升级到了 质量等级 1 by:

  • 制定版本政策(QL1 要求 1)

  • 有成文的变更控制流程(QL1 要求 2)

  • 记录所有功能和公共应用程序接口(QL1 要求 3)

  • 增加许多额外的测试(QL1 要求 4):

    • 所有功能的系统测试

    • 对所有公共应用程序接口进行单元测试

    • 夜间性能测试

    • 代码覆盖率为 95

  • 让软件包的所有运行时依赖性至少与软件包一样高(QL1 要求 5)

  • 支持所有 REP-2000 平台(QL1 要求 6)

  • 制定漏洞披露政策(QL1 要求 7)

rmw

用于检查 QoS 配置文件兼容性的新 API

rmw_qos_profile_check_compatible 是一个新功能,用于检查两个 QoS 配置文件的兼容性。

RMW 供应商应为 QoS 调试和自省功能实施该应用程序接口。 rqt_graph 才能正常工作。

相关公关: ros2/rmw#299

ament_cmake

ament_install_python_package() 现在安装了一个 Python

通过安装扁平 Python 蛋,使用 ament_install_python_package() 等模块可以发现 资源importlib.metadata.此外,还可以在 setup.cfg 文件(包括入口点)。

相关公关: ament/ament_cmake#326

ament_target_dependencies() 处理 SYSTEM 依赖关系

某些软件包依赖项现在可以标记为 SYSTEM 依赖项,以帮助处理外部代码中的警告。通常情况下,SYSTEM 依赖关系也会被排除在依赖关系计算之外,因此使用时要小心。

相关公关: ament/ament_cmake#297

tf2_ros Python 从 tf2_ros 中分离出来

原来存放在 tf2_ros 中的 Python 代码已被移到名为 tf2_ros_py 的独立软件包中。任何依赖于 tf2_ros 的现有 Python 代码都将继续工作,但这些包的 package.xml 应修改为 执行依赖 上的 tf2_ros_py。

tf2_ros Python TransformListener 使用全局命名空间

蟒蛇 变换监听器 现在订阅 /tf/tf_static 在全局命名空间中。在此之前,它是在节点的命名空间中。这意味着节点的命名空间将不再对 /tf/tf_static 订阅。

例如

玫瑰2 运行 tf2_ros tf2_echo --ros-args -r __ns:=/test -- 敖德 基本链接

将订阅 /tf/tf_static因为 玫瑰2 主题 清单 将显示

相关公关: ros2/geometry2#390

rclcpp

更改 spin_until_future_complete 模板参数

的第一个模板参数 Executor::spin_until_future_complete 是未来的结果类型 结果T该方法只接受 std::shared_future<ResultT>;.为了接受其他类型的期货(如: std::future),该参数被改为未来类型本身。

在有 自旋直到未来完成 如果调用依赖于模板参数演绎,则无需更改。如果不是,这是一个差异示例:

std::shared_future<MyResultT> future; ...
-executor.spin_until_future_complete<MyResultT>(future);
+executor.spin_until_future_complete<std::shared_future<MyResultT>>(future);

更多详情,请参阅 ros2/rclcpp#1160.有关用户代码所需更改的示例,请参见 ros-visualization/interactive_markers#72.

更改默认值 /时钟 订阅服务质量配置文件

默认值从历史深度为 10 的可靠通信改为历史深度为 1 的尽力通信。 ros2/rclcpp#1312.

可等待的应用程序接口

修改了可等待 API,以避免与 多线程执行器.这只会影响实施自定义 waitable 的用户。参见 ros2/rclcpp#1241 了解更多详情。

变化 rclcpp的日志宏

以前,日志宏很容易受到 格式字符串攻击在这种情况下,格式字符串将被求值,并有可能执行代码、读取堆栈或在运行程序中导致分段故障。为解决这一安全问题,日志记录宏的格式字符串参数现在只接受字符串文字。

如果您之前使用的代码类似于

 烧焦 *my_const_char_string 格式 = "Foo";;
RCLCPP_DEBUG(get_logger(), my_const_char_string);

现在应该用

 烧焦 *my_const_char_string 格式 = "Foo";;
RCLCPP_DEBUG(get_logger(), ";%s";, my_const_char_string);

RCLCPP_DEBUG(get_logger(), "Foo";);

这一改动消除了日志宏的一些便利性,如 std::string不再被接受为格式参数。

如果您以前的代码没有格式参数,例如

标准::字符串 my_std_string = "Foo";;
RCLCPP_DEBUG(get_logger(), my_std_string);

现在应该用

标准::字符串 my_std_string = "Foo";;
RCLCPP_DEBUG(get_logger(), ";%s";, my_std_string.c_str());

备注

如果您使用的是 std::string 作为带有格式参数的格式字符串,将该字符串转换为 烧焦 * 并将其作为格式字符串使用,会产生格式安全警告。这是因为编译器无法在编译时自省到 std::string 来验证参数。为避免出现安全警告,我们建议您手动创建字符串,并像前面的示例一样不带格式参数地传入字符串。

std::stringstream 类型仍可作为流日志宏的参数。参见 ros2/rclcpp#1442 了解更多详情。

参数类型现在默认为静态类型

以前,在设置参数时可以改变参数的类型。例如,如果一个参数被声明为整数,那么稍后调用参数设置时就会将其类型更改为字符串。这种行为可能会导致错误,而且很少是用户想要的。Galactic 的参数类型默认是静态的,试图更改类型会失败。如果希望使用之前的动态行为,可以通过一种机制来选择(见下面的代码)。

// 用默认值声明整数参数,尝试将其设置为其他类型将失败。
网站->;declare_parameter("my_int";, 5);
// 声明无默认值的字符串参数,用户必须提供覆盖。
// 即用户必须通过参数文件或命令行规则来设置参数 -p <param_name>:=<value>;
网站->;declare_parameter("string_mandatory_override";, rclcpp::参数字符串);
// 有条件地声明一个浮点参数,并强制覆盖。
// 当参数仅在其他条件下需要使用,且没有合理的默认值时有用。
如果 (模式 == "modeA";) {
    网站->;declare_parameter("conditionally_declare_double_parameter";, rclcpp::参数);
}
// 如果你愿意,也可以获得以前的动态键入行为:
rcl_interfaces::信息::参数描述符 描述符;
描述符.动态排版 = ;
网站->;declare_parameter("dynamically_typed_param";, rclcpp::参数值{}, 描述符);

更多详情,请参阅 https://github.com/ros2/rclcpp/blob/galactic/rclcpp/doc/notes_on_statically_typed_parameters.md.

用于检查 QoS 配置文件兼容性的新 API

qos_check_compatible 是一个新功能,用于检查两个 QoS 配置文件的兼容性。

相关公关: ros2/rclcpp#1554

rclpy

移除已废弃的 Node.set_parameters_callback

方法 Node.set_parameters_callback在 ROS Foxy 中已弃用 并一直 在 ROS Galactic 中删除.使用 Node.add_on_set_parameters_callback() 而不是。下面是一些使用它的示例代码。

舶来品 rclpy
舶来品 rclpy.node
 rcl_interfaces.msg 舶来品 参数类型
 rcl_interfaces.msg 舶来品 设置参数结果


rclpy.启动()
网站 = rclpy.网站.节点('callback_example';)
网站.declare_parameter('my_param';, '初始值';)


捍卫 参数事件(参数表):
    对于 规范  参数表:
        网站.get_logger().信息(f'Got {规范.名字}={规范.价值}')
    返回 设置参数结果(成功的=正确)


网站.add_on_set_parameters_callback(参数事件)
rclpy.后旋(网站)

运行此命令可查看参数回调的运行情况。

玫瑰2 停止 设置 /回调示例 参数 Hello World";

参数类型现在默认为静态类型

在 Foxy 和更早的版本中,调用参数设置可以改变参数的类型。Galactic 的参数类型是静态的,默认情况下不能更改。如果希望使用以前的行为,那么设置 动态排版 为 true。下面是一个例子。

舶来品 rclpy
舶来品 rclpy.node
 rcl_interfaces.msg 舶来品 参数描述符

rclpy.启动()
网站 = rclpy.网站.节点('static_param_example';)
网站.declare_parameter('static_param', '初始值';)
网站.declare_parameter('dynamic_param', '初始值';, 描述符=参数描述符(动态排版=正确))
rclpy.后旋(网站)

运行这些命令,看看静态类型参数和动态类型参数有何不同。

$ 玫瑰2 停止 设置 /static_param_example 动态参数 42
设置参数成功
$ 玫瑰2 停止 设置 /static_param_example 静态参数 42
设置参数失败:参数类型错误,预期为 'Type.STRING';实际为 'Type.INTEGER';

更多详情,请参阅 https://github.com/ros2/rclcpp/blob/galactic/rclcpp/doc/notes_on_statically_typed_parameters.md.

用于检查 QoS 配置文件兼容性的新 API

rclpy.qos.qos_check_compatible新功能 用于检查两个 QoS 配置文件的兼容性。如果这两个配置文件兼容,那么使用它们的发布者和订阅者就能相互通话。

舶来品 rclpy.qos

出版商简介 = rclpy.优先权.qos_profile_sensor_data
订阅档案 = rclpy.优先权.qos_profile_parameter_events

打印(rclpy.优先权.qos_check_compatible(出版商简介, 订阅档案))
$ python3 qos_check_compatible_example.py
(QoSCompatibility.ERROR,'ERROR:尽最大努力发布和可靠订阅;')

rclcpp_action

行动客户目标响应回调签名已更改

目标响应回调现在应使用指向目标句柄的共享指针,而不是未来指针。

对于 范例旧签名:

空白 目标响应回调(标准::共享未来<;目标手柄斐波纳契::SharedPtr>; 未来)

新签名:

空白 目标响应回调(目标手柄斐波纳契::SharedPtr 目标句柄)

相关公关: ros2/rclcpp#1311

ROSIDL_Typesupport_introspection_C

从数组中获取元素的函数中的 API 中断

该函数的签名之所以被修改,是因为它在语义上不同于用于从数组或序列中获取元素的所有其他函数。这只会影响使用自省类型支持的 rmw 实现的作者。

更多详情,请参阅 ros2/rosidl#531.

rcl_lifecycle 和 rclcpp_lifecycle

RCL 生命周期状态机获得新的初始 API

对 rcl_lifecycle 中的生命周期状态机进行了修改,以适应新引入的选项结构,结合状态机的一般配置。通过该选项结构,可以指明状态机是否应使用默认值进行初始化,其附加服务是否处于活动状态,以及要使用哪个分配器。

rcl_ret_t
rcl_lifecycle_state_machine_init(
  rcl_lifecycle_state_machine_t * 机器状态,
  rcl_node_t * 节点句柄,
   rosidl_message_type_support_t * ts_pub_notify,
   rosidl_service_type_support_t * ts_srv_change_state,
   rosidl_service_type_support_t * ts_srv_get_state,
   rosidl_service_type_support_t * ts_srv_get_available_states,
   rosidl_service_type_support_t * ts_srv_get_available_transitions,
   rosidl_service_type_support_t * ts_srv_get_transition_graph,
   rcl_lifecycle_state_machine_options_t * 机器状态选项);

RCL 的生命周期状态机存储了分配器实例

选项结构体(上文已讨论)包含一个用于初始化状态机的分配器实例。生命周期状态机中存储着该选项结构体以及所体现的分配器。其直接结果是 rcl_lifecycle_fini 功能 不再期望在其 fini 函数中使用分配器,而是使用 options 结构中设置的分配器来取消分配其内部数据结构。

rcl_ret_t
rcl_lifecycle_state_machine_fini(
  rcl_lifecycle_state_machine_t * 机器状态,
  rcl_node_t * 节点句柄);

RCLCPP 的生命周期节点提供了不实例化服务的选项

为了使用 rclcpp 的生命周期节点而不暴露其内部服务,如 change_state, get_state 等,生命周期节点的构造函数新引入了一个参数,指示服务是否可用。该布尔标志默认设置为 "true",如果不希望,则无需对现有的应用程序接口进行任何更改。

不含糊 生命周期节点(
   标准::字符串 及样品; 节点名,
   rclcpp::节点选项 及样品; 选项 = rclcpp::节点选项(),
  bool 启用通信接口 = );

相关公关: ros2/rcl#882ros2/rclcpp#1507

rcl_lifecycle 和 rclcpp_lifecycle

记录 - 按时间分割

已知问题

ros2cli

守护进程会降低 Windows 上 CLI 的运行速度

作为一种变通方法,CLI 命令可以在没有守护进程的情况下使用,例如

玫瑰2 主题 清单 --无守护进程

通过以下方式跟踪问题 ros2/ros2cli#637.

rqt

缺少一些 rqt_bag 图标

中缺少 "放大"、"缩小"、"主页缩放 "和 "切换缩略图 "图标。 rqt_bag.该问题在 ros-visualization/rqt_bag#102

大多数 rqt 实用程序无法在 Windows 上独立运行

在 Windows 上 "独立 "启动 rqt 实用程序(如 玫瑰2 运行 rqt_graph rqt_graph) 通常不起作用。解决方法是启动 rqt 容器进程 (rqt),然后插入要使用的插件。

rviz2

RViz2 面板关闭按钮是空白的

每个 RViz2 面板的右上角都应该有一个 "X",以便关闭面板。这些按钮是存在的,但在所有平台上,按钮内的 "X "都不见了。该问题在 ros2/rviz2#692.

发布前的时间表

星期一2021 年 3 月 22 日 - 阿尔法

初步测试和稳定 ROS 核心系统 [1] 打包。

周一2021 年 4 月 5 日 - 冻结

冻结 ROS Core 的应用程序接口和功能 [1] 在 Rolling Ridley 的套餐。请注意,这包括 rmw的递归依赖关系。 核心.在此之后只能发布错误修复版本。新软件包可以独立发布。

周一2021 年 4 月 19 日 - 分部

滚雷德利的分支。 rosdistro 重新开放 ROS 核心滚动 PR [1] 包。银河系的发展从 滚动* 包到 ros-galactic-* 打包。

周一2021 年 4 月 26 日 - 测试版

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

周一2021 年 5 月 17 日 - RC
构建候选发布软件包。

ROS 桌面更新版本 [2] 可提供的套餐。

星期四2021 年 5 月 20 日 - Distro Freeze

冻结 rosdistro。银河网站上没有 PR rosdistro 将被合并(发布公告后重新开放)。

星期日2021 年 5 月 23 日 - 全面开放
发布公告。

rosdistro 重新开放银河公关。