在我目前的算法中,我正在与机器人进行一些交互。机器人正在运行ROS主机,它会发布所有数据本身。运行算法的计算机连接到ROS主站并控制机器人。
算法的计算基于机器人的当前状态(将通过ROS发布)。对于这种情况,必须始终具有机器人的当前状态。然而,同时,我的算法需要不断地根据当前机器人状态做出决策。因为我需要并行完成一些工作,所以我考虑过使用线程。
我的想法是以下
我有一个中央存储(基本上是一个python模块)" vars",它只包含不同类型的变量,其中包括当前的机器人状态。我的想法是,从ROS更新这些变量,所以我总是在这些变量中有最新数据,我可以根据这个中央存储变量进行计算。
我的问题
感谢您的任何建议。
答案 0 :(得分:0)
您应该能够像您建议的那样构建系统。只要它很小,你就不应该有任何问题,但是你应该重新考虑一下你是否想要在更大的环境中运行或长时间运行的东西。
我在设计中看到的主要问题是:
vars
模块中,使其难以理解。作为改进,我建议不要存储值,存储拥有它们的类并对它们负责。如果接口更容易,您可以提取接口,但您始终知道哪个模块负责什么。当添加具有不完美名称的奇怪变量时,这也有帮助,因为至少你有模块名称可以为你提供一些暗示。
对于测试,如果您不接受整个模块,只会获取所需的数据,这会有所帮助。您可以使用一个小的包装器来获取模块,提取所需的值并将它们传递给更多可测试的方法。
还要处理python(GIL)中的全局解释器锁。您可能无法获得预期的并行性。
同样,当你有一个更大的设置或你想要保持更长时间的设置时,这一切都是有意义的。对于原型和实验,您提出的设置应该可以正常工作。