00001
00002
00003 #ifndef _MAPS_POSE_MANAGER_HPP_
00004 #define _MAPS_POSE_MANAGER_HPP_
00005
00006 #include <kernel/dataLog.hpp>
00007 #include <geom/t3dEuler.hpp>
00008 #include <slam/slamEkf.hpp>
00009 #include <slam/robot.hpp>
00010 #include <slam/baseSlam.hpp>
00011 #include <slam/MapManagerFactory.hpp>
00012
00013 #include "slammm/StartNewMapStrategy.hpp"
00014
00015 namespace jafar {
00016 namespace slammm {
00017 class MapsPoseManagerEventListener;
00018 class StartNewMapStrategy;
00023 class MapsPoseManager : public kernel::DataLoggable {
00024 public:
00025 virtual ~MapsPoseManager() {}
00029 virtual void addFirstMapPose(unsigned int _mapId, unsigned int _robotId, const jblas::vec& _robotState, const jblas::mat& _robotStateCov ) = 0;
00033 virtual void addMapPose(unsigned int _mapId, unsigned int _robotId, unsigned int _previousMapId, const jblas::vec& _robotState, const jblas::mat& _robotStateCov ) = 0;
00037 virtual jafar::geom::T3DEuler getWorldToMapTransformation( unsigned int _mapId ) const = 0;
00042 virtual jafar::geom::T3DEuler getMapToMapTransformation( unsigned int _firstMapId, unsigned int _secondMapId ) const = 0;
00049 virtual void enforceLoopConstraint( unsigned int _firstMapId, unsigned int _secondMapId, const jblas::vec& _transformation, const jblas::sym_mat& _transformationCov ) = 0;
00050 virtual void enforceLoopConstraint( unsigned int _firstMapId, unsigned int _secondMapId, const geom::T3DEuler& _transformation );
00051 virtual bool canEnforceLoopConstraint( unsigned int _firstMapId, unsigned int _secondMapId ) const = 0;
00052 public:
00053 void addEventListener( MapsPoseManagerEventListener* listener );
00054 void removeEventListener( MapsPoseManagerEventListener* listener );
00055 protected:
00056 std::list<MapsPoseManagerEventListener*> m_eventListners;
00057 };
00058 }
00059 }
00060
00061 #endif