Foxy Fitzroy (foxy
) [14577]
目录 []
Foxy Fitzroy 是 ROS 2 的第六个版本。 [14578]
支持的平台 [8234]
Foxy Fitzroy 主要支持以下平台: [14579]
一级平台: [14235]
Ubuntu 20.04(Focal):
amd64
和arm64
[14580]Mac macOS 10.14 (Mojave) [14504]
Windows 10(Visual Studio 2019) [14315]
Tier 3 平台: [14317]
这个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'),
]),
])
<launch>
<set_env name="my_env_var" value="1"/>
<node pkg="foo" exec="foo" output="screen" />
<group>
<set_env name="my_env_var" value="2"/>
</group>
</launch>
在补丁发布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]
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_message
和 listener_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]
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]
std_msgs [14682]
消息的废弃 [14683]
虽然长期以来我们一直不鼓励使用,但我们已正式弃用了 std_msgs
中的以下消息。在 example_interfaces 中有副本。 [14684]
std_msgs/msg/Bool
[14685]std_msgs/msg/Byte
[14686]std_msgs/msg/ByteMultiArray
[14687]std_msgs/msg/Char
[14688]std_msgs/msg/Float32
[14689]std_msgs/msg/Float32MultiArray
[14690]std_msgs/msg/Float64
[14691]std_msgs/msg/Float64MultiArray
[14692]std_msgs/msg/Int16
[14693]std_msgs/msg/Int16MultiArray
[14694]std_msgs/msg/Int32
[14695]std_msgs/msg/Int32MultiArray
[14696]std_msgs/msg/Int64
[14697]std_msgs/msg/Int64MultiArray
[14698]std_msgs/msg/Int8
[14699]std_msgs/msg/Int8MultiArray
[14700]std_msgs/msg/MultiArrayDimension
[14701]std_msgs/msg/MultiArrayLayout
[14702]std_msgs/msg/String
[14703]std_msgs/msg/UInt16
[14704]std_msgs/msg/UInt16MultiArray
[14705]std_msgs/msg/UInt32
[14706]std_msgs/msg/UInt32MultiArray
[14707]std_msgs/msg/UInt64
[14708]std_msgs/msg/UInt64MultiArray
[14709]std_msgs/msg/UInt8
[14710]std_msgs/msg/UInt8MultiArray
[14711]
安全功能 [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]
已知问题 [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]