Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/BallLocator/GT2004ProcessModels/BaseModel.cpp

Go to the documentation of this file.
00001 /**
00002 * @file BaseModel.cpp
00003 *
00004 * @author <a href="mailto:stefanuhrig@gmx.net">Stefan Uhrig</a>
00005 */
00006 //------------------------------------------------------------------------------
00007 #include "BaseModel.h"
00008 #include "Tools/FieldDimensions.h"
00009 #include "Tools/Debugging/Debugging.h"
00010 #include <math.h>
00011 #include <string.h>
00012 //------------------------------------------------------------------------------
00013 double KalmanProcessModelBase::pi = 3.1415926535897932384626433832795;
00014 double KalmanProcessModelBase::pi2 = 2*3.1415926535897932384626433832795;
00015 double KalmanProcessModelBase::dFieldDiagonalLength =
00016   1.2*sqrt((2.0*xPosOpponentGoal)*(2.0*xPosOpponentGoal) +
00017            (2.0*yPosLeftFlags)*(2.0*yPosLeftFlags));
00018 //------------------------------------------------------------------------------
00019 KalmanBallState::KalmanBallState() : x(0.0), y(0.0), vx(0.0), vy(0.0)
00020 {
00021 }
00022 //------------------------------------------------------------------------------
00023 KalmanUpdateResult::KalmanUpdateResult() : liklihood(0.0)
00024 {
00025 }
00026 //------------------------------------------------------------------------------
00027 KalmanPredictResult::KalmanPredictResult() : liklihood(0.0)
00028 {
00029 }
00030 //------------------------------------------------------------------------------
00031 KalmanProcessModelBase::KalmanProcessModelBase() 
00032 : bUseModel(true)
00033 {
00034 }
00035 //------------------------------------------------------------------------------
00036 bool KalmanProcessModelBase::isNonSensePos(double x, double y) const
00037 {
00038   double dist = sqrt(x*x + y*y);
00039   if (dist > dFieldDiagonalLength)
00040     return true;
00041   else
00042     return false;
00043 }
00044 //------------------------------------------------------------------------------
00045 Out& KalmanProcessModelBase::toStream(Out& stream) const
00046 {
00047   // Write model name
00048   stream << strlen(getModelName()) << getModelName();
00049 
00050   // Write "use" flag
00051   int nUse = bUseModel?1 : 0;
00052   stream << nUse;
00053   
00054   // Write dimension of state
00055   int n = getStateDim();
00056   stream << n;
00057 
00058   int i;
00059   double* M = new double[n*n];
00060   
00061   // Write process covariance matrix Q
00062   getQ(M);
00063   for (i = 0; i < n*n; ++i)
00064     stream << M[i];
00065 
00066   // Write measurement covariance matrix R
00067   getR(M);
00068   for (i = 0; i < n*n; ++i)
00069     stream << M[i];
00070   
00071   delete [] M;  
00072   return stream;
00073 }
00074 //------------------------------------------------------------------------------
00075 In& KalmanProcessModelBase::fromStream(In& stream)
00076 {
00077   // Read "use" flag of model
00078   int nUse;
00079   stream >> nUse;
00080   bUseModel = (nUse != 0);
00081   
00082   // Read state dimension
00083   int i, n;
00084   stream >> n;
00085 
00086   double* M = new double[n*n];
00087 
00088   // Read process covarinace matrix Q
00089   for (i = 0; i < n*n; ++i)
00090     stream >> M[i];
00091   setQ(M);
00092 
00093   // Read measurement covariance matrix R
00094   for (i = 0; i < n*n; ++i)
00095     stream >> M[i];
00096   setR(M);
00097 
00098   delete [] M;
00099 
00100   // Reset model because parameters have changed
00101   reset();
00102   return stream;
00103 }
00104 //------------------------------------------------------------------------------
00105 void KalmanProcessModelBase::OutputException(const char* pszLoc,
00106                                              MVException& m) const
00107 {
00108   OUTPUT(idText, text,
00109          getModelName() << ": Exception "
00110          << m.getDescription() << " in " << pszLoc);
00111 }
00112 //------------------------------------------------------------------------------
00113 
00114 /*
00115  * Change log :
00116  * $Log: BaseModel.cpp,v $
00117  * Revision 1.1  2004/07/14 21:40:15  spranger
00118  * moved kalmanprocessmodel to gt2004processmodel
00119  *
00120  * Revision 1.3  2004/06/15 22:14:09  uhrig
00121  * Tidied up a little bit
00122  *
00123  * Revision 1.2  2004/06/15 21:40:14  uhrig
00124  * Added possibility to disable and enable process models in the Kalman filter.
00125  *
00126  * Revision 1.1.1.1  2004/05/22 17:15:25  cvsadm
00127  * created new repository GT2004_WM
00128  *
00129  * Revision 1.4  2004/04/22 14:28:02  roefer
00130  * .NET errors/warnings removed
00131  *
00132  * Revision 1.3  2004/04/20 14:12:16  uhrig
00133  *  - odometry processing corrected
00134  *  - fixed position model disabled
00135  *  - covariance matrices tuned
00136  *
00137  * Revision 1.2  2004/03/15 12:28:52  risler
00138  * change log added
00139  *
00140  *
00141  */

Generated on Thu Sep 23 19:57:25 2004 for GT2004 by doxygen 1.3.6