在ROSCon 2019大会上,来自iRobot公司的 Alberto Soragna、Juan Oxoby 和 Dhiraj Goel 分享了他们在低成本嵌入式平台上使用机器人操作系统 2(ROS 2)的经验。他们试验了不同的数据分发服务(DDS)实现,减少了应用程序的 CPU 和内存使用量,从而提高了性能。
iRobot 公司正在为低成本嵌入式平台开发消费型机器人,他们在自己的嵌入式硬件上尝试运行 ROS 2。ROS 2 在台式机和微控制器上运行良好,但在小型 Linux 计算机上使用 ROS 比较困难。iRobot 公司的机器人基于 Raspberry Pi 2,配备了 1GB 内存和一个 900MHZ 的四核 ARM Cortex A7 CPU。为了检验 ROS2 对他们来说是否是一个可行的选择,他们愿意接受 ROS 消耗不超过 20%CPU 和 20MB 内存,这样的消息延迟是可接受的,而且消息丢失为零。
iRobot 在开发方面面临的一个主要挑战是,在原型阶段,他们有大约 1000 个机器人连接到同一个网络,这会产生大量的通信开销,他们使用自己开发的工具来分析这些开销。他们使用这个工具来创建数据来分析和查看有多少消息是准时到达、小幅延迟或大幅延迟的。
在演讲中,他们先是演示让 CPU 和内存使用都超出他们设定的目标,CPU 使用开销为 33%,内存为 153MB,而不是 20MB,大部分开销用于DDS通信层。在用旋风 DDS 代替这一层时,得到了较好的效果。现在,示例应用程序的 CPU 和内存使用量不超过最大值,只使用了 13%的 CPU 和 15.82MB 内存。因此,开发人员需要考虑他们的 DDS 实现,如果有必要需要切换到不同的 DDS 实现,以获得性能提升。
iRobot 公司第二个改进方法是查看开销的实际来源。内存的使用率非常高,因为 DDS 为 ROS 中的每个对象创建了一个可以与另一个主题通信的进程。他们通过添加黑名单将通信限制在彼此知道的节点上。这将内存使用量减少到原来的 45%。
他们最后关注的是 ROS 2 的进程内管理器。ROS 2 当前版本=的进程内管理器会通过RMW层发送元消息。iRobot 创建了一个新的进程内管理器,它减少了通信开销,从而减少了延迟和 CPU 使用。这样做减少了 45%的 CPU 使用量,但是仍然有很大的内存开销。新的进程内管理器被添加到 ROS 2 的主版本中,并将出现在即将发布的版本中。
更多信息,请查看用来创建性能分析的工具,或者 ROS 2 提供的不同服务质量策略,以便设置预期的服务质量)。这样可以帮助开发人员更好的控制机器人应用程序。
原文链接:
iRobot’s Experience in Running ROS2 on Linux-Based Embedded Platforms
评论