class mrpt::nav::CRobot2NavInterface

The pure virtual interface between a real or simulated robot and any CAbstractNavigator -derived class.

The user must define a new class derived from CRobot2NavInterface and reimplement all pure virtual and the desired virtual methods according to the documentation in this class.

[New in MRPT 1.5.0] This class does not make assumptions about the kinematic model of the robot, so it can work with either Ackermann, differential-driven or holonomic robots. It will depend on the used PTGs, so checkout each PTG documentation for the lenght and meaning of velocity commands.

If used for a simulator, users may prefer to inherit from one of these classes, which already provide partial implementations:

See also:

CReactiveNavigationSystem, CAbstractNavigator

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

class CRobot2NavInterface: public mrpt::system::COutputLogger
{
public:
    // construction

    CRobot2NavInterface();

    //
methods

    virtual void sendNavigationStartEvent();
    virtual void sendNavigationEndEvent();
    virtual void sendWaypointReachedEvent(int waypoint_index, bool reached_nSkipped);
    virtual void sendNewWaypointTargetEvent(int waypoint_index);
    virtual void sendNavigationEndDueToErrorEvent();
    virtual void sendWaySeemsBlockedEvent();
    virtual void sendApparentCollisionEvent();
    virtual void sendCannotGetCloserToBlockedTargetEvent();

    virtual bool getCurrentPoseAndSpeeds(
        mrpt::math::TPose2D& curPose,
        mrpt::math::TTwist2D& curVelGlobal,
        mrpt::system::TTimeStamp& timestamp,
        mrpt::math::TPose2D& curOdometry,
        std::string& frame_id
        ) = 0;

    virtual bool changeSpeeds(const mrpt::kinematics::CVehicleVelCmd& vel_cmd) = 0;
    virtual bool changeSpeedsNOP();
    virtual bool stop(bool isEmergencyStop = true) = 0;
    virtual mrpt::kinematics::CVehicleVelCmd::Ptr getEmergencyStopCmd() = 0;
    virtual mrpt::kinematics::CVehicleVelCmd::Ptr getStopCmd() = 0;
    virtual mrpt::kinematics::CVehicleVelCmd::Ptr getAlignCmd(const double relative_heading_radians);
    virtual bool startWatchdog(float T_ms);
    virtual bool stopWatchdog();
    virtual bool senseObstacles(mrpt::maps::CSimplePointsMap& obstacles, mrpt::system::TTimeStamp& timestamp) = 0;
    virtual double getNavigationTime();
    virtual void resetNavigationTimer();
};

// direct descendants

class CRobot2NavInterfaceForSimulator_DiffDriven;
class CRobot2NavInterfaceForSimulator_Holo;

Inherited Members

public:
    // structs

    struct TMsg;

Methods

virtual void sendNavigationStartEvent()

Callback: Start of navigation command.

virtual void sendNavigationEndEvent()

Callback: End of navigation command (reach of single goal, or final waypoint of waypoint list)

virtual void sendWaypointReachedEvent(int waypoint_index, bool reached_nSkipped)

Callback: Reached an intermediary waypoint in waypoint list navigation.

reached_nSkipped will be true if the waypoint was physically reached; false if it was actually “skipped”.

virtual void sendNewWaypointTargetEvent(int waypoint_index)

Callback: Heading towards a new intermediary/final waypoint in waypoint list navigation.

virtual void sendNavigationEndDueToErrorEvent()

Callback: Error asking sensory data from robot or sending motor commands.

virtual void sendWaySeemsBlockedEvent()

Callback: No progression made towards target for a predefined period of time.

virtual void sendApparentCollisionEvent()

Callback: Apparent collision event (i.e.

there is at least one obstacle point inside the robot shape)

virtual void sendCannotGetCloserToBlockedTargetEvent()

Callback: Target seems to be blocked by an obstacle.

virtual bool getCurrentPoseAndSpeeds(
    mrpt::math::TPose2D& curPose,
    mrpt::math::TTwist2D& curVelGlobal,
    mrpt::system::TTimeStamp& timestamp,
    mrpt::math::TPose2D& curOdometry,
    std::string& frame_id
    ) = 0

Get the current pose and velocity of the robot.

The implementation should not take too much time to return, so if it might take more than ~10ms to ask the robot for the instantaneous data, it may be good enough to return the latest values from a cache which is updated in a parallel thread.

Returns:

false on any error retrieving these values from the robot.

virtual bool changeSpeeds(const mrpt::kinematics::CVehicleVelCmd& vel_cmd) = 0

Sends a velocity command to the robot.

The number components in each command depends on children classes of mrpt::kinematics::CVehicleVelCmd. One robot may accept one or more different CVehicleVelCmd classes. This method resets the watchdog timer (that may be or may be not implemented in a particular robotic platform) started with startWatchdog()

Returns:

false on any error.

See also:

startWatchdog

virtual bool changeSpeedsNOP()

Just like changeSpeeds(), but will be called when the last velocity command is still the preferred solution, so there is no need to change that past command.

The unique effect of this callback would be resetting the watchdog timer.

Returns:

false on any error.

See also:

changeSpeeds(), startWatchdog()

virtual bool stop(bool isEmergencyStop = true) = 0

Stop the robot right now.

Parameters:

isEmergencyStop

true if stop is due to some unexpected error. false if “stop” happens as part of a normal operation (e.g. target reached).

Returns:

false on any error.

virtual mrpt::kinematics::CVehicleVelCmd::Ptr getEmergencyStopCmd() = 0

Gets the emergency stop command for the current robot.

Returns:

the emergency stop command

virtual mrpt::kinematics::CVehicleVelCmd::Ptr getStopCmd() = 0

Gets the emergency stop command for the current robot.

Returns:

the emergency stop command

virtual mrpt::kinematics::CVehicleVelCmd::Ptr getAlignCmd(const double relative_heading_radians)

Gets a motion command to make the robot to align with a given relative heading, without translating.

Only for circular robots that can rotate in place; otherwise, return an empty smart pointer to indicate that the operation is not possible (this is what the default implementation does).

virtual bool startWatchdog(float T_ms)

Start the watchdog timer of the robot platform, if any, for maximum expected delay between consecutive calls to changeSpeeds().

Parameters:

T_ms

Period, in ms.

Returns:

false on any error.

virtual bool stopWatchdog()

Stop the watchdog timer.

Returns:

false on any error.

See also:

startWatchdog

virtual bool senseObstacles(mrpt::maps::CSimplePointsMap& obstacles, mrpt::system::TTimeStamp& timestamp) = 0

Return the current set of obstacle points, as seen from the local coordinate frame of the robot.

Parameters:

obstacles

A representation of obstacles in robot-centric coordinates.

timestamp

The timestamp for the read obstacles. Use mrpt::system::now() unless you have something more accurate.

Returns:

false on any error.

virtual double getNavigationTime()

Returns the number of seconds ellapsed since the constructor of this class was invoked, or since the last call of resetNavigationTimer().

This will be normally wall-clock time, except in simulators where this method will return simulation time.

virtual void resetNavigationTimer()

see getNavigationTime()