ros中的多个publish topic可以使用数组吗?
Can we use arrays for multiple publish topics in ros?
所以我正在研究一些基于 ros 的无人机模拟,当我不得不为每个无人机初始化单独的发布者时,我感到震惊。是否可以制作一个这样的出版商数组,然后仅使用它们的索引号来引用它们?我知道我应该去做并尝试一下,但我想在这里问会是一个更快的选择:)
是的,这可以通过收集多个 ros::Publishers in 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
- /主题2
并发布一个简单的字符串,例如 Hello World 1562571209.130936883
,频率为 1 Hz。
所以我正在研究一些基于 ros 的无人机模拟,当我不得不为每个无人机初始化单独的发布者时,我感到震惊。是否可以制作一个这样的出版商数组,然后仅使用它们的索引号来引用它们?我知道我应该去做并尝试一下,但我想在这里问会是一个更快的选择:)
是的,这可以通过收集多个 ros::Publishers in 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
- /主题2
并发布一个简单的字符串,例如 Hello World 1562571209.130936883
,频率为 1 Hz。