예제 #1
0
void ImageBuffer::buf(){
    if(bufferList.size() > 0 && 0.1 < computeTimeDiff(bufferList.front().header.stamp, lastImageMsg.header.stamp)){
        //add new image to buffer
        bufferList.push_front(lastImageMsg);

        //remove too old messages from buffer
        while(bufferList.size() > 0 && computeTimeDiff(bufferList.back().header.stamp, ros::Time::now()) > IMAGE_BUFFER_TIME_S){
            bufferList.pop_back();
        }
    }
    return;
}
예제 #2
0
void ImageBuffer::imageCallback(const sensor_msgs::Image::ConstPtr &msg){
    lastImageMsg = *msg;
    // ROS_INFO("New Image");
    // ROS_INFO("Time diff to HEAD = %f",computeTimeDiff(bufferList.front().header.stamp, lastImageMsg.header.stamp));
     if(bufferList.size()==0 || (bufferList.size() > 0 && 0.0 < computeTimeDiff(bufferList.front().header.stamp, lastImageMsg.header.stamp))){
        //add new image to buffer
        bufferList.push_front(lastImageMsg);
        // ROS_INFO("Size of bufferList= %lu", bufferList.size());
        // ROS_INFO("Image TimeStamp = %d", lastImageMsg.header.stamp.sec );
        //remove too old messages from buffer
        while(bufferList.size() > 0 && computeTimeDiff(bufferList.back().header.stamp, ros::Time::now()) > IMAGE_BUFFER_TIME_S){
            bufferList.pop_back();
        }
        // ROS_INFO("Size of bufferList= %lu", bufferList.size());
    }
    return;
}
예제 #3
0
void ImageBuffer::evidenceCommandCallback(const image_buffer::EvidenceCommand::ConstPtr &msg){
    ras_msgs::RAS_Evidence evidence;
    evidence.stamp = msg->header.stamp;
    evidence.group_number = 2;
    evidence.object_id = msg->object_name.data;

    //find best picture
    if (bufferList.empty()) {
    	// ROS_INFO("BL Empty");
			evidencePub.publish(evidence);
			return;
		}
    
    double smallestDiff = 100.0; //10000000000000.0;
    std::list<sensor_msgs::Image>::iterator bestIt;
    // ROS_INFO("2 Size of bufferList= %lu", bufferList.size());
    bestIt = bufferList.end();
    for(std::list<sensor_msgs::Image>::iterator it = bufferList.begin(); it != bufferList.end(); ++it){
        double currDiff = computeTimeDiff(it->header.stamp, msg->header.stamp);
        if(currDiff < smallestDiff){
            smallestDiff = currDiff;
            bestIt = it;
            // ROS_INFO("BestIt");
        }
        else {
        	//break;
        }
    }
    // ROS_INFO("Should Publish now");
    
    if(bestIt != bufferList.end()){
    	evidence.image_evidence = *bestIt;
    	// ROS_INFO("Publishing");
    	evidencePub.publish(evidence);
    }
    
    return;
}
예제 #4
0
void ImageBuffer::evidenceCommandCallback(const image_buffer::EvidenceCommand::ConstPtr &msg){
    ras_msgs::RAS_Evidence evidence;
    evidence.stamp = msg->header.stamp;
    evidence.group_number = 2;
    evidence.object_id = msg->object_name.data;

    //find best picture
    double smallestDiff = 100;
    std::list<sensor_msgs::Image>::iterator bestIt;
    for(std::list<sensor_msgs::Image>::iterator it = bufferList.begin(), end = bufferList.end(); it != end; it++){
        double currDiff = computeTimeDiff(it->header.stamp, msg->header.stamp);
        if(currDiff < smallestDiff){
            smallestDiff = currDiff;
            bestIt = it;
        }
        //else break??
    }

    evidence.image_evidence = *bestIt;

    evidencePub.publish(evidence);
    return;
}