00001 /**************************************************************** 00002 * 00003 * Copyright (c) 2010 00004 * 00005 * Fraunhofer Institute for Manufacturing Engineering 00006 * and Automation (IPA) 00007 * 00008 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00009 * 00010 * Project name: care-o-bot 00011 * ROS stack name: cob_driver 00012 * ROS package name: cob_light 00013 * Description: Switch robots led color by sending data to 00014 * the led-µC over serial connection. 00015 * 00016 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00017 * 00018 * Author: Benjamin Maidel, email:benjamin.maidel@ipa.fraunhofer.de 00019 * Supervised by: Benjamin Maidel, email:benjamin.maidel@ipa.fraunhofer.de 00020 * 00021 * Date of creation: August 2012 00022 * ToDo: 00023 * 00024 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00025 * 00026 * Redistribution and use in source and binary forms, with or without 00027 * modification, are permitted provided that the following conditions are met: 00028 * 00029 * * Redistributions of source code must retain the above copyright 00030 * notice, this list of conditions and the following disclaimer. 00031 * * Redistributions in binary form must reproduce the above copyright 00032 * notice, this list of conditions and the following disclaimer in the 00033 * documentation and/or other materials provided with the distribution. 00034 * * Neither the name of the Fraunhofer Institute for Manufacturing 00035 * Engineering and Automation (IPA) nor the names of its 00036 * contributors may be used to endorse or promote products derived from 00037 * this software without specific prior written permission. 00038 * 00039 * This program is free software: you can redistribute it and/or modify 00040 * it under the terms of the GNU Lesser General Public License LGPL as 00041 * published by the Free Software Foundation, either version 3 of the 00042 * License, or (at your option) any later version. 00043 * 00044 * This program is distributed in the hope that it will be useful, 00045 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00046 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00047 * GNU Lesser General Public License LGPL for more details. 00048 * 00049 * You should have received a copy of the GNU Lesser General Public 00050 * License LGPL along with this program. 00051 * If not, see <http://www.gnu.org/licenses/>. 00052 * 00053 ****************************************************************/ 00054 00055 #include "band.h" 00056 00057 namespace mybeat 00058 { 00059 00060 Band::Band(size_t size,double dropFactor) 00061 : m_size(size), m_dropFactor(dropFactor), m_allTimeMaximum(0.0) 00062 { 00063 } 00064 00065 void Band::log(double value) 00066 { 00067 if(value > m_allTimeMaximum) 00068 m_allTimeMaximum=value; 00069 00070 m_history.push_front(value); 00071 00072 if(m_history.size() > m_size) 00073 m_history.pop_back(); 00074 } 00075 00076 double Band::average() 00077 { 00078 double sum=0; 00079 for(unsigned int i = 0; i < m_history.size(); i++) 00080 { 00081 sum+=m_history[i]; 00082 } 00083 return sum/m_history.size(); 00084 } 00085 00086 double Band::getAllTimeMaximum() 00087 { 00088 //With every call of this method we gradually lower the maximum to quickly adapt to changes in the input 00089 m_allTimeMaximum*=m_dropFactor; 00090 return m_allTimeMaximum; 00091 } 00092 00093 double Band::getAllTimeMaximumRaw() 00094 { 00095 //This function is for display purpose only. No recalibration will be performed 00096 return m_allTimeMaximum; 00097 } 00098 00099 void Band::resetMaximum() 00100 { 00101 m_allTimeMaximum=0; 00102 } 00103 00104 std::deque<double> Band::getHistory() 00105 { 00106 return m_history; 00107 } 00108 00109 double Band::getNewest() 00110 { 00111 return m_history.front(); 00112 } 00113 00114 double Band::getOldest() 00115 { 00116 return m_history.back(); 00117 } 00118 }