gpt4 book ai didi

c++ - 需要有关将双变量发布到 ROS 主题的信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:34 26 4
gpt4 key购买 nike

我正在使用 ROS 将 double 变量发布到 ROS 主题。该主题将发布该主题,以便任何订阅者都可以访问数据。以下是我用来发布数据的代码:

ros::NodeHandle n;
ros::Publisher Auc_pub = n.advertise<std_msgs::Float64>("/auc", 1000);
std_msgs::Float64 areaValue;

areaValue.data.push_back(Area)
Auc_pub.publish(areaValue);

这里的Areadouble 变量,我需要在主题/auc 上发布它。我无法构建此文件,因为我不知道如何将 Area 变量输入到 areaValue 中。

最佳答案

如果您查看 std_msgs::Float64 的文档, 它表明它包含一个数据字段,称为 data 并且在 C++ 中是 double 类型。

因此,在您的代码中,您只需执行以下操作:

areaValue.data = Area

假设 Area 是一个 double

我建议你看一下基础Writing a simple Publisher and Subscriber ROS wiki 上的教程。

编辑

如果原始帖子中的内容是您的全部代码,那么它可能不会完全按照您的想法进行操作。如果您对 publisher 使用默认构造函数,则在它们上 published 的消息会立即发出一次。任何在发布时订阅该主题的节点都将收到消息,然后主题将被清除。如果您希望任何订阅主题的节点接收发布在其上的最后一条消息,请执行以下操作:

ros::Publisher Auc_pub = n.advertise<std_msgs::Float64>("/auc", 1000, true);

最后一个 bool true 告诉 publisher 它应该 latch发布的消息。

但是您还有另一个问题,假设这就是您的全部代码:您永远不会 spin ,因此您的节点启动,通告它的主题,在其上发布一条消息,然后关闭,并带走该主题(假设没有任何内容订阅到该主题) .您需要在 main 结束之前添加以下内容:

ros::spin();

这将使节点保持事件状态(因此主题保持事件状态)直到 ros::ok() 返回 false,即直到节点被杀死。

当然,您的消息仍然只会发布一次,但至少话题会保持活跃。如果您希望定期广播消息,请使用 ros::Timer并将 pulish 调用放入计时器的回调中。

但说真的,请阅读tutorials ,他们会带您了解所有这些内容。

关于c++ - 需要有关将双变量发布到 ROS 主题的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23497130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com