Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 #ifndef XYMODEL_HPP_
00038 #define XYMODEL_HPP_
00039 #include <labust/navigation/SSModel.hpp>
00040 
00041 namespace labust
00042 {
00043   namespace navigation
00044   {
00048     class XYModel : public SSModel<double>
00049     {
00050         typedef SSModel<double> Base;
00051     public:
00052       typedef vector input_type;
00053       typedef vector output_type;
00054 
00055       struct ModelParams
00056       {
00057           ModelParams():
00058                   alpha(1),
00059                   beta(1),
00060                   betaa(0){};
00061 
00062           ModelParams(double alpha, double beta, double betaa):
00063                   alpha(alpha),
00064                   beta(beta),
00065                   betaa(betaa){}
00066 
00067           inline double Beta(double val)
00068           {
00069                   return beta + betaa*fabs(val);
00070           }
00071 
00072           double alpha, beta, betaa;
00073       };
00074 
00075       enum {u=0,v,r,xp,yp,psi,xc,yc,b1,b2};
00076       enum {stateNum = 10};
00077       enum {inputSize = 3};
00078       enum {measSize = 3};
00079       enum {X=0,Y,N};
00080       enum {x_m=0,y_m,psi_m,psiOnly_m = 0};
00081         
00085       XYModel();
00089       ~XYModel();
00090 
00096       void step(const input_type& input);
00102       void estimate_y(output_type& y);
00106       void initModel();
00107 
00111       const output_type& update(vector& measurements, vector& newMeas);
00112 
00116       const output_type& yawUpdate(double yaw);
00120       const output_type& fullUpdate(double x,
00121                   double y,
00122                   double yaw);
00126       const output_type& positionUpdate(double x,
00127                   double y);
00131       void setParameters(const ModelParams& surge,
00132                   const ModelParams& sway,
00133                   const ModelParams& yaw)
00134       {
00135           this->surge = surge;
00136           this->sway = sway;
00137           this->yaw = yaw;
00138       }
00139 
00140       void calculateXYInovationVariance(const matrix& P, double& xin,double &yin);
00141 
00145       inline void getNEDSpeed(double& xdot, double& ydot)
00146       {
00147         xdot = this->xdot;
00148         ydot = this->ydot;
00149       }
00150 
00151 
00152     protected:
00156       void derivativeAW();
00160        void derivativeHV(int num);
00164       ModelParams surge,sway,yaw;
00168       output_type measurement;
00172       double xdot,ydot;
00173     };
00174   }
00175 }
00176 
00177 
00178 #endif