00001 /* +---------------------------------------------------------------------------+ 00002 | Mobile Robot Programming Toolkit (MRPT) | 00003 | http://www.mrpt.org/ | 00004 | | 00005 | Copyright (c) 2005-2016, Individual contributors, see AUTHORS file | 00006 | See: http://www.mrpt.org/Authors - All rights reserved. | 00007 | Released under BSD License. See details in http://www.mrpt.org/License | 00008 +---------------------------------------------------------------------------+ */ 00009 00010 #ifndef CLOOPCLOSERERD_MR_H 00011 #define CLOOPCLOSERERD_MR_H 00012 00013 #include "mrpt_graphslam_2d/interfaces/CEdgeRegistrationDecider_MR.h" 00014 #include <mrpt_bridge/laser_scan.h> 00015 #include <mrpt/graphslam/ERD/CLoopCloserERD.h> 00016 #include <mrpt_msgs/NodeIDWithLaserScan.h> 00017 00018 namespace mrpt { namespace graphslam { namespace deciders { 00019 00026 template<class GRAPH_T> 00027 class CLoopCloserERD_MR : 00028 public virtual CLoopCloserERD<GRAPH_T>, 00029 public virtual CEdgeRegistrationDecider_MR<GRAPH_T> 00030 { 00031 public: 00035 typedef CLoopCloserERD<GRAPH_T> lc_parent_t; 00036 typedef CEdgeRegistrationDecider_MR<GRAPH_T> mr_parent_t; 00037 typedef CLoopCloserERD_MR<GRAPH_T> decider_t; 00038 typedef typename lc_parent_t::constraint_t constraint_t; 00039 typedef typename lc_parent_t::pose_t pose_t; 00040 typedef typename lc_parent_t::range_ops_t range_ops_t; 00041 typedef typename lc_parent_t::partitions_t partitions_t; 00042 typedef typename lc_parent_t::nodes_to_scans2D_t nodes_to_scans2D_t; 00043 typedef mrpt::graphslam::CGraphSlamEngine_MR<GRAPH_T> engine_t; 00044 typedef typename GRAPH_T::global_pose_t global_pose_t; 00047 // Ctor, Dtor 00048 CLoopCloserERD_MR(); 00049 ~CLoopCloserERD_MR(); 00050 00051 // member implementations 00052 bool updateState( 00053 mrpt::obs::CActionCollectionPtr action, 00054 mrpt::obs::CSensoryFramePtr observations, 00055 mrpt::obs::CObservationPtr observation ); 00056 void addBatchOfNodeIDsAndScans( 00057 const std::map< 00058 mrpt::utils::TNodeID, 00059 mrpt::obs::CObservation2DRangeScanPtr>& nodeIDs_to_scans2D); 00060 void addScanMatchingEdges(mrpt::utils::TNodeID curr_nodeID); 00061 void fetchNodeIDsForScanMatching( 00062 const mrpt::utils::TNodeID& curr_nodeID, 00063 std::set<mrpt::utils::TNodeID>* nodes_set); 00064 00065 protected: 00066 00067 }; 00068 00069 } } } // end of namespaces 00070 00071 #include "CLoopCloserERD_MR_impl.h" 00072 #endif /* end of include guard: CLOOPCLOSERERD_MR_H */