跳转至

TogetherROS与ROS性能对比

ROS2 vs ROS1

先来看下两个大版本ROS的系统架构。

image-20220613205034571

在这张图中,左侧是ROS1,右侧是ROS2,两者最明显的变化,就是Master。

在ROS1中,应用层里Master这个节点管理器的角色至关重要,所有节点都得听它指挥,类似是一个公司的CEO,有且只有一个,如果这个CEO突然消失,公司肯定会成一团乱麻。ROS2把这个最不稳定的角色请走了,节点可以通过另外一套discovery——自发现机制,找到彼此,从而建立稳定的通信连接。

中间层是ROS封装好的标准通信接口,我们写程序的时候,会频繁和这些通信接口打交道,比如发布一个图像的数据,接收一个雷达的信息,客户端库会再调用底层复杂的驱动和通信协议,让我们的开发变得更加简单明了。

在ROS1中,ROS通信依赖底层的TCP和UDP协议,而在ROS2中,通信协议更换成了更加复杂但也更加完善的DDS系统。

如果是在进程内需要进行大量数据的通信,ROS1和ROS2都提供了基于共享内存的通信方法,只不过名字不太一样而已。

最下边是系统层,也就是可以将ROS安装在哪些操作系统上,ROS1主要安装在Linux上,ROS2的可选项就很多了,Linux、windows、MacOS、RTOS都可以。

ROS2系统架构

ROS2相比ROS1最大的变化,除了省略了Master之外,应该就是通信系统的变化了。ROS1中基于TCP/UDP的通信系统,频繁诟病于延迟、丢数据、无法加密等问题,ROS2中的DDS在通信层面的功能就丰富多了。

image-20220613205104143

DDS其实是物联网中广泛应用的一种通信协议,类似于我们常听说的5G通信一样,DDS是一个国际标准,能够实现该标准的软件系统并不是唯一的,所以我们可以选择多个厂家提供的DDS系统,比如这里的OpenSplice、FastRTPS,还有更多厂家提供的,每一家的性能不同,适用的场景也不同。

不过这就带来一个问题,每个DDS厂家的软件接口肯定是不一样的,如果我们按照某一家的接口写完了程序,想要切换其他厂家的DDS,不是要重新写代码么?这当然不符合ROS提高软件复用率的目标。

为了解决这个问题,ROS2设计了一个ROS Middleware,简称RMW,也就是制定一个标准的接口,比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来,这样就把问题交给了最熟悉自家DDS的厂商。对于我们这些用户来讲,某一个DDS用的不爽,只要安装另一个,然后做一个简单的配置,程序一行的都不用改,轻松更换底层的通信系统。

举一个例子,比如我们在产品开发时,可以先用开源版本的DDS满足基本需求,部署交付的产品时,再更换为商业版本更稳定的DDS,这样可以减少开发成本。

TogetherROS vs ROS2

image-20220613205127358

TogetherROS就是在这样一个ROS2架构的基础上,继续进行了优化,原本DDS通信的部分依然保留,可以适配不同厂家的DDS通信系统,在此之上,针对功能性的组件进行了众多优化和补充,在上一节中我们也给大家介绍了这套框架。

TogetherROS在数据传输和AI处理方面,到底有多少提升呢,我们来看具体的对比数据。

通信效率量化对比

先来看下操作系统至关重要的数据通信功能,我们针对ROS中最为常用的大数据传输模式——话题通信进行了测试。

image-20220613205218719

在单元测试中,使用同样的算力平台,分别安装TogetherROS和ROS2系统,然后在其中运行一个话题通信的发布者与订阅者,实现不同数据量的传输。经过数据统计,我们可以看到,在数据通信延时方面,随着数据量的增加,ROS2系统在通信延时、发送端和接收端的CPU占用率上,都会程线性增加,可以预想,在数据量较大的情况下,系统的通信负荷会非常严重。

而在TogetherROS中,由于使用了零拷贝的传输机制,传输数据量的增加,并不会导致延时和CPU占用率的增加,极大程度节省了系统资源。

image-20220613205239165

在场景测试中,我们尽量模拟真实机器人的应用,使用TogetherROS和ROS2系统连接了多个相机、雷达和里程计等传感器,作为大量数据的输入来源,继续进行了测试,结果和之前的单元测试类似,ROS2系统此时的CPU占用率已经超过90%,想要运行数据传输之外的应用功能,几乎是不可能的,通信延时也达到了15ms以上,这在某些实时性要求比较高的应用中,是不可接受的。

而在TogetherROS中,CPU占用和通信延时也微乎其微,更多系统资源都可以让给应用处理。

CV图像处理量化对比

再来看下智能机器人中视觉感知层面的处理,TogetherROS集成了地平线Hobot CV视觉加速库,通过底层芯片中的硬件引擎,软硬件协同,可以提升常用CV算子的性能,降低系统资源的消耗,例如高斯滤波、图像缩放、畸变校正等常用的视觉处理方法。

image-20220613205311900

而且在接口风格上兼容OpenCV,可以做到与OpenCV混合编程,便于视觉应用的开发。

image-20220613205323200

具体测试CV加速库的效率,与OpenCV中软件实现的效率进行对比,我们分别对比图像缩放的帧率,图像旋转的帧率,高斯滤波的帧率,通过Hobot CV视觉加速库运行的帧率可以做到OpenCV的2到3倍,甚至更多倍。

模型推理

在AI处理方面,ROS2原生系统中并没有太多支持,只能依赖社区中的资源,很难充分发挥硬件的算力。

image-20220613205420324

对此,TogetherROS集成了Hobot DNN模型推理库,集成了众多开源模型,借助底层芯片中的AI引擎BPU,提供充足的算力保障,开发者实际使用中,就不用花费很多时间在模型的调教和数据的训练上,基于这套系统,很快就可以部署人工智能应用啦。

传感器驱动管理

image-20220613205454043

在传感器层面,是大量数据传输的来源,TogetherROS也重点进行了优化,针对常用的传感器类型,系统中内置参数配置、系统调用和内存管理机制,同样是在芯片的硬件层面进行了加速和隔离,保障数据流的稳定生成。

机器人开发工具

机器人开发过程中的性能优化和调试,也是非常繁杂的工作,TogetherROS自带火焰图等工具,可以实现系统层面的调优和测试,便于开发者挖掘系统性能。

image-20220613205512713

以上这些都是TogetherROS在ROS系统之上的优化和补充,未来更多特性也会不断迭代推出,让智能机器人的开发更加简单。

图片1