У меня есть вопрос, касающийся сообщений 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>>
.
Есть ли способ, которым я могу сделать эту работу?