10 #ifndef CROCODDYL_CORE_ACTIVATIONS_QUADRATIC_HPP_
11 #define CROCODDYL_CORE_ACTIVATIONS_QUADRATIC_HPP_
13 #include "crocoddyl/core/activation-base.hpp"
14 #include "crocoddyl/core/fwd.hpp"
18 template <
typename _Scalar>
21 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
24 typedef _Scalar Scalar;
28 typedef typename MathBase::VectorXs VectorXs;
29 typedef typename MathBase::MatrixXs MatrixXs;
34 virtual void calc(
const std::shared_ptr<ActivationDataAbstract>& data,
35 const Eigen::Ref<const VectorXs>& r)
override {
36 if (
static_cast<std::size_t
>(r.size()) != nr_) {
38 "Invalid argument: " <<
"r has wrong dimension (it should be " +
39 std::to_string(nr_) +
")");
41 data->a_value = Scalar(0.5) * r.dot(r);
44 virtual void calcDiff(
const std::shared_ptr<ActivationDataAbstract>& data,
45 const Eigen::Ref<const VectorXs>& r)
override {
46 if (
static_cast<std::size_t
>(r.size()) != nr_) {
48 "Invalid argument: " <<
"r has wrong dimension (it should be " +
49 std::to_string(nr_) +
")");
54 assert_pretty(MatrixXs(data->Arr).isApprox(MatrixXs::Identity(nr_, nr_)),
55 "Arr has wrong value");
58 virtual std::shared_ptr<ActivationDataAbstract> createData()
override {
59 std::shared_ptr<ActivationDataAbstract> data =
60 std::allocate_shared<ActivationDataAbstract>(
61 Eigen::aligned_allocator<ActivationDataAbstract>(),
this);
62 data->Arr.diagonal().setOnes();
66 template <
typename NewScalar>
78 virtual void print(std::ostream& os)
const override {
79 os <<
"ActivationModelQuad {nr=" << nr_ <<
"}";
virtual void print(std::ostream &os) const override
Print relevant information of the quadratic model.