9 #ifndef _CLASS_LINEAR_VARIABLE 10 #define _CLASS_LINEAR_VARIABLE 14 #include "serialization/archive.hpp" 15 #include "serialization/eigen-matrix.hpp" 25 template <
typename Numeric =
double,
bool Safe = true>
26 struct linear_variable :
public serialization::Serializable {
27 typedef Eigen::Matrix<Numeric, Eigen::Dynamic, 1>
vector_x_t;
28 typedef Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic>
matrix_x_t;
39 vector_x_t
operator()(
const Eigen::Ref<const vector_x_t>& val)
const {
41 if (Safe &&
B().cols() != val.rows())
42 throw std::length_error(
"Cannot evaluate linear variable, variable value does not have the correct dimension");
43 return B() * val +
c();
50 linear_variable_t&
operator+=(
const linear_variable_t& w1) {
51 if (w1.
isZero())
return *
this;
66 linear_variable_t&
operator-=(
const linear_variable_t& w1) {
67 if (w1.
isZero())
return *
this;
102 static linear_variable_t
Zero(
size_t dim = 0) {
109 std::size_t
size()
const {
return zero ? 0 : std::max(B_.cols(), c_.size()); }
120 const double prec = Eigen::NumTraits<Numeric>::dummy_precision())
const {
121 return (*
this - other).norm() < prec;
124 const matrix_x_t&
B()
const {
return B_; }
125 const vector_x_t&
c()
const {
return c_; }
131 template <
class Archive>
132 void serialize(Archive& ar,
const unsigned int version) {
136 ar& boost::serialization::make_nvp(
"B_", B_);
137 ar& boost::serialization::make_nvp(
"c_", c_);
138 ar& boost::serialization::make_nvp(
"zero", zero);
147 template <
typename N,
bool S>
153 template <
typename N,
bool S>
159 template <
typename N,
bool S>
165 template <
typename N,
bool S>
171 template <
typename N,
bool S>
177 template <
typename BezierFixed,
typename BezierLinear,
typename X>
179 typename BezierFixed::t_point_t fixed_wps;
180 for (
typename BezierLinear::cit_point_t cit = bIn.waypoints().begin(); cit != bIn.waypoints().end(); ++cit)
181 fixed_wps.push_back(cit->operator()(x));
182 return BezierFixed(fixed_wps.begin(), fixed_wps.end(), bIn.T_min_, bIn.T_max_);
187 DEFINE_CLASS_TEMPLATE_VERSION(SINGLE_ARG(
typename Numeric,
bool Safe),
189 #endif //_CLASS_LINEAR_VARIABLE std::size_t size() const
Get dimension of linear variable.
Definition: linear_variable.h:109
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic > matrix_x_t
Definition: linear_variable.h:28
BezierFixed evaluateLinear(const BezierLinear &bIn, const X x)
Definition: linear_variable.h:178
linear_variable< Numeric > linear_variable_t
Definition: linear_variable.h:29
double Numeric
Definition: effector_spline.h:26
Numeric norm() const
Get norm of linear variable (Norm of B plus norm of C).
Definition: linear_variable.h:113
linear_variable_t & operator-=(const linear_variable_t &w1)
Substract another linear variable.
Definition: linear_variable.h:66
bool isApprox(const linear_variable_t &other, const double prec=Eigen::NumTraits< Numeric >::dummy_precision()) const
Check if actual linear variable and other are approximately equal given a precision treshold...
Definition: linear_variable.h:119
const matrix_x_t & B() const
Definition: linear_variable.h:124
static linear_variable_t Zero(size_t dim=0)
Get a linear variable equal to zero.
Definition: linear_variable.h:102
bool isZero() const
Definition: linear_variable.h:126
interface for a Curve of arbitrary dimension.
Definition: bernstein.h:20
Eigen::Matrix< Numeric, Eigen::Dynamic, 1 > vector_x_t
Definition: linear_variable.h:27
linear_variable< N, S > operator/(const linear_variable< N, S > &w, const double k)
Definition: linear_variable.h:172
linear_variable< N, S > operator-(const linear_variable< N, S > &w1, const linear_variable< N, S > &w2)
Definition: linear_variable.h:154
class allowing to create a Bezier curve of dimension 1 <= n <= 3.
linear_variable()
Definition: linear_variable.h:31
const vector_x_t & c() const
Definition: linear_variable.h:125
friend class boost::serialization::access
Definition: linear_variable.h:129
linear_variable_t & operator/=(const double d)
Divide by a constant : p_i / d = B_i*x/d + c_i/d.
Definition: linear_variable.h:82
linear_variable(const matrix_x_t &B, const vector_x_t &c)
Definition: linear_variable.h:33
void serialize(Archive &ar, const unsigned int version)
Definition: linear_variable.h:132
linear_variable< N, S > operator*(const double k, const linear_variable< N, S > &w)
Definition: linear_variable.h:160
vector_x_t operator()(const Eigen::Ref< const vector_x_t > &val) const
Linear evaluation for vector x.
Definition: linear_variable.h:39
linear_variable_t & operator*=(const double d)
Multiply by a constant : p_i / d = B_i*x*d + c_i*d.
Definition: linear_variable.h:92
linear_variable_t & operator+=(const linear_variable_t &w1)
Add another linear variable.
Definition: linear_variable.h:50
linear_variable< N, S > operator+(const linear_variable< N, S > &w1, const linear_variable< N, S > &w2)
Definition: linear_variable.h:148
linear_variable(const vector_x_t &c)
Definition: linear_variable.h:32