使用一个回调函数从多个订阅者分配信息

information allocation from multiple subscribers using one callback function

本文关键字:信息 分配 回调 一个 函数      更新时间:2023-10-16

我有一个C++的 ROS 问题。

我有一个作业,要求我从另一个程序生成的许多主题中获取信息。 基本上。 另一个程序制作了一堆主题,从海龟模拟器 ROS 教程中发布一些基本数据,称为 Pose。 问题是,我不确定如何从所有不同的主题来源获取我需要的所有信息。我知道我需要订阅一个主题才能获取其信息,并且我已经知道如何获取所有主题名称并打开对它们的订阅。我不清楚的是我是否必须将一个唯一的回调函数传递给我订阅的每个新主题。或者,如果有一种方法可以创建一个可以传递到所有订阅中的泛型回调函数。

这是我到目前为止的代码

void getTTurtles(char tType, vector < TurtlePose > Tarray) {
int i;
string tname;
stringstream topicName;
//TurtlePose TPose;
ros::master::V_TopicInfo alltopics;
//get all topic names 
ros::master::getTopics(alltopics);
for (int i = 0; i < alltopics.size(); i++) {
topicName.clear();
topicName.str("");
tname = getTurtlename(alltopics[i]);
if (tname[0] == 'T') {
Tarray[i].topicname = alltopics[i].name;
Tarray[i].name = tname;
topicName << "/" << TPose[i].name << "/pose";
ros::Subscriber sub_tur = n.subscribe < turtlesim::Pose > (tname, 1, poseCallback);
}
}
return false;
};

如您所见,我有一个函数可以为我获取所有主题名称。 这允许我只抓取名称以 T 开头的那些(该程序的目的是让我自己的收集他创建的所有 T 海龟,同时避开他创建的 Xturtle,所以这个函数意味着给我一个海龟及其位置的列表。我抓住海龟主题名称的名称,也可以从中获取实际的海龟名称。但是我需要提取第三个元素。海龟::p所有海龟主题正在传输的信息。所以我使用主题名称(T1、T2、T3 等)订阅该主题并向其传递回调函数,但我不确定如何正确编写回调函数以适当地将姿势信息分配到正确的位置。例如。如何确保当回调函数作为/T1/pose 发布的结果被调用时,确保它传输的信息最终出现在 Tarray[0].pose 而不是 Tarray[1] 到 [2] 中,同时还让/T3/pose 进入 Tarray[2].pose。等等等等。

解决方案必须是可扩展的,因为正在制作的 T 龟主题的数量可以并且可能会改变。

它们是否是一种编写订阅或回调函数的方法,以便在创建时传入特定容器,以便在该特定订阅从其订阅的主题获取信息时使用?

提前感谢您的帮助?

如果您的输入数据相同,U 可以使用任意数量的订阅者进行一次回调,并且在声明订阅者时,您可以将任意数量的参数传递给它,以便您可以在回调中分离传入节点的数据(通过将其推出 分隔全局向量等)