在ros中用c++实现给定的topic是否有数据,代码中不需要提前定义回调函数
时间: 2023-06-10 08:07:07 浏览: 452
在 ROS 中,可以使用 roscpp 库来实现给定的 topic 是否有数据。以下是一个示例代码,不需要提前定义回调函数,可以检测指定的 topic 是否有数据:
```c++
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "topic_check");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe<std_msgs::String>("my_topic", 10, [](const std_msgs::String::ConstPtr& msg) {
ROS_INFO("Received message: %s", msg->data.c_str());
});
while (ros::ok()) {
ros::spinOnce();
if (sub.getNumPublishers() > 0) {
ROS_INFO("Topic has data");
} else {
ROS_INFO("Topic has no data");
}
ros::Duration(1.0).sleep();
}
return 0;
}
```
在上面的代码中,我们定义了一个订阅器 `sub`,它订阅了名为 `my_topic` 的 topic,并且指定了一个 lambda 表达式作为回调函数,当有新的消息到达时,会打印消息内容。然后,在一个 while 循环中,我们不断调用 `ros::spinOnce()` 函数来处理消息,然后使用 `sub.getNumPublishers()` 函数来检查该 topic 是否有数据。如果 `getNumPublishers()` 返回值大于 0,则表示该 topic 有数据,否则表示该 topic 没有数据。最后,我们使用 `ros::Duration(1.0).sleep()` 函数来让程序休眠 1 秒钟,然后继续执行下一次循环。
阅读全文