我有一个关于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>>类型。
有什么办法能让这件事成功吗?
发布于 2022-10-17 11:17:01
您可以在这里正确地使用模板,方法如下:
template <typename MsgType>
void createListener(std::string topicName)
{
auto subscription_ = this->create_subscription<MsgType>(topicname, 10, [this]{}, this, _1));
//adding the created subscriber to a list is already done
}然后可以调用此函数,例如:
createListener<nav_msgs::msg::Path>("topicName")https://stackoverflow.com/questions/60284498
复制相似问题