埃卢索尔 (能言善辩
)
能言善辩的埃卢索 是 ROS 2 的第五个版本。
支持的平台
Eloquent Elusor 主要支持以下平台:
1 级平台:
Ubuntu 18.04(仿生):
amd64
和arm64
Mac macOS 10.14(Mojave)
Windows 10(Visual Studio 2019)
二级平台:
Ubuntu 18.04(仿生):
arm32
三级平台:
Debian Stretch (9):
amd64
,arm64
和arm32
OpenEmbedded Thud (2.6) / webOS OSE:
arm32
和x86
有关 RMW 实现、编译器/解释器版本和系统依赖性版本的更多信息,请参见 REP 2000.
安装
ROS 2 发布的新功能
我们想重点介绍几项功能和改进:
每节点日志记录 - 节点的所有 stdout/stderr 输出都记录在 ~/.ros 中
海龟 (也可回传至 Dashing)
RMW 实施:
新的第 2 级实施: rmw_cyclonedds (也可回传至 Dashing)
环境变量 仅限本地主机 将通信限制为本地主机
MacOS Mojave 支持
跟踪仪器 用于 rcl 和 rclcpp
在开发过程中 雄辩的元票据 GitHub 上包含了正在进行的高级别任务的最新状态,并引用了包含更多细节的具体票单。
自 "潇洒 "发布以来的变化
几何参数
"(《世界人权宣言》) geometry_msgs/msg/Quaternion.msg
接口现在默认初始化为一个有效的四元数,其值如下:
以下是拉取请求的详细信息: https://github.com/ros2/common_interfaces/pull/74
静态变换广播员和听众现在使用 QoS 耐用性 瞬态本地
在 /tf_static
主题。与 ROS 1 中的锁定设置类似,静态变换只需发布一次。新的侦听器将从所有存活且之前发布过的静态广播器接收变换。所有发布者都必须更新以使用此耐久性设置,否则变换监听器将无法收到他们的信息。更多详情请参见此请求: https://github.com/ros2/geometry2/pull/160
rclcpp
应用程序接口与 get_actual_qos()
在《潇洒走一回》中引入的 get_actual_qos()
上的 出版商基地
和 SubscriptionBase
之前返回的是 rmw 类型、 rmw_qos_profile_t
但这样就很难在创建其他实体时重复使用。因此,我们将其更新为返回一个 rclcpp::QoS
而不是
现有代码需要使用 rclcpp::QoS::get_rmw_qos_profile()
方法。例如
空白 my_func(缢 rmw_qos_profile_t 及样品; rmw_qos);
/* 以前:*/
// my_func(some_pub->get_actual_qos());
/* 现在*/
my_func(some_pub->;get_actual_qos()->;get_rmw_qos_profile());
直接中断而不是使用 tick-tock 的理由是,这是一个新函数,预计用户不会经常使用。此外,由于只有返回类型发生了变化,因此添加一个不同的新函数将是进行弃旧周期的唯一方法,而 get_actual_qos()
是最合适的名称,因此我们不得不为该方法取一个不太明显的名称。
发布者和订阅类的应用程序接口中断
为了简化 "发布者 "和 "订阅 "的构造,构造器的应用程序接口发生了变化。
由于旧签名使用的是 rcl 类型,而新签名使用的是 节点基础接口
类型,以便获取它现在需要的附加信息,而仅从 rcl 类型无法获取所需的附加信息。如果新签名对贡献者有帮助的话,可以向后移植,但由于发布者和订阅几乎都是使用工厂函数或其他更高级的 API 创建的,我们预计这对大多数用户来说都不是问题。
请参阅原始 pr 了解更多细节,并在出现问题时发表评论:
编译器对 add_on_set_parameters_callback
自 Eloquent 第 2 版补丁发布以来 (2020-12-04)
用户应保留 rclcpp::Node::add_on_set_parameters_callback
否则其回调可能会被取消注册。为帮助识别未使用返回句柄的错误,我们添加了一个警告。
rmw
由于增加了出版商和订阅选项,API 中断
"(《世界人权宣言》) rmw_create_publisher()
方法增加了一个新参数,其类型为 缢 rmw_publisher_options_t *
.这个新结构为新发布者提供了选项(除类型支持、主题名称和 QoS 之外)。
"(《世界人权宣言》) rmw_create_subscription()
方法去掉了一个参数、 bool 忽略本地出版物
类型的新选项所取代。 缢 rmw_subscription_options_t *
.......。 忽略本地出版物
选项移至新的 rmw_subscription_options_t
类型
在这两种情况下,新参数都是指针,永远不会为空,因此 rmw 实现应检查选项是否为空。此外,还应将选项复制到相应的 rmw 结构中。
更多详情,请参阅此拉取请求和相关的拉取请求:
ros2cli
已弃用 ros2msg 和 ros2srv
CLI 工具 ros2msg
和 ros2srv
已被弃用。它们已被工具 ros2接口
还支持动作和 IDL 接口。您可以运行 玫瑰2 界面 --帮助
供使用。
ros2node
ros2node info 中新增了服务客户端。作为该更改的一部分,Python 函数 ros2node.api.get_service_info
已更名为 ros2node.api.get_service_server_info
.
rviz
TF2 缓冲区
TF2 缓冲区现在必须有一个定时器接口。
如果没有给出定时器接口,则会出现异常。
例如
tf = 标准::共享<;tf2_ros::缓冲器>;(获取时钟());
// 接下来的两行是 Eloquent 的新内容
汽车 定时器接口 = 标准::共享<;tf2_ros::创建定时器>;(
此->;获取节点基本接口(),
此->;获取节点定时器接口());
tf->;设置创建定时器接口(定时器接口);
// 像之前一样将缓冲区传递给变换监听器
变换监听器 = 标准::共享<;tf2_ros::变换监听器>;(*tf);
rcl
ROS 命令行参数更改
为了应对日益复杂的界面和现在扩展的配置选项集,ROS CLI 的语法已经发生了变化。举例来说,使用 Dashing 语法的命令行如下
ros2 run some_package some_node foo:=bar __params:=/path/to/params.yaml __log_level:=WARN --user-flag
使用 Eloquent(及以后版本)语法书写为
ros2 run some_package some_node --ros-args --remap foo:=bar --params-file /path/to/params.yaml --log-level WARN ----user-flag
这种显式语法提供了新的功能,例如单参数赋值 --参数 名称:=值
.如需更多参考资料和理由,请查阅 ROS 命令行参数设计文档.
警告
以前的语法已被弃用,将在下一个版本中删除。
已知问题
[ROS2/ROSIDL#402]
find_package(PCL)
会干扰 ROS 界面的生成。解决方法:调用find_package(PCL)
后rosidl_generate_interfaces()
.[ros2/rclcpp#893]
rclcpp::Context
的参照周期不会被破坏。rclcpp::GraphListener
.这会导致内存泄漏。由于存在破坏 ABI 的风险,因此尚未向后移植修复程序。
发布前的时间表
发布前的几个里程碑:
- 星期一9 月 30 日(阿尔法)
第一批核心软件包已发布。从现在开始可以进行测试(某些功能可能还未上线)。
- 星期五10 月 18 日
冻结核心软件包的应用程序接口(API)和功能 在这之后只能发布错误修复版本。新软件包可以独立发布。
- 星期四10 月 24 日(测试版)
提供核心软件包的更新版本。对最新功能进行更多测试。
- 11 月 13 日星期三(候选发布)
提供核心软件包的更新版本。
- 星期二11 月 19 日
Freeze rosdistro.没有 Eloquent 在
rosdistro
将被合并(发布公告后重新开放)。