infinite-sinusoid.hpp
Go to the documentation of this file.
1 
9 #ifndef _parameteric_curves_sinusoid_hpp
10 #define _parameteric_curves_sinusoid_hpp
11 
13 
14 namespace parametriccurves {
15 
20 template <typename Numeric = double, Eigen::Index Dim = 1,
21  typename Point = Eigen::Matrix<Numeric, Dim, 1> >
22 struct InfiniteSinusoid : public AbstractCurve<Numeric, Point> {
23  typedef Point point_t;
24  typedef Numeric time_t;
25  typedef Numeric num_t;
26 
28 
29  public:
31 
33  const time_t& traj_time_,
34  const point_t& x_init_ = Eigen::Matrix<Numeric, Dim, 1>::Zero(),
35  const point_t& x_final_ = Eigen::Matrix<Numeric, Dim, 1>::Zero())
36  : curve_abc_t(-1, -1),
37  traj_time(traj_time_),
38  x_init(x_init_),
39  x_final(x_final_) {}
40 
43 
44  public:
45  virtual const point_t operator()(const time_t& t) const {
46  return x_init + 0.5 * (x_final - x_init) * (1.0 - cos(two_pi_f(t)));
47  }
48 
49  virtual const point_t derivate(const time_t& t,
50  const std::size_t& order) const {
51  if (order == 1)
52  return (x_final - x_init) * 0.5 * two_pi_f(1) * sin(two_pi_f(t));
53  else if (order == 2)
54  return (x_final - x_init) * 0.5 * two_pi_f(1) * two_pi_f(1) *
55  cos(two_pi_f(t));
56  else {
57  std::cerr << "Higher order derivatives not supported" << std::endl;
58  return point_t::Zero(Dim);
59  }
60  }
61 
62  public:
63  virtual bool setInitialPoint(const point_t& x_init_) {
64  if (x_init_.size() != x_init.size()) return false;
65  x_init = x_init_;
66  }
67 
68  virtual bool setInitialPoint(const double& x_init_) {
69  if (Dim != 1) return false;
70  x_init[0] = x_init_;
71  return true;
72  }
73 
74  virtual bool setFinalPoint(const Eigen::VectorXd& x_final_) {
75  if (x_final.size() != x_final_.size()) return false;
76  x_final = x_final_;
77  return true;
78  }
79 
80  virtual bool setFinalPoint(const double& x_final_) {
81  if (Dim != 1) return false;
82  x_final[0] = x_final_;
83  return true;
84  }
85  virtual bool setTrajectoryTime(double traj_time_) {
86  if (traj_time_ <= 0.0) return false;
87  traj_time = traj_time_;
88  return true;
89  }
90 
91  protected:
92  /*Attributes*/
96 
97  private:
98  inline const num_t two_pi_f(const time_t& t) const {
99  return (M_PI / traj_time) * t;
100  }
101 };
102 } // namespace parametriccurves
103 #endif //_CLASS_EXACTCUBIC
Definition: abstract-curve.hpp:16
Eigen::Matrix< Numeric, 3, 1 > Point
Definition: effector_spline.h:28
double Numeric
Definition: effector_spline.h:26
Represents a curve of dimension Dim is Safe is false, no verification is made on the evaluation of th...
Definition: abstract-curve.hpp:21
Creates InfiniteSinusoid curve The sinusoid is actually a cosine so that it starts with zero velocity...
Definition: infinite-sinusoid.hpp:22
virtual const point_t operator()(const time_t &t) const
Definition: infinite-sinusoid.hpp:45
virtual bool setFinalPoint(const double &x_final_)
Definition: infinite-sinusoid.hpp:80
point_t x_init
Definition: infinite-sinusoid.hpp:93
virtual bool setInitialPoint(const point_t &x_init_)
Definition: infinite-sinusoid.hpp:63
virtual bool setFinalPoint(const Eigen::VectorXd &x_final_)
Definition: infinite-sinusoid.hpp:74
virtual bool setTrajectoryTime(double traj_time_)
Definition: infinite-sinusoid.hpp:85
Numeric time_t
Definition: infinite-sinusoid.hpp:24
InfiniteSinusoid(const time_t &traj_time_, const point_t &x_init_=Eigen::Matrix< Numeric, Dim, 1 >::Zero(), const point_t &x_final_=Eigen::Matrix< Numeric, Dim, 1 >::Zero())
Constructor.
Definition: infinite-sinusoid.hpp:32
AbstractCurve< Numeric, Point > curve_abc_t
Definition: infinite-sinusoid.hpp:27
Point point_t
Definition: infinite-sinusoid.hpp:23
virtual bool setInitialPoint(const double &x_init_)
Definition: infinite-sinusoid.hpp:68
Numeric num_t
Definition: infinite-sinusoid.hpp:25
virtual const point_t derivate(const time_t &t, const std::size_t &order) const
Definition: infinite-sinusoid.hpp:49
time_t traj_time
Definition: infinite-sinusoid.hpp:95
point_t x_final
Definition: infinite-sinusoid.hpp:94
~InfiniteSinusoid()
Destructor.
Definition: infinite-sinusoid.hpp:42