10 #ifndef CROCODDYL_CORE_SQUASHING_BASE_HPP_
11 #define CROCODDYL_CORE_SQUASHING_BASE_HPP_
13 #include "crocoddyl/core/fwd.hpp"
24 template <
typename _Scalar>
27 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 typedef _Scalar Scalar;
32 typedef typename MathBase::VectorXs VectorXs;
36 throw_pretty(
"Invalid argument: " <<
"ns cannot be zero");
41 virtual void calc(
const std::shared_ptr<SquashingDataAbstract>& data,
42 const Eigen::Ref<const VectorXs>& s) = 0;
43 virtual void calcDiff(
const std::shared_ptr<SquashingDataAbstract>& data,
44 const Eigen::Ref<const VectorXs>& s) = 0;
45 virtual std::shared_ptr<SquashingDataAbstract> createData() {
46 return std::allocate_shared<SquashingDataAbstract>(
47 Eigen::aligned_allocator<SquashingDataAbstract>(),
this);
53 template <
class Scalar>
62 virtual void print(std::ostream& os)
const {
63 os << boost::core::demangle(
typeid(*this).name());
66 std::size_t get_ns()
const {
return ns_; };
67 const VectorXs& get_s_lb()
const {
return s_lb_; };
68 const VectorXs& get_s_ub()
const {
return s_ub_; };
70 void set_s_lb(
const VectorXs& s_lb) { s_lb_ = s_lb; };
71 void set_s_ub(
const VectorXs& s_ub) { s_ub_ = s_ub; };
81 SquashingModelAbstractTpl() : ns_(0) {};
84 template <
typename _Scalar>
86 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
88 typedef _Scalar Scalar;
90 typedef typename MathBase::VectorXs VectorXs;
91 typedef typename MathBase::MatrixXs MatrixXs;
93 template <
template <
typename Scalar>
class Model>
95 : u(model->get_ns()), du_ds(model->get_ns(), model->get_ns()) {
106 template <
class Scalar>
107 std::ostream& operator<<(std::ostream& os,
virtual void print(std::ostream &os) const
Print relevant information of the squashing model.
friend std::ostream & operator<<(std::ostream &os, const SquashingModelAbstractTpl< Scalar > &model)
Print information on the actuation model.