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 #ifndef OPTIMIZERG2O_H_
00029 #define OPTIMIZERG2O_H_
00030
00031 #include "rtabmap/core/RtabmapExp.h"
00032
00033 #include <rtabmap/core/Optimizer.h>
00034
00035 namespace rtabmap {
00036
00037 class RTABMAP_EXP OptimizerG2O : public Optimizer
00038 {
00039 public:
00040 static bool available();
00041 static bool isCSparseAvailable();
00042 static bool isCholmodAvailable();
00043 static bool saveGraph(
00044 const std::string & fileName,
00045 const std::map<int, Transform> & poses,
00046 const std::multimap<int, Link> & edgeConstraints,
00047 bool useRobustConstraints = false);
00048
00049 public:
00050 OptimizerG2O(const ParametersMap & parameters = ParametersMap()) :
00051 Optimizer(parameters),
00052 solver_(Parameters::defaultg2oSolver()),
00053 optimizer_(Parameters::defaultg2oOptimizer()),
00054 pixelVariance_(Parameters::defaultg2oPixelVariance()),
00055 robustKernelDelta_(Parameters::defaultg2oRobustKernelDelta()),
00056 baseline_(Parameters::defaultg2oBaseline())
00057 {
00058 parseParameters(parameters);
00059 }
00060 virtual ~OptimizerG2O() {}
00061
00062 virtual Type type() const {return kTypeG2O;}
00063
00064 virtual void parseParameters(const ParametersMap & parameters);
00065
00066 virtual std::map<int, Transform> optimize(
00067 int rootId,
00068 const std::map<int, Transform> & poses,
00069 const std::multimap<int, Link> & edgeConstraints,
00070 cv::Mat & outputCovariance,
00071 std::list<std::map<int, Transform> > * intermediateGraphes = 0,
00072 double * finalError = 0,
00073 int * iterationsDone = 0);
00074
00075 virtual std::map<int, Transform> optimizeBA(
00076 int rootId,
00077 const std::map<int, Transform> & poses,
00078 const std::multimap<int, Link> & links,
00079 const std::map<int, CameraModel> & models,
00080 std::map<int, cv::Point3f> & points3DMap,
00081 const std::map<int, std::map<int, cv::Point3f> > & wordReferences,
00082 std::set<int> * outliers = 0);
00083
00084 private:
00085 int solver_;
00086 int optimizer_;
00087 double pixelVariance_;
00088 double robustKernelDelta_;
00089 double baseline_;
00090 };
00091
00092 }
00093 #endif