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.