void StereoSelector::onInit()
{
	/*
	 * Initialize ROS parameters
	 */
	setROSParams();

	//ROS Subscribers
	info_sub_=private_nh_.subscribe<sensor_msgs::CameraInfo>("/stereo/left/camera_info",10,&StereoSelector::infoCallback, this);
	joint_states_=private_nh_.subscribe<sensor_msgs::JointState>("/joint_states",10,&StereoSelector::newJointState, this);


	//ROS Publishers - images
	viewer_image_pub_ = it_.advertise("/qbo_stereo_selector/viewer", 1);
	viewer_object_image_pub_ = it_.advertise("/qbo_stereo_selector/object", 1);

	object_mask_pub_ = private_nh_.advertise<sensor_msgs::Image>("/qbo_stereo_selector/object_mask", 1);

	//ROS Publishers - nose color and head movement
	joint_pub_ = private_nh_.advertise<sensor_msgs::JointState>("/cmd_joints", 1);
	nose_color_pub_ = private_nh_.advertise<qbo_arduqbo::Nose>("/cmd_nose", 1);

	//Initializing values
	image_size_ = cv::Size(320,240);
	object_detected_bool_ = false;

	init_roi_width_=80;
	init_roi_height_=80;

	object_roi_.x = image_size_.width/2-init_roi_width_/2;
	object_roi_.y = image_size_.height/2-init_roi_height_/2;
	object_roi_.width = init_roi_width_;
	object_roi_.height = init_roi_height_;

    undetected_count_ = 0;
    yaw_from_joint_ = 0;
    tilt_from_joint_ = 0;

    u_act_=0;
    u_prev_=0;
    diff_u_=0;
    kp_u_=0.0030; //0.0050
    ki_u_=0.00;
    kd_u_=0.02;

    v_act_=0;
    v_prev_=0;
    diff_v_=0;
    kp_v_=0.0035;
    ki_v_=0.00;
    kd_v_=0.00;
}
void FaceDetector::onInit()
{
	/*
	 * Setting ROS Parameters
	 */
	setROSParams();

	

	if(!face_classifier_.load(face_classifier_path_))
	{
		ROS_ERROR("Error importing face Haar cascade classifier from the specified path: %s", face_classifier_path_.c_str());

		deleteROSParams();
		exit(-1);
	}
	else
	{
		ROS_INFO("Haar cascade classifier successfully loaded from %s", face_classifier_path_.c_str());
	}

        if(!alternative_face_classifier_.load(alternative_face_classifier_path_))
        {
                ROS_WARN("Error importing alternative face Haar cascade classifier from the specified path: %s", alternative_face_classifier_path_.c_str());
                exist_alternative_=false;
        }
        else
        {
                ROS_INFO("Alternative Haar cascade classifier successfully loaded from %s", alternative_face_classifier_path_.c_str());
                exist_alternative_=true;
	}

	/*
	 * Subscribers of the node
	 */
	info_sub_=private_nh_.subscribe<sensor_msgs::CameraInfo>("/stereo/left/camera_info",10,&FaceDetector::infoCallback, this);


	/*
	 * Publishers of the node
	 */
	//Publisher of the face tracking position and size
	face_position_and_size_pub_=private_nh_.advertise<qbo_face_msgs::FacePosAndDist>("/qbo_face_tracking/face_pos_and_dist", 1);
	//Publisher of the face image
	face_pub_ = private_nh_.advertise<sensor_msgs::Image>("/qbo_face_tracking/face_image", 1);
	//Publisher of the viewer, using image transport for compression
	viewer_image_pub_ = it_.advertise("/qbo_face_tracking/viewer", 1);
	//Publisher of the nose color
	nose_color_pub_ = private_nh_.advertise<qbo_arduqbo::Nose>("/cmd_nose", 1);

	/*
	 * Initialize some internal parameters values
	 */
	face_detected_bool_ = false;
	image_size_ = cv::Size(0,0);

	//Initialize Kalman filter
	initializeKalmanFilter();

	loop_counter_ = 0;

	undetected_count_ = undetected_threshold_;


	/*
	 * Set dynamic Haar Cascade check
	 */
	cam_shift_detected_count_ = 0;
	dynamic_check_haar_ = false;
	if(check_Haar_<=0)
	{	dynamic_check_haar_ = true;
		check_Haar_=50;
		track_object_ = check_Haar_;
	}

	/*
	 * Service clients for face recognition
	 */
	client_recognize_ = private_nh_.serviceClient<qbo_face_msgs::RecognizeFace>("/qbo_face_recognition/recognize_with_stabilizer");
	client_get_name = private_nh_.serviceClient<qbo_face_msgs::GetName>("/qbo_face_recognition/get_name");


}
void FaceDetector::onInit()
{
	/*
	 * Setting ROS Parameters
	 */
	setROSParams();

	cvNamedWindow("Kalman predictor", CV_WINDOW_AUTOSIZE); 	// output screen
	cvInitFont(&font_,CV_FONT_HERSHEY_PLAIN, 1.0, 4.0, 2,2,CV_AA);
	textColor_ = CV_RGB(0,255,255);
	first_time_=true;
	notFoundCount_=0;

	found_=false;
	random_=true;

	if(!face_classifier_.load(face_classifier_path_))
	{
		ROS_ERROR("Error importing face Haar cascade classifier from the specified path: %s", face_classifier_path_.c_str());
		deleteROSParams();
		exit(-1);
	}
	else
	{
		ROS_INFO("Haar cascade classifier successfully loaded from %s", face_classifier_path_.c_str());
	}
	if(!alternative_face_classifier_.load(alternative_face_classifier_path_))
    {
		ROS_WARN("Error importing alternative face Haar cascade classifier from the specified path: %s", alternative_face_classifier_path_.c_str());
        exist_alternative_=false;
    }
    else
    {
        ROS_INFO("Alternative Haar cascade classifier successfully loaded from %s", alternative_face_classifier_path_.c_str());
        exist_alternative_=true;
	}

	/*
	 * Subscribers of the node
	 */
	info_sub_=private_nh_.subscribe<sensor_msgs::CameraInfo>("/usb_cam/camera_info",10,&FaceDetector::infoCallback, this);
	joint_states_sub_=private_nh_.subscribe<sensor_msgs::JointState>("/joint_states",10,&FaceDetector::jointStateCallback, this);

	/*
	 * Publishers of the node
	 */
	//Publisher of the head joint positions
	joint_pub_=private_nh_.advertise<sensor_msgs::JointState>("/cmd_joints",1);
	//Publisher of the body movements
	//base_control_pub_=private_nh_.advertise<geometry_msgs::Twist>("/cmd_vel",1);
	base_control_pub_=private_nh_.advertise<geometry_msgs::Twist>("/pre_cmd_vel",1);
	face_distance_pub_=private_nh_.advertise<std_msgs::Float32>("/head_distance",1);


	/*
	 * Initialize some internal parameters values
	 */
	face_detected_bool_ = false;
	image_size_ = cv::Size(0,0);

	//Initialize Kalman filter
	initializeKalmanFilter();
}