void TargetAggregation::targetDetectedCallback(const ardrone_autonomy::navdata_vision_detect::ConstPtr& msg) { static int targetSeenCount = 0; //this function will be called, even if there are no targets detected if(msg->nb_detected > 0) { ROS_INFO("can see the target! seen it %d times in a row", targetSeenCount); //canSeeTarget = true; //only start doing something if a target has been seen more than some number if(targetSeenCount > 40) { if(state == SEARCHING) approachTarget(); if(state == APPROACHING) { recruitOtherDrones(); } vision_sub.shutdown(); } else targetSeenCount++; } else { //canSeeTarget = false; //ROS_INFO("SADNESS. Lost the target :("); targetSeenCount = 0; } return; }
void Robot_Soldier::updateAI(float delta) { if (AI_STATE == AI_PATROLLING) { dumbWalk(); if (targetIsVisible(target)) { cocos2d::log("ALERTED}\n"); AI_STATE = AI_ATTACK; } return; } else if (AI_STATE == AI_ATTACK) { approachTarget(); if (targetIsVisible(target)) { lost_track = 0; shoot_target(1); } else { lost_track++; } if (lost_track > 75) { AI_STATE = AI_PATROLLING; } return; } }