class mrpt::nav::CReactiveNavigationSystem3D

Overview

See base class CAbstractPTGBasedReactive for a description and instructions of use.

This particular implementation assumes a 3D (or “2.5D”) robot shape model, build as a vertical stack of “2D slices”.

Paper describing the method:

  • M. Jaimez-Tarifa, J. Gonzalez-Jimenez, J.L. Blanco, “Efficient Reactive Navigation with Exact Collision Determination for 3D Robot Shapes”, International Journal of Advanced Robotic Systems, 2015.

Class history:

  • SEP/2012: First design.

  • JUL/2013: Integrated into MRPT library.

  • DEC/2013: Code refactoring between this class and CAbstractHolonomicReactiveMethod

  • FEB/2017: Refactoring of all parameters for a consistent organization in sections by class names (MRPT 1.5.0)

This class requires a number of parameters which are usually provided via an external config (“.ini”) file. Alternatively, a memory-only object can be used to avoid physical files, see mrpt::config::CConfigFileMemory.

A template config file can be generated at any moment by the user by calling saveConfigFile() with a default-constructed object.

Next we provide a self-documented template config file; or see it online: https://github.com/MRPT/mrpt/blob/master/share/mrpt/config_files/navigation-ptgs/reactive3d_config.ini

See also:

CAbstractNavigator, CParameterizedTrajectoryGenerator, CAbstractHolonomicReactiveMethod

#include <mrpt/nav/reactive/CReactiveNavigationSystem3D.h>

class CReactiveNavigationSystem3D: public mrpt::nav::CAbstractPTGBasedReactive
{
public:
    // structs

    struct TPTGmultilevel;

    // fields

    TAbstractPTGNavigatorParams params_abstract_ptg_navigator;

    // construction

    CReactiveNavigationSystem3D(
        CRobot2NavInterface& react_iterf_impl,
        bool enableConsoleOutput = true,
        bool enableLogFile = false,
        const std::string& logFileDirectory = std::string("./reactivenav.logs")
        );

    // methods

    void changeRobotShape(TRobotShape robotShape);
    virtual bool checkCollisionWithLatestObstacles(const mrpt::math::TPose2D& relative_robot_pose) const;
    virtual size_t getPTG_count() const;
    virtual CParameterizedTrajectoryGenerator* getPTG(size_t i);
    virtual const CParameterizedTrajectoryGenerator* getPTG(size_t i) const;
    virtual void loadConfigFile(const mrpt::config::CConfigFileBase& c);
    virtual void saveConfigFile(mrpt::config::CConfigFileBase& c) const;
    std::string getLogFileDirectory() const;
};

Inherited Members

public:
    // enums

    enum TErrorCode;
    enum TState;

    // structs

    struct TMsg;
    struct TAbstractNavigatorParams;
    struct TErrorReason;
    struct TNavigationParams;
    struct TNavigationParamsBase;
    struct TRobotPoseVel;
    struct TargetInfo;
    struct TNavigationParamsWaypoints;
    struct TWaypointsNavigatorParams;
    struct PTGTarget;
    struct TAbstractPTGNavigatorParams;
    struct TInfoPerPTG;
    struct TNavigationParamsPTG;
    struct TSentVelCmd;

    // fields

    mrpt::system::CTimeLogger m_navProfiler {false, "mrpt::nav::CAbstractNavigator"};
    TWaypointsNavigatorParams params_waypoints_navigator;
    TAbstractNavigatorParams params_abstract_navigator;

    // methods

    virtual void loadConfigFile(const mrpt::config::CConfigFileBase& c);
    virtual void saveConfigFile(mrpt::config::CConfigFileBase& c) const;
    virtual void initialize() = 0;
    virtual void navigationStep();
    virtual void navigate(const TNavigationParams* params);
    virtual void cancel();
    virtual void resume();
    virtual void suspend();
    virtual void resetNavError();
    TState getCurrentState() const;
    const TErrorReason& getErrorReason() const;
    void setFrameTF(const std::weak_ptr<mrpt::poses::FrameTransformer<2>>& frame_tf);
    std::weak_ptr<mrpt::poses::FrameTransformer<2>> getFrameTF() const;
    void enableRethrowNavExceptions(const bool enable);
    const mrpt::system::CTimeLogger& getDelaysTimeLogger() const;
    bool isRethrowNavExceptionsEnabled() const;
    virtual void loadConfigFile(const mrpt::config::CConfigFileBase& c);
    virtual void saveConfigFile(mrpt::config::CConfigFileBase& c) const;
    virtual void navigateWaypoints(const TWaypointSequence& nav_request);
    virtual void getWaypointNavStatus(TWaypointStatusSequence& out_nav_status) const;
    TWaypointStatusSequence getWaypointNavStatus() const;
    TWaypointStatusSequence& beginWaypointsAccess();
    void endWaypointsAccess();
    virtual void initialize();
    void setHolonomicMethod(const std::string& method, const mrpt::config::CConfigFileBase& cfgBase);
    void getLastLogRecord(CLogFileRecord& o);
    void enableKeepLogRecords(bool enable = true);
    void enableLogFile(bool enable);
    void setLogFileDirectory(const std::string& sDir);
    virtual void loadConfigFile(const mrpt::config::CConfigFileBase& c);
    virtual void saveConfigFile(mrpt::config::CConfigFileBase& c) const;
    void enableTimeLog(bool enable = true);
    const mrpt::system::CTimeLogger& getTimeLogger() const;
    virtual size_t getPTG_count() const = 0;
    virtual CParameterizedTrajectoryGenerator* getPTG(size_t i) = 0;
    virtual const CParameterizedTrajectoryGenerator* getPTG(size_t i) const = 0;
    const mrpt::kinematics::CVehicleVelCmd::TVelCmdParams& getCurrentRobotSpeedLimits() const;
    mrpt::kinematics::CVehicleVelCmd::TVelCmdParams& changeCurrentRobotSpeedLimits();
    void setTargetApproachSlowDownDistance(const double dist);
    double getTargetApproachSlowDownDistance() const;
    virtual void navigationStep();
    virtual void cancel();
    bool isRelativePointReachable(const mrpt::math::TPoint2D& wp_local_wrt_robot) const;

Construction

CReactiveNavigationSystem3D(
    CRobot2NavInterface& react_iterf_impl,
    bool enableConsoleOutput = true,
    bool enableLogFile = false,
    const std::string& logFileDirectory = std::string("./reactivenav.logs")
    )

See docs in ctor of base class.

Methods

void changeRobotShape(TRobotShape robotShape)

Change the robot shape, which is taken into account for collision grid building.

virtual bool checkCollisionWithLatestObstacles(const mrpt::math::TPose2D& relative_robot_pose) const

Checks whether the robot shape, when placed at the given pose (relative to the current pose), is colliding with any of the latest known obstacles.

Default implementation: always returns false.

virtual size_t getPTG_count() const

Returns the number of different PTGs that have been setup.

virtual CParameterizedTrajectoryGenerator* getPTG(size_t i)

Gets the i’th PTG.

virtual const CParameterizedTrajectoryGenerator* getPTG(size_t i) const

Gets the i’th PTG.

virtual void loadConfigFile(const mrpt::config::CConfigFileBase& c)

Loads all params from a file.

To be called before initialize(). Each derived class MUST load its own parameters, and then call ITS PARENT’S overriden method to ensure all params are loaded.

virtual void saveConfigFile(mrpt::config::CConfigFileBase& c) const

Saves all current options to a config file.

Each derived class MUST save its own parameters, and then call ITS PARENT’S overriden method to ensure all params are saved.