ViSP  2.9.0
vpAdaptiveGain.h
1 /****************************************************************************
2  *
3  * $Id: vpAdaptiveGain.h 4641 2014-02-05 12:42:03Z fspindle $
4  *
5  * This file is part of the ViSP software.
6  * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
7  *
8  * This software is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * ("GPL") version 2 as published by the Free Software Foundation.
11  * See the file LICENSE.txt at the root directory of this source
12  * distribution for additional information about the GNU GPL.
13  *
14  * For using ViSP with software that can not be combined with the GNU
15  * GPL, please contact INRIA about acquiring a ViSP Professional
16  * Edition License.
17  *
18  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
19  *
20  * This software was developed at:
21  * INRIA Rennes - Bretagne Atlantique
22  * Campus Universitaire de Beaulieu
23  * 35042 Rennes Cedex
24  * France
25  * http://www.irisa.fr/lagadic
26  *
27  * If you have questions regarding the use of this file, please contact
28  * INRIA at visp@inria.fr
29  *
30  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
31  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32  *
33  *
34  * Description:
35  * Adaptive gain.
36  *
37  * Authors:
38  * Nicolas Mansard
39  *
40  *****************************************************************************/
46 #ifndef __VP_ADAPTIVE_GAIN_H
47 #define __VP_ADAPTIVE_GAIN_H
48 
49 #include <visp/vpConfig.h>
50 #include <iostream>
51 
52 class vpColVector;
77 class VISP_EXPORT vpAdaptiveGain
78 {
79 
80 public: /* constantes */
81 
82  static const double DEFAULT_LAMBDA_ZERO;
83  static const double DEFAULT_LAMBDA_INFINITY;
84  static const double DEFAULT_LAMBDA_SLOPE;
85 
86 
87 private: /* Attributs*/
88  /* Coefficient de la fonction de calcul de lambda.
89  * lambda (x) = a * exp (-b*x) + c. */
90  double coeff_a;
91  double coeff_b;
92  double coeff_c;
93 
94  /* Derniere valeur calculee. */
95  mutable double lambda;
96 
97 
98 
99 public: /* Methodes*/
100 
101  /* --- CONSTRUCTOR -------------------------------------------------------- */
102 
103  vpAdaptiveGain ();
104  vpAdaptiveGain (double c);
105  vpAdaptiveGain (double gain_at_zero,
106  double gain_at_infinity,
107  double slope_at_zero);
108 
109 
110  /* --- INIT --------------------------------------------------------------- */
111  void initFromConstant (double c);
112  void initFromVoid (void);
113  void initStandard (double gain_at_zero,
114  double gain_at_infinity,
115  double slope_at_zero);
116 
117 
118  /* --- MODIFIORS ---------------------------------------------------------- */
119  double setConstant (void);
120 
121 
122  /* --- COMPUTE ------------------------------------------------------------ */
123  /* \brief Calcule la valeur de lambda au point courrant.
124  *
125  * Determine la valeur du lambda adaptatif en fonction de la valeur
126  * de la norme de la fonction de tache e par extrapolation exponentielle.
127  * La fonction est : (en_infini - en_zero) * exp (-pente * ||e|| ) + en_infini.
128  * On a bien :
129  * - lambda(10^5) = en_infini ;
130  * - lambda(0) = en_zero ;
131  * - lambda(x ~ 0) ~ - pente * x + en_zero.
132  * \param val_e: valeur de la norme de l'erreur.
133  * \return: valeur de gain au point courrant.
134  */
135  double value_const (double x) const;
136 
137  /* \brief Calcule la valeur de lambda au point courrant et stockage du
138  * resultat.
139  *
140  * La fonction calcule la valeur de lambda d'apres la valeur de la norme
141  * de l'erreur, comme le fait la fonction valeur_const.
142  * La fonction non constante stocke de plus le resultat dans this ->lambda.
143  * \param val_e: valeur de la norme de l'erreur.
144  * \return: valeur de gain au point courrant.
145  */
146  double value (double x) const;
147 
148  double limitValue_const (void) const;
149 
150  double limitValue (void) const;
151 
152  /* --- ACCESSORS ---------------------------------------------------------- */
153 
159  inline double getLastValue (void) const {return this ->lambda;}
160 
161  double operator() (double x) const;
162 
163  /* \brief Lance la fonction valeur avec la norme INFINIE du vecteur. */
164  double operator() (const vpColVector & x) const;
165 
166  /* \brief Idem function limitValue. */
167  double operator() (void) const;
168 
169 
170  /* --- IOSTREAM ----------------------------------------------------------- */
171 
172  friend VISP_EXPORT std::ostream& operator<< (std::ostream &os, const vpAdaptiveGain& lambda);
173 };
174 
175 #endif /* __VP_ADAPTIVE_GAIN_H */
double getLastValue(void) const
Adaptive gain computation.
static const double DEFAULT_LAMBDA_ZERO
static const double DEFAULT_LAMBDA_INFINITY
static const double DEFAULT_LAMBDA_SLOPE
Class that provides a data structure for the column vectors as well as a set of operations on these v...
Definition: vpColVector.h:72