1

我有一个关于 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>>类型。

有没有办法让我完成这项工作?

4

0 回答 0