9#ifndef _CLASS_LINEAR_VARIABLE
10#define _CLASS_LINEAR_VARIABLE
25template <
typename Numeric =
double,
bool Safe = true>
27 typedef Eigen::Matrix<Numeric, Eigen::Dynamic, 1>
vector_x_t;
28 typedef Eigen::Matrix<Numeric, Eigen::Dynamic, Eigen::Dynamic>
matrix_x_t;
57 throw std::length_error(
58 "Cannot evaluate linear variable, variable value does not have the "
60 return B() *
val +
c();
68 if (
w1.isZero())
return *
this;
75 throw std::length_error(
76 "Cannot add linear variables, variables do not have the same "
80 B_.block(0,
B().
cols() -
w1.B().cols(),
B().
rows(),
w1.B().cols()) +=
82 c_.tail(
w1.c().rows()) +=
w1.c();
83 }
else if (
B().
cols() <
101 if (
w1.isZero())
return *
this;
108 throw std::length_error(
109 "Cannot add linear variables, variables do not have the same "
111 else if (
B().
cols() >
113 B_.block(0,
B().
cols() -
w1.B().cols(),
B().
rows(),
w1.B().cols()) -=
115 c_.tail(
w1.c().rows()) -=
w1.c();
116 }
else if (
B().
cols() <
160 throw std::invalid_argument(
161 "Can't perform cross product on linear variables with dimensions != "
164 throw std::invalid_argument(
165 "Can't perform cross product on linear variables more than one "
169 (
other.B().squaredNorm() -
other.B().diagonal().squaredNorm() > MARGIN))
170 throw std::invalid_argument(
171 "Can't perform cross product on linear variables if B is not "
200 vector_x_t::Zero(dim));
206 std::size_t
size()
const {
return zero ? 0 : std::max(B_.rows(), c_.size()); }
210 Numeric
norm()
const {
return isZero() ? 0 : (B_.norm() + c_.norm()); }
219 const double prec = Eigen::NumTraits<Numeric>::dummy_precision())
const {
227 return this->B_ ==
other.B_ && this->c_ ==
other.c_;
234 return !(*
this ==
other);
244 template <
class Archive>
249 ar& boost::serialization::make_nvp(
"B_", B_);
250 ar& boost::serialization::make_nvp(
"c_", c_);
251 ar& boost::serialization::make_nvp(
"zero", zero);
255 if (
this == &
other) {
263 this->zero =
other.zero;
273template <
typename N,
bool S>
280template <
typename N,
bool S>
287template <
typename N,
bool S>
292template <
typename N,
bool S>
299template <
typename N,
bool S>
306template <
typename N,
bool S>
313template <
typename BezierFixed,
typename BezierLinear,
typename X>
315 typename BezierFixed::t_point_t
fixed_wps;
316 for (
typename BezierLinear::cit_point_t
cit =
bIn.waypoints().begin();
323template <
typename N,
bool S>
325 return os <<
"linear_variable: \n \t B:\n"
326 <<
l.B() <<
"\t c: \n"
327 <<
l.c().transpose();
#define DEFINE_CLASS_TEMPLATE_VERSION(Template, Type)
Definition archive.hpp:27
#define SINGLE_ARG(...)
Definition archive.hpp:23
class allowing to create a Bezier curve of dimension 1 <= n <= 3.
interface for a Curve of arbitrary dimension.
Definition bernstein.h:20
bezier_curve< T, N, S, P > operator*(const bezier_curve< T, N, S, P > &p1, const double k)
Definition bezier_curve.h:812
bezier_curve< T, N, S, P > operator/(const bezier_curve< T, N, S, P > &p1, const double k)
Definition bezier_curve.h:805
Eigen::Vector3d cross(const Eigen::VectorXd &a, const Eigen::VectorXd &b)
Definition cross_implementation.h:14
bezier_curve< T, N, S, P > operator-(const bezier_curve< T, N, S, P > &p1)
Definition bezier_curve.h:755
Matrix3 skew(const Point &x)
Definition MathDefs.h:42
std::ostream & operator<<(std::ostream &os, const linear_variable< N, S > &l)
Definition linear_variable.h:324
bezier_curve< T, N, S, P > operator+(const bezier_curve< T, N, S, P > &p1, const bezier_curve< T, N, S, P > &p2)
Definition bezier_curve.h:748
BezierFixed evaluateLinear(const BezierLinear &bIn, const X x)
Definition linear_variable.h:314
bool isApprox(const T a, const T b, const T eps=1e-6)
Definition curve_abc.h:25
Definition linear_variable.h:26
linear_variable< Numeric > linear_variable_t
Definition linear_variable.h:31
virtual bool operator==(const linear_variable &other) const
Check if actual linear variable and other are equal.
Definition linear_variable.h:226
vector_x_t operator()(const Eigen::Ref< const vector_x_t > &val) const
Linear evaluation for vector x.
Definition linear_variable.h:54
Eigen::Matrix< Numeric, 3, 3 > matrix_3_t
Definition linear_variable.h:30
Eigen::Matrix< Numeric, 3, 1 > vector_3_t
Definition linear_variable.h:29
~linear_variable()
Definition linear_variable.h:48
linear_variable(const vector_x_t &c)
Definition linear_variable.h:37
linear_variable_t & operator+=(const linear_variable_t &w1)
Add another linear variable.
Definition linear_variable.h:67
linear_variable()
Definition linear_variable.h:33
const matrix_x_t & B() const
Definition linear_variable.h:237
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 threshold....
Definition linear_variable.h:217
linear_variable_t & operator-=(const linear_variable_t &w1)
Substract another linear variable.
Definition linear_variable.h:100
std::size_t size() const
Get dimension of linear variable.
Definition linear_variable.h:206
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:143
Numeric norm() const
Get norm of linear variable (Norm of B plus norm of C).
Definition linear_variable.h:210
void serialize(Archive &ar, const unsigned int version)
Definition linear_variable.h:245
linear_variable(const linear_variable_t &other)
Definition linear_variable.h:43
virtual bool operator!=(const linear_variable &other) const
Check if actual linear variable and other are different.
Definition linear_variable.h:233
linear_variable & operator=(const linear_variable &other)
Definition linear_variable.h:254
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:133
linear_variable(const matrix_x_t &B, const vector_x_t &c)
Definition linear_variable.h:41
static linear_variable_t X(size_t dim=0)
Get a linear variable equal to the variable.
Definition linear_variable.h:198
Eigen::Matrix< Numeric, Eigen::Dynamic, Eigen::Dynamic > matrix_x_t
Definition linear_variable.h:28
friend class boost::serialization::access
Definition linear_variable.h:242
linear_variable_t cross(const linear_variable_t &other) const
Compute the cross product of the current linear_variable and the other. This method of course only ma...
Definition linear_variable.h:158
const vector_x_t & c() const
Definition linear_variable.h:238
static linear_variable_t Zero(size_t dim=0)
Get a linear variable equal to zero.
Definition linear_variable.h:190
Eigen::Matrix< Numeric, Eigen::Dynamic, 1 > vector_x_t
Definition linear_variable.h:27
bool isZero() const
Definition linear_variable.h:239
Definition archive.hpp:41