ROME_P5

Dependencies:   mbed

TaskMove.cpp

Committer:
Inaueadr
Date:
2018-04-27
Revision:
0:29be10cb0afc

File content as of revision 0:29be10cb0afc:

/*
 * TaskMove.cpp
 * Copyright (c) 2018, ZHAW
 * All rights reserved.
 */

#include <cmath>
#include "TaskMove.h"

using namespace std;

const float TaskMove::DEFAULT_DURATION = 3600.0f;

/**
 * Creates a task object that moves the robot with given velocities.
 * @param conroller a reference to the controller object of the robot.
 * @param translationalVelocity the translational velocity, given in [m/s].
 * @param rotationalVelocity the rotational velocity, given in [rad/s].
 */
TaskMove::TaskMove(Controller& controller, float translationalVelocity, float rotationalVelocity) : controller(controller) {
    
    this->translationalVelocity = translationalVelocity;
    this->rotationalVelocity = rotationalVelocity;
    this->duration = DEFAULT_DURATION;
    
    time = 0.0f;
}

/**
 * Creates a task object that moves the robot with given velocities.
 * @param conroller a reference to the controller object of the robot.
 * @param translationalVelocity the translational velocity, given in [m/s].
 * @param rotationalVelocity the rotational velocity, given in [rad/s].
 * @param duration the duration to move the robot, given in [s].
 */
TaskMove::TaskMove(Controller& controller, float translationalVelocity, float rotationalVelocity, float duration) : controller(controller) {
    
    this->translationalVelocity = translationalVelocity;
    this->rotationalVelocity = rotationalVelocity;
    this->duration = duration;
    
    time = 0.0f;
}

/**
 * Deletes the task object.
 */
TaskMove::~TaskMove() {}

/**
 * This method is called periodically by a task sequencer.
 * @param period the period of the task sequencer, given in [s].
 * @return the status of this task, i.e. RUNNING or DONE.
 */
int TaskMove::run(float period) {
    
    time += period;
    
    if (time < duration) {
        
        controller.setTranslationalVelocity(translationalVelocity);
        controller.setRotationalVelocity(rotationalVelocity);
        
        return RUNNING;
        
    } else {
        
        controller.setTranslationalVelocity(0.0f);
        controller.setRotationalVelocity(0.0f);
        
        return DONE;
    }
}