我已经构建/编写了几个在Docker容器中运行的ROS节点。它们是这样连接的:
create_data_node mqtt_bridge =>|broker|=> mqtt_bridge => processing_node
master1/ pc1 master2/pc2/dockercontainer
create_data_node
可以满足您的期望-创建数据,然后将其发布到mqtt_bridge上,mqtt_bridge会将其发布到代理上。从那里(另一台PC上)的另一个mqtt_bridge
接收数据并将其发布到processing_node
,后者进行一些处理。工作流本身必须是这种方式,它可以在创建数据时算出来,而不是这个问题的一部分。
现在:我关闭create_data_node
的那一刻,master2 / pc2上的所有设备都应进入空闲模式,因为没有数据输入,也没有调用回调。但是,此特定节点的CPU使用率> 100%,此外rosout
也在使用〜150%。
在processing_node
上,我只是创建一个ros::Subscriber
,然后使用ros::spin()
,如下所示(摘录的示例):
int main(int argc, char** argv) {
ros::init(argc, argv, DEFAULT_NODENAME);
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe<messages::testmessage>("topic", 1000, callback);
ros::spin();
return 0;
}
据我了解,ros::spin()
(与while(1) { ros::spinOnce();}
相反,不应该进行空闲等待。在我的本地PC上,它工作正常(又称CPU使用率合理)-容器确实造成了这些问题但是。
所以我的问题很简单-是什么导致这种行为,我该怎么做才能防止这种情况发生?预先感谢!