如何将预序列化数据发布到 ROS?
How can I publish pre-serialized data to ROS?
我面临这样的情况,我有多个机器人,大多数 运行 完整的 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 订阅者端反序列化,但是当它重新发布时它仍然反序列化并立即重新序列化消息。我问的是不可能的吗?
只是为了解决这个问题,事实证明您可以发布 AnyMsg
s,只是链接示例选择不发布。
我面临这样的情况,我有多个机器人,大多数 运行 完整的 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 订阅者端反序列化,但是当它重新发布时它仍然反序列化并立即重新序列化消息。我问的是不可能的吗?
只是为了解决这个问题,事实证明您可以发布 AnyMsg
s,只是链接示例选择不发布。