template class mrpt::graphslam::CRegistrationDeciderOrOptimizer
Overview
Interface for implementing node/edge registration deciders or optimizer classes.
Specific interfaces - for implementing node/edge deciders / optimizers - can inherit from CRegistrationDeciderOrOptimizer so that they can make use of the generic methods defined in the latter.
Convention: For the already implemented deciders/optimizers the following naming convention has been used:
NRD: Node Registration Decider class
ERD: Edge Registration Decider class
GSO: GraphSlam Optimizer class
#include <mrpt/graphslam/interfaces/CRegistrationDeciderOrOptimizer.h> template <class GRAPH_T = typename mrpt::graphs::CNetworkOfPoses2DInf> class CRegistrationDeciderOrOptimizer: public mrpt::system::COutputLogger { public: // construction CRegistrationDeciderOrOptimizer(); // methods virtual bool updateState(mrpt::obs::CActionCollection::Ptr action, mrpt::obs::CSensoryFrame::Ptr observations, mrpt::obs::CObservation::Ptr observation) = 0; virtual void setWindowManagerPtr(mrpt::graphslam::CWindowManager* win_manager); virtual void setCriticalSectionPtr(std::mutex* graph_section); virtual void initializeVisuals(); virtual void updateVisuals(); virtual void notifyOfWindowEvents(const std::map<std::string, bool>& events_occurred); virtual void loadParams(const std::string& source_fname); virtual void printParams() const; virtual void getDescriptiveReport(std::string* report_str) const; virtual void setGraphPtr(GRAPH_T* graph); virtual void initializeLoggers(const std::string& name); virtual void setClassName(const std::string& name); bool isMultiRobotSlamClass(); std::string getClassName() const; }; // direct descendants template <class GRAPH_T = typename mrpt::graphs::CNetworkOfPoses2DInf> class CEdgeRegistrationDecider; template <class GRAPH_T> class CNodeRegistrationDecider; template <class GRAPH_t = typename mrpt::graphs::CNetworkOfPoses2DInf> class CGraphSlamOptimizer;
Inherited Members
public: // structs struct TMsg; // fields bool logging_enable_console_output {true}; bool logging_enable_keep_record {false}; // methods void logStr(const VerbosityLevel level, std::string_view msg_str) const; void logFmt(const VerbosityLevel level, const char* fmt, ...) const; void void logCond(const VerbosityLevel level, bool cond, const std::string& msg_str) const; void setLoggerName(const std::string& name); std::string getLoggerName() const; void setVerbosityLevel(const VerbosityLevel level); void setVerbosityLevelForCallbacks(const VerbosityLevel level); void setMinLoggingLevel(const VerbosityLevel level); VerbosityLevel getMinLoggingLevel() const; VerbosityLevel getMinLoggingLevelForCallbacks() const; bool isLoggingLevelVisible(VerbosityLevel level) const; void getLogAsString(std::string& log_contents) const; std::string getLogAsString() const; void writeLogToFile(const std::optional<std::string>& fname_in = std::nullopt) const; void dumpLogToConsole() const; std::string getLoggerLastMsg() const; void getLoggerLastMsg(std::string& msg_str) const; void loggerReset(); void logRegisterCallback(output_logger_callback_t userFunc); bool logDeregisterCallback(output_logger_callback_t userFunc); COutputLogger& operator = (const COutputLogger&); COutputLogger& operator = (COutputLogger&&); static std::array<mrpt::system::ConsoleForegroundColor, NUMBER_OF_VERBOSITY_LEVELS>& logging_levels_to_colors(); static const std::array<const char*, NUMBER_OF_VERBOSITY_LEVELS>& logging_levels_to_names();
Methods
virtual bool updateState(mrpt::obs::CActionCollection::Ptr action, mrpt::obs::CSensoryFrame::Ptr observations, mrpt::obs::CObservation::Ptr observation) = 0
Generic method for fetching the incremental action-observations (or observation-only) measurements.
Returns:
True if operation was successful. Criteria for Success depend on the decider/optimizer implementing this method
virtual void setWindowManagerPtr(mrpt::graphslam::CWindowManager* win_manager)
Fetch a CWindowManager pointer.
CWindowManager instance should contain a CDisplayWindow3D* and, optionally, a CWindowObserver pointer so that interaction with the window is possible
virtual void setCriticalSectionPtr(std::mutex* graph_section)
Fetch a std::mutex for locking the GRAPH_T resource.
Handy for realising multithreading in the derived classes.
Beware that prior to the decider/optimizer public method call, the CCriticalSection will already be locked from CGraphSlamEngine_t instance, but this isn’t effective in multithreaded implementations where the decider/optimizer itself has to lock the function at which the extra thread runs.
virtual void initializeVisuals()
Initialize visual objects in CDisplayWindow (e.g.
add an object to scene).
Parameters:
std::exception |
If the method is called without having first provided a CDisplayWindow3D* to the class instance |
See also:
setWindowManagerPtr, updateVisuals
virtual void updateVisuals()
Update the relevant visual features in CDisplayWindow.
Parameters:
std::exception |
If the method is called without having first provided a CDisplayWindow3D* to the class instance |
See also:
setWindowManagerPtr, initializeVisuals
virtual void notifyOfWindowEvents(const std::map<std::string, bool>& events_occurred)
Get a list of the window events that happened since the last call.
Method in derived classes is automatically called from the CGraphSlamEngine_t instance. After that, decider/optimizer should just fetch the parameters that it is interested in.
virtual void loadParams(const std::string& source_fname)
Load the necessary for the decider/optimizer configuration parameters.
virtual void printParams() const
Print the problem parameters - relevant to the decider/optimizer to the screen in a unified/compact way.
virtual void getDescriptiveReport(std::string* report_str) const
Fill the provided string with a detailed report of the decider/optimizer state.
Report should include (part of) the following:
Timing of important methods
Properties fo class at the current time
Logging of commands until current time
virtual void setGraphPtr(GRAPH_T* graph)
Fetch the graph on which the decider/optimizer will work on.
virtual void initializeLoggers(const std::string& name)
Initialize the COutputLogger, CTimeLogger instances given the name of the decider/optimizer at hand.