ROS 2Humble Hawksbill (代号'humble'; 2022年5月) [待校准@5066]

Humble Hawksbill is the eighth release of ROS 2. What follows is highlights of the important changes and features in Humble Hawksbill since the last release.

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

[需手动修复的语法]Humble Hawksbill主要在以下平台上得到支持: [待校准@5068]

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

待定 [待校准@1520]

2级平台: [待校准@4383]

待定 [待校准@1520]

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

待定 [待校准@1520]

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

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

[需手动修复的语法]launch文件中节点的``ros_args`` attribute & ros_arguments parameter [待校准@5070]

现在可以直接提供 ROS-specific node arguments ,而不需要使用带有领先 --ros-args 旗的 args : [待校准@5071]

<launch>
  <node pkg="demo_nodes_cpp" exec="talker" ros_args="--log-level debug" />
</launch>

相应参数 Node 动作Pythonlaunch文件 ros_arguments : [待校准@5074]

from launch import LaunchDescription
import launch_ros.actions

def generate_launch_description():
    return LaunchDescription([
        launch_ros.actions.Node(
            package='demo_nodes_cpp',
            executable='talker',
            ros_arguments=['--log-level', 'debug'],
        ),
    ])

相关PRs: ros2/launch_ros#249 and ros2/launch_ros#253[待校准@5075]

SROS2安全飞地现在支持证书吊销列表 [待校准@5076]

证书吊销列表 (CRLs) 是一个概念,其中特定证书可以在到期前被吊销。作为谦卑的人,现在可以将CRL放入SROS2安全飞地并使其受到尊重。有关如何使用它的示例,请参见 the SROS2 tutorials[待校准@5077]

自Galactic发布以来的变化 [待校准@5078]

公共接口 [待校准@5079]

支持标记消息的纹理和嵌入式网格 [待校准@5080]

这两个添加将提高以新的方式用标准消息可视化数据的能力,同时使在rosbag中跟踪该数据的能力得以实现。 [待校准@5081]

纹理为标记添加了三个新字段: [待校准@5082]

# Texture resource is a special URI that can either reference a texture file in
# a format acceptable to (resource retriever)[https://index.ros.org/p/resource_retriever/]
# or an embedded texture via a string matching the format:
#   "embedded://texture_name"
string texture_resource
# An image to be loaded into the rendering engine as the texture for this marker.
# This will be used iff texture_resource is set to embedded.
sensor_msgs/CompressedImage texture
# Location of each vertex within the texture; in the range: [0.0-1.0]
UVCoordinate[] uv_coordinates

[需手动修复的语法]RViz将完全支持通过嵌入式格式的纹理渲染。 [待校准@5083]

对于那些熟悉 mesh_resource 的人来说, resource_retriever 应该是熟悉的。这将允许程序员选择他们想要从哪里加载数据,本地文件或网络文件。为了能够将所有数据记录在rosbag中,包括嵌入纹理图像的功能。 [待校准@5084]

网格以类似的方式进行了修改,以增加嵌入原始网格文件以进行记录的功能,并以类似的方式进行了修改。Meshfile消息有两个字段: [待校准@5085]

# The filename is used for both debug purposes and to provide a file extension
# for whatever parser is used.
string filename

# This stores the raw text of the mesh file.
uint8[] data

实施中尚不支持嵌入式 Meshfile 消息。 [待校准@5086]

相关PRs: ros2/common_interfaces#153 ros2/rviz#719 [待校准@5087]

rmw [待校准@4597]

struct type name suffix changed from _t to _s [待校准@5088]

在生成代码文档时,为了避免 struct 类型名称和它们的 typedef 别名之间的类型名称重复错误,所有 struct 类型名称的后缀已经从 _t 改为 _s 。带有 _t 后缀的别名保留在原处。因此,此更改仅适用于使用完整的 struct 类型说明符的代码,即 struct type_name_t . [待校准@5089]

详情请见 ros2/rmw#313[待校准@5090]

rcl [待校准@4710]

struct type name suffix changed from _t to _s [待校准@5088]

在生成代码文档时,为了避免 struct 类型名称和它们的 typedef 别名之间的类型名称重复错误,所有 struct 类型名称的后缀已经从 _t 改为 _s 。带有 _t 后缀的别名保留在原处。因此,此更改仅适用于使用完整的 struct 类型说明符的代码,即 struct type_name_t . [待校准@5089]

详情请见 ros2/rcl#932[待校准@5091]

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

支持针对发布者和订阅的类型调整 [待校准@5092]

定义类型适配器后,自定义数据结构可由发布者和订阅者直接使用,这有助于避免程序员和潜在源文件的额外工作。这在处理复杂的数据类型时尤其有用,例如将tcl的 “cv:: mat” 转换为ROS的 sensor_msgs/msg/Image 类型时。 [待校准@5093]

以下是转换 “std_msgs::msg::String `` to `` std::string” 的类型适配器的示例: [待校准@5094]

template<>
struct rclcpp::TypeAdapter<
   std::string,
   std_msgs::msg::String
>
{
  using is_specialized = std::true_type;
  using custom_type = std::string;
  using ros_message_type = std_msgs::msg::String;

  static
  void
  convert_to_ros_message(
    const custom_type & source,
    ros_message_type & destination)
  {
    destination.data = source;
  }

  static
  void
  convert_to_custom(
    const ros_message_type & source,
    custom_type & destination)
  {
    destination = source.data;
  }
};

以及如何使用类型适配器的示例: [待校准@5095]

using MyAdaptedType = TypeAdapter<std::string, std_msgs::msg::String>;

// Publish a std::string
auto pub = node->create_publisher<MyAdaptedType>(...);
std::string custom_msg = "My std::string"
pub->publish(custom_msg);

// Pass a std::string to a subscription's callback
auto sub = node->create_subscription<MyAdaptedType>(
  "topic",
  10,
  [](const std::string & msg) {...});

要了解更多,请参见 publishersubscription ) 的例子,以及更复杂的 demo. For more details, see REP 2007[待校准@5096]

get_callback_groups method removed from NodeBase and Node classes [待校准@5097]

[需手动修复的语法]``for_each_callback_group()`` method has replaced get_callback_groups() by providing a thread-safe way to access callback_groups_ vector. for_each_callback_group() accepts作为参数的函数,遍历存储的调用组,并将传递的函数调用为有效的函数。 [待校准@5098]

有关更多详细信息,请参阅本 pull request[待校准@5099]

add_to_wait_set method from Waitable class changes its return type from bool to void [待校准@5100]

之前,派生 Waitable 重写 add_to_wait_set 返回假失败时添加元素等,所以调用er不得不阻止这种返回值扔或处理错误。这个错误处理现在应该直接在 add_to_wait_set 方法上进行,必要时抛出。如果没有发生错误,则不需要返回任何内容。因此,这对于 Waitable 的下游用途来说是一个突破性的变化。 [待校准@5101]

详情请见 ros2/rclcpp#1612[待校准@5102]

get_notify_guard_condition method return type from NodeBaseInterface class改变了 [待校准@5103]

现在 rclcpprcl_guard_condition_t 周围使用 GuardCondition 类包装,因此 get_notify_guard_condition 返回对节点 “rclcpp:: guardcondition” 的引用。因此,这对于 NodeBaseInterfaceNodeBase 的下游用途来说是一个突破性的变化。 [待校准@5104]

详情请见 ros2/rclcpp#1612[待校准@5102]

ros2cli [待校准@4697]

ros2 topic pub will wait for one matching subscription when using --times/--once/-1 [待校准@5105]

使用 --times/--once/-1 标志时, ros2 topic pub 将等待找到一个匹配的订阅,然后开始发布。这避免了ros2cli节点在发现匹配的订阅之前开始发布的问题,这将导致一些首批消息丢失。当使用可靠的qos配置文件时,这尤其出乎意料。 [待校准@5106]

开始发布之前要等待的匹配订阅数量可以配置为 -w/--wait-matching-subscriptions 标志,例如: [待校准@5107]

ros2 topic pub -1 -w 3 /chatter std_msgs/msg/String "{data: 'foo'}"

在开始发布之前等待三个匹配的订阅。 [待校准@5108]

-w can also be used independently of --times/--once/-1 but it only defaults to one when combined with them, otherwise the -w default为零。 [待校准@5109]

看到https://github.com/ros2/ros2cli/拉/642细节。 [待校准@5110]

ros2 param dump default产量改变 [待校准@5111]

[需手动修复的语法]``ros2 param set`` now接受更多YAML语法 [待校准@5116]

以前,尝试将像 "off" 这样的string设置为string类型的参数是行不通的。这是因为 ros2 param set 解释命令行参数作为YAML,YAML认为 "off" 是boolean类型。的https://github.com/ros2/ros2cli/拉/684 ros2 param set 现在接受YAML转义序列 “!!str离“ 确保值视为string。 [待校准@5117]

Robot_state_发布者 [待校准@5118]

去除不推荐使用的 use_tf_static 参数 [待校准@5119]

已弃用的 use_tf_static 参数已从 robot_state_publisher 中删除。这意味着静态转换无条件地发布到 /tf_static 话题,并且静态转换在 transient_local 服务质量上发布。这是默认行为,也是 “tf2_ros:: changlistener” 类之前期望的行为,因此大多数代码不必更改。任何代码依靠 robot_state_publisher 转周期性调用y发布静态变换 /tf 必须更新订阅 /tf_static 作为 transient_local 订阅。 [待校准@5120]

rosidl_cmake [待校准@5121]

rosidl_target_interfaces() 的弃用 [待校准@5122]

CMake函数 rosidl_target_interfaces() 已被弃用,现在在调用ed时发出CMake警告。想要在生成消息/服务/动作的同一个ROS包中使用消息/服务/动作的用户应该调用 rosidl_get_typesupport_target() ,然后调用 target_link_libraries() ,以使他们的目标依赖于返回的类型支持目标。看到https://github.com/ros2/rosidl/拉/606细节,https://github.com/ros2/例程/拉/529使用新功能。 [待校准@5123]

几何2 [待校准@5124]

TF2Error::NO_ERROR等的弃用 [待校准@5125]

[需手动修复的语法] tf2 库使用枚举调用 TF2Error 返回错误。不幸的是,其中一个枚举器调用了ed NO_ERROR ,这与Windows上的宏冲突。为了弥补这一点,在 TF2Error 中创建了一组新的枚举器,每个枚举都有一个 TF2 前缀。以前的枚举器仍然可用,但现在已弃用,如果使用,将打印弃用警告。所有使用 TF2Error 枚举器的代码应更新为使用新的 TF2 前缀错误。看到https://github.com/ros2/geometry2/拉/349细节。 [待校准@5126]

[需手动修复的语法]static_transform_publisher更直观的命令行参数 [待校准@5127]

[需手动修复的语法] static_transform_publisher 计划过去常常接受这样的论点: ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 1 foo bar 。前三个数字是x、y和z的平移,后四个是四元数x、y、z和w,最后两个参数是父帧id和子帧id。虽然这有效,但它有几个问题: [待校准@5128]

  • 用户必须指定 * 所有 * 参数,即使只设置一个数字 [待校准@5129]

  • 读取命令行以弄清楚它发布了什么是很棘手的 [待校准@5130]

为了解决这两个问题,命令行处理已更改为使用标志,除了 --frame-id--child-frame-id 之外的所有标志都是可选的。因此,上面的命令行可以简化为: ros2 run tf2_ros static_transform_publisher --frame-id foo --child-frame-id bar 为了只改变翻译x,命令行将是: ros2 run tf2_ros static_transform_publisher --x 1.5 --frame-id foo --child-frame-id bar[待校准@5131]

本版本中仍然允许使用旧式参数,但已弃用,并将打印警告。它们将在未来的发行版本中被删除。看到https://github.com/ros2/geometry2/拉/392细节。 [待校准@5132]

转换侦听器自旋线程不再执行节点调用back [待校准@5133]

[需手动修复的语法]``tf2_ros::TransformListener`` no longer spins on the provided node object. Instead, it creates a callback group to execute callbacks on the entities it creates internally. This means if you have set the parameter spin_thread=true when creating a transform listener, you can no longer depend on your own callbacks to be executed. You must call a spin function on your node (e.g. rclcpp::spin),或者将您的节点添加到您自己的执行程序中。 [待校准@5134]

相关拉取请求: geometry2#442 [待校准@5135]

发布时间表 [待校准@5136]

2022年3月21日星期一-阿尔法 + RMW冻结 [待校准@5137]

ROS基础 1 包的初步测试和稳定性,以及RMW提供包的API和特征冻结。 [待校准@5138]

2022年4月4日星期一-冻结 [待校准@5139]

在Rolling Ridley中ROS基础 1 包的API和功能冻结。在此之后,仅应进行错误修复发行版本。新包可以独立发布。 [待校准@5140]

2022年4月18日星期一-分行 [待校准@5141]

来自Rolling Ridley的树枝。为ROS基地 1 包的滚动PRs, rosdistro 重新开放。简陋的开发版本从 ros-rolling-* 包转变为 ros-humble-* 包。 [待校准@5142]

2022年4月25日星期一-测试版 [待校准@5143]

ROS桌面 2 包的更新发行版本可用。要求一般测试。 [待校准@5057]

2022年5月16日星期一-发布候选人 [待校准@5144]

构建发布候选包。ROS桌面 2 包的更新发行版本可用。 [待校准@5059]

2022年5月19日星期四 -- 发行冻结 [待校准@5145]

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

2022年5月23日星期一-一般可用性 [待校准@5147]

发布公告。 rosdistro 为不起眼的PRs重新开放。 [待校准@5148]

1(1,2,3)

[需手动修复的语法] ros_base 变体在 REP 2001 (ros-base) 中有所描述。 [待校准@5149]

2(1,2)

[需手动修复的语法] desktop 变体在 REP 2001 (desktop-variants) 中有所描述。 [待校准@5065]