9 #ifndef CROCODDYL_CORE_ACTION_BASE_HPP_
10 #define CROCODDYL_CORE_ACTION_BASE_HPP_
13 #include <boost/shared_ptr.hpp>
14 #include <boost/make_shared.hpp>
16 #include "crocoddyl/core/fwd.hpp"
17 #include "crocoddyl/core/state-base.hpp"
18 #include "crocoddyl/core/utils/math.hpp"
19 #include "crocoddyl/core/utils/to-string.hpp"
59 template <
typename _Scalar>
62 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
64 typedef _Scalar Scalar;
68 typedef typename MathBase::VectorXs VectorXs;
87 virtual void calc(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
88 const Eigen::Ref<const VectorXs>& u) = 0;
101 virtual void calcDiff(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
102 const Eigen::Ref<const VectorXs>& u) = 0;
114 virtual bool checkData(
const boost::shared_ptr<ActionDataAbstract>& data);
122 void calc(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
130 void calcDiff(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x);
144 virtual void quasiStatic(
const boost::shared_ptr<ActionDataAbstract>& data, Eigen::Ref<VectorXs> u,
145 const Eigen::Ref<const VectorXs>& x,
const std::size_t maxiter = 100,
146 const Scalar tol = Scalar(1e-9));
159 VectorXs
quasiStatic_x(
const boost::shared_ptr<ActionDataAbstract>& data,
const VectorXs& x,
160 const std::size_t maxiter = 100,
const Scalar tol = Scalar(1e-9));
175 const boost::shared_ptr<StateAbstract>&
get_state()
const;
205 template <
class Scalar>
213 virtual void print(std::ostream& os)
const;
230 template <
typename _Scalar>
232 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
234 typedef _Scalar Scalar;
236 typedef typename MathBase::VectorXs VectorXs;
237 typedef typename MathBase::MatrixXs MatrixXs;
239 template <
template <
typename Scalar>
class Model>
242 xnext(model->get_state()->get_nx()),
243 Fx(model->get_state()->get_ndx(), model->get_state()->get_ndx()),
244 Fu(model->get_state()->get_ndx(), model->get_nu()),
246 Lx(model->get_state()->get_ndx()),
248 Lxx(model->get_state()->get_ndx(), model->get_state()->get_ndx()),
249 Lxu(model->get_state()->get_ndx(), model->get_nu()),
250 Luu(model->get_nu(), model->get_nu()) {
280 #include "crocoddyl/core/action-base.hxx"
Abstract class for action model.
const boost::shared_ptr< StateAbstract > & get_state() const
Return the state.
VectorXs u_lb_
Lower control limits.
VectorXs u_ub_
Upper control limits.
virtual void print(std::ostream &os) const
Print relevant information of the action model.
void set_u_ub(const VectorXs &u_ub)
Modify the control upper bounds.
const VectorXs & get_u_ub() const
Return the control upper bound.
bool has_control_limits_
Indicates whether any of the control limits is finite.
bool get_has_control_limits() const
Indicates if there are defined control limits.
VectorXs quasiStatic_x(const boost::shared_ptr< ActionDataAbstract > &data, const VectorXs &x, const std::size_t maxiter=100, const Scalar tol=Scalar(1e-9))
void update_has_control_limits()
Update the status of the control limits (i.e. if there are defined limits)
ActionModelAbstractTpl(boost::shared_ptr< StateAbstract > state, const std::size_t nu, const std::size_t nr=0)
Initialize the action model.
void calc(const boost::shared_ptr< ActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x)
Compute the next state and cost value.
void calcDiff(const boost::shared_ptr< ActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x)
Compute the derivatives of the dynamics and cost functions.
boost::shared_ptr< StateAbstract > state_
Model of the state.
std::size_t nu_
Control dimension.
VectorXs unone_
Neutral state.
std::size_t nr_
Dimension of the cost residual.
virtual bool checkData(const boost::shared_ptr< ActionDataAbstract > &data)
Checks that a specific data belongs to this model.
virtual void calcDiff(const boost::shared_ptr< ActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the derivatives of the dynamics and cost functions.
std::size_t get_nr() const
Return the dimension of the cost-residual vector.
virtual void calc(const boost::shared_ptr< ActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the next state and cost value.
void set_u_lb(const VectorXs &u_lb)
Modify the control lower bounds.
friend std::ostream & operator<<(std::ostream &os, const ActionModelAbstractTpl< Scalar > &model)
Print information on the action model.
const VectorXs & get_u_lb() const
Return the control lower bound.
virtual boost::shared_ptr< ActionDataAbstract > createData()
Create the action data.
std::size_t get_nu() const
Return the dimension of the control input.
virtual void quasiStatic(const boost::shared_ptr< ActionDataAbstract > &data, Eigen::Ref< VectorXs > u, const Eigen::Ref< const VectorXs > &x, const std::size_t maxiter=100, const Scalar tol=Scalar(1e-9))
Computes the quasic static commands.
Abstract class for the state representation.
VectorXs xnext
evolution state
MatrixXs Fx
Jacobian of the dynamics.
MatrixXs Fu
Jacobian of the dynamics.
MatrixXs Luu
Hessian of the cost function.
VectorXs Lx
Jacobian of the cost function.
MatrixXs Lxx
Hessian of the cost function.
VectorXs Lu
Jacobian of the cost function.
MatrixXs Lxu
Hessian of the cost function.