Как я могу опубликовать предварительно сериализованные данные в ROS? - PullRequest
0 голосов
/ 26 февраля 2019

Я сталкиваюсь с ситуацией, когда у меня есть несколько роботов, большинство из которых используют полные стеки ROS (в комплекте с Master), и я хотел бы выборочно направлять некоторые темы через другую среду обмена сообщениями к другим роботам (некоторые из которых не работают с ROS).).

Наивный способ сделать это работает, а именно настроить узел, который подписывается на рассматриваемые темы ROS и отправляет его по сети, после чего другой узел публикует его (если это ROS).Отлично, но кажется странным, что нужно так много сериализовать.Прямо сейчас сообщение переходит от своего типа сообщения к сериализации ROS, обратно к типу сообщения, затем к другому формату сериализации (в настоящее время Pickle), через сеть, затем обратно к типу сообщения, затем обратно к сериализации ROS, затемвернуться к типу сообщения.

Итак, вопрос в том, можно ли это упростить?Как я могу работать с сериализованными данными ROS (т. Е. Подписаться без поддельной автоматической десериализации для меня)?http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers предполагает, что я могу получить доступ к информации о соединении в виде набора строк, что может быть половиной решения, но как другой конец может взять информацию о соединении и повторно опубликовать ее без предварительной десериализации и последующей немедленной повторной инициализации?

Редактировать: Я только что нашел https://gist.github.com/wkentaro/2cd56593107c158e2e02, который, кажется, решает половину этого.Он использует AnyMsg, чтобы избежать десериализации на стороне подписчика ROS, но затем, когда он повторно публикует, он все же десериализуется и немедленно повторно сериализует сообщение.Это то, что я спрашиваю, невозможно?

1 Ответ

0 голосов
/ 01 марта 2019

Просто чтобы замкнуть цикл на этом, оказывается, вы можете опубликовать AnyMsg s, просто связанные примеры решили не делать этого.

...