ROS2 Humble前瞻及新特性介绍

目录

一、前言

二、新特性

三、扩展功能


ROS2最新版本发布一晃已经半个多月了,网上现在还没有相关中文资料,我就来给大家做个搬运工和翻译官吧。

一、前言

HumbleHawksbill 是一个长期支持(LTS)版本,将支持到2027年5月。这是 Ubuntu 22.04(Jammy Jellyfish)的第一个 ROS 2版本。这个版本依赖两个操作系统: Ubuntu 22.04 Jammy Jellyfish (arm64和 amd64架构)和 Windows 10。

那么名字有什么意义呢?“谦卑”指的是“以尊敬的精神反思、表达或奉献”,玳瑁是一种遍布世界各地的海龟。玳瑁海龟很容易辨认,是因为它们标志性的喙。我们在社区的帮助下选择了这个名字。

同时我们公布了2023年5月的下一个 ROS 2发行版的名称:

Iron,Irwini

二、新特性

1.添加了一个新的 CMake 函数,用于生成带有包版本信息的头文件。它将从 package.xml 生成一个包含版本信息的头文件,并将其提供给链接到 my _ lib 库的目标。

project(my_project)
add_library(my_lib ...)
ament_generate_version_header(my_lib)
//引用
#include <my_project/version.h>
//头文件安装位置
set(VERSION_HEADER ${CMAKE_INSTALL_PREFIX}/include/my_project/my_project/version.h)

2.群体行为中的范围环境变量

与启动配置类似,现在默认情况下,环境变量的状态作用域为组操作。例如,在下面的启动文件中,执行的进程将回显值1(在 Humble 之前,它将回显值2)。如果希望禁用启动配置和环境变量的范围,可以将范围参数(或属性)设置为 false。

<launch>
  <set_env name="FOO" value="1" />
  <group>
    <set_env name="FOO" value="2" />
  </group>
  <executable cmd="echo $FOO" output="screen" shell="true" />
</launch>
import launch
import launch.actions

def generate_launch_description():
    return launch.LaunchDescription([
        launch.actions.SetEnvironmentVariable(name='FOO', value='1'),
        launch.actions.GroupAction([
            launch.actions.SetEnvironmentVariable(name='FOO', value='2'),
        ]),
        launch.actions.ExecuteProcess(cmd=['echo', '$FOO'], output='screen', shell=True),
    ])

3.添加了一个新的包,laun_ pytest,它可以作为 laun_ test 的替代品。Start _ pytest 是一个简单的 pytest 插件,它提供 pytest fixture 来管理启动服务的生命周期。

Check out the package README for details and examples.

4.允许匹配具有可调用

采用目标操作对象进行匹配的事件处理程序现在也可以采用可调用来进行匹配。

5.计算 Python 表达式时访问数学模块

在 Python 表达式替换(eval)中,我们现在可以使用来自 Python 数学模块的符号。

6.布尔值的替换

新的替换 NotSubstittion、 AndSubstittion 和 OrSubstittion 为执行逻辑操作提供了一种便捷的方法

<launch>
  <let name="p" value="true" />
  <let name="q" value="false" />
  <group if="$(or $(var p) $(var q))">
    <log message="The first condition is true" />
  </group>
  <group unless="$(and $(var p) $(var q))">
    <log message="The second condition is false" />
  </group>
  <group if="$(not $(var q))">
    <log message="The third condition is true" />
  </group>
</launch>

7.New actions

  • AppendEnvironmentVariable appends a value to an existing environment variable.

  • ResetLaunchConfigurations resets any configuration applied to the launch configuration

  • RosTimer acts like the launch TimerAction, but uses a ROS clock (so it can use simulation time, for example)

  • SetParametersFromFile passes a ROS parameters file to all nodes in a launch file (including node components).

8.将 ROS 参数传递给节点操作 

现在可以直接提供特定于 ROS 的节点参数,而无需使用带有前导—— ros-args 标志的 args:

<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'

Python 启动文件中 Node 操作的相应参数是 ros _ words:

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'],
        ),
    ])

9.对可组合节点的前端支持

我们现在可以启动节点容器,并从前端启动文件将组件加载到它们中

<launch>
  <node_container pkg="rclcpp_components" exec="component_container" name="my_container" namespace="">
    <composable_node pkg="composition" plugin="composition::Talker" name="talker" />
  </node_container>
  <load_composable_node target="my_container">
    <composable_node pkg="composition" plugin="composition::Listener" name="listener" />
  </load_composable_node>
</launch>
launch:
  - node_container:
      pkg: rclcpp_components
      exec: component_container
      name: my_container
      namespace: ''
      composable_node:
        - pkg: composition
          plugin: composition::Talker
          name: talker
  - load_composable_node:
      target: my_container
      composable_node:
        - pkg: composition
          plugin: composition::Listener
          name: listener

10.参数替换

通过使用新参数替换,可以使用 SetParameter 操作替换以前在启动时设置的参数值

<launch>
  <set_parameter name="foo" value="bar" />
  <log message="Parameter foo has value $(param foo)" />
</launch>

11.内容过滤主题

ContentFilteredTopics 支持更复杂的订阅,这表明订阅者不一定希望看到在 Topic 下发布的每个实例的所有值。当基础 RMW 实现支持此特性时,可以使用 Content Filted Topics 请求基于内容的订阅。

RMW Content Filtered Topics support

rmw_fastrtps

supported

rmw_connextdds

supported

rmw_cyclonedds

not supported

To learn more, see the content_filtering examples.

12.新的参数

ros2 launch has a --launch-prefix argument

这允许将前缀传递给启动文件中的所有可执行文件,这在许多调试情况下都很有用。与此相关的是,添加了—— start-prefix-filter 命令行选项以有选择地将前缀 from —— laun- prefix 添加到可执行文件。

ros2 topic echo has a --flow-style argument

这允许用户强制主题上数据的 YAML 表示形式的流样式。如果没有这个选项,ros2主题 echo/tf _ static 的输出可能类似于:

transforms:
- header:
    stamp:
      sec: 1651172841
      nanosec: 433705575
    frame_id: single_rrbot_link3
  child_frame_id: single_rrbot_camera_link
  transform:
    translation:
      x: 0.05
      y: 0.0
      z: 0.9
    rotation:
      x: 0.0
      y: 0.0
      z: 0.0
      w: 1.0

使用这个选项,输出类似于:

transforms: [{header: {stamp: {sec: 1651172841, nanosec: 433705575}, frame_id: single_rrbot_link3}, child_frame_id: single_rrbot_camera_link, transform: {translation: {x: 0.05, y: 0.0, z: 0.9}, rotation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}}]

13. rviz2

13.1 将纹理应用于任意三角形列表

我们已经添加了使用 UV 坐标将通过 URI 定义的纹理应用到任意三角形列表的能力。现在我们可以从纹理贴图中创建一个渐变拉取来代替默认的灰度。这将允许标记的复杂着色。为了使用它,您应该使用 vision _ msgs/Marker.msg 并填充题材资源、纹理、 uv _ 坐标和网格文件字段。

You can find more information here.

13.2 质量特性(包括惯性)的可视化

我们还增加了可视化惯性的能力。为此,在机器人模型下的“质量属性”中选择启用“惯性”:

 13.3 在 RViz 中可视化 YUV 图像

现在可以在 RViz 中直接可视化 YUV 图像,而不必首先转换为 RGB。

13.4 允许渲染超过100米的物体

默认情况下,RViz 只渲染距离相机100米以内的对象。一个新的配置属性称为“远平面距离”在 rviz 相机插件允许渲染距离配置。

三、扩展功能

1.gazebo

第六个长期支持版本Gazebo Fortress现在已经可以支持Humble了,你可以使用以下命令安装它:

sudo apt install ros-humble-desktop-full

亮点:

堡垒世界:试试堡垒演示世界,它可以同时展示许多新功能!如加入流体仿真!

传感器:支持十几个现成的传感器,包括新的分段摄像头、力扭矩和GPS;以及支持创建自己的传感器。

图形界面:3D视图比以往任何时候都有更多的功能,包括各种自省工具、灵活的摄像头控制、3D打印、卫星地图数据、控制面板等等!

功能丰富的世界:粒子效果、数字高程模型的高度贴图、动画人物。

SDFormat:描述您的模型从未如此简单。您是否一直希望使用度和四元数,或添加、删除、修改或替换包含文件的元素,或直接从Blender导出模型?

CLI:使用功能强大的命令行工具进行内省并与仿真交互

无显示渲染:现在可以使用EGL在没有窗口的情况下运行Ogre 2渲染。

Python API:Gazebo的大部分API都提供Python包装器,以便于编写脚本。

测试工具:新的测试工具使编写自动化测试更加容易。

渲染引擎:对Ogre 1和Ogre 2的现成支持,支持基于物理的渲染,以及新引擎的插件接口。

物理引擎:支持DART、Bullet和普通物理引擎,并具有与其他引擎的插件接口。

服务桥梁:可以建立从Gazebo到ROS的Topic或Service类型的联系!

2.Foxglove Studio

We’re excited to support ROS 2 Humble in Foxglove Studio and  rosbridge 

 上面是即将重写的3D可视化面板的屏幕截图

我们还有一个  rosbag2 MCAP storage plugin 可用于那些有兴趣的替代 sqlite 记录, 更多信息请查看 mcap.dev

3.FogROS 2

我们很高兴地宣布,ROS 2 Humble Hawksbill版本包括FogROS 2,这是加州大学伯克利分校的一个开源云机器人试点平台。使用亚马逊网络服务(AWS)等商业集群的云计算现在速度足够快,可以使用高性能硬件和GPU近实时地在云中执行安全的计算密集型机器人功能,如从视频创建SLAM地图、抓取规划和高维运动规划。FogROS 2提供了ROS 2功能,以简化机器人代码的部署。开发人员不需要更改他们的代码——他们只需要指定他们希望代码运行的计算机的AWS配置。FogROS 2协调启动硬件实例、安装软件和依赖项、保护机器人云通信以及启动云进程的细节。

在示例应用程序中,我们使用FogROS 2将计算密集型ROS 2节点部署到云中,用于SLAM、抓取规划和运动规划。对于Visual SLAM,我们在多核云计算机上运行了一个ORB-SLAM 2节点,速度提高了2倍。对于GRAP规划,我们在云中的GPU实例上运行了Dex Net节点,并获得了12倍的加速。对于运动规划,我们在96核云计算机上运行了运动规划模板,速度提高了28倍。

4.Hardware Acceleration in ROS 2

ROS 2 stack         Hardware Acceleration Architecture @ ROS 2 stack

    +-----------+          +---------------------------+
    |           |          |   acceleration_examples   |
    |user land  | +-----------------+------------------+--+-----------------+
    |           | |     Drivers     |     Libraries       | Firmware |Cloud |
    +-----------+ +-----------------+-+-------------------------+-----------+
    |           | | ament_1| ament_2  |                   |     |    |      |
    |           | +---------------------------------------+ fw_1|fw_2|cloud1|
    | tooling   | | ament_acceleration|colcon_acceleration|     |    |      |
    |           | +---------------------------------------------+-----------+
    |           | |    build system   |  meta build       | firmware | cloud|
    +-----------+ +--------+----------+-------+-----------+-+--------+--+---+
    |    rcl    |          |                  |             |           |
    +-----------+          |                  |             |           |
    |    rmw    |          |                  |             |           |
    +-----------+          +                  +             +           +
    |rmw_adapter|       Pillar I          Pillar II    Pillar III   Pillar IV
    +-----------+

ament_acceleration :制作宏和实用程序,在 ROS 2构建系统及其开发流程中包含硬件加速。

ament_vitis:CMake 宏和实用程序,将 Vitis 平台包含到 ROS2构建系统及其开发流程中。

colcon-hardware-acceleration:Colcon-core 的一个扩展,包括硬件加速功能。

ros2acceleration:ROS2命令行工具的加速命令。

tracetools_acceleration:在硬件加速工作小组中,为 ROS2软件包提供 LTtng 追踪提供程序包装。

acceleration_firmware:硬件加速固件的基础 ROS 2软件包。用于跨厂商组织固件依赖。

adaptive_component:自适应 ROS2节点计算的可组合容器。在运行时在 FPGA、 CPU 或 GPU 之间进行选择。

为机器人构建基于Linux的定制生产级操作系统--Yocto

很高兴分享meta ros Yocto/OE配方的扩展(PR 3),该扩展允许在使用Yocto(Honister)的同时构建支持ros 2 Humble的生产级定制Linux操作系统。

为什么 Yocto/petaLinux 非常适合机器人硬件加速?

硬件加速包括创建自定义计算体系结构以提高计算性能。简而言之,通过设计专门的加速内核,可以为机器人构建定制的大脑,以加快其响应时间。这在使用自适应计算和FPGA时变得特别可行,根据之前的基准测试,FPGA在机器人与ROS之间提供最佳结果。

创建这样的定制计算架构涉及到硬件和软件的定制,因此:Yocto。虽然复杂,但Yocto与硬件加速相结合有助于提供高性能生产级机器人系统。

以下方案已通过各种流行的SBC验证:

 Kria™ KR260 Robotics Starter Kit是一个基于Kria SOM的机器人和工厂自动化应用开发平台。借助本地ROS 2谦逊支持,它使机器人专家能够以ROS 2为中心的开发流程。

Kria™ KV260 starter kit是第一台自适应单板计算机K26的开发平台。KV260为边缘视觉和机器人应用提供了一种紧凑的电路板。 

 ZCU102评估套件使设计师能够快速启动汽车、工业、视频和通信应用程序的设计。此套件具有Zynq®UltraScale+™ MPSoC具有四核Arm®Cortex®-A53、双核Cortex-R5F实时处理器和Mali™-400 MP2图形处理单元

 ZCU104评估套件使设计师能够快速启动嵌入式视觉应用程序的设计,如监控、高级驾驶员辅助系统(ADAS)、机器视觉、增强现实(AR)、无人机和医疗成像。此套件具有Zynq®UltraScale+™ MPSoC EV设备具有视频编解码器,支持许多通用外围设备和接口,用于嵌入式vision用例。

 Jetson Nano™ Developer Kit是一款小型、功能强大的计算机,它允许您并行运行多个神经网络,用于图像分类、对象检测、分割和语音处理等应用。所有这些都在一个易于使用的平台上,运行功率仅为5瓦。

 NVIDIA Jetson AGX Xavier Developer Kit是一款用于自动机器的AI计算机,在30W以下的嵌入式模块中提供GPU工作站的性能。Jetson AGX Xavier专为机器人、无人机和其他自动机器设计。

PolarFire SoC Icicle工具包是一个低成本的开发平台,可用于评估具有五核Linux功能的RISC-V微处理器子系统、创新Linux、实时执行、低功耗功能以及PolarFire SoC FPGA的丰富外围设备。

5.节点图的硬件加速

随着机器人应用程序包含AI、CV和其他计算密集型工作负载,在ROS中实现硬件加速已成为当务之急。通过硬件加速,这些应用程序可以以更高的吞吐量和更好的性能/瓦特执行更多功能。实现这些好处通常特定于硬件实现,因此需要从ROS中抽象出来。

 在Foxy中使用硬件加速的节点示例图(上图)与在Humble中使用类型自适应的节点示例图(下图)。类型自适应减少了节点管道中从CPU到GPU的拷贝,同时提高了CPU和GPU之间的并发性。

类型适应

ROS主题可以调整为更适合使用类型调整的硬件加速的格式(REP-2007)。使用自适应类型的节点可以发布和/或接收自适应类型。使用自适应类型的节点需要提供从标准类型转换为自适应类型的功能,反之亦然。这使节点图能够使用一种适应的类型,该类型可以提高CPU和硬件加速的并发性,从计算任务中卸载CPU,并消除CPU和硬件加速器之间的内存拷贝。

类型协商

通过使用自适应类型的ROS节点图,我们可以进一步优化图中节点之间使用的类型。支持类型协商(REP-2009)的节点可以作为发布者和订阅者共享其支持的类型列表,并具有指示其首选项的权重。ROS将审查参与类型协商的发布者和订阅者,并针对偏好进行优化,同时保持与不支持类型协商的节点的兼容性。首选项是反映性能或类型成本的一种方式,应该由节点的开发人员进行调整,但可以由应用程序开发人员覆盖。

Jetson AGX Xavier简介,Foxy上为89ms,Humble上为32ms,对相同的节点图进行类型调整

随着类型适应和类型协商提高了性能,进程内主题在ROS中的传递成为瓶颈。Nsight Systems用于分析消息传递,以确定需要改进的领域。rcl中进行了更改。cpp减少共享内存指针的拷贝,并检查打印调试消息。

在Foxy中的1080p CUDA缓冲区上按顺序操作的ROS2节点图与在Humble中使用类型自适应的相同节点图;在Jetpack 5.0开发者预览版、Ubuntu 20.04和Jetson AGX Orin和Xavier上以Hz为单位测量的结果。节点图旨在通过最小化计算工作负载来测试框架性能,将重点放在ROS客户端库中的开销上。

在像素处理方面,Jetson AGX Orin 在这次测试中从 Foxy 的0.55千兆像素/秒增加到 Humble 的40亿像素/秒。

使用类型自适应和类型协商的硬件加速节点图提高了性能、并发性和性能/瓦特。还有其他实现硬件加速的替代方法,这些方法分叉ROS、绕过ROS主题或引入与现有节点的不兼容性。类型自适应和类型协商是ROS的固有功能,与现有节点兼容,并对所有类型的硬件加速器开放,包括GPU、DSP、NN加速器和其他硬件块。

我们正在NITROS(NVIDIA Isaac Transport for ROS)中实施类型适配和类型协商,以优化ROS2 Humble的硬件加速;这将于6月底在Isaac ROS发布。

6. Fast DDS

Fast DDS被选为ROS 2 Humble的默认DDS中间件,允许ROS 2用户使用可靠且性能优化的实现开发其机器人应用程序,是因为如下优点:

实时行为

DDS安全

发现服务器

共享内存传输

同步和异步发布模式

团队还开发了这些功能:

Content Filtered Topic feature内容筛选主题功能:(CFT)为主题提供过滤功能,使用户在订阅主题时能够根据特定的标准分割他们感兴趣的数据子集。

Add remote servers and modify server locators at runtime 在运行时添加远程服务器并修改服务器定位器:现在,可以通过编程方式添加和修改参与者的远程服务器列表,在服务器或客户端运行时,正在运行的服务器或客户端应该连接到这些服务器。

Static Discovery new format 静态发现新格式:新的交换格式减少了传输静态数据所需的网络带宽。

XML support for Fast DDS CLI

完全事件支持:发布服务器和订阅服务器的QoS通知不兼容。incompatible QoS notification for Publisher and Subscriber.

 7. MoveIt

亮点:

Hybrid Planning 混合规划:使用(较慢的)全局运动规划器和(较快的)局部运动规划器,使机器人能够在线和在动态环境中解决不同的任务

TOTG:现在是默认的参量化方法

Ruckig:已经改进的时间参量化和急剧平滑,允许非零的初始/最终条件

MoveIt Setup Assistant:现在支持ROS2

MoveIt Config Utilities:简化参数加载

Lots of new ROS 2 drivers for arms (Universal Robotics and more announced soon)

8.rclc - The ROS 2 C-API for micro-controllers

 rclc package补充了ROS客户端支持库(rcl),为C编程语言提供了完整的ROS 2客户端库。也就是说,rclc并没有在rcl之上添加新的类型层(如rclcpp和rclpy do),而是只提供方便的功能,以简化rcl类型的编程。

使用 Humble,它不仅支持所有通信类型,如订阅、计时器、服务、客户端等,还支持参数、操作和生命周期。它有自己的 Execector,支持更确定和实时的执行管理。它作为一个完全兼容的 ROS 2编程接口,用于微控制器上的微型 ROS 应用程序。概述、概念、教程、支持的微控制器和 RTOSes 可以在 micro.ros.org上找到。

亮点: 

Added support for ROS 2 Parameters including command-line tools

Added support for ROS 2 Actions

Added support for Lifecycle Services in the rclc lifecycle nodes

API to remove subscriptions (and other handles) from Executor at runtime 

API to add subscriptions (and others handles) with a Quality-of-Service parameter

API to add subscriptions with a context pointer parameter 这允许回调访问全局数据结构。

9.micro-ROS

micro-ROS能够彻底改善其整体性能,使框架更少的内存消耗,更可靠,更多的多线程能力和实时准备

​​​​

10.Nav2

有很多变化从Galactic 到Humble的发布。不过,您可以在我们的迁移指南中找到完整的说明

Galactic to Humble — Navigation 2 1.0.0 documentation

亮点:

①对 Smac Planner 在运行时、组织、启发式和添加新的 State Lattice Planner 等方面进行了大量改进。

②为Nav2应用程序开发人员添加Python3 API,可以从pythonic API访问Nav2的所有系统。

③整个堆栈运行时性能的改进减少了节点数量,显式控制了执行器,并在默认情况下启用了组合,因此所有Nav2都在一个进程中,从而将CPU开销减少了15%,内存减少了70%。经过测试,可以在树莓pi上轻松运行,并为自定义机器人代码留下了足够的空间。

④包含新算法:State Lattice, Rotation Shim, Simple Smoother, Constrained Smoother, (soon to add) Velocity Smoother

⑤所有适当参数的动态重新配置

⑥在Nav2核心架构中添加了一个新的平滑服务器,用于全局路径平滑

⑦增加了对Lifecycle Manager和Nav2 bringup的respawn支持

⑧几个新的文档页、教程等。还有新的系统架构图:

以上就是所有内容啦,后续还会出更多ros2的使用开发攻略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值