SOSS

本章介绍了系统综合器 (SOSS),这是一种提供不同子系统之间协议转换的工具。 此类复合系统可称为 ROS-SOSS。 要查看当前实施状态,请参阅 SOSS 存储库

动机和介绍

不同消息传递系统的生态系统庞大而多样。 由于没有一个系统被一致认为是所有应用程序的最佳选择,我们只能考虑如何将不同的消息传递系统结合在一起,以弥合在现代智能机器人解决方案中发挥关键作用的不同类型应用程序之间的差距。 用于机器人间通信的最佳协议可能不是远程操作员通信或最终用户通信的最佳协议。

这会产生可扩展性问题。 如果在机器人部署中使用 N 个不同的消息传递框架,并且在它们之间传递 M 个不同的消息类型,那么手动在它们之间创建相互兼容的桥梁可能会成为一个 O(MN^2) 复杂度问题。 这促使我们使用高度模块化、用户友好的集成系统,使尽可能多的不同消息传递框架能够尽可能自动地实现互操作性。 O(MN^2) 问题可以简化为 O(N) 复杂度,其中为每个 N 框架编写一个插件,并且所有 M 消息类型都会在其 N 个不同表示之间自动转换。

我们为此使用的集成服务称为系统合成器 (SOSS)。 基本 SOSS 包只是 C++ 库中定义的一些抽象接口,以及单个 soss 应用程序。 每个不同的消息传递系统都有自己的插件库,例如 DDS-SOSS、Websocket-SOSS、ROS-SOSS,它们实现了基本 SOSS 的抽象接口。 运行 soss 应用程序时,您将提供一个配置文件,该文件描述了您希望不同的消息传递系统如何相互连接。 然后,soss 应用程序可以找到满足配置文件要求的插件,并在启动时加载这些插件。 当消息开始在每个消息传递系统内移动时,soss 应用程序将根据提供给它的配置文件抓取、转换和推送消息到不同的系统边界。 可以同时运行任意数量的“soss”实例,但它们将彼此独立运行,因此确保它们的配置不重叠非常重要。

基础 SOSS 包还提供了一些 CMake 工具,帮助为在编译时需要静态消息定义的消息传递系统自动生成消息定义。 对于具有动态消息类型的消息传递系统,插件可以在运行时自动处理翻译,因此不需要自动生成。

要深入了解如何使用 SOSS,我们建议阅读 the documentation provided by eProsima.