我有一个关于 ROS2 消息或可能只是标准 C++ 的问题,也许你们中的一个人以前尝试过类似的东西,或者可以告诉我我想要完成的事情不起作用。
我要创建的是一个库,可用于快速创建 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>>
类型。
有没有办法让我完成这项工作?