crocoddyl
1.9.0
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
|
|
9 #ifndef CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
10 #define CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
14 #include "crocoddyl/core/fwd.hpp"
15 #include "crocoddyl/core/utils/exception.hpp"
16 #include "crocoddyl/core/action-base.hpp"
17 #include "crocoddyl/core/utils/deprecate.hpp"
30 template <
typename _Scalar>
31 class ShootingProblemTpl {
33 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
35 typedef _Scalar Scalar;
36 typedef ActionModelAbstractTpl<Scalar> ActionModelAbstract;
37 typedef ActionDataAbstractTpl<Scalar> ActionDataAbstract;
38 typedef MathBaseTpl<Scalar> MathBase;
39 typedef typename MathBase::VectorXs VectorXs;
48 ShootingProblemTpl(
const VectorXs& x0,
const std::vector<boost::shared_ptr<ActionModelAbstract> >& running_models,
49 boost::shared_ptr<ActionModelAbstract> terminal_model);
60 ShootingProblemTpl(
const VectorXs& x0,
const std::vector<boost::shared_ptr<ActionModelAbstract> >& running_models,
61 boost::shared_ptr<ActionModelAbstract> terminal_model,
62 const std::vector<boost::shared_ptr<ActionDataAbstract> >& running_datas,
63 boost::shared_ptr<ActionDataAbstract> terminal_data);
80 Scalar
calc(
const std::vector<VectorXs>& xs,
const std::vector<VectorXs>& us);
94 Scalar
calcDiff(
const std::vector<VectorXs>& xs,
const std::vector<VectorXs>& us);
102 void rollout(
const std::vector<VectorXs>& us, std::vector<VectorXs>& xs);
110 std::vector<VectorXs>
rollout_us(
const std::vector<VectorXs>& us);
118 void quasiStatic(std::vector<VectorXs>& us,
const std::vector<VectorXs>& xs);
126 std::vector<VectorXs>
quasiStatic_xs(
const std::vector<VectorXs>& xs);
136 void circularAppend(boost::shared_ptr<ActionModelAbstract> model, boost::shared_ptr<ActionDataAbstract> data);
146 void circularAppend(boost::shared_ptr<ActionModelAbstract> model);
155 void updateNode(
const std::size_t i, boost::shared_ptr<ActionModelAbstract> model,
156 boost::shared_ptr<ActionDataAbstract> data);
164 void updateModel(
const std::size_t i, boost::shared_ptr<ActionModelAbstract> model);
169 std::size_t
get_T()
const;
174 const VectorXs&
get_x0()
const;
179 const std::vector<boost::shared_ptr<ActionModelAbstract> >&
get_runningModels()
const;
189 const std::vector<boost::shared_ptr<ActionDataAbstract> >&
get_runningDatas()
const;
199 void set_x0(
const VectorXs& x0_in);
204 void set_runningModels(
const std::vector<boost::shared_ptr<ActionModelAbstract> >& models);
221 std::size_t
get_nx()
const;
231 DEPRECATED(
"Compute yourself the maximum dimension of the control vector", std::size_t get_nu_max()
const;)
246 template <
class Scalar>
247 friend std::ostream&
operator<<(std::ostream& os,
const ShootingProblemTpl<Scalar>& problem);
272 #include "crocoddyl/core/optctrl/shooting.hxx"
274 #endif // CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
std::vector< boost::shared_ptr< ActionDataAbstract > > running_datas_
Running action data.
void rollout(const std::vector< VectorXs > &us, std::vector< VectorXs > &xs)
Integrate the dynamics given a control sequence.
void circularAppend(boost::shared_ptr< ActionModelAbstract > model, boost::shared_ptr< ActionDataAbstract > data)
Circular append of the model and data onto the end running node.
std::vector< VectorXs > rollout_us(const std::vector< VectorXs > &us)
Integrate the dynamics given a control sequence.
const boost::shared_ptr< ActionModelAbstract > & get_terminalModel() const
Return the terminal model.
void set_runningModels(const std::vector< boost::shared_ptr< ActionModelAbstract > > &models)
Modify the running models and allocate new data.
void updateNode(const std::size_t i, boost::shared_ptr< ActionModelAbstract > model, boost::shared_ptr< ActionDataAbstract > data)
Update the model and data for a specific node.
void set_terminalModel(boost::shared_ptr< ActionModelAbstract > model)
Modify the terminal model and allocate new data.
void set_nthreads(const int nthreads)
Modify the number of threads using with multithreading support.
bool is_updated()
Return only once true is the shooting problem has been changed, otherwise false.
boost::shared_ptr< ActionDataAbstract > terminal_data_
Terminal action data.
void set_x0(const VectorXs &x0_in)
Modify the initial state.
std::size_t get_nx() const
Return the dimension of the state tuple.
const VectorXs & get_x0() const
Return the initial state.
std::vector< boost::shared_ptr< ActionModelAbstract > > running_models_
Running action model.
boost::shared_ptr< ActionModelAbstract > terminal_model_
Terminal action model.
Scalar calcDiff(const std::vector< VectorXs > &xs, const std::vector< VectorXs > &us)
Compute the derivatives of the cost and dynamics.
Scalar calc(const std::vector< VectorXs > &xs, const std::vector< VectorXs > &us)
Compute the cost and the next states.
std::size_t T_
number of running nodes
ShootingProblemTpl(const VectorXs &x0, const std::vector< boost::shared_ptr< ActionModelAbstract > > &running_models, boost::shared_ptr< ActionModelAbstract > terminal_model)
Initialize the shooting problem and allocate its data.
void updateModel(const std::size_t i, boost::shared_ptr< ActionModelAbstract > model)
Update a model and allocated new data for a specific node.
std::size_t nu_max_
Maximum control dimension.
std::size_t ndx_
State rate dimension.
std::size_t get_ndx() const
Return the dimension of the tangent space of the state manifold.
std::size_t get_nthreads() const
Return the maximum dimension of the control vector.
const std::vector< boost::shared_ptr< ActionModelAbstract > > & get_runningModels() const
Return the running models.
void quasiStatic(std::vector< VectorXs > &us, const std::vector< VectorXs > &xs)
Compute the quasic static commands given a state trajectory.
std::size_t get_T() const
Return the number of running nodes.
std::size_t nthreads_
Number of threads launch by the multi-threading application.
VectorXs x0_
Initial state.
std::size_t nx_
State dimension.
const std::vector< boost::shared_ptr< ActionDataAbstract > > & get_runningDatas() const
Return the running datas.
const boost::shared_ptr< ActionDataAbstract > & get_terminalData() const
Return the terminal data.
std::vector< VectorXs > quasiStatic_xs(const std::vector< VectorXs > &xs)
Compute the quasic static commands given a state trajectory.
friend std::ostream & operator<<(std::ostream &os, const ShootingProblemTpl< Scalar > &problem)
Print information on the 'ShootingProblem'.