ROS2 动态消息模板
ROS2 Dynamic messages template
我有一个关于 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>>
类型。
有没有办法让我做到这一点?
您可以通过执行以下操作在此处正确使用模板:
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")
相关文章:
- boost::进程间消息队列引发错误
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- C++中的动态铸造故障
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 控制允许动态运行c++的并发操作数
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- ROS2 动态消息模板
- 动态生成Protobuf消息并将指针返回到它
- C /Linux:动态分配产生两个不同的错误消息
- boost asio读取动态大小消息
- 动态创建新的 protobuf 消息
- protobuf-net 中的动态 protobuf 消息
- Static_assert——一种动态定制错误消息的方法
- 删除动态创建的二维数组时出现访问冲突消息
- 如何使用协议缓冲区创建动态消息