RTAB-Map 0.23.10
Real-Time Appearance-Based Mapping
Loading...
Searching...
No Matches
Rtabmap.h
1/*
2Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the Universite de Sherbrooke nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28#ifndef RTABMAP_H_
29#define RTABMAP_H_
30
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
32
33#include "rtabmap/core/Parameters.h"
34#include "rtabmap/core/SensorData.h"
35#include "rtabmap/core/Statistics.h"
36#include "rtabmap/core/Link.h"
37#include "rtabmap/core/ProgressState.h"
38#include "rtabmap/core/Graph.h"
39
40#include <opencv2/core/core.hpp>
41#include <list>
42#include <stack>
43#include <set>
44
45namespace rtabmap
46{
47
48class EpipolarGeometry;
49class Memory;
50class BayesFilter;
51class Signature;
52class Optimizer;
53
193class RTABMAP_CORE_EXPORT Rtabmap
194{
195public:
202
203public:
204 Rtabmap();
205 virtual ~Rtabmap();
206
224 const SensorData & data,
225 Transform odomPose,
226 const cv::Mat & odomCovariance = cv::Mat::eye(6,6,CV_64FC1),
227 const std::vector<float> & odomVelocity = std::vector<float>(),
228 const std::map<std::string, float> & externalStats = std::map<std::string, float>());
237 const SensorData & data,
238 Transform odomPose,
239 float odomLinearVariance,
240 float odomAngularVariance,
241 const std::vector<float> & odomVelocity = std::vector<float>(),
242 const std::map<std::string, float> & externalStats = std::map<std::string, float>());
254 const cv::Mat & image,
255 int id=0, const std::map<std::string, float> & externalStats = std::map<std::string, float>());
256
271 void init(const ParametersMap & parameters, const std::string & databasePath = "", bool loadDatabaseParameters = false);
282 void init(const std::string & configFile = "", const std::string & databasePath = "", bool loadDatabaseParameters = false);
283
294 void close(bool databaseSaved = true, const std::string & ouputDatabasePath = "");
295
297 const std::string & getWorkingDir() const {return _wDir;}
299 bool isRGBDMode() const { return _rgbdSlamMode; }
301 int getLoopClosureId() const {return _loopClosureHypothesis.first;}
303 float getLoopClosureValue() const {return _loopClosureHypothesis.second;}
305 int getHighestHypothesisId() const {return _highestHypothesis.first;}
307 float getHighestHypothesisValue() const {return _highestHypothesis.second;}
309 int getLastLocationId() const;
311 std::list<int> getWM() const;
313 std::set<int> getSTM() const;
315 int getWMSize() const;
317 int getSTMSize() const;
319 std::map<int, int> getWeights() const;
321 int getTotalMemSize() const;
323 double getLastProcessTime() const {return _lastProcessTime;};
325 bool isInSTM(int locationId) const;
327 bool isIDsGenerated() const;
329 const Statistics & getStatistics() const;
331 const std::map<int, Transform> & getLocalOptimizedPoses() const {return _optimizedPoses;}
333 const std::multimap<int, Link> & getLocalConstraints() const {return _constraints;}
337 Transform getPose(int locationId) const;
349 Transform getMapCorrection() const {return _mapCorrection;}
351 const Memory * getMemory() const {return _memory;}
353 float getGoalReachedRadius() const {return _goalReachedRadius;}
355 float getLocalRadius() const {return _localRadius;}
363 const Transform & getLastLocalizationPose() const {return _lastLocalizationPose;}
364
369 float getTimeThreshold() const {return _maxTimeAllowed;}
383 void setTimeThreshold(float maxTimeAllowed);
388 int getMemoryThreshold() const {return _maxMemoryAllowed;}
399 void setMemoryThreshold(int maxMemoryAllowed);
400
448 void setInitialPose(const Transform & initialPose);
465 bool labelLocation(int id, const std::string & label);
481 bool setUserData(int id, const cv::Mat & data);
488 void generateDOTGraph(const std::string & path, int id=0, int margin=5);
504 const std::string & path,
505 bool optimized,
506 bool global,
507 int format
508 );
517 void dumpPrediction() const;
519 void dumpData() const;
524 void parseParameters(const ParametersMap & parameters);
526 const ParametersMap & getParameters() const {return _parameters;}
535 void setWorkingDirectory(std::string path);
568 void setOptimizedPoses(const std::map<int, Transform> & poses, const std::multimap<int, Link> & constraints);
576 Signature getSignatureCopy(int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) const;
581 RTABMAP_DEPRECATED
582 void get3DMap(std::map<int, Signature> & signatures,
583 std::map<int, Transform> & poses,
584 std::multimap<int, Link> & constraints,
585 bool optimized,
586 bool global) const;
603 void getGraph(std::map<int, Transform> & poses,
604 std::multimap<int, Link> & constraints,
605 bool optimized,
606 bool global,
607 std::map<int, Signature> * signatures = 0,
608 bool withImages = false,
609 bool withScan = false,
610 bool withUserData = false,
611 bool withGrid = false,
612 bool withWords = true,
613 bool withGlobalDescriptors = true) const;
624 std::map<int, Transform> getNodesInRadius(const Transform & pose, float radius, int k=0, std::map<int, float> * distsSqr=0);
635 std::map<int, Transform> getNodesInRadius(int nodeId, float radius, int k=0, std::map<int, float> * distsSqr=0);
664 float clusterRadiusMax = 0.5f,
665 float clusterAngle = M_PI/6.0f,
666 int iterations = 1,
667 bool intraSession = true,
668 bool interSession = true,
669 const ProgressState * state = 0,
670 float clusterRadiusMin = 0.0f,
671 int toFromMapId = -1);
685 int optimizerType = 1 /*g2o*/,
686 bool rematchFeatures = true,
687 int iterations = 0,
688 float pixelVariance = 0.0f);
698 const std::map<int, Transform> & mapPoses,
699 const cv::Mat & map,
700 float xMin,
701 float yMin,
702 float cellSize,
703 int cropRadius = 1,
704 bool filterScans = false);
729 bool addLink(const Link & link);
735 cv::Mat getInformation(const cv::Mat & covariance) const;
750 void addNodesToRepublish(const std::vector<int> & ids);
773 void setDummyDictionary(bool enabled = true);
774
776 int getPathStatus() const {return _pathStatus;}
781 void clearPath(int status);
794 bool computePath(int targetNode, bool global);
803 bool computePath(const Transform & targetPose, float tolerance = -1.0f);
805 const std::vector<std::pair<int, Transform> > & getPath() const {return _path;}
807 std::vector<std::pair<int, Transform> > getPathNextPoses() const;
809 std::vector<int> getPathNextNodes() const;
813 unsigned int getPathCurrentIndex() const {return _pathCurrentIndex;}
815 unsigned int getPathCurrentGoalIndex() const {return _pathGoalIndex;}
817 const Transform & getPathTransformToGoal() const {return _pathTransformToGoal;}
818
843 std::map<int, Transform> getForwardWMPoses(int fromId, int maxNearestNeighbors, float radius, int maxDiffID) const;
879 std::map<int, std::map<int, Transform> > getPaths(const std::map<int, Transform> & poses, const Transform & target, int maxGraphDepth = 0) const;
910 void adjustLikelihood(std::map<int, float> & likelihood) const;
911
912private:
913 void optimizeCurrentMap(int id,
914 bool lookInDatabase,
915 std::map<int, Transform> & optimizedPoses,
916 cv::Mat & covariance,
917 std::multimap<int, Link> * constraints = 0,
918 double * error = 0,
919 int * iterationsDone = 0) const;
920 std::map<int, Transform> optimizeGraph(
921 int fromId,
922 const std::set<int> & ids,
923 const std::map<int, Transform> & guessPoses,
924 bool lookInDatabase,
925 cv::Mat & covariance,
926 std::multimap<int, Link> * constraints = 0,
927 double * error = 0,
928 int * iterationsDone = 0) const;
929 std::list<std::pair<int, int> > repairGraph(
930 graph::MaxGraphErrors & maxGraphErrors,
931 std::map<int, Transform> & poses,
932 std::multimap<int, Link> & constraints,
933 double & optimizationError,
934 int & optimizationIterations,
935 cv::Mat & optimizationCovariance);
936 void updateGoalIndex();
937 bool computePath(int targetNode, std::map<int, Transform> nodes, const std::multimap<int, rtabmap::Link> & constraints);
938
939 void createGlobalScanMap();
940
941 void setupLogFiles(bool overwrite = false);
942 void flushStatisticLogs();
943
944private:
945 // Modifiable parameters
946 bool _publishStats;
947 bool _publishLastSignatureData;
948 bool _publishPdf;
949 bool _publishLikelihood;
950 bool _publishRAMUsage;
951 bool _computeRMSE;
952 bool _saveWMState;
953 float _maxTimeAllowed;
954 unsigned int _maxMemoryAllowed;
955 float _loopThr;
956 float _loopRatio;
957 float _aggressiveLoopThr;
958 int _virtualPlaceLikelihoodRatio;
959 float _maxLoopClosureDistance;
960 bool _verifyLoopClosureHypothesis;
961 unsigned int _maxRetrieved;
962 unsigned int _maxLocalRetrieved;
963 unsigned int _maxRepublished;
964 bool _rawDataKept;
965 bool _statisticLogsBufferedInRAM;
966 bool _statisticLogged;
967 bool _statisticLoggedHeaders;
968 bool _rgbdSlamMode;
969 float _rgbdLinearUpdate;
970 float _rgbdAngularUpdate;
971 float _rgbdLinearSpeedUpdate;
972 float _rgbdAngularSpeedUpdate;
973 float _newMapOdomChangeDistance;
974 bool _neighborLinkRefining;
975 bool _proximityByTime;
976 bool _proximityBySpace;
977 bool _scanMatchingIdsSavedInLinks;
978 bool _loopClosureIdentityGuess;
979 float _localRadius;
980 float _localImmunizationRatio;
981 int _proximityMaxGraphDepth;
982 int _proximityMaxPaths;
983 int _proximityMaxNeighbors;
984 float _proximityFilteringRadius;
985 bool _proximityRawPosesUsed;
986 float _proximityAngle;
987 bool _proximityOdomGuess;
988 double _proximityMergedScanCovFactor;
989 std::string _databasePath;
990 bool _optimizeFromGraphEnd;
991 float _optimizationMaxError;
992 float _optimizationMaxErrorRepairRadius;
993 bool _startNewMapOnLoopClosure;
994 bool _startNewMapOnGoodSignature;
995 float _goalReachedRadius;
996 bool _goalsSavedInUserData;
997 int _pathStuckIterations;
998 float _pathLinearVelocity;
999 float _pathAngularVelocity;
1000 bool _forceOdom3doF;
1001 bool _restartAtOrigin;
1002 bool _loopCovLimited;
1003 bool _loopGPS;
1004 int _maxOdomCacheSize;
1005 bool _localizationSmoothing;
1006 double _localizationPriorInf;
1007 bool _localizationSecondTryWithoutProximityLinks;
1008 bool _createGlobalScanMap;
1009 float _markerPriorsLinearVariance;
1010 float _markerPriorsAngularVariance;
1011
1012 std::pair<int, float> _loopClosureHypothesis;
1013 std::pair<int, float> _highestHypothesis;
1014 double _lastProcessTime;
1015 bool _someNodesHaveBeenTransferred;
1016 float _distanceTravelled;
1017 float _distanceTravelledSinceLastLocalization;
1018 bool _optimizeFromGraphEndChanged;
1019
1020 // Abstract classes containing all loop closure
1021 // strategies for a type of signature or configuration.
1022 EpipolarGeometry * _epipolarGeometry;
1023 BayesFilter * _bayesFilter;
1024 Optimizer * _graphOptimizer;
1025 ParametersMap _parameters;
1026
1027 Memory * _memory;
1028
1029 FILE* _foutFloat;
1030 FILE* _foutInt;
1031 std::list<std::string> _bufferedLogsF;
1032 std::list<std::string> _bufferedLogsI;
1033
1034 Statistics statistics_;
1035
1036 std::string _wDir;
1037
1038 std::map<int, Transform> _optimizedPoses;
1039 std::multimap<int, Link> _constraints;
1040 Transform _mapCorrection;
1041 Transform _mapCorrectionBackup;
1042 Transform _lastLocalizationPose;
1043 int _lastLocalizationNodeId;
1044 cv::Mat _localizationCovariance;
1045 std::map<int, std::pair<cv::Point3d, Transform> > _gpsGeocentricCache;
1046 bool _currentSessionHasGPS;
1047 LaserScan _globalScanMap;
1048 std::map<int, Transform> _globalScanMapPoses;
1049 std::map<int, Transform> _odomCachePoses;
1050 std::multimap<int, Link> _odomCacheConstraints;
1051 std::map<int, Transform> _markerPriors;
1052 std::pair<int, int> _lastRejectedLoopClosureIds;
1053
1054 std::set<int> _nodesToRepublish;
1055
1056 // Planning stuff
1057 int _pathStatus;
1058 std::vector<std::pair<int,Transform> > _path;
1059 std::set<unsigned int> _pathUnreachableNodes;
1060 unsigned int _pathCurrentIndex;
1061 unsigned int _pathGoalIndex;
1062 Transform _pathTransformToGoal;
1063 int _pathStuckCount;
1064 float _pathStuckDistance;
1065
1066 bool _dummyDictionary;
1067};
1068
1069} // namespace rtabmap
1070#endif /* RTABMAP_H_ */
Recursive Bayesian filter for loop-closure hypothesis estimation in RTAB-Map.
Definition BayesFilter.h:72
Represents 2D or 3D laser scan data with support for multiple point data formats.
Definition LaserScan.h:46
Three-tiered memory management (STM, WM, LTM) for RTAB-Map.
Definition Memory.h:102
Abstract base for pose-graph and bundle-adjustment optimizers.
Definition Optimizer.h:91
Top-level RTAB-Map SLAM pipeline (mapping, localization and loop closure).
Definition Rtabmap.h:194
bool setUserData(int id, const cv::Mat &data)
Attaches user data to signature id, compressing it on the fly if needed.
const Memory * getMemory() const
Definition Rtabmap.h:351
void addNodesToRepublish(const std::vector< int > &ids)
Marks node ids whose data should be re-emitted on the next process().
bool computePath(const Transform &targetPose, float tolerance=-1.0f)
Plans a path in the current optimized map toward a metric goal pose.
std::map< int, Transform > getNodesInRadius(const Transform &pose, float radius, int k=0, std::map< int, float > *distsSqr=0)
Returns optimized poses within a metric radius of pose.
int getWMSize() const
void setWorkingDirectory(std::string path)
Sets the working directory used for dumps, logs and temporary files.
void init(const std::string &configFile="", const std::string &databasePath="", bool loadDatabaseParameters=false)
Initializes Rtabmap from a configuration file and a database.
int getLoopClosureId() const
Definition Rtabmap.h:301
const Transform & getLastLocalizationPose() const
Definition Rtabmap.h:363
std::map< int, int > getWeights() const
bool process(const cv::Mat &image, int id=0, const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Appearance-only convenience overload (loop-closure detection without odometry).
void dumpData() const
Dumps the Memory state (signatures, words, dictionary) to the working directory.
void generateDOTGraph(const std::string &path, int id=0, int margin=5)
Writes a Graphviz DOT file of the pose graph.
void getGraph(std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global, std::map< int, Signature > *signatures=0, bool withImages=false, bool withScan=false, bool withUserData=false, bool withGrid=false, bool withWords=true, bool withGlobalDescriptors=true) const
Extracts a full snapshot of the current pose graph.
std::vector< int > getPathNextNodes() const
int getSTMSize() const
int triggerNewMap()
Starts a new map session (next process() will create a fresh map id).
const std::multimap< int, Link > & getLocalConstraints() const
Definition Rtabmap.h:333
void setDummyDictionary(bool enabled=true)
Loads the visual word dictionary as ids only, without descriptors.
float getHighestHypothesisValue() const
Definition Rtabmap.h:307
void clearPath(int status)
Clears the current path and sets its terminal status.
bool isInSTM(int locationId) const
void parseParameters(const ParametersMap &parameters)
Re-parses parameters and propagates them to owned sub-objects (Memory, BayesFilter,...
const Statistics & getStatistics() const
void close(bool databaseSaved=true, const std::string &ouputDatabasePath="")
Closes Rtabmap and releases the underlying Memory.
bool isIDsGenerated() const
int getPathCurrentGoalId() const
const std::vector< std::pair< int, Transform > > & getPath() const
Definition Rtabmap.h:805
int detectMoreLoopClosures(float clusterRadiusMax=0.5f, float clusterAngle=M_PI/6.0f, int iterations=1, bool intraSession=true, bool interSession=true, const ProgressState *state=0, float clusterRadiusMin=0.0f, int toFromMapId=-1)
Post-processing: searches for additional loop closures over the existing graph.
float getGoalReachedRadius() const
Definition Rtabmap.h:353
const std::string & getWorkingDir() const
Definition Rtabmap.h:297
int refineLinks()
Re-runs registration on every link of the current graph and updates the ones that converge.
void setMemoryThreshold(int maxMemoryAllowed)
Sets the maximum number of signatures kept in WM (0 = unbounded).
bool isRGBDMode() const
Definition Rtabmap.h:299
float getLocalRadius() const
Definition Rtabmap.h:355
void init(const ParametersMap &parameters, const std::string &databasePath="", bool loadDatabaseParameters=false)
Initializes Rtabmap with parameters and a database.
Signature getSignatureCopy(int id, bool images, bool scan, bool userData, bool occupancyGrid, bool withWords, bool withGlobalDescriptors) const
Returns a copy of signature id with optional payloads attached.
unsigned int getPathCurrentGoalIndex() const
Definition Rtabmap.h:815
void setOptimizedPoses(const std::map< int, Transform > &poses, const std::multimap< int, Link > &constraints)
Replaces the current optimized poses and constraints with externally provided ones.
Transform getMapCorrection() const
Definition Rtabmap.h:349
std::set< int > getSTM() const
void setTimeThreshold(float maxTimeAllowed)
Sets the per-iteration time budget (ms).
std::map< int, Transform > getForwardWMPoses(int fromId, int maxNearestNeighbors, float radius, int maxDiffID) const
Returns optimized poses of WM nodes located in front of fromId.
int getMemoryThreshold() const
Definition Rtabmap.h:388
double getLastProcessTime() const
Definition Rtabmap.h:323
bool process(const SensorData &data, Transform odomPose, float odomLinearVariance, float odomAngularVariance, const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Convenience overload: builds a diagonal covariance from scalar variances.
int getLastLocationId() const
unsigned int getPathCurrentIndex() const
Definition Rtabmap.h:813
void setInitialPose(const Transform &initialPose)
Sets the localization prior pose used to seed the next process() call (localization mode only).
const ParametersMap & getParameters() const
Definition Rtabmap.h:526
std::map< int, Transform > getNodesInRadius(int nodeId, float radius, int k=0, std::map< int, float > *distsSqr=0)
Returns optimized poses within a metric radius of node nodeId.
void adjustLikelihood(std::map< int, float > &likelihood) const
Applies the standard RTAB-Map likelihood adjustment.
void rejectLastLoopClosure()
Removes the loop-closure link added at the last process() iteration.
bool globalBundleAdjustment(int optimizerType=1, bool rematchFeatures=true, int iterations=0, float pixelVariance=0.0f)
Runs a global bundle adjustment over the optimized graph.
int getHighestHypothesisId() const
Definition Rtabmap.h:305
int getTotalMemSize() const
bool computePath(int targetNode, bool global)
Plans a path from the current location to node targetNode.
Transform getPose(int locationId) const
int cleanupLocalGrids(const std::map< int, Transform > &mapPoses, const cv::Mat &map, float xMin, float yMin, float cellSize, int cropRadius=1, bool filterScans=false)
Filters spurious obstacles from every node's local grid using a reference 2D map.
void dumpPrediction() const
Dumps the Bayes-filter prediction matrix to a file in the working directory.
std::map< int, std::map< int, Transform > > getPaths(const std::map< int, Transform > &poses, const Transform &target, int maxGraphDepth=0) const
Segments a set of optimized poses into paths connected by neighbor links.
bool process(const SensorData &data, Transform odomPose, const cv::Mat &odomCovariance=cv::Mat::eye(6, 6, CV_64FC1), const std::vector< float > &odomVelocity=std::vector< float >(), const std::map< std::string, float > &externalStats=std::map< std::string, float >())
Main RTAB-Map iteration: ingests one sensor frame and updates the map.
float getLoopClosureValue() const
Definition Rtabmap.h:303
std::list< int > getWM() const
RTABMAP_DEPRECATED void get3DMap(std::map< int, Signature > &signatures, std::map< int, Transform > &poses, std::multimap< int, Link > &constraints, bool optimized, bool global) const
Deprecated: use getGraph() instead with withImages=true, withScan=true, withUserData=true and withGri...
const std::map< int, Transform > & getLocalOptimizedPoses() const
Definition Rtabmap.h:331
const Transform & getPathTransformToGoal() const
Definition Rtabmap.h:817
void deleteLastLocation()
Deletes the most recent (non-intermediate) location from the map.
cv::Mat getInformation(const cv::Mat &covariance) const
Converts an odometry covariance into an information matrix, clipping by Memory::getOdomMaxInf() when ...
bool addLink(const Link &link)
Adds an external link to the map.
void exportPoses(const std::string &path, bool optimized, bool global, int format)
Exports the current pose graph to a text file.
void resetMemory()
Clears all in-memory state and resets the database.
bool labelLocation(int id, const std::string &label)
Assigns or clears a label on signature id.
float getTimeThreshold() const
Definition Rtabmap.h:369
std::vector< std::pair< int, Transform > > getPathNextPoses() const
VhStrategy
Loop-closure verification strategy.
Definition Rtabmap.h:197
@ kVhEpipolar
Epipolar geometry verification (mostly historical, RGB-only mode).
Definition Rtabmap.h:199
@ kVhNone
No verification: the highest hypothesis above threshold is accepted.
Definition Rtabmap.h:198
int getPathStatus() const
Definition Rtabmap.h:776
Container class for all sensor data captured at a specific time.
Definition SensorData.h:97
Represents a node in RTAB-Map's pose graph.
Definition Signature.h:84
Collects and manages runtime statistics for RTAB-Map.
Definition Statistics.h:108
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53
std::map< std::string, std::string > ParametersMap
Parameter keys mapped to their values, as used by every configurable class (see Parameters).
Definition Parameters.h:44
Largest pose-graph constraint violations after optimization.
Definition Graph.h:232