Foxy Fitzroy (foxy) [14577]

Foxy Fitzroy 是 ROS 2 的第六个版本。 [14578]

支持的平台 [8234]

Foxy Fitzroy 主要支持以下平台: [14579]

一级平台: [14235]

  • Ubuntu 20.04(Focal):amd64arm64 [14580]

  • Mac macOS 10.14 (Mojave) [14504]

  • Windows 10(Visual Studio 2019) [14315]

Tier 3 平台: [14317]

  • Ubuntu 20.04(Focal):arm32 [14581]

  • Debian Buster (10):amd64arm64``和``arm32 [14582]

  • OpenEmbedded Thud(2.6)/ webOS OSE:arm32x86 [14319]

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

安装 []

安装 Foxy Fitzroy <../../foxy/Installation.html>`__ [14583]

这个ROS 2版本的新功能有: [14170]

在开发过程中,GitHub 上的 Foxy meta-ticket 包含进行中的高级任务的最新状态,以及涉及更多细节的特定票据的引用。 [14584]

补丁发布8中的更改(2022-09-28) [14585]

启动 GroupAction 范围的环境 [14586]

SetEnvironmentVariable 操作现在被限定为返回它的任何 GroupAction[14587]

例如,考虑以下启动文件, [14588]

import launch
from launch.actions import SetEnvironmentVariable
from launch.actions import GroupAction
from launch_ros.actions import Node


def generate_launch_description():
    return launch.LaunchDescription([
        SetEnvironmentVariable(name='my_env_var', value='1'),
        Node(package='foo', executable='foo', output='screen'),
        GroupAction([
            SetEnvironmentVariable(name='my_env_var', value='2'),
        ]),
    ])

在补丁发布8之前,节点``foo``将以``my_env_var=2``开始,但现在将以``my_env_var=1``开始。 [14591]

要退出新行为,可以在``GroupAction``上设置参数``scoped=False``。 [14592]

相关票据: [14593]

Patch Release 7 变更(2022-02-08) [14596]

Launch set_env 前端行为变更 [14597]

launch#468 错误地改变了前端启动文件中 set_env 操作的作用域。使用 set_env 操作更改环境变量不再局限于父级 group 操作,而是全局应用。由于该更改已被反向移植,因此影响到了这个版本。 [14598]

我们认为这个变更是一个回归问题,并打算在下一个补丁发布版本和未来的 ROS 发布版本中修复该行为。我们还计划修复 Python 启动文件中的行为,这些文件从未正确地限定设置环境变量。 [14599]

相关问题: [14600]

修复启动前端解析器 [14602]

对启动前端解析器进行了重构,修复了一些`解析特殊字符的问题 <https://github.com/ros2/launch_ros/issues/214>`_。因此,在解析字符串时有了一些小的行为变化。例如,以前要将数字作为字符串传递,需要添加额外的引号(如果使用替换,需要两组引号): [14603]

<!-- results in the string value "'3'" -->
<param name="foo" value="''3''"/>

在重构后,上述内容将得到字符串 ``"''3''"``(注意额外的引号)。现在,用户应该使用``type``属性来表示值应该被解释为字符串: [14604]

<param name="foo" value="3" type="str"/>

相关拉取请求: [14605]

修复rmw_fastrtps_dynamic_cpp中的内存泄漏和未定义行为 [14608]

以下头文件的API已更改: [14609]

  • rmw_fastrtps_dynamic_cpp/TypeSupport.hpp [14610]

  • rmw_fastrtps_dynamic_cpp/TypeSupport_impl.hpp [14611]

虽然从技术上讲它们是公开可访问的,但人们不太可能直接使用它们。因此,我们决定破坏API以修复内存泄漏和未定义行为。 [14612]

修复最初在 rmw_fastrtps#429 提交,并后来被回溯到Foxy中的 rmw_fastrtps#577[14613]

Patch版本2的更改(2020-08-07) [14614]

static_transform_publisher中的错误 [14615]

在Foxy的开发过程中,tf2_ros的static_transform_publisher程序引入了一个错误。传递给static_transform_publisher的欧拉角顺序的实现与文档不一致。Foxy的Patch版本2通过`修复 <https://github.com/ros2/geometry2/pull/296>`_ 顺序,使其与文档一致(偏航角、俯仰角、翻滚角)。对于已经开始使用初始版本或Patch版本1的用户,这意味着使用static_transform_publisher的任何启动文件都必须根据新的顺序交换命令行顺序。对于从ROS 2 Dashing、ROS 2 Eloquent或ROS 1迁移的用户,无需进行任何更改即可迁移到Foxy的Patch版本2。 [14616]

自Eloquent版本以来的更改 [14617]

经典的CMake与现代的CMake对比 [14618]

在“经典”CMake中,当一个软件包被使用``find_package()``命令查找时,它会提供CMake变量,例如``<pkgname>_INCLUDE_DIRS``和``<pkgname>_LIBRARIES``。而使用``ament_cmake``时,可以通过调用``ament_export_include_directories``和``ament_export_libraries``来实现这一点。结合``ament_export_dependencies``使用,``ament_cmake``确保所有递归依赖的包含目录和库都被连接并包含在这些变量中。 [14619]

在“现代”CMake中,软件包提供一个接口目标(通常命名为``<pkgname>::<pkgname>``),该接口目标本身封装了所有递归依赖项。为了导出一个库目标以使用现代CMake,需要使用``ament_export_targets``并提供一个导出名称,在使用``install(TARGETS <libA> <libB> EXPORT <export_name> ...)``安装库时也使用相同的导出名称。导出的接口目标可以通过CMake变量``<pkgname>_TARGETS``进行访问。为了使库目标能够以这种方式导出,它们不能依赖于影响全局状态的经典函数,如``include_directories()``,而是在目标本身上设置包含目录 - 用于构建环境和安装环境 - 使用生成器表达式,例如``target_include_directories(<target> PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>" "$<INSTALL_INTERFACE:include>")``。 [14620]

当使用``ament_target_dependencies``将依赖项添加到库目标时,该函数将使用现代CMake目标(如果可用)。否则,它将退回到使用经典CMake变量。因此,只有在所有依赖项也提供现代CMake目标时,才应导出现代CMake目标。否则,导出的接口目标将包含在生成的CMake逻辑中的包含目录/库的绝对路径,使得软件包无法重定位。 [14621]

有关在Foxy中将软件包更新为现代CMake的示例,请参见`ros2/ros2#904 <https://github.com/ros2/ros2/issues/904>`_。 [14622]

ament_export_interfaces被ament_export_targets取代 [14623]

包``ament_cmake_export_interfaces``中的CMake函数``ament_export_interfaces``已被弃用,建议使用新包``ament_cmake_export_targets``中的函数``ament_export_targets``。有关更多信息,请参见GitHub工单`ament/ament_cmake#237 <https://github.com/ament/ament_cmake/issues/237>`_。 [14624]

rosidl_generator_c|cpp 命名空间/API更改 [14625]

包``rosidl_generator_c``和``rosidl_generator_cpp``已进行了重构,许多头文件和源文件被移动到新包``rosidl_runtime_c``和``rosidl_runtime_cpp``中。目的是消除对生成器包的运行依赖,因此移除使用Python的代码生成工具。在移动头文件时,相应的包含路径和命名空间已进行了更新,因此在许多情况下,将包含指令从生成器包更改为运行时包即可。 [14626]

生成的C / C++代码也已进行了重构。以``__struct.h|hpp``、__functions.h``__traits.hpp``等结尾的文件已移动到子目录``detail``中,但大多数代码只包含与接口同名的头文件,不包含这些后缀。 [14627]

一些涉及字符串和序列边界的类型也已重命名以符合命名约定,但不希望在用户代码中使用(超过了RMW实现和类型支持包)。 [14628]

有关更多信息,请参见`ros2/rosidl#446(用于C)<https://github.com/ros2/rosidl/issues/446>`_和`ros2/rosidl#447(用于C++)<https://github.com/ros2/rosidl/issues/447>`_。 [14629]

ament_add_test的默认工作目录 [14630]

使用``ament_add_test``添加的测试的默认工作目录已更改为``CMAKE_CURRENT_BINARY_DIR``,以匹配CMake的``add_test``行为。要么更新测试以适应新的默认值,要么传递``WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}``以恢复先前的值。 [14631]

默认控制台日志输出流 [14636]

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

launch_ros [14638]

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

与命名相关的``Node``动作参数已更改: [14640]

  • node_name``已更名为``name [14641]

  • node_namespace 已更名为 namespace [14642]

  • node_executable 已更名为 executable [14643]

  • 已添加``exec_name`` 以命名与节点关联的进程。以前,用户可能使用了 name 关键字参数。 [14644]

旧参数已被弃用。 [14645]

这些更改是为了使启动界面更符合惯用语法。例如,以前的写法是 [14646]

<node pkg="demo_nodes_cpp" exec="talker" node-name="foo" />

现在我们可以写成 [14647]

<node pkg="demo_nodes_cpp" exec="talker" name="foo" />

这个变更也适用于``ComposableNodeContainer``、ComposableNode``和``LifecycleNode。有关示例,请参阅`演示中的相关更改。 <https://github.com/ros2/demos/pull/431>`_ [14648]

在launch_ros中的相关拉取请求。 [14649]

rclcpp [14358]

高级订阅回调签名的变更 [14650]

使用拉取请求`https://github.com/ros2/rclcpp/pull/1047 <https://github.com/ros2/rclcpp/pull/1047>`_,接收消息信息的回调函数的签名已经发生了变化。之前使用``rmw``类型的``rmw_message_info_t``,现在使用``rclcpp``类型的``rclcpp::MessageInfo``。所需的更改很简单,并且可以在以下拉取请求中看到示例: [14651]

序列化消息回调签名的更改 [14655]

拉取请求 ros2/rclcpp#1081 引入了一种新的回调签名,用于检索序列化形式的ROS消息。先前使用的 C 结构体 rcl_serialized_message_t 被 C++ 数据类型 rclcpp::SerializedMessage 取代。 [14656]

demo_nodes_cpp 中的示例节点,即 talker_serialized_messagelistener_serialized_message 反映了这些更改。 [14657]

节点接口获取器签名中的重大更改 [14658]

通过拉取请求 ros2/rclcpp#1069,节点接口获取器的签名已被修改为返回节点接口的共享所有权(即 std::shared_ptr),而不是非拥有的裸指针。依赖于先前签名的下游软件包所需的更改是简单而直接的:使用 std::shared_ptr::get() 方法。 [14659]

弃用 set_on_parameters_set_callback [14660]

相反,使用``rclcpp::Node``的``add_on_set_parameters_callback``和``remove_on_set_parameters_callback``方法来添加和删除在设置参数时调用的函数。 [14661]

相关的拉取请求:https://github.com/ros2/rclcpp/pull/1123 [14662]

Publisher getter 签名的破坏性更改 [14663]

在拉取请求`ros2/rclcpp#1119 <https://github.com/ros2/rclcpp/pull/1119>`中,发布者句柄获取器的签名已修改为返回底层 rcl 结构的共享所有权(即``std::shared_ptr``),而不是非拥有原始指针。这是为了修复特定情况下的段错误而必要的。依赖于先前签名的下游软件包所需的更改是简单明了的:使用``std::shared_ptr::get()``方法。 [14664]

rclcpp_action [14665]

弃用ClientGoalHandle::async_result() [14666]

使用此API可能会遇到竞态条件,导致抛出异常。相反,请优先使用``Client::async_get_result()``,它更安全。 [14667]

参见 ros2/rclcpp#1120 以及相关问题了解更多信息。 [14668]

rclpy [14405]

支持多个参数设置回调 [14669]

使用``Node``的方法``add_on_set_parameters_callback``和``remove_on_set_parameters_callback``来添加和移除在参数设置时调用的函数。 [14670]

方法``set_parameters_callback``已被弃用。 [14671]

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

rmw_connext_cpp [14673]

Connext 5.1定位器类型兼容模式 [14674]

在``Eloquent``版本及之前,rmw_connext_cpp``会将``dds.transport.use_510_compatible_locator_kinds``属性设置为``true。现在不再强制设置此属性,因此``Foxy``和之前版本之间的共享传输通信将停止工作。类似下面的日志将会出现: [14675]

PRESParticipant_checkTransportInfoMatching:Warning: discovered remote participant 'RTI Administration Console' using the 'shmem' transport with class ID 16777216.
This class ID does not match the class ID 2 of the same transport in the local participant 'talker'.
These two participants will not communicate over the 'shmem' transport.
Check the value of the property 'dds.transport.use_510_compatible_locator_kinds' in the local participant.
See https://community.rti.com/kb/what-causes-error-discovered-remote-participant for additional info.

当发生此不兼容性时将会观察到。 [14676]

如果需要兼容性,可以在外部的QoS配置文件中进行设置,文件内容如下: [14677]

<participant_qos>
   <property>
      <value>
            <element>
               <name>
                  dds.transport.use_510_compatible_locator_kinds
               </name>
               <value>1</value>
            </element>
      </value>
   </property>
</participant_qos>

请记得将 NDDS_QOS_PROFILES 环境变量设置为 QoS 配置文件的路径。有关更多信息,请参阅 Transport_Compatibility 中的 How to Change Transport Settings in 5.2.0 Applications for Compatibility with 5.1.0 部分。 [14678]

rviz [14477]

工具现在使用 ROS 时间戳来标记消息 [14679]

2D Pose Estimate2D Nav GoalPublish Point 工具现在使用 ROS 时间戳而不是系统时间来标记它们的消息,以使 use_sim_time 参数对其产生影响。 [14680]

相关的拉取请求:https://github.com/ros2/rviz/pull/519 [14681]

std_msgs [14682]

消息的废弃 [14683]

虽然长期以来我们一直不鼓励使用,但我们已正式弃用了 std_msgs 中的以下消息。在 example_interfaces 中有副本。 [14684]

安全功能 [14712]

使用安全飞地 [14713]

从Foxy版本开始,域参与者不再直接映射到ROS节点。因此,ROS 2的安全特性(特定于域参与者)也不再直接映射到ROS节点。相反,Foxy引入了安全"enclave"(飞地)的概念,其中"enclave"是一个进程或一组进程,它们将共享相同的身份和访问控制规则。 [14714]

这意味着安全工件不再基于节点名称进行检索,而是基于安全飞地的名称进行检索。可以使用ROS参数``--enclave``来设置节点飞地名称,例如``ros2 run demo_nodes_py talker --ros-args --enclave /my_enclave``。 [14715]

相关设计文档:https://github.com/ros2/design/pull/274 [14716]

请注意,权限文件受底层传输数据包大小的限制,因此,如果生成的权限文件超过64kB,则无法将许多权限分组到同一个飞地中。相关问题`[ros2/sros2#228] <https://github.com/ros2/sros2/issues/228>`_ [14717]

环境变量的重命名 [14718]

环境变量的重命名 [14719]

Eloquent中的名称 [14720]

Foxy中的名称 [14721]

ROS_SECURITY_ROOT_DIRECTORY [14722]

ROS_SECURITY_KEYSTORE [14723]

ROS_SECURITY_NODE_DIRECTORY [14724]

ROS_SECURITY_ENCLAVE_OVERRIDE [14725]

已知问题 [17821]

  • [ros2/ros2#922] 使用 eProsima Fast-RTPS 或 ADLINK CycloneDDS 作为 RMW 实现的 rclcpp 节点的服务性能不稳定。具体而言,有时服务客户端无法接收到服务器的响应。 [14726]

  • [ros2/rclcpp#1212] 可重入的可等待对象可能会尝试执行多次。 [14727]

发布前的时间线 [14487]

发布前的一些关键节点: [14488]

注解

以下日期反映了由于冠状病毒大流行而延长的大约两周时间。 [14728]

2020年4月22日,星期三 [14729]

ros_core 1 包的 API 和功能冻结。请注意,这包括 rmw,它是 ros_core 的递归依赖项。在此之后,只能进行错误修复发布。新的软件包可以独立发布。 [14730]

2020年4月29日,星期一(测试版) [14731]

已提供更新的``desktop`` [2]_软件包。测试新功能。 [14732]

2020年5月27日(候选版本) [14733]

已提供更新的``desktop`` [2]_软件包。 [14734]

2020年6月3日 [14735]

冻结rosdistro。不会合并Foxy在`rosdistro`存储库上的PR(发布公告后重新开放)。 [14736]

1

``ros_core``变体在`variants <https://github.com/ros2/variants>`_存储库中描述。 [14737]

2(1,2)

在`变体<https://github.com/ros2/variants>`_存储库中描述的“desktop”变体。 [14738]