我面临的情况是,我有多个机器人,大多数都运行完整的 ROS 堆栈(包含 Master),我想通过另一个消息传递框架有选择地将一些主题路由到其他机器人(其中一些不运行 ROS)。
实现这一点的简单方法是,设置一个订阅相关 ROS 主题的节点并通过网络发送该主题,然后另一个节点发布它(如果是它的 ROS)。太好了,但是不得不做这么多的序列化似乎很奇怪。现在消息从它的消息类型到 ROS 序列化,回到消息类型,然后到不同的序列化格式(目前是 Pickle),通过网络,然后回到消息类型,然后回到 ROS 序列化,然后回到消息类型。
所以问题是,我可以简化吗?如何对 ROS 序列化数据进行操作(即订阅时无需 rospy 为我自动反序列化)? http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers建议我可以将连接信息作为字符串的dict访问,这可能是解决方案的一半,但另一端如何获取连接信息并重新发布它而不首先反序列化然后立即重新序列化?
编辑:我刚刚找到https://gist.github.com/wkentaro/2cd56593107c158e2e02,这似乎解决了一半。它使用 AnyMsg 来避免在 ROS 订阅者端反序列化,但是当它重新发布时,它仍然反序列化并立即重新序列化消息。我问的是不可能的吗?