R3Arma.h

Go to the documentation of this file.
00001 // ----------------------------------------------------------------------------
00002 //
00003 // $Id$
00004 //
00005 // Copyright 2008, 2009, 2010, 2011, 2012  Antonio Franchi and Paolo Stegagno    
00006 //
00007 // This file is part of MIP. 
00008 //
00009 // MIP is free software: you can redistribute it and/or modify
00010 // it under the terms of the GNU General Public License as published by
00011 // the Free Software Foundation, either version 3 of the License, or
00012 // (at your option) any later version.
00013 //
00014 // MIP is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with MIP. If not, see <http://www.gnu.org/licenses/>.
00021 //
00022 // Contact info: antonio.franchi@tuebingen.mpg.de stegagno@diag.uniroma1.it
00023 //
00024 // ----------------------------------------------------------------------------
00025 
00028 
00029 #ifndef __R3_ARMA_H_ 
00030 #define __R3_ARMA_H_
00031 
00033 #include <armadillo>
00034 #include <S1.h>
00035 #include <S3.h>
00036 #include <SE3.h>
00037 #include <Time.h>
00038 #include <R2Arma.h>
00039 // using namespace arma;
00040 using namespace std;
00041 
00042 namespace MipBaselib{
00043 typedef enum {
00044  PIXEL_CAMERA_ARMA_MATRIX,
00045  METRIC_CAMERA_ARMA_MATRIX,
00046  NUM_CAMERA_ARMA_MATRIX
00047 } CanonicalCameraArmaMatrix;
00048 
00049 static const char* CanonicalCameraArmaMatrixName[NUM_CAMERA_ARMA_MATRIX] ={
00050  "PIXEL_ARMA_MATRIX",
00051  "METRIC_ARMA_MATRIX"
00052 };
00053 
00054 class Roto3DArma : public arma::Mat<Decimal>::fixed<3,3>{
00055  public:
00057   Roto3DArma(CanonicalArmaMatrix init=ZERO_ARMA_MATRIX);
00058   
00060   Roto3DArma(const Decimal &a11,const Decimal &a12, const Decimal &a13, const Decimal &a21, const Decimal &a22, const Decimal &a23, const Decimal &a31, const Decimal &a32, const Decimal &a33);
00061   
00063   Roto3DArma(const Decimal &roll, const Decimal &pitch, const Decimal &yaw);
00064   
00066   Roto3DArma(const Angle &ro, const Angle &pit, const Angle &ya);
00067   
00069   Roto3DArma(const Roto3DArma &A);
00070   
00073   Roto3DArma(const vector<Decimal> &vec);
00074   
00076   Roto3DArma(const arma::Mat<Decimal>::fixed<3,3>& rhs);
00077   
00079   Roto3DArma(const Orientation3D &ori);
00080   
00082   Roto3DArma& operator=(const Roto3DArma& rhs);
00083   
00085   Roto3DArma& operator=(const arma::Mat<Decimal>::fixed<3,3>& rhs);
00086   
00088   Roto3DArma& operator+=(const Roto3DArma &pos);
00089   
00091   /*const */Roto3DArma operator+(Roto3DArma &other) const;
00092   
00094   /*const */Roto3DArma operator-(Roto3DArma &other) const;
00095   
00097   Roto3DArma& operator-=(const Roto3DArma &pos); 
00098   
00100   Roto3DArma& operator*=(const Roto3DArma &pos); 
00101   
00103   Roto3DArma& operator*=(const Decimal& scalar);
00104   
00106   /*const */Roto3DArma operator*(Roto3DArma &other) const;
00107   
00109   Roto3DArma& operator/=(const Roto3DArma &pos); 
00110   
00112   Roto3DArma& operator/=(const Decimal& scalar);
00113     
00115   /*const */Roto3DArma operator/(Roto3DArma &other) const;
00116   
00118   string print();
00119   
00122   arma::Row<Decimal>::fixed<3> getFirstRow() const;
00123   
00126   arma::Row<Decimal>::fixed<3> getSecondRow() const;
00127   
00130   arma::Row<Decimal>::fixed<3> getThirdRow() const;
00131   
00134   arma::Col<Decimal>::fixed<3> getFirstCol() const;
00135   
00138   arma::Col<Decimal>::fixed<3> getSecondCol() const;
00139   
00142   arma::Col<Decimal>::fixed<3> getThirdCol() const;
00143   
00144   
00147   Roto3DArma invMatrix();
00148   
00155   arma::Mat<Decimal> subMat(int r, int c, int R, int C);
00156   
00161   Decimal getElem(int r,int c) const;
00162   
00167   void setElem(int r,int c,const Decimal &item);
00168   
00170   arma::Mat<Decimal>::fixed<3,3>* getMat();
00171   
00174   Decimal getRoll() const;
00175   
00178   Angle getRollAngle() const;
00179   
00182   Decimal getPitch() const;
00183   
00186   Angle getPitchAngle() const;
00187   
00190   Decimal getYaw() const;
00191   
00194   Angle getYawAngle() const;
00195   
00198   void setYaw(const Angle &ya);
00199   
00202   void setYaw(const Decimal &ya);
00203   
00206   void setRoll(const Angle &ro);
00207   
00210   void setRoll(const Decimal &ro);
00211   
00214   void setPitch(const Angle &pit);
00215   
00218   void setPitch(const Decimal &pit);
00219 };
00220 
00221 class Position3DArma: public arma::Col<Decimal>::fixed<3>{
00222  public:
00224   Position3DArma();
00225   
00230    Position3DArma(const Decimal &x,const Decimal &y,const Decimal &z);
00231   
00235    Position3DArma(const Position2DArma &xy,const Decimal &z);
00236   
00238   Position3DArma(const Position3D& A);
00239   
00241   Position3DArma(const Position3DArma& A);
00242   
00244   Position3DArma(const arma::Mat<Decimal>& A);
00245   
00247   Position3DArma& operator=(const Position3D& rhs);
00248   
00250   Position3DArma& operator=(const Position3DArma& rhs);
00251   
00253   Position3DArma& operator=(const arma::Mat<Decimal>& rhs);
00254   
00256   Position3DArma& operator+=(const Position3DArma &pos);
00257   
00259   Position3DArma& operator+=(const arma::Col<Decimal>::fixed<3> &pos); 
00260   
00262   Position3DArma& operator+=(const Decimal& scalar);
00263     
00265   /*const */Position3DArma operator-(Position3DArma &other) const;
00266   
00268   Position3DArma& operator-=(const Position3DArma &pos); 
00269   
00271   Position3DArma& operator-=(const Decimal& scalar);
00272   
00274   Position3DArma& operator-=(const arma::Col<Decimal>::fixed<3> &pos); 
00275     
00277   /*const */Position3DArma operator+(Position3DArma &other) const;
00278   
00280   Position3DArma& operator*=(const Position3DArma &pos); 
00281   
00283   Position3DArma& operator*=(const Decimal& scalar);
00284   
00286   Position3DArma& operator*=(const arma::Mat<Decimal>::fixed<3,3> &mat);
00287   
00289   Position3DArma& operator*=(const arma::Col<Decimal>::fixed<3> &vec);
00290   
00292   Position3DArma& operator*=(const Roto3DArma &mat);
00293   
00295   Position3DArma& operator*=(const arma::Mat<Decimal>::fixed<4,4> &mat);
00296   
00298   /*const */Position3DArma operator*(Position3DArma &other) const;
00299   
00301   Position3DArma operator*(const arma::Col<Decimal>::fixed<3> &vec);
00302   
00304   Position3DArma& operator/=(const Position3DArma &pos); 
00305   
00307   Position3DArma& operator/=(const Decimal& scalar);
00308   
00309   Position3DArma& operator/=(const arma::Col<Decimal>::fixed<3> &vec);
00310   
00312   /*const */Position3DArma operator/(const arma::Col<Decimal>::fixed<3> &vec) const;
00313   
00315   /*const */Position3DArma operator/(Position3DArma &other) const;
00316   
00318   bool operator==(const Position3DArma &other) const;
00319   
00322   Position3DArma matrixProd(const arma::Mat<Decimal>::fixed<3,3> &mat);
00323   
00326   Position3DArma matrixHomoProd(const arma::Mat<Decimal>::fixed<4,4> &mat);
00327   
00330   Position3DArma matrixProd(const Roto3DArma &mat);
00331   
00333   Decimal x() const;
00334   
00336   Decimal y() const;
00337   
00339   Decimal z() const;
00340   
00342   void setX(const Decimal &p);
00343   
00345   void setY(const Decimal &p);
00346   
00348   void setZ(const Decimal &p);
00349   
00351   Angle azimuth() const;
00352   
00354   Angle zenith() const;
00355   
00357   string print();
00358   
00361   Decimal norm(int p=2) const;
00362   
00366   Decimal dist( Position3DArma& other, int p=2) const;
00367   
00370   Position2DArma getPosition2D();
00371 };
00372 
00373 class Roto3DHomoArma : public arma::Mat<Decimal>::fixed<4,4>{
00374  public:
00376   Roto3DHomoArma(CanonicalArmaMatrix init=ZERO_ARMA_MATRIX);
00377   
00379   Roto3DHomoArma(const Decimal &a11,const Decimal &a12, const Decimal &a13, const Decimal &a21, const Decimal &a22, const Decimal &a23, const Decimal &a31, const Decimal &a32, const Decimal &a33);
00380   
00382   Roto3DHomoArma(const Decimal &a11,const Decimal &a12, const Decimal &a13, const Decimal &a21, const Decimal &a22, const Decimal &a23, const Decimal &a31, const Decimal &a32, const Decimal &a33,const Decimal &x,const Decimal &y,const Decimal &z);
00383   
00385   Roto3DHomoArma(const Decimal &a11,const Decimal &a12, const Decimal &a13, const Decimal &a21, const Decimal &a22, const Decimal &a23, const Decimal &a31, const Decimal &a32, const Decimal &a33, const arma::Col<Decimal>::fixed<3> &trasl);
00386   
00388   Roto3DHomoArma(const Decimal &roll, const Decimal &pitch, const Decimal &yaw);
00389   
00391   Roto3DHomoArma(const Decimal &roll, const Decimal &pitch, const Decimal &yaw, const Decimal &x, const Decimal &y, const Decimal &z);
00392   
00394   Roto3DHomoArma(const Roto3DHomoArma &A);
00395   
00397   Roto3DHomoArma(const arma::Mat<Decimal>::fixed<4,4>& rhs);
00398   
00400   Roto3DHomoArma(const Roto3DArma& other);
00401   
00403   Roto3DHomoArma(const Roto3DArma& other, const Decimal &x, const Decimal &y, const Decimal &z);
00404   
00406   Roto3DHomoArma(const Roto3DArma& other, const arma::Col<Decimal>::fixed<3> &trasl);
00407   
00409   Roto3DHomoArma& operator=(const Roto3DHomoArma& rhs);
00410   
00412   Roto3DHomoArma& operator=(const arma::Mat<Decimal>::fixed<4,4>& rhs);
00413   
00415   Roto3DHomoArma& operator+=(const Roto3DHomoArma &pos);
00416   
00418   /*const */Roto3DHomoArma operator+(Roto3DHomoArma &other) const;
00419   
00421   /*const */Roto3DHomoArma operator-(Roto3DHomoArma &other) const;
00422   
00424   Roto3DHomoArma& operator-=(const Roto3DHomoArma &pos); 
00425   
00427   Roto3DHomoArma& operator*=(const Roto3DHomoArma &pos); 
00428   
00430   Roto3DHomoArma& operator*=(const Decimal& scalar);
00431     
00433   /*const */Roto3DHomoArma operator*(Roto3DHomoArma &other) const;
00434   
00436   Roto3DHomoArma& operator/=(const Roto3DHomoArma &pos); 
00437   
00439   Roto3DHomoArma& operator/=(const Decimal& scalar);
00440     
00442   /*const */Roto3DHomoArma operator/(Roto3DHomoArma &other) const;
00443   
00445   string print();
00446   
00449   Roto3DHomoArma invMatrix();
00450   
00455   Decimal getElem(int r,int c) const;
00456   
00461   void setElem(int r,int c,const Decimal &item);
00462   
00464   void setRotation(const Roto3DArma &rhs);
00465   
00467   void setPosition(const Position3DArma &rhs);
00468   
00471   arma::Col<Decimal>::fixed<3> getTraslation();
00472   
00475   Position3DArma getTraslation3DArma() const;
00476   
00479   arma::Mat<Decimal>::fixed<3,3> getRotation();
00480   
00483   Roto3DArma getRotation3DArma() const;
00484   
00487   Decimal getRoll() const;
00488   
00491   Angle getRollAngle() const;
00492   
00495   Decimal getPitch() const;
00496   
00499   Angle getPitchAngle() const;
00500   
00503   Decimal getYaw() const;
00504   
00507   Angle getYawAngle() const;
00508 };
00509 
00513 class Velocity3DArma : public Position3DArma{
00514  public:
00515   
00517   Velocity3DArma() : Position3DArma() {}
00518   
00520   Velocity3DArma(const Decimal &x_in,const Decimal &y_in,const Decimal &z_in) : Position3DArma(x_in,y_in,z_in) {}
00521   
00523   Velocity3DArma(const Velocity3DArma& p);
00524   
00526   Velocity3DArma(Position3DArma p) : Position3DArma(p) {}
00527   
00529   Velocity3DArma(const Position3D &pos) : Position3DArma(pos){};
00530   
00532   Velocity3DArma(const arma::Mat<Decimal>& A) : Position3DArma(A){};
00533   
00535     Velocity3DArma& operator=(const Velocity3DArma& rhs);
00536   
00538     Velocity3DArma& operator=(const arma::Mat<Decimal>& rhs);
00539   
00541   bool operator==(const Velocity3DArma &other) const;
00542   
00545   Velocity2DArma getVelocity2D();
00546   
00548   string print(PrintTypes type = PRINT_TYPE_WITH_UNITS) const;
00549 }; 
00550 
00554 class Acceleration3DArma : public Position3DArma{
00555  public:
00556   
00558   Acceleration3DArma() : Position3DArma() {}
00559   
00561   Acceleration3DArma(const Decimal &x_in,const Decimal &y_in,const Decimal &z_in) : Position3DArma(x_in,y_in,z_in) {}
00562   
00564   Acceleration3DArma(const Acceleration3DArma& p);
00565   
00567   Acceleration3DArma(Position3DArma p) : Position3DArma(p) {}
00568   
00570   Acceleration3DArma(const Position3D &pos) : Position3DArma(pos){};
00571   
00573   Acceleration3DArma(const arma::Mat<Decimal>& A) : Position3DArma(A){};
00574   
00576     Acceleration3DArma& operator=(const Acceleration3DArma& rhs);
00577   
00579     Acceleration3DArma& operator=(const arma::Mat<Decimal>& rhs);
00580   
00582   bool operator==(const Acceleration3DArma &other) const;
00583   
00586   Acceleration2DArma getAcceleration2D();
00587   
00589   string print(PrintTypes type = PRINT_TYPE_WITH_UNITS) const;
00590 }; 
00591 
00592 class Pose3DArma{
00593  private:
00594   Orientation3D  _ori;
00595   Position3DArma _pos;
00596   
00597  public:
00598   
00600   Pose3DArma();
00601   
00603   Pose3DArma(const Decimal &x, const Decimal &y, const Decimal &z, const Angle &roll, const Angle &pitch, const Angle &yaw);
00604   
00606   Pose3DArma(const Position3DArma &pos, const Orientation3D &ori);
00607   
00609   Pose3DArma(const Position3DArma &pos, const Angle &roll, const Angle &pitch, const Angle &yaw);
00610   
00612   Pose3DArma(const Decimal &x, const Decimal &y, const Decimal &z, const Orientation3D &ori);
00613   
00615   Pose3DArma(Pose3D &pos);
00616   
00618   Pose3DArma(const Pose3DArma &pos);
00619   
00621   Pose3DArma& operator=(Pose3D& rhs);
00622   
00624   Pose3DArma& operator=(const Pose3DArma& rhs);
00625   
00627   Pose3DArma& operator+=(const Pose3DArma& a);
00628   
00630   const Pose3DArma operator+(const Pose3DArma &other) const;
00631   
00633   Pose3DArma& operator-=(const Pose3DArma& a);
00634   
00636   const Pose3DArma operator-(const Pose3DArma &other) const;
00637   
00639   bool operator==(const Pose3DArma &other) const;
00640   
00642   bool operator!=(const Pose3DArma &other) const;
00643   
00645   Pose3DArma& operator*=(const arma::Mat<Decimal>::fixed<3,3>& rhs);
00646   
00648   /*const*/ Pose3DArma operator*(const arma::Mat<Decimal>::fixed<3,3>& rhs) const;
00649   
00651   Pose3DArma& operator*=(const arma::Mat<Decimal>::fixed<4,4>& rhs);
00652   
00654   /*const*/ Pose3DArma operator*(const arma::Mat<Decimal>::fixed<4,4>& rhs) const;
00655   
00658   Position3DArma getPos();
00659   
00662   Decimal getX() const;
00663   
00666   Decimal getY() const;
00667   
00670   Decimal getZ() const;
00671   
00674   Angle getRollAngle() const;
00675   
00678   Angle getPitchAngle() const;
00679   
00682   Angle getYawAngle() const;
00683   
00686   Decimal getRoll() const;
00687   
00690   Decimal getPitch() const;
00691   
00694   Decimal getYaw() const;
00695   
00698   Decimal getAzimuth() const;
00699   
00702   Angle getAzimuthAngle() const;
00703   
00706   Decimal getZenith() const;
00707   
00710   Angle getZenithAngle() const;
00711   
00715   Decimal norm(int p=2) const;
00716   
00719   Orientation3D getOri();
00720   
00723   void setPos(const Position3DArma &pos);
00724   
00727   void setX(const Decimal &x);
00728   
00731   void setY(const Decimal &y);
00732   
00735   void setZ(const Decimal &z);
00736   
00739   void setOri(const Orientation3D& ori);
00740   
00743   void setRoll(const Angle& roll);
00744   
00747   void setRoll(const Decimal& roll);
00748   
00751   void setPitch(const Angle& pitch);
00752   
00755   void setPitch(const Decimal& pitch);
00756   
00759   void setYaw(const Angle& yaw);
00760   
00763   void setYaw(const Decimal& yaw);
00764   
00767   Pose2DArma getPose2D();
00768   
00770   string print();
00771 };
00772 
00773 class IMU3DArma : public arma::Col<Decimal>::fixed<6>{
00774  public:
00775   
00777   IMU3DArma();
00778   
00780   IMU3DArma(const Decimal &accX, const Decimal &accY, const Decimal &accZ, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ);
00781   
00783   IMU3DArma(const Decimal &accX, const Decimal &accY, const Decimal &accZ, const Velocity3DArma &angVel);
00784   
00786   IMU3DArma(const Acceleration3DArma &acc, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ);
00787   
00789   IMU3DArma(const Acceleration3DArma &acc, const Velocity3DArma &angVel);
00790   
00792   IMU3DArma& operator=(const IMU3DArma& rhs);
00793   
00795   IMU3DArma& operator=(const arma::Mat<Decimal>& rhs);
00796   
00798   IMU3DArma& operator+=(const IMU3DArma &pos); 
00799   
00801   IMU3DArma& operator+=(const Decimal& scalar);
00802     
00804   /*const */IMU3DArma operator-(IMU3DArma &other) const;
00805   
00807   IMU3DArma& operator-=(const IMU3DArma &pos); 
00808   
00810   IMU3DArma& operator-=(const Decimal& scalar);
00811     
00813   /*const */IMU3DArma operator+(IMU3DArma &other) const;
00814   
00816   IMU3DArma& operator*=(const IMU3DArma &pos); 
00817   
00819   IMU3DArma& operator*=(const Decimal& scalar);
00820     
00822   /*const */IMU3DArma operator*(IMU3DArma &other) const;
00823   
00825   IMU3DArma& operator/=(const IMU3DArma &pos); 
00826   
00828   IMU3DArma& operator/=(const Decimal& scalar);
00829     
00831   /*const */IMU3DArma operator/(IMU3DArma &other) const;
00832   
00834   bool operator==(const IMU3DArma &other) const;
00835   
00838   Decimal getAccX() const;
00839   
00842   Decimal getAccY() const;
00843   
00846   Decimal getAccZ() const;
00847   
00850   Acceleration3DArma getAcceleration() const;
00851   
00854   Decimal getAngVelX() const;
00855   
00858   Decimal getAngVelY() const;
00859   
00862   Decimal getAngVelZ() const;
00863   
00866   Velocity3DArma getAngularVelocity() const;
00867   
00870   void setAccX(const Decimal &x);
00871   
00874   void setAccY(const Decimal &y);
00875   
00878   void setAccZ(const Decimal &z);
00879   
00882   void setAcceleration(const Acceleration3DArma &acc);
00883   
00886   void setAngVelX(const Decimal &x);
00887   
00890   void setAngVelY(const Decimal &y);
00891   
00894   void setAngVelZ(const Decimal &z);
00895   
00898   void setAngularVelocity(const Velocity3DArma &angVel);
00899   
00902   IMU3DArma& matrixProd(const arma::Mat<Decimal>::fixed<3,3> &in);
00903   
00906   IMU3DArma& matrixProd(const Roto3DArma &in);
00907   
00910   IMU3DArma& matrixProdAcc(const arma::Mat<Decimal>::fixed<3,3> &in);
00911   
00914   IMU3DArma& matrixProdAngVel(const arma::Mat<Decimal>::fixed<3,3> &in);
00915   
00918   IMU3DArma& matrixProdAcc(const Roto3DArma &in);
00919   
00922   IMU3DArma& matrixProdAngVel(const Roto3DArma &in);
00923   
00925   string print();
00926 };
00927 
00928 class Odometry3DArma : public arma::Col<Decimal>::fixed<6>{
00929  public:
00930   
00932   Odometry3DArma();
00933   
00935   Odometry3DArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ);
00936   
00938   Odometry3DArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Velocity3DArma &angVel);
00939   
00941   Odometry3DArma(const Velocity3DArma &linVel, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ);
00942   
00944   Odometry3DArma(const Velocity3DArma &linVel, const Velocity3DArma &angVel);
00945   
00947   Odometry3DArma& operator=(const Odometry3DArma& rhs);
00948   
00950   Odometry3DArma& operator=(const arma::Mat<Decimal>& rhs);
00951   
00953   Odometry3DArma& operator+=(const Odometry3DArma &pos); 
00954   
00956   Odometry3DArma& operator+=(const Decimal& scalar);
00957     
00959   /*const */Odometry3DArma operator-(Odometry3DArma &other) const;
00960   
00962   Odometry3DArma& operator-=(const Odometry3DArma &pos); 
00963   
00965   Odometry3DArma& operator-=(const Decimal& scalar);
00966     
00968   /*const */Odometry3DArma operator+(Odometry3DArma &other) const;
00969   
00971   Odometry3DArma& operator*=(const Odometry3DArma &pos); 
00972   
00974   Odometry3DArma& operator*=(const Decimal& scalar);
00975     
00977   /*const */Odometry3DArma operator*(Odometry3DArma &other) const;
00978   
00980   Odometry3DArma& operator/=(const Odometry3DArma &pos); 
00981   
00983   Odometry3DArma& operator/=(const Decimal& scalar);
00984     
00986   /*const */Odometry3DArma operator/(Odometry3DArma &other) const;
00987   
00989   bool operator==(const Odometry3DArma &other) const;
00990   
00993   Decimal getLinVelX() const;
00994   
00997   Decimal getLinVelY() const;
00998   
01001   Decimal getLinVelZ() const;
01002   
01005   Velocity3DArma getLinearVelocity() const;
01006   
01009   Decimal getAngVelX() const;
01010   
01013   Decimal getAngVelY() const;
01014   
01017   Decimal getAngVelZ() const;
01018   
01021   Velocity3DArma getAngularVelocity() const;
01022   
01025   void setLinVelX(const Decimal &x);
01026   
01029   void setLinVelY(const Decimal &y);
01030   
01033   void setLinVelZ(const Decimal &z);
01034   
01037   void setLinearVelocity(const Velocity3DArma &acc);
01038   
01041   void setAngVelX(const Decimal &x);
01042   
01045   void setAngVelY(const Decimal &y);
01046   
01049   void setAngVelZ(const Decimal &z);
01050   
01053   void setAngularVelocity(const Velocity3DArma &angVel);
01054   
01057   Odometry3DArma& matrixProd(const arma::Mat<Decimal>::fixed<3,3> &in);
01058   
01061   Odometry3DArma& matrixProd(const Roto3DArma &in);
01062   
01065   Odometry3DArma& matrixProdLinVel(const arma::Mat<Decimal>::fixed<3,3> &in);
01066   
01069   Odometry3DArma& matrixProdAngVel(const arma::Mat<Decimal>::fixed<3,3> &in);
01070   
01073   Odometry3DArma& matrixProdLinVel(const Roto3DArma &in);
01074   
01077   Odometry3DArma& matrixProdAngVel(const Roto3DArma &in);
01078   
01080   Odometry2DArma getOdometry2D() const;
01081   
01083   string print();
01084 };
01085  
01086 class Odometry3DTimeArma{
01087  private: 
01088   Odometry3DArma _odo;
01089   Time      _time;
01090  public:
01091   
01093   Odometry3DTimeArma();
01094   
01096   Odometry3DTimeArma(const Odometry3DArma &odo, const Time &time);
01097   
01099   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ, const Time &time);
01100   
01102   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Velocity3DArma &angVel, const Time &time);
01103   
01105   Odometry3DTimeArma(const Velocity3DArma &linVel, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ,const Time &time);
01106   
01108   Odometry3DTimeArma(const Velocity3DArma &linVel, const Velocity3DArma &angVel,const Time &time);
01109   
01111   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ, const long int &sec, const long int &usec); 
01112   
01114   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Velocity3DArma &angVel, const long int &sec, const long int &usec);
01115   
01117   Odometry3DTimeArma(const Velocity3DArma &linVel, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ, const long int &sec, const long int &usec);
01118   
01120   Odometry3DTimeArma(const Velocity3DArma &linVel, const Velocity3DArma &angVel, const long int &sec, const long int &usec);
01121   
01123   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ, const Decimal &time);
01124   
01126   Odometry3DTimeArma(const Decimal &linVelX, const Decimal &linVelY, const Decimal &linVelZ, const Velocity3DArma &angVel, const Decimal &time);
01127   
01129   Odometry3DTimeArma(const Velocity3DArma &linVel, const Decimal &velAngX, const Decimal &velAngY, const Decimal &velAngZ,const Decimal &time);
01130   
01132   Odometry3DTimeArma(const Velocity3DArma &linVel, const Velocity3DArma &angVel,const Decimal &time);
01133   
01135   Odometry3DTimeArma& operator=(const Odometry3DTimeArma& rhs);
01136   
01139   Odometry2DTimeArma getOdometry2DTime() const;
01140   
01143   Time getTime() const;
01144   
01147   Decimal getTimeDCast();
01148   
01151   Odometry3DArma getOdo() const;
01152   
01155   Decimal getLinVelX() const;
01156   
01159   Decimal getLinVelY() const;
01160   
01163   Decimal getLinVelZ() const;
01164   
01167   Velocity3DArma getLinearVelocity() const;
01168   
01171   Decimal getAngVelX() const;
01172   
01175   Decimal getAngVelY() const;
01176   
01179   Decimal getAngVelZ() const;
01180   
01183   Velocity3DArma getAngularVelocity() const;
01184   
01187   void setOdom(const Odometry3DArma &odo);
01188   
01191   void setLinVelX(const Decimal &x);
01192   
01195   void setLinVelY(const Decimal &y);
01196   
01199   void setLinVelZ(const Decimal &z);
01200   
01203   void setLinearVelocity(const Velocity3DArma &acc);
01204   
01207   void setAngVelX(const Decimal &x);
01208   
01211   void setAngVelY(const Decimal &y);
01212   
01215   void setAngVelZ(const Decimal &z);
01216   
01219   void setAngularVelocity(const Velocity3DArma &angVel);
01220   
01223   void setTime(const Time &time);
01224   
01227   void setTime(Decimal time);
01228   
01232   void setTime(const long int &sec, const long int &usec);
01233   
01236   Odometry3DArma* getPointerOdo();
01237   
01240   Time* getPointerTime();
01241   
01243   string print();
01244   
01245 };
01246 
01247 class Position3DTimeArma{
01248  private:
01249     Position3DArma _pos;
01250   Time      _time;
01251  public:
01252   
01254   Position3DTimeArma();
01255   
01257   Position3DTimeArma(const Position3DArma &odo, const Time &time);
01258   
01260   Position3DTimeArma(const Decimal &x, const Decimal &y, const Decimal &z, const Time &time);
01261   
01263   Position3DTimeArma(const Decimal &x,const Decimal &y,const Decimal &z,const long int &sec,const long int &usec);
01264   
01266   Position3DTimeArma(const Decimal &x,const Decimal &y,const Decimal &z,const Decimal &time);
01267   
01269   Position3DTimeArma(const Position3D& A, const Time &time);
01270   
01272   Position3DTimeArma(const Position3D& A, const long int &sec,const long int &usec);
01273   
01275   Position3DTimeArma(const Position3D& A, const Decimal &time);
01276   
01278   Position3DTimeArma(const arma::Mat<Decimal>& A, const Time &time);
01279   
01281   Position3DTimeArma(const arma::Mat<Decimal>& A, const long int &sec,const long int &usec);
01282   
01284   Position3DTimeArma(const arma::Mat<Decimal>& A, const Decimal &time);
01285   
01287   Position3DTimeArma& operator=(const Position3DTimeArma& rhs);
01288   
01291   Position3DArma getPos() const;
01292   
01295   Time getTime() const;
01296   
01299   Decimal getTimeDCast();
01300   
01303   Position3DArma* getPointerPos();
01304   
01307   Time* getPointerTime();
01308   
01311   void setPos(const Position3DArma &pos);
01312   
01315   void setTime(const Time &time);
01316   
01319   void setTime(const Decimal in);
01320   
01322   Decimal posX() const;
01323   
01325   Decimal posY() const;
01326   
01328   Decimal posZ() const;
01329   
01331   void setPosX(const Decimal &p);
01332   
01334   void setPosY(const Decimal &p);
01335   
01337   void setPosZ(const Decimal &p);
01338   
01340   string print();
01341 };
01342  
01343 class PosiFeatures3DTimeArma{
01344  private:
01345   Time _time;
01346   vector<Position3DArma> _vecPos;
01347  public:
01348   
01350   PosiFeatures3DTimeArma();
01351   
01353   PosiFeatures3DTimeArma(const Time &time);
01354   
01356   PosiFeatures3DTimeArma(const int &sec, const int &usec);
01357   
01359   PosiFeatures3DTimeArma(const Decimal &time);
01360   
01362   PosiFeatures3DTimeArma(const vector<Position3DArma> &vec, const Time &time);
01363   
01365   PosiFeatures3DTimeArma(const vector<Position3DArma> &vec,const int &sec, const int &usec);
01366   
01368   PosiFeatures3DTimeArma(const vector<Position3DArma> &vec,const Decimal &time);
01369   
01371   PosiFeatures3DTimeArma(const Position3DArma &pos, const Time &time);
01372   
01374   PosiFeatures3DTimeArma(const Position3DArma &pos,const int &sec, const int &usec);
01375   
01377   PosiFeatures3DTimeArma(const Position3DArma &pos,const Decimal &time);
01378   
01380   PosiFeatures3DTimeArma(const PosiFeatures3DTimeArma &pos);
01381   
01383   PosiFeatures3DTimeArma& operator=(const PosiFeatures3DTimeArma& rhs);
01384   
01387   vector<Position3DArma> getPositionVector() const;
01388   
01393   Position3DArma getPositionAt(int index) const;
01394   
01397   Time getTime() const;
01398   
01401   Decimal getTimeDCast();
01402   
01405   void setTime(const Time &time);
01406   
01409   void setTime(const Decimal &time);
01410   
01414   void setTime(const long int &sec, const long int &usec);
01415   
01418   void addPosition(const Position3DArma &pos);
01419   
01421   void popLast();
01422   
01427   void setPosition(Position3DArma &pos,int index);
01428   
01431   Position3DArma getLastPosition();
01432   
01435   int getPositionSize() const;
01436   
01440   void insertPosition(Position3DArma &pos, int index);
01441   
01443   void freeVector();
01444   
01446   string print();
01447 };
01448 
01449 class Observation3DTimeArma{
01450  private:
01451   PosiFeatures3DTimeArma _vecTimePos;
01452   int _id;
01453  public:
01454   
01456   Observation3DTimeArma(int id=-1);
01457   
01459   Observation3DTimeArma(const Time &time,int id);
01460   
01462   Observation3DTimeArma(const int &sec, const int &usec,int id);
01463   
01465   Observation3DTimeArma(const Decimal &time,int id);
01466   
01468   Observation3DTimeArma(const vector<Position3DArma> &vec, const Time &time,int id);
01469   
01471   Observation3DTimeArma(const vector<Position3DArma> &vec,const int &sec, const int &usec,int id);
01472   
01474   Observation3DTimeArma(const vector<Position3DArma> &vec,const Decimal &time,int id);
01475   
01477   Observation3DTimeArma(const Position3DArma &pos, const Time &time,int id);
01478   
01480   Observation3DTimeArma(const Position3DArma &pos,const int &sec, const int &usec,int id);
01481   
01483   Observation3DTimeArma(const Position3DArma &pos,const Decimal &time,int id);
01484   
01486   Observation3DTimeArma(const PosiFeatures3DTimeArma &pos,const Decimal &time,int id);
01487   
01489   Observation3DTimeArma(const Observation3DTimeArma &pos);
01490   
01492   Observation3DTimeArma& operator=(const Observation3DTimeArma& rhs);
01493   
01496   vector<Position3DArma> getPositionVector() const;
01497   
01502   Position3DArma getPositionAt(int index) const;
01503   
01506   Time getTime() const;
01507   
01510   Decimal getTimeDCast();
01511   
01514   void setTime(const Time &time);
01515   
01518   void setTime(const Decimal &time);
01519   
01523   void setTime(const long int &sec, const long int &usec);
01524   
01527   void addPosition(const Position3DArma &pos);
01528   
01530   void popLast();
01531   
01536   void setPosition(Position3DArma &pos,int index);
01537   
01540   Position3DArma getLastPosition();
01541   
01544   int getPositionSize() const;
01545   
01549   void insertPosition(Position3DArma &pos, int index);
01550   
01552   void freeVector();
01553   
01556   int getId() const;
01557   
01560   void setId(int id);
01561   
01563   string print();
01564 };
01565 
01566 
01567 } // END OF NAMESPACE
01568 #endif

Generated on Mon Feb 20 07:01:07 2017 for MIP by  doxygen 1.5.6