警告

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

ROS 2 Foxy Fitzroy(代号 "foxy";2020 年 6 月 5 日)

福克斯-菲茨罗伊 是 ROS 2 的第六个版本。

支持的平台

Foxy Fitzroy 主要支持以下平台:

1 级平台:

  • Ubuntu 20.04 (Focal): amd64arm64

  • Mac macOS 10.14(Mojave)

  • Windows 10(Visual Studio 2019)

三级平台:

  • Ubuntu 20.04 (Focal): arm32

  • Debian Buster (10): amd64, arm64arm32

  • OpenEmbedded Thud (2.6) / webOS OSE: arm32x86

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

安装

安装 Foxy Fitzroy

ROS 2 发布的新功能

在开发过程中 狐狸元票 GitHub 上包含了正在进行的高级别任务的最新状态,并引用了包含更多细节的具体票单。

第 2 版补丁中的更改

静态变换发布器中的错误

在开发 Foxy 的过程中,tf2_ros static_transform_publisher 程序出现了一个错误。传递给 static_transform_publisher 的欧拉角顺序的实现与文档不符。Foxy 第 2 版补丁 修复 顺序,以便实现与文档一致(偏航、俯仰、滚动)。对于已经开始使用 Foxy 初版或补丁 1 的用户来说,这意味着任何使用 static_transform_publisher 的启动文件都必须根据新的顺序更换命令行顺序。对于从 ROS 2 Dashing、ROS 2 Eloquent 或 ROS 1 移植到 Foxy 补丁版本 2 的用户来说,无需做任何更改。

自 Eloquent 发布以来的变化

经典 CMake 与现代 CMake

在 "经典 "CMake 中,软件包提供 CMake 变量,如 <pkgname>_INCLUDE_DIRS<pkgname>_LIBRARIES 当被 find_package()-ed。与 ament_cmake 通过调用 ament_export_include_directoriesAEMENT_EXTORT_LIBRARY.与 ament_export_dependencies, ament_cmake 确保递归依赖关系的所有包含目录和库都被连接并包含在这些变量中。

在 "现代 "CMake 中,软件包会提供一个接口目标(通常命名为 <pkgname>::<pkgname>;) 本身就封装了所有递归依赖关系。为了导出一个库目标以使用现代 CMake 输出目标 需要调用一个导出名称,在使用 install(TARGETS libA>; libB>; 出口 <export_name>; ...).导出的接口目标可通过 CMake 变量 <pkgname>_TARGETS.库目标要像这样导出,就不能依赖于影响全局状态的经典函数,如 include_directories() 但要在目标机上设置 include 目录(用于构建和安装环境),可以使用生成器表达式,例如 target_include_directories(<target>; 公众 "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>"; "$<INSTALL_INTERFACE:include>").

何时 ament_target_dependencies 用于为目标库添加依赖关系,该函数会在现代 CMake 目标可用时使用它们。否则就会退回到使用传统 CMake 变量。因此,只有在所有依赖库都提供现代 CMake 目标的情况下,才能导出现代 CMake 目标。 否则,导出的接口目标将在生成的 CMake 逻辑中包含包含目录/库的绝对路径,从而使软件包不可重新定位。

有关 Foxy 如何将软件包更新为现代 CMake 的例子,请参阅 ros2/ros2#904.

ament_export_interfaces 被 ament_export_targets 取代

CMake 函数 输出接口 从包装 ament_cmake_export_interfaces 功能已被弃用,取而代之的是 输出目标 在新软件包中 ament_cmake_export_targets.请参见 GitHub ticket 附件/参数_制作#237 了解更多详情。

rosidl_generator_|cpp命名空间/API变更

套餐 生成器 Crosidl_generator_cpp 进行了重构,将许多头文件和源文件移到了新软件包中 ROSIDL_RUNTIME_Crosidl_runtime_cpp.这样做的目的是移除对生成器包的运行依赖,从而移除使用 Python 的代码生成工具。在移动头文件的同时,包含路径/命名空间也会相应更新,因此在许多情况下,将生成器软件包中的包含指令更改为运行时软件包中的包含指令即可。

生成的 C / C++ 代码也经过了重构。以 __struct.h|hpp, __functions.h, __traits.hpp等已被移至子目录 细节 但大多数代码只包含以接口命名的头,而不包含任何这些后缀。

有关字符串和序列边界的一些类型也已重命名,以符合命名约定,但用户代码中不会使用这些类型(高于 RMW 实现和类型支持包)。

更多信息,请参见 ros2/rosidl#446(用于 C 语言)ros2/rosidl#447(适用于 C++).

ament_add_test 的默认工作目录

添加的测试的默认工作目录 添加测试 改为 cmake_current_binary_dir 的行为相匹配 添加测试.要么更新测试以使用新的默认设置,要么通过 工作目录 ${cmake_source_dir} 恢复之前的值。

默认控制台日志格式

控制台默认日志输出格式已更改,默认情况下包含时间戳,请参见:

默认控制台日志输出流

从 Foxy 开始,所有严重级别的日志信息默认都会记录到 stderr。这确保了日志信息的即时发布,并使 ROS 2 日志系统与大多数其他日志系统保持一致。在运行时,可以通过 RCUTILS_LOGGING_USE_STDOUT 环境变量将数据流更改为 stdout,但所有日志信息仍会记录到同一数据流中。参见 https://github.com/ros2/rcutils/pull/196 了解更多详情。

发射

节点名称和命名空间参数已更改

"(《世界人权宣言》) 节点 与命名有关的操作参数已更改:

  • 节点名 已更名为 名字

  • 节点名称空间 已更名为 命名空间

  • 节点可执行 已更名为 可执行

  • exec_name 用于命名与节点相关的进程。以前,用户会使用 名字 关键字参数。

旧参数已被淘汰。

这些改动是为了让启动前端更易于使用。例如,用

节点 pkg="demo_nodes_cpp"; exec=健谈; node-name="foo"; />;

我们现在可以写出

节点 pkg="demo_nodes_cpp"; exec=健谈; 名称"foo"; />;

这一变更也适用于 可组合节点容器, 可组合节点生命周期节点.有关示例,请参见 对演示进行相关修改。

launch_ros 中的相关拉取请求。

rclcpp

更改高级订阅回调签名

拉取请求 https://github.com/ros2/rclcpp/pull/1047 回调的签名发生了变化。以前它使用 rmw 类型 rmw_message_info_t但现在使用 rclcpp 类型 rclcpp::MessageInfo.所需的更改非常简单,可以在这些拉取请求中看到:

序列化报文回调签名的更改

拉动请求 ros2/rclcpp#1081 引入了一种新的回调签名,用于检索序列化形式的 ROS 消息。以前使用的 C-Struct rcl_serialized_message_t 将被 C++ 数据类型 rclcpp::SerializedMessage.

中的示例节点 演示节点对话者序列化信息 以及 监听器序列化消息 反映这些变化。

节点接口获取器签名的破坏性更改

拉取请求 ros2/rclcpp#1069修改了节点接口获取器的签名,以返回节点接口的共享所有权(即一个 std::shared_ptr) 而不是非所有原始指针。依赖于先前签名的下游软件包所需的更改简单明了:使用 std::shared_ptr::get() 方法。

弃用 set_on_parameters_set_callback

取而代之的是使用 rclcpp::Node 方法 add_on_set_parameters_callbackremove_on_set_parameters_callback 用于添加和删除参数设置时调用的函数。

相关请求: https://github.com/ros2/rclcpp/pull/1123

Publisher 获取器签名的破坏性更改

拉取请求 ros2/rclcpp#1119,对发布者句柄获取器的签名进行了修改,以返回底层 rcl 结构的共享所有权(即一个 std::shared_ptr) 而不是非所有原始指针。这对于修复某些情况下的分离故障是必要的。依赖于先前签名的下游软件包所需的更改简单明了:使用 std::shared_ptr::get() 方法。

rclcpp_action

弃用 ClientGoalHandle::async_result()

使用该应用程序接口可能会遇到竞赛条件,导致抛出异常。因此,最好使用 客户端::async_get_result()这样更安全。

参见 ros2/rclcpp#1120 和相关问题,以获取更多信息。

rclpy

支持多个参数设置回调

使用 节点 方法 add_on_set_parameters_callbackremove_on_set_parameters_callback 用于添加和删除参数设置时调用的函数。

方法 设置参数回调 已被弃用。

相关拉取请求: https://github.com/ros2/rclpy/pull/457, https://github.com/ros2/rclpy/pull/504

rmw_connext_cpp

Connext 5.1 定位器种类兼容模式

包括以下内容 能言善辩, rmw_connext_cpp 正在设置 dds.transport.use_510_compatible_locator_kinds 属性为 .该属性不再被强制使用,而在......之间共享传输通信。 Foxy 和以前的版本将停止工作。类似日志

PRESParticipant_checkTransportInfoMatching:Warning: 所发现 远程 与会者 RTI管理控制台'; 使用  'shmem'; 运输   身份证 16777216.这  身份证 是否  比赛   身份证 2   一样 运输   当地 与会者 'talker';.这些  与会者   传达 越过  'shmem'; 运输。检查  价值   财产 'dds.transport.use_510_compatible_locator_kinds';   当地 与会者。参见 https://community.rti.com/kb/what-causes-error-discovered-remote-participant 对于 其他 信息

当出现这种不兼容情况时,将观察到

如果需要兼容性,可在包含 QoS 配置文件的外部文件中进行设置:

<participant_qos>;
   <property>;
      <value>;
            元素;
               <名称>;
                  dds.transport.use_510_compatible_locator_kinds
               </名称>;
               <value>;1</value>;
            </元素>;
      </value>;
   </property>;
</participant_qos>;

记住设置 ndds_qos_profiles 环境变量的 QoS 配置文件路径。更多信息,请参阅 如何 改变 运输 设置 5.2.0 应用 对于 兼容性 5.1.0 部分 运输_兼容性.

rviz

工具使用 ROS 时间为信息打上时间戳

现在,"二维姿势估计"、"二维导航目标 "和 "发布点 "工具使用 ROS 时间而不是系统时间为其信息打上时间戳,以便于 使用模拟时间 参数对它们产生影响。

相关请求: https://github.com/ros2/rviz/pull/519

std_msgs

停用信息

尽管长期以来我们一直不鼓励使用下列信息,但我们已正式弃用 std_msgs.在 接口示例

  • std_msgs/msg/Bool

  • std_msgs/msg/Byte

  • std_msgs/msg/ByteMultiArray

  • std_msgs/msg/Char

  • std_msgs/msg/Float32

  • std_msgs/msg/Float32MultiArray

  • std_msgs/msg/Float64

  • std_msgs/msg/Float64MultiArray

  • std_msgs/msg/Int16

  • std_msgs/msg/Int16MultiArray

  • std_msgs/msg/Int32

  • std_msgs/msg/Int32MultiArray

  • std_msgs/msg/Int64

  • std_msgs/msg/Int64MultiArray

  • std_msgs/msg/Int8

  • std_msgs/msg/Int8MultiArray

  • std_msgs/msg/MultiArrayDimension

  • std_msgs/msg/MultiArrayLayout

  • std_msgs/msg/String

  • std_msgs/msg/UInt16

  • std_msgs/msg/UInt16MultiArray

  • std_msgs/msg/UInt32

  • std_msgs/msg/UInt32MultiArray

  • std_msgs/msg/UInt64

  • std_msgs/msg/UInt64MultiArray

  • std_msgs/msg/UInt8

  • std_msgs/msg/UInt8MultiArray

安全功能

使用安全飞地

从 Foxy 开始,域参与者不再直接映射到 ROS 节点。因此,ROS 2 的安全功能(针对域参与者)也不再直接映射到 ROS 节点。取而代之的是,Foxy 引入了安全 "飞地 "的概念,"飞地 "是指共享相同身份和访问控制规则的一个或一组进程。

这意味着安全人工制品 不再根据节点名称检索,而是根据安全飞地名称检索。节点飞地名称可以通过使用 ROS 参数 --飞地例如 玫瑰2 运行 演示节点 话匣子 --ros-args --飞地 /my_enclave

相关设计文件: https://github.com/ros2/design/pull/274

请注意,权限文件受底层传输包大小的限制,因此将许多权限归入同一飞地将 如果生成的权限文件超过 64kB,则无法正常工作。相关问题 [ros2/sros2#228]

重新命名环境变量

环境变量重命名

在 Eloquent 中的名称

Foxy 中的名称

ros_security_root_directory

ros_security_keystore

安全节点目录

ros_security_enclave_override

已知问题

  • [ROS2/ROS2#922] 服务表现不稳定的原因 rclcpp 使用 eProsima Fast-RTPS 或凌动 CycloneDDS 作为 RMW 实现的节点。具体来说,服务客户端有时收不到服务器的响应。

发布前的时间表

发布前的几个里程碑:

备注

由于冠状病毒大流行,以下日期延长了大约两周。

星期三2020年4月22日,星期三

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

周一2020 年 4 月 29 日(测试版)

更新版本 桌面 [2] 可用的软件包。测试新功能。

星期三2020 年 5 月 27 日(发布候选人)

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

星期三2020年6月3日,星期三

Freeze rosdistro.没有关于 Foxy rosdistro 将被合并(发布公告后重新开放)。