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
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
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 Roto3DArma operator+(Roto3DArma &other) const;
00092
00094 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 Roto3DArma operator*(Roto3DArma &other) const;
00107
00109 Roto3DArma& operator/=(const Roto3DArma &pos);
00110
00112 Roto3DArma& operator/=(const Decimal& scalar);
00113
00115 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 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 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 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 Position3DArma operator/(const arma::Col<Decimal>::fixed<3> &vec) const;
00313
00315 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 Roto3DHomoArma operator+(Roto3DHomoArma &other) const;
00419
00421 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 Roto3DHomoArma operator*(Roto3DHomoArma &other) const;
00434
00436 Roto3DHomoArma& operator/=(const Roto3DHomoArma &pos);
00437
00439 Roto3DHomoArma& operator/=(const Decimal& scalar);
00440
00442 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 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 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 IMU3DArma operator-(IMU3DArma &other) const;
00805
00807 IMU3DArma& operator-=(const IMU3DArma &pos);
00808
00810 IMU3DArma& operator-=(const Decimal& scalar);
00811
00813 IMU3DArma operator+(IMU3DArma &other) const;
00814
00816 IMU3DArma& operator*=(const IMU3DArma &pos);
00817
00819 IMU3DArma& operator*=(const Decimal& scalar);
00820
00822 IMU3DArma operator*(IMU3DArma &other) const;
00823
00825 IMU3DArma& operator/=(const IMU3DArma &pos);
00826
00828 IMU3DArma& operator/=(const Decimal& scalar);
00829
00831 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 Odometry3DArma operator-(Odometry3DArma &other) const;
00960
00962 Odometry3DArma& operator-=(const Odometry3DArma &pos);
00963
00965 Odometry3DArma& operator-=(const Decimal& scalar);
00966
00968 Odometry3DArma operator+(Odometry3DArma &other) const;
00969
00971 Odometry3DArma& operator*=(const Odometry3DArma &pos);
00972
00974 Odometry3DArma& operator*=(const Decimal& scalar);
00975
00977 Odometry3DArma operator*(Odometry3DArma &other) const;
00978
00980 Odometry3DArma& operator/=(const Odometry3DArma &pos);
00981
00983 Odometry3DArma& operator/=(const Decimal& scalar);
00984
00986 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 }
01568 #endif