Loading...
Searching...
No Matches
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
14namespace parametriccurves {
15
20template <typename Numeric = double, Eigen::Index Dim = 1,
21 typename Point = Eigen::Matrix<Numeric, Dim, 1> >
22struct 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),
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;
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;
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;
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
Evaluation of the cubic spline at time t.
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
Evaluation of the derivative spline at time t.
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
Definition curve-constraint.hpp:18