Go to the documentation of this file.00001 #include <robodyn_controllers/MinJerkTrajectoryFactory.h>
00002 #include <robodyn_controllers/MinJerkTrajectory.h>
00003 #include "nasa_common_logging/Logger.h"
00004
00005 boost::shared_ptr<JointTrajectory> MinJerkJointTrajectoryFactory::getTrajectory(const KDL::JntArrayAcc& startPose,
00006 const KDL::JntArrayAcc& goalPose, double timeToFinish) const
00007 {
00008 boost::shared_ptr<JointTrajectory> traj(new MinJerkJointTrajectory(*this, startPose, goalPose, timeToFinish));
00009 return traj;
00010 }
00011
00012 boost::shared_ptr<CartesianTrajectory> MinJerkCartesianTrajectoryFactory::getTrajectory(const KDL::FrameAcc& startPose,
00013 const KDL::FrameAcc& goalPose, double timeToFinish) const
00014 {
00015 boost::shared_ptr<CartesianTrajectory> traj(new MinJerkCartesianTrajectory(*this, startPose, goalPose, timeToFinish));
00016 return traj;
00017 }
00018
00019 boost::shared_ptr<SynchedCartesianTrajectory> MinJerkSynchedCartesianTrajectoryFactory::getTrajectory(const std::vector<KDL::FrameAcc>& startPoses,
00020 const std::vector<KDL::FrameAcc>& goalPoses, double timeToFinish) const
00021 {
00022 if (startPoses.size() != goalPoses.size())
00023 {
00024 std::stringstream err;
00025 err << "MinJerkCartesianTrajectoryFactory::getTrajectory() - number of start poses and goal poses don't match";
00026 NasaCommonLogging::Logger::log("gov.nasa.controllers.MinJerkCartesianTrajectoryFactory", log4cpp::Priority::ERROR, err.str());
00027 throw std::runtime_error(err.str());
00028 }
00029
00030 std::vector<boost::shared_ptr<MinJerkCartesianTrajectory> > trajPtrs(startPoses.size());
00031 double duration = 0.;
00032
00033 for (unsigned int i = 0; i < startPoses.size(); ++i)
00034 {
00035 trajPtrs[i].reset(new MinJerkCartesianTrajectory(*this, startPoses[i], goalPoses[i], timeToFinish));
00036
00037 if (trajPtrs[i]->getDuration() > duration)
00038 {
00039 duration = trajPtrs[i]->getDuration();
00040 }
00041 }
00042
00043 boost::shared_ptr<SynchedCartesianTrajectory> synchedTrajPtrs(new SynchedCartesianTrajectory);
00044
00045 for (unsigned int i = 0; i < startPoses.size(); ++i)
00046 {
00047 trajPtrs[i]->setDuration(duration);
00048 synchedTrajPtrs->push_back(trajPtrs[i]);
00049 }
00050
00051 return synchedTrajPtrs;
00052 }
00053