首页 > 解决方案 > 在单个 Docker 容器中开发 ROS 节点?

问题描述

我目前正在计划一个相当大的 ROS 项目,该项目将包含 15 个以上的节点,这些节点使用 Python2.x 或 C++ 开发,相互通信。我们将尝试将不同的任务隔离为单个节点,以保证单元可测试性和模块化,并提高未来项目的可重用性。

问题是为每个单独的节点创建一个 docker 容器是否值得努力,是否有任何缺点。最大的好处是我们可以拥有完全不同的系统,从开发人员个人电脑到构建机器,然后是节点部署到的设备。Docker 将依赖项和环境配置保存在一个可管理的位置,并解决了许多障碍。

但是这个想法有什么明显的缺点吗?在这种情况下,docker 是否存在显着的性能损失或其他障碍?

标签: pythonc++dockerdevopsros

解决方案


在 docker 容器中创建隔离的 ROS 节点并不复杂,之前已经完成:

由于工作量没有那么高,我认为如果这些点在您的项目中得到解决,那么测试、可重用性、集成、交付等方面的改进是绝对值得商榷的。

由于 CPU 性能在 Docker 中没有缺点,因此您应该仔细研究 ROS 节点的通信,这意味着在您的容器化 ROS 节点之间传递消息。在这里你可以找到你应该知道的两个缺点:

Socket 通信: 正如你在Networking with Docker: Don't meet the defaults中看到的,Docker 中的网络访问是通过额外的接口完成的,这会影响 ROS 消息的 TCP 传输。但对Docker 网络性能的性能分析显示影响很小。

Nodelet 使用: 由于nodelet加载在现有的主机 ROS 节点中,因此 ROS 节点之间的通信可以大大提高。使用 Docker,将无法使用 nodelet。

总而言之,您必须考虑在您的 ROS 节点之间传输哪些消息以及传输多少消息。如果传输了许多图像或其他大型消息,则绝对建议进行进一步分析。除了对节点进行更复杂的处理外,我找不到与在分离的 Docker 容器中使用 ROS 节点的概念相反的值得注意的点。


推荐阅读