9 #ifndef CROCODDYL_CORE_RESIDUAL_BASE_HPP_
10 #define CROCODDYL_CORE_RESIDUAL_BASE_HPP_
12 #include <boost/shared_ptr.hpp>
13 #include <boost/make_shared.hpp>
15 #include "crocoddyl/core/fwd.hpp"
16 #include "crocoddyl/core/state-base.hpp"
17 #include "crocoddyl/core/data-collector-base.hpp"
37 template <
typename _Scalar>
38 class ResidualModelAbstractTpl {
40 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
42 typedef _Scalar Scalar;
43 typedef MathBaseTpl<Scalar> MathBase;
44 typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
45 typedef StateAbstractTpl<Scalar> StateAbstract;
46 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
47 typedef typename MathBase::VectorXs VectorXs;
48 typedef typename MathBase::MatrixXs MatrixXs;
61 const bool q_dependent =
true,
const bool v_dependent =
true,
62 const bool u_dependent =
true);
75 ResidualModelAbstractTpl(boost::shared_ptr<StateAbstract> state,
const std::size_t nr,
const bool q_dependent =
true,
76 const bool v_dependent =
true,
const bool u_dependent =
true);
86 virtual void calc(
const boost::shared_ptr<ResidualDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
87 const Eigen::Ref<const VectorXs>& u);
98 virtual void calc(
const boost::shared_ptr<ResidualDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
109 virtual void calcDiff(
const boost::shared_ptr<ResidualDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
110 const Eigen::Ref<const VectorXs>& u);
121 virtual void calcDiff(
const boost::shared_ptr<ResidualDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
133 virtual boost::shared_ptr<ResidualDataAbstract>
createData(DataCollectorAbstract*
const data);
138 const boost::shared_ptr<StateAbstract>&
get_state()
const;
143 std::size_t
get_nr()
const;
148 std::size_t
get_nu()
const;
168 template <
class Scalar>
169 friend std::ostream&
operator<<(std::ostream& os,
const ResidualModelAbstractTpl<Scalar>& model);
176 virtual void print(std::ostream& os)
const;
188 template <
typename _Scalar>
190 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
192 typedef _Scalar Scalar;
195 typedef typename MathBase::VectorXs VectorXs;
196 typedef typename MathBase::MatrixXs MatrixXs;
198 template <
template <
typename Scalar>
class Model>
202 Rx(model->get_nr(), model->get_state()->get_ndx()),
203 Ru(model->get_nr(), model->get_nu()) {
208 virtual ~ResidualDataAbstractTpl() {}
221 #include "crocoddyl/core/residual-base.hxx"
223 #endif // CROCODDYL_CORE_RESIDUAL_BASE_HPP_