我们可以将数组用于ros中的多个发布主题吗?

时间:2019-07-07 14:41:17

标签: arrays ros publisher

所以我当时正在做一些基于ros的无人机仿真,当我不得不为每个无人机初始化单独的发布者时,这让我感到震惊。是否可以排列这样的发布者数组,然后仅使用其索引号来引用它们?我知道我应该这样做并尝试一下,但是我猜想在这里问是一个更快的选择:)

1 个答案:

答案 0 :(得分:0)

是的,可以通过在ros::Publisher s中收集多个container来实现。这是一个使用数组的小例子:

#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

并发布速率为1 Hz的简单字符串,例如Hello World 1562571209.130936883