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]
安装
来。 [待校准@5069]
此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>
launch:
- node:
pkg: demo_nodes_cpp
exec: talker
ros_args: '--log-level debug'
相应参数 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]
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) {...});
要了解更多,请参见 publisher 和 subscription ) 的例子,以及更复杂的 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]
现在 rclcpp
在 rcl_guard_condition_t
周围使用 GuardCondition
类包装,因此 get_notify_guard_condition
返回对节点 “rclcpp:: guardcondition” 的引用。因此,这对于 NodeBaseInterface
和 NodeBase
的下游用途来说是一个突破性的变化。 [待校准@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]
[需手动修复的语法]``--print`` option转储命令 deprecated 。 [待校准@5112]
默认情况下,它打印到stdout: [待校准@5113]
ros2 param dump /my_node_name[需手动修复的语法]``--output-dir`` option转储命令 deprecated 。 [待校准@5114]
要将参数转储到文件,请运行以下命令: [待校准@5115]
ros2 param dump /my_node_name > my_node_name.yaml
[需手动修复的语法]``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]
已知问题 [待校准@4348]
来。 [待校准@5069]
发布时间表 [待校准@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]