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 #ifndef _hectormaprepsinglemap_h__
00030 #define _hectormaprepsinglemap_h__
00031 
00032 #include "MapRepresentationInterface.h"
00033 
00034 #include "../map/GridMap.h"
00035 #include "../map/OccGridMapUtilConfig.h"
00036 #include "../matcher/ScanMatcher.h"
00037 
00038 #include "../util/DrawInterface.h"
00039 #include "../util/HectorDebugInfoInterface.h"
00040 
00041 namespace hectorslam{
00042 
00043 class MapRepSingleMap : public MapRepresentationInterface
00044 {
00045 
00046 public:
00047   MapRepSingleMap(float mapResolution, DrawInterface* drawInterfaceIn, HectorDebugInfoInterface* debugInterfaceIn)
00048   {
00049     gridMap = new hectorslam::GridMap(mapResolution,Eigen::Vector2i(1024,1024), Eigen::Vector2f(20.0f, 20.0f));
00050     gridMapUtil = new OccGridMapUtilConfig<GridMap>(gridMap);
00051     scanMatcher = new hectorslam::ScanMatcher<OccGridMapUtilConfig<GridMap> >(drawInterfaceIn, debugInterfaceIn);
00052   }
00053 
00054   virtual ~MapRepSingleMap()
00055   {
00056     delete gridMap;
00057     delete gridMapUtil;
00058     delete scanMatcher;
00059   }
00060 
00061   virtual void reset()
00062   {
00063     gridMap->reset();
00064     gridMapUtil->resetCachedData();
00065   }
00066 
00067   virtual float getScaleToMap() const { return gridMap->getScaleToMap(); };
00068 
00069   virtual int getMapLevels() const { return 1; };
00070   virtual const GridMap& getGridMap(int mapLevel) const { return *gridMap; };
00071 
00072   virtual void onMapUpdated()
00073   {
00074     gridMapUtil->resetCachedData();
00075   }
00076 
00077   virtual Eigen::Vector3f matchData(const Eigen::Vector3f& beginEstimateWorld, const DataContainer& dataContainer, Eigen::Matrix3f& covMatrix)
00078   {
00079     return scanMatcher->matchData(beginEstimateWorld, *gridMapUtil, dataContainer, covMatrix, 20);
00080   }
00081 
00082   virtual void updateByScan(const DataContainer& dataContainer, const Eigen::Vector3f& robotPoseWorld)
00083   {
00084     gridMap->updateByScan(dataContainer, robotPoseWorld);
00085   }
00086 
00087 protected:
00088   GridMap* gridMap;
00089   OccGridMapUtilConfig<GridMap>* gridMapUtil;
00090   ScanMatcher<OccGridMapUtilConfig<GridMap> >* scanMatcher;
00091 };
00092 
00093 }
00094 
00095 #endif
00096 
00097