在单个 Docker 容器中开发 ROS 节点?

Developing ROS Nodes in individual Docker Containers?

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

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

但是这个想法有什么明显的缺点吗? docker 是否会在这种情况下引入显着的性能影响或其他障碍?

在 docker 容器中创建独立的 ROS 节点并不那么复杂,之前已经完成:

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

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

套接字通信: 正如您在 Networking with Docker: Don’t settle for the defaults, network access in Docker is done by additional interfaces, which will affect the TCP transmission of ROS messages. But a performance analysis in Docker network performance 中看到的那样,影响很小。

Nodelet 用法: 由于 nodelets 已加载到现有主机 ROS 节点中,ROS 节点之间的通信可以得到极大改善。使用 Docker,将无法使用 nodelets。

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