TreeIkTrajectory.cpp
Go to the documentation of this file.
00001 #include <robodyn_controllers/TreeIkTrajectory.h>
00002 #include "nasa_common_logging/Logger.h"
00003 
00004 TreeIkTrajectory::TreeIkTrajectory()
00005     : lastTime(0.)
00006 {
00007 
00008 }
00009 
00010 void TreeIkTrajectory::getPose(double time, KDL::JntArrayAcc& pose)
00011 {
00012     if (time == 0.)
00013     {
00014         pose = jointsLast = jointsInit;
00015         lastTime = 0.;
00016         return;
00017     }
00018 
00019     if (time < lastTime)
00020     {
00021         std::stringstream err;
00022         err << "TreeIkTrajectory time moved backwards" << std::endl;
00023         NasaCommonLogging::Logger::log("gov.nasa.controllers.TreeIkTrajectory", log4cpp::Priority::ERROR, err.str());
00024         throw std::runtime_error(err.str());
00025         return;
00026     }
00027 
00028     if (time == lastTime)
00029     {
00030         pose = jointsLast;
00031         return;
00032     }
00033 
00034     // get pos
00035     trajectory->getPose(time, nodeFramesAcc);
00036     nodeFrames.resize(nodeFramesAcc.size());
00037 
00038     for (unsigned int i = 0; i < nodeFramesAcc.size(); ++i)
00039     {
00040         nodeFrames[i] = nodeFramesAcc[i].GetFrame();
00041     }
00042 
00043     pose.resize(jointsInit.q.rows());
00044     treeIk->getJointPositions(jointsLast.q, nodeNames, nodeFrames, pose.q, nodePriorities);
00045 
00046     // get vel & acc
00047     for (unsigned int i = 0; i < pose.q.rows(); ++i)
00048     {
00049         double tstep = time - lastTime;
00050 
00051         if (tstep < treeIk->getTimeStep() / 2.)
00052         {
00053             tstep = treeIk->getTimeStep() / 2.;
00054         }
00055 
00056         pose.qdot(i)    = (pose.q(i) - jointsLast.q(i)) / tstep;
00057         pose.qdotdot(i) = (pose.qdot(i) - jointsLast.qdot(i)) / tstep;
00058     }
00059 
00060     lastTime   = time;
00061     jointsLast = pose;
00062 }


robodyn_controllers
Author(s):
autogenerated on Sat Jun 8 2019 20:20:53