Шаблон сообщений ROS2 Dynami c - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть вопрос, касающийся сообщений ROS2 или, возможно, просто стандартного C ++, возможно, кто-то из вас пробовал что-то подобное раньше или может сказать мне, что то, что я пытаюсь выполнить sh, не будет работать.

Я пытаюсь создать библиотеку, которую я могу использовать для быстрого создания узла ROS2, динамического добавления издателей и / или подписчиков, в зависимости от ситуации, перед запуском узла. Проблема, с которой я сталкиваюсь, заключается в том, что ROS2 использует типы сообщений, такие как std_msgs::msg::String. Пример источника можно найти на github . Источник использует следующий код для создания подписчика:

subscription_ = this->create_subscription<std_msgs::msg::String>("topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));

Я хотел бы создать функцию, которая может создать подписчика, используя данный тип сообщения, например:

void createListener(std::string topicName, 'messagetype')
{
    auto subscription_ = this->create_subscription<'messagetype'>(topicname, 10, [this]{}, this, _1));
    //adding the created subscriber to a list is already done
}

Это будет Позвольте мне использовать одну и ту же функцию, но при этом я могу использовать разные сообщения, такие как:

nav_msgs::msg::Path
geometry_msgs::msg::Point

без необходимости создания новой функции для каждого типа сообщений. Кажется, я не могу найти тип шаблона, который используется в функции create_subscribtion<>(), все, что я могу найти, - это то, что каждое сообщение создает свой собственный тип. std_msgs::msg::String вернет тип std_msgs::msg::String_<std::allocator<void>>.

Есть ли способ, которым я могу сделать эту работу?

...