ROS2性能分析

news2024/12/23 15:42:14

文章:Performance Analysis of ROS2

作者:Deepak Charan Logavaseekaran, Rakshith Macha Billava

编辑:点云PCL

欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。未经博主同意请勿擅自转载。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。未经作者允许请勿转载,欢迎各位同学积极分享和交流。

背景介绍

ROS(机器人操作系统)是一个开源框架,用于促进机器人应用程序的开发。ROS有助于管理复杂性并促进应用程序的快速原型开发。使用ROS框架的主要优势之一是ROS提供的互操作性和模块化性。它支持多种编程语言,包括Python和C++,并提供即插即用的节点结构,甚至跨多个设备的网络环境中也可以使用。ROS1最初是由Willow Garage于2007年创建的,在爱好者中非常流行。然而,它也有自己的缺陷,为了满足需求,ROS2被开发出来。ROS2采用完全不同的架构,提供更好的模块化和平台无关的支持,ROS2承诺在不同编程语言之间提供类似的API,并通过分层实现加快新功能的部署速度,其中底层基础库对于所有编程语言都保持相同。ROS2还提供了一个集中化的系统,每个节点都能够发现其他节点,支持异步服务和动作,并且取消了对ROS主节点的依赖。ROS2使用DDS中间件,因此提供了所有相关的服务质量策略,它还提供了各种调试和可视化工具,并且还扩展了对Windows和macOS的支持。尽管ROS2被研究人员和爱好者广泛使用,但在实时环境中其性能仍存在一些问题。在本研究中,我们评估了ROS2的性能,并了解其在实时生态系统中的相关性。

本文任务是分析ROS2节点之间的通信性能,记录了执行分析的过程和所得结果。

解决方案描述

硬件说明 

本评估的所有测试都是在NVIDIA Jetson Orin开发套件上进行的,该套件配备了12核ARM Cortex A78处理器和64GB eMMC固态硬盘。使用的是搭载Jetson Orin设备的Jetson JetPack SDK 5.1.1,运行着Ubuntu 22.04(Linux Kernel 5.10.X)操作系统,主要使用ROS2 Humble进行测试。

rclpy vs rclcpp

rclpy和rclcpp是ROS2的客户端API,用于设置/配置节点或与ROS2核心进行交互,它们分别是Python和C++的实现,大部分API及其使用方式相似。然而根据我们发现的一个问题ros2 latency repository,rclpy在发布大型数据时比rclcpp慢30倍至100倍。该问题已在ROS2 Foxy发布之前得到解决和合并。我们能够克隆展示该问题的存储库,并且能够以最小的更改运行测试,确认性能差异并非30倍的数量级。

为了评估rclcpp和rclpy之间的性能差异,我们创建了一个简单的测试,发布一块数据并测量这两种实现发布消息所需的时间。我们首先生成要发布的数据并实例化一个定时器,定时器在调用发布API之前启动,并在发布调用之后立即停止,在rclpy和rclcpp的实现中,方法保持一致,我们观察到,rclpy发布消息所需的时间始终比rclcpp多约6倍,如图1所示。

a9a847fc6734b0a9a910d8102cdee9c0.png

图1:rclpy与rclcpp发布时间

接着进行了测试,比较了rclpy和rclcpp实现的延迟,为了计算延迟,首先创建了具有所需字节数的消息,然后记录纪元时间并调用发布API,立即在发布时间之后,将纪元时间发送到订阅者,在订阅者节点中,我们在接收到消息时立即记录纪元时间,然后接收发布时间并计算差值以获取消息的延迟,此测试重复进行约15次,并将15个结果的平均值用于我们的评估。我们观察到,rclpy实现的延迟约为rclcpp实现的3倍,如图2所示。

cc150d257ffc1ac5dcccc38f56046457.png

图2:rclpy与rclcpp延迟

由于实验室中使用了多个设备上的多个ROS2版本,我们还评估了ROS2版本,以查看不同版本对结果是否有影响。我们在ROS2 Humble和Foxy版本上运行了相同的延迟测试,这个测试使用了rclcpp在Humble和Foxy版本上的实现,根据我们的观察,我们没有找到任何确凿的证据表明一个版本比另一个版本更好,如图3所示,尽管对于较大的消息,Foxy的表现稍好一些。

eec998ad8392d442d013101be919ab99.png

图3:ROS2 Humble与Foxy延迟

由于ROS2使用DDS中间件,它本身也提供了各种QoS策略,为了本研究的目的,我们想评估使用可靠和尽力QoS策略的影响。在前面的评估中使用的延迟测试也在这里使用,只是修改了QoS策略,同样地,我们无法找到一个相对于另一个的明显改进,如图4所示。由于测试是在只有两个节点的情况下进行的,因此没有网络流量,这意味着没有或几乎没有数据包丢失,因此,我们推断无论是最佳尽力还是可靠的QoS策略实现,都会发送类似的数据而无需重复,这可能是结果相似的原因。

54718ce547b28648934d9bd30b90e81b.png

图4:ROS2可靠与尽力QoS

专家建议

在ROS2方面的经验,Marc提出了以下建议:

* 在ROS2的C++实现中使用事件执行器(event executor)。

* 通过Linux操作系统关闭CPU的IDLE模式。

* 将CPU密集型任务固定在单独的CPU核心上。

* 将Linux调度程序更改为循环轮询(Round Robin)。

* 将多个节点编译到单个进程中,避免使用IPC,并利用共享内存。

在采纳这些建议后,我们发现对于我们特定的测试用例,这并没有显著改善延迟, 此外,我们与Peter Gabriel Adamczyk教授及其学生Yisen Wang和Kieran Nichols取得了联系。尽管他们没有测试过以MB为单位发送大型消息的ROS2,但他们提到他们对ROS2的经验有些相似,他们还建议使用实时Linux内核,并在ROS2连接中使用UDP而不是TCP,由于我们的所有节点都在单个设备上运行,网络协议的选择对我们的实验并不适用,然而,我们希望在将来考虑使用Linux的RT PREEMPT补丁。

结束语

根据上述研究结果,可以明显看出ROS2的C++实现在速度方面优于Python版本,然而尽管ROS2开发人员努力改进实时性能,但该框架对于时间关键和实时系统仍然不够适用。我们的测试结果表明与ROS2在实时场景下所提供的优势相比,其引入的消息传输开销过大,因此,目前阶段不建议将ROS2用于实时应用。

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

de822be0d2192d01e65361ae4c7a83d3.png

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享与合作方式:微信“cloudpoint9527”(备注:姓名+学校/公司+研究方向) 联系邮箱:dianyunpcl@163.com。

点一下“在看”你会更好看耶

b7ca4be2435d0020b85f716c3de281fe.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3-dubbo框架,应用程序,模块领域模型Model对象的初始化

在上一章中我们详细看了服务配置ServiceConfig类型的初始化,不过我们跳过了AbstractMethodConfig的构造器中创建模块模型对象的过程 那为什么会在Dubbo3的新版本中加入这个域模型呢,主要有如下原因 之前dubbo都是只有一个作用域的,通过静态类 属性共享 增加域模型是…

MacBook充电限制工具AlDente Pro

AlDente Pro是一款适用于Mac操作系统的小工具,可以帮助您限制电池充电量以延长电池寿命。通常情况下,电池在充满的状态下会继续接受电源充电,这可能会导致电池寿命缩短。使用AlDente Pro,您可以设置电池只充到特定的充电水平&…

使用omp并行技术实现快排加速

快排基本原理: 快速排序可以说是最为常见的排序算法,冒泡排序时间复杂度达到了O(N2),而桶排序容易造成浪费空间。快排(Quicksort)就成为了不错的选择。 1、原理:快排需要找一个数作…

【Nexus】上传jar至Nexus的两种方式

目录 一、前言二、pom文件添加推送代码配置1、配置pom.xml文件2、配置maven的settings.xml文件3、执行上传①、点击Maven-Lifecycle-deploy-Run Maven Build②、出现以下提示则上传成功③、这时,在Nexus的nexus-snapshot-hosted(快照类型的托管资源库&am…

【Python】函数进阶 ③ ( 函数作为参数传递 )

文章目录 一、函数参数传递类型二、代码示例 - 函数参数传递类型 一、函数参数传递类型 之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ; 函数 也可以作为参数 , 传入另一个函数中 ; 在 Python 中&#xff0…

主成分分析——SPSS实例分析

主成分分析是用原始变量的线性组合来表示主成分,且主成分彼此之间互不相关,且能反映出原始数据的绝大部分信息。 一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,我们可考虑使用主成分分析的方法来对数据进行简化…

智能的突破或许在智能之外

人工智能已经取得了不少令人瞩目的成果,但是仍然存在着许多问题和挑战,这些问题和挑战也许只能通过跨学科的合作和人类的智慧来解决,因此智能的突破在智能之外。在人工智能的决策过程中,往往会缺乏人类的道德判断和社会责任感&…

2018年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2018 年全国硕士研究生入学统一考试 管理类专业硕士学位联考 英语(二)试卷 考生须知 1.考生必须严格遵守各项考场规则。 2.答题前,考生将答题卡上的“姓名”、“考生编号”等信息填写清楚,并与准考证上的致…

【SpringCloud】Eureka 案例上手稍微带点原理

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po,mapper,controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…

Qt Xml的读、写、修改、删除

一、说明 Xml文件的创建、读取、修改、删除以下图格式为例。 二、导入xml QT core gui xml三、创建Xml void MainWindow::Xml_Write(QString path) {//! 打开或创建文件QFile file(path);if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; //! …

【MySQL篇】Select语句原理详解

文章目录 MYSQL体系结构模块详解架构分层连接层服务层存储引擎 SQL的执行流程连接查询缓存语法解析和预处理词法解析语法分析预处理器 查询优化器执行计划存储引擎存储引擎基本介绍如何选择存储引擎? 执行引擎举例说明 对于一个开发工程师来说,了解一下 …

C语言读写ini配置文件

环境 windows 10 64bitClion 2023.1 ini简介 ini 文件格式是一种用于保存配置信息的简单文本格式。它通常由多个节(section)组成,每个节包含多个键值对(key-value pair)。 下面是 ini 文件的基本语法规则 一个ini文件由多个节组成,每个节用方括号([])括起…

《Java黑皮书基础篇第10版》 第17章【笔记】

第十七章 二进制I/O 17.1 引言 文件可以不严谨的分类为文本文件和二进制文件。文本文件指的是可以用文件编辑器进行查看和修改的,二进制文件则不可以使用文本编辑器查看和修改。 例如,Test.java文件储存在文本文件中,因此可以用文本编辑器…

MapReduce程序基本架构

MapReduce程序是以(键/值)对的形式来处理数据的,即可以通过以下的形式来表示: map: (K1,V1) ➞ list(K2,V2) reduce: (K2,list(V2)) ➞ list(K3,V3) 不令人惊奇的是,这是一种超越一般数据的数据流表示形式。在本文中…

使用PyMC进行时间序列分层建模

在统计建模领域,理解总体趋势的同时解释群体差异的一个强大方法是分层(或多层)建模。这种方法允许参数随组而变化,并捕获组内和组间的变化。在时间序列数据中,这些特定于组的参数可以表示不同组随时间的不同模式。 今天,我们将深…

ood的5C解题法(1)----管理类面试对象设计

管理类 概念 可以模拟/代替管理员日常工作的系统 下面用停车场系统做演示 答题流程 Clarify What:除题目中的名词外,从管理的名词考虑 parking lot是什么类型的?如果楼有多层,停车位也是多层,则parking lot->pa…

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板

Windows Server 2019 OVF, updated Jun 2023 (sysin) - VMware 虚拟机模板 2023 年 6 月版本更新,现在自动运行 sysprep,支持 ESXi Host Client 部署 请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/,查看最新…

5、产品经理的工作职责OR主要工作技能和工具

1、产品经理的工作职责 我们通过一个案例来了解产品经理的工作职责。 老板让你给他点餐,你应该怎么做?你需要考虑哪一些方面的问题? 例如:你预算多少,预算是十块钱还是100块还是1000块。有没有忌口,口味…

【MYSQL篇】Update语句原理详解

文章目录 前言缓冲池Buffer PoolInnoDB 内存结构redo logundo logBinlog 总结 前言 前面的文章我们已经对MySQL的查询语句的执行流程进行了说明,感兴趣的可以去看看: 【MySQL篇】Select语句原理详解 本篇文章我们来聊聊 MySQL更新语句的执行原理。更新…

Win7系统提示Windows Defender无法扫描选定的文件解决方法

Win7 64位系统提示“Windows Defender无法扫描选定的文件”怎么办呢?使用Windows Defender扫描文件,结果弹出如下图窗口,该怎么解决呢,参考下文,一起来解决Win7系统提示“Windows Defender无法扫描选定的文件”的解决方法。 原因分析: 这是因为开启Defender扫描压…