机器人处理单元和机器人核心

2022-10-28 10:15:28 浏览数 (1)

机器翻译:discourse.ros.org/t/robotic-processing-unit-and-robotcore/27562


机器人处理单元和机器人核心

代码语言:javascript复制
Robotic Processing Unit and ROBOTCORE

从硬件加速ROS 2管道到机器人处理单元(RPU) 9线程,我很高兴地分享我们已经公开发布并开源了ROS 2硬件加速工作组机器人处理单元21子项目的设计文件。

机器人处理单元(RPU)是一种机器人专用的处理单元,它使用硬件加速,并将机器人计算有效地映射到其CPU、FPGAs和GPU,以获得最佳性能。特别是,它专门在底层计算资源上改进机器人操作系统(ROS 2)相关的机器人计算图。

这个子项目的目标是为工作组和其他机器人架构师提供一个参考硬件蓝图,用于构建硬件加速的ROS 2图,为每项任务使用最佳的加速器。为此,该项目利用现有的现成硬件加速开发平台。特别是AMD和NVIDIA的流行产品,将16个CPU、一个GPU和一个FPGA打包在一起。由此产生的组件用于原型化机器人专用处理单元,旨在在ROS 2和机器人计算图方面表现最佳。

组装不同开发板的零件可以3D打印。设计文件在存储库中公开,组装说明非常简单:

步骤图像描述 0

这是机器人处理单元的分解图。这应该有助于指导您自己的构建过程。首先将电源线分别焊接到KR260和AGX Orin板上。您需要在每个机器人开发套件的电源插孔引脚上这样做。 1

用4个M3螺栓(ISO7046)和4个M3螺母(DIN934)将KR260板拧到KR260适配器上。 2

使用开发套件中包含的相同原装螺栓将AGX Orin板拧到AGX Orin适配器上。 3

连接两个dev上先前焊接的电线。PYBE30-Q24-S12-T DC-DC转换器的电路板。功率输入应该来自AGX Orin,调节输出到KR260。 4

将PYBE30-Q24-S12-T DC-DC转换器、AGX orin和KR260拧紧至底座。使用10x M3螺栓(ISO7046)和10x M3螺母(DIN934)。 5

最后,固定盖子的4个孔,并用4个M5螺栓(ISO7046)连接底座和盖子。 机器人处理单元将用于在社区工作组内基准测试和进一步开发ROS 2 API兼容的硬件加速工具和机器人知识产权(IP)核心。最后,我们加速机器人1将提供机器人处理单元的商业支持1和加固版本(机器人核心)10,以进一步激励其使用。

大概值得一提的是,除非你的机器人应用需要机器学习或者计算机视觉,否则这个硬件很可能是大材小用。ROS 2节点和底层通信非常轻量级,几乎可以在任何可以运行Ubuntu的嵌入式SBC上正常工作(例如,最新的Raspberry Pi)。

Raspberry Pi SBCs很棒,我用它们造了很多机器人。它们是简单机器人原型和开始接触机器人的人的一个很好的起点,但是它们很快就不能满足许多机器人应用。我鼓励你去ROS 2硬件加速工作组,试着了解一下我们在那里做的工作以及加速器背后的价值。这包括为构建计算图创建定制计算架构的可能性。有大量的项目和文献可以阅读,我们一直在制作的基准可能有助于您的理解。

而且,你似乎强烈地忽略了机器人是决定性的机器。在计算中满足时间期限(实时)是最重要的特性,但是在设计机器人计算时,其他特性也是相关的,包括任务开始和完成之间的时间(延迟),在给定时间内完成的工作总量(带宽或吞吐量),或者任务每次都在完全相同的时间框架内发生(确定性)。由于CPU的可用性,它们被广泛用于机器人,但是它们很难在提供高吞吐量的同时提供实时和安全保证。行业中满足时间期限的实际策略是对系统进行费力的、经验性的和逐个案例的调整。机器人技术中的这种“*CPU打地鼠”方法是不可持续的,并且难以扩展,因为在CPU中缺乏硬件支持的时序安全事件驱动编程接口。硬件加速(使用FPGAs、GPU或其他加速器)为这个问题提供了答案。它允许机器人架构师为机器人创建符合实时和带宽要求的定制计算架构,同时降低功耗。

当然,你可能不想使用这种类型的硬件来“学习机器人学”:wink:,但在自主移动(AMRs、自动驾驶X、建筑、采矿等)、工业操纵和医疗保健机器人(例如手术机器人)中有大量的用例,你会惊讶地发现这有多符合需求。

大概值得一提的是,除非你的机器人应用需要机器学习或者计算机视觉,否则这个硬件很可能是大材小用。

以我的经验来看并非如此。加速器在涉及整个机器人堆栈的机器人应用中非常有用,从传感到感知、地图、定位、运动控制、低级控制,一直到驱动。它们可以帮助你更快地计划抓握或更快地避开障碍。它们甚至可以帮助你加速ROS 2坐标系的转换(tf2 3的基准)。

你可能会这样想的原因是因为没有足够多的公开可用的加速内核用于(除了ML和CV)机器人任务,但会有。

由于CPU的可用性,它们被广泛用于机器人,但是它们很难在提供高吞吐量的同时提供实时和安全保证。行业中满足时间期限的实际策略是对系统进行费力的、经验性的和逐个案例的调整。机器人技术中的这种“*CPU打地鼠”方法是不可持续的,并且难以扩展,因为在CPU中缺乏硬件支持的时序安全事件驱动编程接口。硬件加速(使用FPGAs、GPU或其他加速器)为这个问题提供了答案。它允许机器人架构师为机器人创建符合实时和带宽要求的定制计算架构,同时降低功耗。

我对硬件工作组不是很了解,但是我可以问一下您计划如何在这个架构中实现实时保证吗?FPGA在实时确定性方面很棒,但GPU在确定性方面通常比CPU差,因为它们没有集成到RTOS中,并且您只能使用NVIDIA的默认调度程序。

另外,你在CPU上运行RTOS了吗?据我所知,Jetson平台不支持任何RTOS,只有英伟达汽车版的Orin支持基于QNX的操作系统。

我对硬件工作组不是很了解,但是我可以问一下您计划如何在这个架构中实现实时保证吗?FPGA在实时确定性方面很棒,但GPU在确定性方面通常比CPU差,因为它们没有集成到RTOS中,并且您只能使用NVIDIA的默认调度程序。

我同意并分享你对GPU的担忧。与CPU类似,它们拥有以内存为中心的冯诺依曼架构,这使得确定性和实时性比其他计算基板更具挑战性。FPGAs和MCU通常对此响应更好,并且在针对(硬)实时时,相对来说是更容易使用的解决方案。机器人处理单元注意到了这一点,并将大量计算打包在一起,包括16个CPU、一个GPU和一个FPGA,混合了AMD和NVIDIA的技术。下图从较高的层面说明了这一点:

除了这些用于计算的大型构件,这两组中的每一组都包含专门用于实时的额外计算单元。在AMD的Kria KR260的情况下,除了FPGA(和软核的可能性),你有2核32位Arm Cortex-R5F实时处理器(CPU最大频率600MHz),其中你可以运行裸机或RTOS(例如,FreeRTOS或NuttX是很好的选择)。同样,Jetson AGX Orin具有Jetson传感器处理引擎(SPE),这是一种Arm Cortex-R5 MCU,也可以像FreeRTOS一样运行RTOS。总的来说,在机器人处理单元中,你有很多硬实时的选择,只要你适当地设计事情。这些SOC(以及它们相互连接的组)的挑战就在架构中,这就是我们在ROS 2硬件加速工作组中要解决的问题,也是REP-2008如此重要的原因(在单一、一致、以ROS为中心的流程中简化对各种加速器的支持)。

如果你想知道机器人处理单元中各组之间的互连,它是在一个公共以太网数据总线中互连的,这允许将机器人中使用的传统控制驱动方法与数据驱动相结合。它也非常符合DDS和大多数DDS供应商的基本假设。我们主要用PCIe和以太网做了大量测试,确定以太网是满足时间期限的最佳选择。PCIe很有前途,在吞吐量方面也很棒,但在尝试实时功能时,它的行为真的很奇怪。

另外,你在CPU上运行RTOS了吗?据我所知,Jetson平台不支持任何RTOS,只有英伟达汽车版的Orin支持基于QNX的操作系统。

AMD的Kria KR260为开源Xen虚拟机管理程序提供支持,并为各种CPU提供RTOSs组合。我对此进行了广泛的测试,尽管集成起来很复杂,但我还是推荐它。它提供了非常好的结果。在Jetson AGX Orin的情况下,您有RedHawk Linux开源RTOS支持,但您在某种意义上是正确的,更通用的RTOS,如QNX,似乎只适用于驱动(高级)解决方案。

不过,这应该不会让你太惊讶。NVIDIA的开源方法一直备受争议,被一些人称为破坏开源。引用莱纳斯·托沃兹(2012)的话:

我也很高兴地公开指出,Nvidia是我们与硬件制造商之间最糟糕的麻烦之一,这真的很可悲,因为Nvidia试图向Android市场出售芯片——大量芯片。英伟达是我们接触过的最差的公司。

即使在今天,在他们的ROS包中,你也会发现大量二进制格式的静态库,你无法适应你的需要。NVIDIA继续(在我看来)在许可方面玩着有趣的游戏,分叉ROS Apache 2.0(或类似的,商业上友好的)代码,并根据他们的需要重新许可。这是我这些天对他们的主要批评。我过去抱怨过这一点,这导致了许可证的变更,然而这一趋势仍在继续。

现在,英伟达仍然很难合作。他们花了几年时间才认识到,如果没有ROS,他们的GEMs方法一文不值。幸运的是,他们做到了,现在他们的话题都是关于ROS:伸出舌头!

我喜欢这个想法,但我真的想知道,这也延伸到ROS机器人公司的列表,就是,你如何在产品中部署ROS2,无论是RPU还是任何其他用于此目的的板(特别是当不基于x86时)。在某个开发板上安装ubuntu并不能解决问题——至少对我来说是这样。没有合适的嵌入式linux,因此buildroot或openembedded使您能够: 使用优化的,可能是PREEMPT_RT内核 创建一个SBOM和管理许可有点体面 创建原子更新 不依赖其他公司用预构建的二进制文件/包来支持你的硬件。 去掉不需要的东西 在使用的平台上优化 成本优化的缩减 … LG不再更新meta-ros 7,我真的很奇怪为什么似乎没有人真正关心…


英文原文更精彩!


0 人点赞