A: 例如: node A 发布topic, service, 然后启用 node B. 那么可以采用 rostopic list 检测 node A是否已经完成了 topic, 然后启动 node B. 用程序实现.
点击(此处)折叠或打开
- bool waitfor_topic_ok(const char *topic_wait, uint32_t timeout_sec)
- {
- uint32_t iCnt = 0;
- iCnt = 0;
- std::string wait_topic(topic_wait);
- ros::master::V_TopicInfo master_topics;
- while (1) {
- ros::master::getTopics(master_topics);
- ros::master::V_TopicInfo::iterator master_it = master_topics.begin();
- ros::master::V_TopicInfo::iterator master_end = master_topics.end();
- for ( ; master_it != master_end; ++master_it )
- {
- const ros::master::TopicInfo& info = *master_it;
- if ( wait_topic == info.name )
- {
- return true;
- break;
- }
- }
- if (timeout_sec == 0) { //用户检测是否存在
- break; //
- }
- else { //没有发现, 则延迟等待
- sleep(1);
- if ((timeout_sec > 0) && (timeout_sec <= iCnt++)) break;
- }
- }
- return false;
- }
2. 查看自己的topic是否被订阅.
点击(此处)折叠或打开
- //查看 pub_mytopic 是否被订阅
- if (pub_mytopic.getNumSubscribers() == 0){
- //还没有订阅的人
- }