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