MRPT  1.9.9
Classes | Namespaces | Functions
[mrpt-graphslam]

Detailed Description

GraphSLAM algorithms.

Back to list of all libraries | See all modules

Library `mrpt-graphslam`

This C++ library is part of MRPT and can be installed in Debian-based systems with:

    sudo apt install libmrpt-graphslam-dev

See: Using MRPT from your CMake project

Basic graph-SLAM algorithms: See the namespace mrpt::graphslam.

For an introduction to graph-slam maps refer to the summary in https://www.mrpt.org/Graph-SLAM_maps

Classes

struct  mrpt::graphslam::apps::TRegistrationDeciderProps
 Properties struct for the Registration Decider classes. More...
 
struct  mrpt::graphslam::apps::TOptimizerProps
 Properties struct for the Optimizer classes. More...
 
struct  mrpt::graphslam::apps::TUserOptionsChecker< GRAPH_t >
 Class containing the declarations of supplementary methods that can be used in application-related code. More...
 
class  mrpt::graphslam::CGraphSlamEngine< GRAPH_T >
 Main file for the GraphSlamEngine. More...
 
class  mrpt::graphslam::deciders::CICPCriteriaERD< GRAPH_T >
 ICP-based Edge Registration. More...
 
class  mrpt::graphslam::deciders::CLoopCloserERD< GRAPH_T >
 Edge Registration Decider scheme specialized in Loop Closing. More...
 
class  mrpt::graphslam::optimizers::CLevMarqGSO< GRAPH_T >
 Levenberg-Marquardt non-linear graph slam optimization scheme. More...
 
class  mrpt::graphslam::deciders::CEdgeRegistrationDecider< GRAPH_T >
 Interface for implementing edge registration classes. More...
 
class  mrpt::graphslam::optimizers::CGraphSlamOptimizer< GRAPH_t >
 Interface for implementing graphSLAM optimizer classes. More...
 
class  mrpt::graphslam::deciders::CIncrementalNodeRegistrationDecider< GRAPH_T >
 Incremental Node registration decider. More...
 
class  mrpt::graphslam::deciders::CNodeRegistrationDecider< GRAPH_T >
 Interface for implementing node registration classes. More...
 
class  mrpt::graphslam::CRegistrationDeciderOrOptimizer< GRAPH_T >
 Interface for implementing node/edge registration deciders or optimizer classes. More...
 
class  mrpt::graphslam::detail::CEdgeCounter
 Generic class for tracking the total number of edges for different tpes of edges and for storing visualization-related information for each type. More...
 
class  mrpt::graphslam::deciders::CRangeScanOps< GRAPH_T >
 Class for keeping together all the RangeScanner-related functions. More...
 
class  mrpt::graphslam::CWindowManager
 Class acts as a container for storing pointers to mrpt::gui::CDisplayWindow3D, mrpt::graphslam::CWindowObserver instances. More...
 
class  mrpt::graphslam::CWindowObserver
 Monitor events in the visualization window. More...
 
struct  mrpt::graphslam::TSlidingWindow
 Class to monitor the evolution of a statistical quantity. More...
 
struct  mrpt::graphslam::TUncertaintyPath< GRAPH_T >
 Holds the data of an information path. More...
 
class  mrpt::graphslam::deciders::CEmptyNRD< GRAPH_T >
 Empty Node Registration Decider. More...
 
class  mrpt::graphslam::deciders::CFixedIntervalsNRD< GRAPH_T >
 Fixed Intervals Odometry-based Node Registration. More...
 
class  mrpt::graphslam::deciders::CICPCriteriaNRD< GRAPH_T >
 ICP-based Fixed Intervals Node Registration. More...
 
struct  mrpt::graphslam::graphslam_traits< GRAPH_T >
 Auxiliary traits template for use among graph-slam problems to make life easier with these complicated, long data type names. More...
 
struct  mrpt::graphslam::TResultInfoSpaLevMarq
 Output information for mrpt::graphslam::optimize_graph_spa_levmarq() More...
 

Namespaces

 mrpt::graphslam
 SLAM methods related to graphs of pose constraints.
 

Functions

template<class GRAPH_T , class FEEDBACK_CALLABLE = typename graphslam_traits<GRAPH_T>::TFunctorFeedback>
void mrpt::graphslam::optimize_graph_spa_levmarq (GRAPH_T &graph, TResultInfoSpaLevMarq &out_info, const std::set< mrpt::graphs::TNodeID > *in_nodes_to_optimize=nullptr, const mrpt::system::TParametersDouble &extra_params=mrpt::system::TParametersDouble(), FEEDBACK_CALLABLE functor_feedback=FEEDBACK_CALLABLE())
 Optimize a graph of pose constraints using the Sparse Pose Adjustment (SPA) sparse representation and a Levenberg-Marquardt optimizer. More...
 

Function Documentation

◆ optimize_graph_spa_levmarq()

template<class GRAPH_T , class FEEDBACK_CALLABLE = typename graphslam_traits<GRAPH_T>::TFunctorFeedback>
void mrpt::graphslam::optimize_graph_spa_levmarq ( GRAPH_T &  graph,
TResultInfoSpaLevMarq out_info,
const std::set< mrpt::graphs::TNodeID > *  in_nodes_to_optimize = nullptr,
const mrpt::system::TParametersDouble extra_params = mrpt::system::TParametersDouble(),
FEEDBACK_CALLABLE  functor_feedback = FEEDBACK_CALLABLE() 
)

Optimize a graph of pose constraints using the Sparse Pose Adjustment (SPA) sparse representation and a Levenberg-Marquardt optimizer.

This method works for all types of graphs derived from CNetworkOfPoses (see its reference mrpt::graphs::CNetworkOfPoses for the list). The input data are all the pose constraints in graph (graph.edges), and the gross first estimations of the "global" pose coordinates (in graph.nodes).

Note that these first coordinates can be obtained with mrpt::graphs::CNetworkOfPoses::dijkstra_nodes_estimate().

The method implemented in this file is based on this work:

  • "Efficient Sparse Pose Adjustment for 2D Mapping", Kurt Konolige et al., 2010. , but generalized for not only 2D but 2D and 3D poses, and using on-manifold optimization.
Parameters
[in,out]graphThe input edges and output poses.
[out]out_infoSome basic output information on the process.
[in]nodes_to_optimizeThe list of nodes whose global poses are to be optimized. If nullptr (default), all the node IDs are optimized (but that marked as root in the graph).
[in]extra_paramsOptional parameters, see below.
[in]functor_feedbackOptional: a pointer to a user function can be set here to be called on each LM loop iteration (eg to refresh the current state and error, refresh a GUI, etc.)

List of optional parameters by name in "extra_params":

  • "verbose": (default=0) If !=0, produce verbose ouput.
  • "max_iterations": (default=100) Maximum number of Lev-Marq. iterations.
  • "initial_lambda": (default=0) <=0 means auto guess, otherwise, initial lambda value for the lev-marq algorithm.
  • "tau": (default=1e-6) Initial tau value for the lev-marq algorithm.
  • "e1": (default=1e-6) Lev-marq algorithm iteration stopping criterion #1: |gradient| < e1
  • "e2": (default=1e-6) Lev-marq algorithm iteration stopping criterion #2: |delta_incr| < e2*(x_norm+e2)
Note
The following graph types are supported: mrpt::graphs::CNetworkOfPoses2D, mrpt::graphs::CNetworkOfPoses3D, mrpt::graphs::CNetworkOfPoses2DInf, mrpt::graphs::CNetworkOfPoses3DInf
Template Parameters
GRAPH_TNormally a mrpt::graphs::CNetworkOfPoses<EDGE_TYPE,MAPS_IMPLEMENTATION>. Users won't have to write this template argument by hand, since the compiler will auto-fit it depending on the type of the graph object.
See also
The example "graph_slam_demo"
Note
Implementation can be found in file levmarq_impl.h

Definition at line 79 of file levmarq.h.

References __CURRENT_FUNCTION_NAME__, ASSERTDEB_, ASSERTDEB_ABOVE_, ASSERTDEB_EQUAL_, ASSERTMSG_, mrpt::containers::begin(), mrpt::math::CSparseMatrix::compressFromTriplet(), mrpt::system::CTimeLogger::enter(), mrpt::graphslam::TResultInfoSpaLevMarq::final_total_sq_error, mrpt::containers::find_in_vector(), mrpt::format(), mrpt::math::CSparseMatrix::insert_entry_fast(), mrpt::math::CSparseMatrix::insert_submatrix(), mrpt::keep_max(), mrpt::system::CTimeLogger::leave(), MRPT_END, MRPT_START, mrpt::math::norm(), mrpt::math::norm_inf(), mrpt::graphslam::TResultInfoSpaLevMarq::num_iters, mrpt::math::MatrixVectorBase< Scalar, Derived >::setZero(), mrpt::math::CVectorDynamic< T >::size(), mrpt::square(), mrpt::math::UNINITIALIZED_MATRIX, and verbose.

Referenced by mrpt::graphslam::optimizers::CLevMarqGSO< GRAPH_T >::_optimizeGraph(), mrpt::hmtslam::CHierarchicalMapMHPartition::computeGloballyConsistentNodeCoordinates(), GraphTester< my_graph_t >::test_optimize_compare_known_solution(), and GraphTester< my_graph_t >::test_ring_path().

Here is the call graph for this function:
Here is the caller graph for this function:



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: c7a3bec24 Sun Mar 29 18:33:13 2020 +0200 at dom mar 29 18:50:38 CEST 2020