00001
00002
00003 #ifndef SLAM_DALA_HPP
00004 #define SLAM_DALA_HPP
00005
00006 #include "kernel/dataLog.hpp"
00007
00008 #include "jmath/jblas.hpp"
00009
00010 #include "geom/t3dEuler.hpp"
00011
00012 #include "slam/full3dPredictModel.hpp"
00013 #include "slam/baseSlam.hpp"
00014
00015
00016 namespace jafar {
00017 namespace slam {
00018
00023 class DalaManager : public jafar::kernel::DataLoggable {
00024
00025 private:
00026
00027 Full3dPredictModel predictModel;
00028
00029 BaseSlam& slam;
00030
00031
00032 double kTrans;
00033 double kzTrans;
00034 double ksYaw;
00035 double ksAtt;
00036 double krYaw;
00037
00038 double deltaPosMin;
00039 geom::T3DEuler currentRobotPosePredict;
00040
00041 geom::T3DEuler worldToRobotCur;
00042 geom::T3DEuler worldToRobotPrev;
00043 geom::T3DEuler robotPrevToRobotCur;
00044
00045 geom::T3DEuler worldToRobot;
00046
00047
00048 geom::T3DEuler refToWorld;
00049 geom::T3DEuler worldToRef;
00050
00051 bool nextFrameRelativeNoUncertainty();
00052
00053 bool nextFrameRelative();
00054
00055 void slamPredict();
00056 int robotId;
00057
00058 public:
00059
00060 DalaManager(BaseSlam& slam_, unsigned int robotId_ = 0);
00061 DalaManager(BaseSlam& slam_, unsigned int robotId_, const jblas::vec& _robotState, const jblas::sym_mat& _robotStateCov);
00062
00063 void setDeltaPoseMin(double deltaPosMin_) {
00064 deltaPosMin = deltaPosMin_;
00065 }
00073 void setEgoMotionModel(double kTrans_,
00074 double kzTrans_,
00075 double ksYaw_,
00076 double ksAtt_,
00077 double krYaw_)
00078 {
00079 kTrans = kTrans_;
00080 kzTrans = kzTrans_;
00081 ksYaw = ksYaw_;
00082 ksAtt = ksAtt_;
00083 krYaw = krYaw_;
00084 }
00085
00086 void setInitPose(jblas::vec const& worldToRobotCur_) {
00087 worldToRobotCur = worldToRobotCur_;
00088 }
00089
00090 void setRefToWorld(jblas::vec const& refToWorld_) {
00091 refToWorld.set(refToWorld_);
00092 geom::T3D::inv(refToWorld, worldToRef);
00093 }
00094
00095 bool nextFrameAbsolute(jblas::vec const& worldToRobotCur_);
00096
00097 bool nextFrameRelative(jblas::vec const& robotPrevToRobotCur_)
00098 {
00099 robotPrevToRobotCur.set(robotPrevToRobotCur_);
00100 return nextFrameRelativeNoUncertainty();
00101 }
00102
00103 bool nextFrameRelative(jblas::vec const& robotPrevToRobotCur_,
00104 jblas::sym_mat const& robotPrevToRobotCurCov_,
00105 double noiseFactor = 1.0)
00106 {
00107 robotPrevToRobotCur.set(robotPrevToRobotCur_, noiseFactor*robotPrevToRobotCurCov_);
00108 return nextFrameRelative();
00109 }
00110
00111 static bool isVmeOk(jblas::vec const& me,
00112 jblas::sym_mat const& meCov,
00113 double thTrans,
00114 double thRot);
00115
00116 void setPredToRef(geom::T3DEuler const& predToRef)
00117 {
00118 predictModel.setPredToRef(predToRef);
00119 }
00120
00121 protected:
00122
00123 void writeLogHeader(jafar::kernel::DataLogger& dataLogger) const;
00124 void writeLogData(jafar::kernel::DataLogger& dataLogger) const;
00125
00126 };
00127
00128 }
00129 }
00130
00131 #endif // SLAM_DALA_HPP