#include #include "Trajectroy.h" #include "vec.h" template Trajectory::Trajectory( float sampleTimeMs, Vec maxJointVelocity, Vec maxJointAcceleration, Vec jointStart, Vec jointEnd ) { movementType = MovementJointBased; steps = 1; currentStep = 0; totalTime = steps * sampleTimeMs; nodes = (struct Trajectory::trajectoryNode* ) malloc(sizeof(struct Trajectory::trajectoryNode)*steps); nodes[0].jointPos = jointEnd; nodes[0].cartPos = kukaBackwardCalc(); nodes[0].velocity = (jointEnd-jointStart)/sampleTimeMs; nodes[0].acceleration = Vec(9999.0f); // unused (void)jointStart; (void)jointEnd; } template Trajectory::Trajectory( unsigned int steps_, float totalTime_, Mat cartStart, Mat cartEnd ) { movementType = MovementCartBased; steps = steps_; currentStep = 0; totalTime = totalTime_; nodes = (struct Trajectory::trajectoryNode* ) malloc(sizeof(struct Trajectory::trajectoryNode)*steps_); // unused (void) cartStart; (void) cartEnd; } template Trajectory::~Trajectory() { free(nodes); } template unsigned int Trajectory::getSteps() { return steps; } template unsigned int Trajectory::getRemainingSteps() { if (steps >= currentStep ) return steps - currentStep; else return 0; } template unsigned int Trajectory::getCurrentStep() { return currentStep; } template enum MovementType Trajectory::getMovementType() { return movementType; } template Vec Trajectory::getNextJointPos () { Vec retval(0.0f); unsigned int pos = currentStep; if (pos >= steps) { pos = steps; } if (nodes != NULL && movementType == MovementJointBased) { retval = nodes[pos].jointPos; } // increment step currentStep ++; return retval; } template Mat Trajectory::getNextCartPos () { Mat retval(0.0f,1.0f); unsigned int pos = currentStep; if (pos >= steps) { pos = steps; } if (nodes != NULL && movementType == MovementCartBased) { retval = nodes[pos].cartPos; } // increment step currentStep ++; return retval; } template Vec Trajectory::getJointPos (unsigned int step) { Vec retval(0.0f); if (step >= steps) { return retval; } if (nodes != NULL && movementType == MovementJointBased) { retval = nodes[step].cartPos; } return retval; } template Mat Trajectory::getCartPos (unsigned int step) { Mat retval(0.0f, 1.0f); if (step >= steps) { return retval; } if (nodes != NULL && movementType == MovementCartBased) { retval = nodes[step].cartPos; } return retval; } template Vec Trajectory::getJointVelocity (unsigned int step) { Vec retval(0.0f); if (step >= steps) { return retval; } if (nodes != NULL && movementType == MovementCartBased) { retval = nodes[step].velocity; } return retval; } template Vec Trajectory::getJointAcceleration(unsigned int step) { Vec retval(0.0f); if (step >= steps) { return retval; } if (nodes != NULL && movementType == MovementCartBased) { retval = nodes[step].acceleration; } return retval; }