распределение информации от нескольких абонентов с использованием одной функции обратного вызова

У меня есть вопрос C ++ ROS.

У меня есть задание, которое требует от меня получения информации по ряду тем, созданных другой программой. в принципе. эта другая программа создает кучу тем, в которых публикуются некоторые базовые данные, называемые «Позы», из учебников по симулятору черепах. проблема в том, что я не уверен, как получить всю необходимую мне информацию из разных тематических источников. Я знаю, что мне нужно подписаться на тему, чтобы получить ее информацию, и я уже знаю, как получить все названия тем и открыть для них подписки. что мне неясно, так это то, должен ли я передавать уникальную функцию обратного вызова в каждую новую тему, на которую я подписываюсь. или если есть способ сделать одну универсальную функцию обратного вызова, которая может быть передана во все подписки.

это мой код для этого до сих пор

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-Turtles, избегая при этом его созданных Xturtles, так что эта функция означала дать мне список из черепах и их местоположения.). Я беру название тематических названий черепах, и из этого я могу также получить настоящее название черепах. но есть третий элемент, который мне нужно извлечь. информация о turtlesim :: pose, которая передается по всем темам Tturtle. поэтому я использую имя темы (T1, T2, T3 и т. д.), чтобы подписаться на эту тему и передать ей функцию обратного вызова, но я не уверен, как правильно написать функцию обратного вызова для надлежащего распределения информации о позе в правильное местоположение. например. как убедиться, что когда функция обратного вызова вызывается в результате публикации / T1 / pose, чтобы убедиться, что передаваемая информация попадает в Tarray [0] .pose вместо Tarray [1] — [2], также имея / T3 / pose, войдите в Tarray [2] .pose. так далее и так далее.

решение должно быть масштабируемым, так как количество создаваемых тем T-Turtle может быть и, вероятно, будет изменено.

Являются ли они способом написания подписки или функции обратного вызова, чтобы вы передали конкретный контейнер во время создания, который будет использоваться всякий раз, когда эта конкретная подписка получает информацию из своей подписанной темы?

Заранее спасибо за помощь?

0

Решение

Если ваши входные данные одинаковы, U может использовать AnyNumber подписчиков с одним CallBack, а при объявлении подписчика U может передавать ему любые числовые аргументы, чтобы вы могли отделить данные, поступающие на ваш узел, внутри вашего обратного вызова (вытолкнув их для разделения глобальных векторов так далее.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]