Можем ли мы использовать массивы для нескольких тем публикации в ros? - PullRequest
0 голосов
/ 07 июля 2019

Так что я работал над симуляцией БПЛА на основе ros, и меня просто поразило, когда мне пришлось инициализировать отдельных издателей для каждого БПЛА. Можно ли создать массив таких издателей, а затем ссылаться на них, просто используя их индекс? Я знаю, что должен просто сделать это и попробовать, но я догадался, что здесь будет более быстрый вариант:)

1 Ответ

0 голосов
/ 08 июля 2019

Да, это возможно, если собрать несколько ros :: Publisher s в контейнере s. Вот небольшой пример использования массива:

#include <ros/ros.h>

#include <std_msgs/String.h>

int main(int argc, char *argv[])
{
  ros::init(argc, argv, "test_node");
  ros::NodeHandle nh;
  ros::WallTimer timer;

  //Create publishers
  std::array<ros::Publisher, 3> publishers;
  for (size_t i = 0; i < publishers.size(); i++)
  {
    std::stringstream topic_name;
    topic_name << "topic" << i;
    publishers[i] = nh.advertise<std_msgs::String>(topic_name.str(), 0);
  }

  //Publish
  ros::Rate r(1);
  std_msgs::String msg;
  while (nh.ok())
  {
    std::stringstream message;
    message << "Hello World " << ros::Time::now();
    msg.data = message.str();
    for (size_t i = 0; i < publishers.size(); i++)
    {
      publishers[i].publish(msg);
    }

    ros::spinOnce();
    r.sleep();
  }

  return 0;
}

Узел рекламирует три темы

  • / topic0
  • / topic1
  • / topic2

и публикует простую строку типа Hello World 1562571209.130936883 со скоростью 1 Гц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...