ROS 2FoxyFitzroy (代号'foxy'; 2020年6月5日) [待校准@4724]

Foxy Fitzroy is the sixth release of ROS 2.

支持的平台 [待校准@1608]

[需手动修复的语法]FoxyFitzroy主要在以下平台上受支持: [待校准@4726]

一级平台: [待校准@4382]

3级平台: [待校准@4464]

有关RMW实现、编译器/解释器版本和系统依赖版本的更多信息,请参见 REP 2000[待校准@4652]

安装

'安装FoxyFitzroy <//安装>' [待校准@4730]

此ROS 2版本中的新功能 [待校准@4317]

在开发版本期间,GitHub上的 Foxy meta-ticket 包含正在进行的高级任务的最新状态,以及参考特定票证和更多详细信息。 [待校准@4731]

补丁版本7中的更改 [待校准@4732]

修复launch前端解析器 [待校准@4733]

[需手动修复的语法]launch前端解析器的重构修复了一些 issues parsing special characters 。因此,在解析string时,有一个小的行为变化。例如,之前要将数字作为string传递,您必须添加额外的引号 (如果使用替换,则需要两组引号): [待校准@4734]

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

重构后,上述结果将产生string “” “'3'” “” (注意额外的一组引号)。现在,用户应该使用 type 属性来表示该值应该被解释为string: [待校准@4735]

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

相关拉取请求: [待校准@4736]

修复rmw_fastrtps_dynamic_cpp中的内存泄漏和未定义行为 [待校准@4739]

以下头文件中的API已更改: [待校准@4740]

尽管techni调用y它们是公共调用y可访问的,但人们不太可能直接使用它们。因此,我们决定破坏API以修复内存泄漏和未定义的行为。 [待校准@4743]

修复程序最初是在 rmw_fastrtps#429 and later backported to Foxy in rmw_fastrtps#577 提交的。 [待校准@4744]

补丁版本2中的更改 [待校准@4745]

static_transform_publisher虫 [待校准@4746]

在Foxy的开发版本中,一个错误被引入到tf2_rosstatic_transform_publisher程序中。传递给static_transform_publisher的欧拉角顺序的实现与文件不同。Foxy补丁发布2 fixes 的顺序,以便实现与文档一致 (偏航、俯仰、滚动)。对于已经开始使用初始Foxy版本或补丁版本1的用户来说,这意味着任何使用static_transform_publisher版本的launch文件都必须根据新的顺序交换命令行顺序。对于来自ROS 2Dashing、ROS 2Eloquent或ROS 1的用户,无需更改端口到Foxy补丁版本2。 [待校准@4747]

自Eloquent发布以来的变化 [待校准@4748]

经典CMake与现代CMake [待校准@4749]

在 "classic" CMake中,一个包提供了CMake变量,如 <pkgname>_INCLUDE_DIRS<pkgname>_LIBRARIES ,当 find_package() 。通过调用 ament_export_include_directoriesament_export_libraries 来实现 ament_cmake 。结合 ament_export_dependenciesament_cmake 确保所有包含目录和递归依赖项的库被串联并包含在这些变量中。 [待校准@4750]

在 "modern" CMake中,一个包提供了一个接口目标 (通常称为 <pkgname>::<pkgname> ),它本身封装了所有递归依赖关系。为了导出库,使用现代CMake ament_export_targets 的目标需要使用导出名称调用,该名称在使用 install(TARGETS <libA> <libB> EXPORT <export_name> ...) 安装库时也使用。导出的接口目标可通过CMake变量 <pkgname>_TARGETS 获得。为了使库目标像这样可导出,它们不能依赖影响全球状态的经典函数,如 include_directories() ,而是在目标本身上设置包含目录-用于构建和安装环境-使用生成器表达式,例如,“目标 _ 包含 _ 目录 (<目标> 公共 " $ <构建 _ 接口: ${CMAKE_CURRENT_BINARY_DIR}/包含> " " $ <安装 _ 接口: 包含> ")”。 [待校准@4751]

当使用 ament_target_dependencies 向库目标添加依赖项时,该函数在现代CMake目标可用时使用它们。否则,它会退回到使用经典的CMake变量。因此,如果所有依赖项也提供现代CMake目标,则应仅导出现代CMake目标。Otherwise否则,导出的接口目标将包含在生成的CMake逻辑中包含目录/库的绝对路径,这使得包不可重定位。** [待校准@4752]

例如,如何在Foxy中将包更新为现代CMake,请参见 ros2/ros2#904[待校准@4753]

[需手动修复的语法]ament _ 出口 _ 接口被[需手动修复的语法]ament _ 出口 _ 目标取代 [待校准@4754]

CMake功能 ament_export_interfaces 从包 ament_cmake_export_interfaces 已弃用的功能 ament_export_targets 新包 ament_cmake_export_targets 。有关更多上下文,请参阅GitHub票证 ament/ament_cmake#237[待校准@4755]

rosidl_generator_c | cpp命名空间/API更改 [待校准@4756]

rosidl_generator_crosidl_generator_cpp 已经被重构,许多标题和源文件被移到了新的包 rosidl_runtime_crosidl_runtime_cpp 。目的是使用Python删除对生成器包的运行依赖关系,从而删除代码生成工具。在移动标头时,相应地更新了包含路径/命名空间,因此在许多情况下,将包含指令从生成器包更改为运行时包就足够了。 [待校准@4757]

生成的C/C code代码也已重构。以 “__struct结尾的文件。h | hpp'' 、 __functions.h__traits.hpp 等已被移动到 detail 子目录中,但大多数代码仅包含以接口命名的标头,没有任何这些后缀。 [待校准@4758]

一些关于string和序列边界的类型也已经被重命名以匹配命名约定,但是它们不应该在用户代码中使用 (高于RMW实现和类型支持包) [待校准@4759]

更多信息见 ros2/rosidl#446 (for C) and ros2/rosidl#447 (for C++)[待校准@4760]

[需手动修复的语法]ament的默认工作目录 _ add_test [待校准@4761]

添加了 ament_add_test 的测试的默认工作目录已更改为 CMAKE_CURRENT_BINARY_DIR ,以匹配CMake add_test 的行为。更新测试以使用新的默认值,或传递 “WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}” 以恢复以前的值。 [待校准@4762]

默认控制台日志格式 [待校准@4763]

默认控制台日志输出格式已更改为默认包含时间戳,请参阅: [待校准@4764]

默认控制台日志输出流 [待校准@4767]

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

[需手动修复的语法]launch _ ros [待校准@4769]

节点名称和命名空间参数已更改 [待校准@4770]

与命名相关的 Node 动作参数已经改变: [待校准@4771]

  • node_name has been renamed to name [待校准@4772]

  • node_namespace has been renamed to namespace [待校准@4773]

  • node_executable has been renamed to executable [待校准@4774]

  • exec_name has been added for naming the process associated with the node. Previously, users would have used the name keyword争论。 [待校准@4775]

旧参数已被弃用。 [待校准@4776]

这些改变是为了使launch前端更加惯用。例如,而不是 [待校准@4777]

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

我们现在可以写了 [待校准@4778]

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

这一变化也适用于 ComposableNodeContainerComposableNodeLifecycleNode 。例如,见 relevant changes to the demos. [待校准@4779]

Related pull request in launch_ros.

ROS C++客户端库(rclcpp) [小鱼@4505]

高级订阅回调签名的更改 [待校准@4781]

使用拉取请求 https://github.com/ros2/rclcpp/pull/1047 ,接收带有消息的消息信息的调用签名已更改。以前它使用 rmwrmw_message_info_t ,但现在使用 rclcpp 型 “rclcpp:: messageinfo”。所需的更改非常简单,可以在以下拉取请求中找到例程: [待校准@4782]

序列化消息回调签名的更改 [待校准@4786]

拉取请求 ros2/rclcpp#1081 引入了调用back的新签名,用于以序列化形式检索ROS消息。先前使用的C-结构 rcl_serialized_message_t 被C + + 数据类型 rclcpp::SerializedMessage 取代。 [待校准@4787]

[需手动修复的语法] demo_nodes_cpp 中的示例节点,即 talker_serialized_messagelistener_serialized_message ,反映了这些变化。 [待校准@4788]

中断节点接口getters签名的更改 [待校准@4789]

使用拉取请求 ros2/rclcpp#1069 ,节点接口getters的签名已被修改以返回节点接口的共享所有权 (即“Std::shared_ptr”) 而不是非拥有的raw指针。依赖于先前签名的下游包中所需的更改简单明了: 使用 “std::shared_ptr::get()” 方法。 [待校准@4790]

弃用set_on_parameters_set _ 调用 [待校准@4791]

相反,使用 “rclcpp:: node” 方法 add_on_set_parameters_callbackremove_on_set_parameters_callback 来添加和删除在设置参数时调用的函数。 [待校准@4792]

相关请求: https://github.com/ros2/rclcpp/拉/1123 [待校准@4793]

出版商getter签名中的重大变更 [待校准@4794]

使用拉取请求 ros2/rclcpp#1119 ,发布者句柄getter的签名已被修改以返回底层rcl结构的共享所有权 (即“Std::shared_ptr”) 而不是非拥有的raw指针。在某些情况下,这对于修复段错误是必要的。依赖于先前签名的下游包中所需的更改简单明了: 使用 “std::shared_ptr::get()” 方法。 [待校准@4795]

rclcpp _ 动作 [待校准@4796]

弃用ClientGoalHandle::async_result() [待校准@4797]

使用此API,可能会遇到导致引发异常的竞争条件。相反,更喜欢使用 “client::async_get_result()”,这样更安全。 [待校准@4798]

有关更多信息,请参见 ros2/rclcpp#1120 和相关问题。 [待校准@4799]

rclpy [待校准@4552]

支持多个on参数集调用 [待校准@4800]

使用 Node 方法 add_on_set_parameters_callbackremove_on_set_parameters_callback 添加和删除函数调用时参数套装。 [待校准@4801]

[需手动修复的语法] set_parameters_callback 法已被否决。 [待校准@4802]

相关请求: https://github.com/ros2/rclpy/拉/457 https://github.com/ros2/rclpy/拉/504 [待校准@4803]

rmw_connext_cpp [待校准@4804]

Connext 5.1定位器种类兼容模式 [待校准@4805]

包括 Eloquent 在内, rmw_connext_cppdds.transport.use_510_compatible_locator_kinds 财产归 true 所有。该物业不再被强迫, Foxy 和以前的发行版本之间的共享运输通讯将停止工作。日志类似于: [待校准@4806]

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.

当这种不兼容发生时,将被观察到。 [待校准@4807]

如果需要兼容性,可以在外部QoS配置文件中设置它,其中包含: [待校准@4808]

<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_CompatibilityHow to Change Transport Settings in 5.2.0 Applications for Compatibility with 5.1.0 部分。 [待校准@4809]

rviz [待校准@4624]

使用ROS时间的工具时间戳消息 [待校准@4810]

[需手动修复的语法]'2D Pose Estimate'、'2D Nav Goal'和'Publish Point'工具现在使用ROS时间而不是系统时间来标记它们的消息,以便 use_sim_time 参数对它们产生影响。 [待校准@4811]

相关请求: https://github.com/ros2/rviz/拉/519 [待校准@4812]

std_msgs [待校准@4813]

消息弃用 [待校准@4814]

尽管长期以来我们都很沮丧,但我们已经正式否决了 std_msgs 的以下信息。有 example_interfaces 副本 [待校准@4815]

安全特性 [待校准@4843]

安全飞地的使用 [待校准@4844]

从Foxy开始,域参与者不再直接映射到ROS节点。因此,ROS 2安全功能 (特定于域参与者) 也不再直接映射到ROS节点。相反,Foxy概念安全 "enclave" ,一个 "enclave" 是过程或组进程,将共享相同的身份和访问控制规则。 [待校准@4845]

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

相关设计文件: https://github.com/ros2/设计/拉/274 [待校准@4847]

请注意,权限文件受基础传输包大小的限制,因此,如果生成的权限文件超过64kB,则在同一飞地下对许多权限进行分组将不起作用。相关问题 [ros2/sros2#228] [待校准@4848]

环境变量的重命名 [待校准@4849]

环境变量重命名 [待校准@4850]

Eloquent名称 [待校准@4851]

Foxy名称 [待校准@4852]

ROS_SECURITY_ROOT_DIRECTORY [待校准@4853]

ROS_SECURITY_KEYSTORE [待校准@4854]

ROS_SECURITY_NODE_DIRECTORY [待校准@4855]

项目完结,系统自动填充内容 [待校准@4856]

已知问题 [待校准@4348]

  • 对于使用eProsima快速RTPS或ADLINKCycloneDDS作为RMW实施的 rclcpp 节点, [ros2/ros2#922] 服务的性能不稳定。具体调用y,服务客户有时不接收响应从服务器。 [待校准@4857]

  • [需手动修复的语法] [ros2/rclcpp#1212] 就绪可重入waable对象可以尝试执行多次。 [待校准@4858]

发布前的时间表 [待校准@4634]

发布前的几个里程碑: [待校准@4635]

注解

以下日期反映了由于冠状病毒大流行而延长了大约两周。 [待校准@4859]

2020年4月22日星期三 [待校准@4860]

[需手动修复的语法] ros_core 1 包的API和功能冻结。请注意,这包括 rmw ,这是[需手动修复的语法] ros_core 的递归依赖。在此之后,仅应进行错误修复发行版本。新包可以独立发布。 [待校准@4861]

2020年4月29日星期一 (测试版) [待校准@4862]

[需手动修复的语法] desktop 2 包的更新发行版本可用。测试新功能。 [待校准@4863]

2020年5月27日星期三 (发布候选人) [待校准@4864]

[需手动修复的语法] desktop 2 包的更新发行版本可用。 [待校准@4865]

2020年6月3日星期三 [待校准@4866]

项目完结,系统自动填充内容 rosdistro 回购协议中没有Foxy的PRs将被合并 (发布公告后重新开放)。 [待校准@4867]

1

[需手动修复的语法] variants 仓库中描述的 ros_core 变型。 [待校准@4868]

2(1,2)

[需手动修复的语法] variants 仓库中描述的 desktop 变型。 [待校准@4869]