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;
}
Esempio n. 2
0
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;
  }
}