Crocoddyl
 
Loading...
Searching...
No Matches
shooting.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2019-2025, LAAS-CNRS, University of Edinburgh,
5// University of Oxford, Heriot-Watt University
6// Copyright note valid unless otherwise stated in individual files. All
7// rights reserved.
9
10#ifndef CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
11#define CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
12
13#include "crocoddyl/core/action-base.hpp"
14#include "crocoddyl/core/fwd.hpp"
15#include "crocoddyl/core/utils/deprecate.hpp"
16
17namespace crocoddyl {
18
31template <typename _Scalar>
33 public:
34 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
35
36 typedef _Scalar Scalar;
40 typedef typename MathBase::VectorXs VectorXs;
41
50 const VectorXs& x0,
51 const std::vector<std::shared_ptr<ActionModelAbstract> >& running_models,
52 std::shared_ptr<ActionModelAbstract> terminal_model);
53
64 const VectorXs& x0,
65 const std::vector<std::shared_ptr<ActionModelAbstract> >& running_models,
66 std::shared_ptr<ActionModelAbstract> terminal_model,
67 const std::vector<std::shared_ptr<ActionDataAbstract> >& running_datas,
68 std::shared_ptr<ActionDataAbstract> terminal_data);
74
88 Scalar calc(const std::vector<VectorXs>& xs, const std::vector<VectorXs>& us);
89
106 Scalar calcDiff(const std::vector<VectorXs>& xs,
107 const std::vector<VectorXs>& us);
108
117 void rollout(const std::vector<VectorXs>& us, std::vector<VectorXs>& xs);
118
127 std::vector<VectorXs> rollout_us(const std::vector<VectorXs>& us);
128
137 void quasiStatic(std::vector<VectorXs>& us, const std::vector<VectorXs>& xs);
138
147 std::vector<VectorXs> quasiStatic_xs(const std::vector<VectorXs>& xs);
148
158 void circularAppend(std::shared_ptr<ActionModelAbstract> model,
159 std::shared_ptr<ActionDataAbstract> data);
160
170 void circularAppend(std::shared_ptr<ActionModelAbstract> model);
171
179 void updateNode(const std::size_t i,
180 std::shared_ptr<ActionModelAbstract> model,
181 std::shared_ptr<ActionDataAbstract> data);
182
189 void updateModel(const std::size_t i,
190 std::shared_ptr<ActionModelAbstract> model);
191
201 template <typename NewScalar>
203
207 std::size_t get_T() const;
208
212 const VectorXs& get_x0() const;
213
217 const std::vector<std::shared_ptr<ActionModelAbstract> >& get_runningModels()
218 const;
219
223 const std::shared_ptr<ActionModelAbstract>& get_terminalModel() const;
224
228 const std::vector<std::shared_ptr<ActionDataAbstract> >& get_runningDatas()
229 const;
230
234 const std::shared_ptr<ActionDataAbstract>& get_terminalData() const;
235
239 void set_x0(const VectorXs& x0_in);
240
245 const std::vector<std::shared_ptr<ActionModelAbstract> >& models);
246
250 void set_terminalModel(std::shared_ptr<ActionModelAbstract> model);
251
258 void set_nthreads(const int nthreads);
259
263 std::size_t get_nx() const;
264
268 std::size_t get_ndx() const;
269
273 std::size_t get_nthreads() const;
274
280
284 template <class Scalar>
285 friend std::ostream& operator<<(std::ostream& os,
286 const ShootingProblemTpl<Scalar>& problem);
287
288 protected:
289 Scalar cost_;
290 std::size_t T_;
291 VectorXs x0_;
292 std::shared_ptr<ActionModelAbstract>
294 std::shared_ptr<ActionDataAbstract> terminal_data_;
295 std::vector<std::shared_ptr<ActionModelAbstract> >
297 std::vector<std::shared_ptr<ActionDataAbstract> >
299 std::size_t nx_;
300 std::size_t ndx_;
301 std::size_t nthreads_;
303 bool is_updated_;
304
305 private:
306 void allocateData();
307};
308
309} // namespace crocoddyl
310
311/* --- Details -------------------------------------------------------------- */
312/* --- Details -------------------------------------------------------------- */
313/* --- Details -------------------------------------------------------------- */
314#include "crocoddyl/core/optctrl/shooting.hxx"
315
316extern template class CROCODDYL_EXPLICIT_INSTANTIATION_DECLARATION_DLLAPI
318extern template class CROCODDYL_EXPLICIT_INSTANTIATION_DECLARATION_DLLAPI
320
321#endif // CROCODDYL_CORE_OPTCTRL_SHOOTING_HPP_
Abstract class for action model.
This class encapsulates a shooting problem.
Definition shooting.hpp:32
void circularAppend(std::shared_ptr< ActionModelAbstract > model, std::shared_ptr< ActionDataAbstract > data)
Circular append of the model and data onto the end running node.
void set_terminalModel(std::shared_ptr< ActionModelAbstract > model)
Modify the terminal model and allocate new data.
Scalar calcDiff(const std::vector< VectorXs > &xs, const std::vector< VectorXs > &us)
Compute the derivatives of the cost and dynamics.
ShootingProblemTpl< NewScalar > cast() const
Cast the shooting problem to a different scalar type.
void quasiStatic(std::vector< VectorXs > &us, const std::vector< VectorXs > &xs)
Compute the quasic static commands given a state trajectory.
void updateNode(const std::size_t i, std::shared_ptr< ActionModelAbstract > model, std::shared_ptr< ActionDataAbstract > data)
Update the model and data for a specific node.
std::shared_ptr< ActionModelAbstract > terminal_model_
Terminal action model.
Definition shooting.hpp:293
void rollout(const std::vector< VectorXs > &us, std::vector< VectorXs > &xs)
Integrate the dynamics given a control sequence.
const std::shared_ptr< ActionDataAbstract > & get_terminalData() const
Return the terminal data.
friend std::ostream & operator<<(std::ostream &os, const ShootingProblemTpl< Scalar > &problem)
Print information on the 'ShootingProblem'.
std::size_t get_ndx() const
Return the dimension of the tangent space of the state manifold.
void updateModel(const std::size_t i, std::shared_ptr< ActionModelAbstract > model)
Update a model and allocated new data for a specific node.
void set_runningModels(const std::vector< std::shared_ptr< ActionModelAbstract > > &models)
Modify the running models and allocate new data.
const VectorXs & get_x0() const
Return the initial state.
const std::vector< std::shared_ptr< ActionModelAbstract > > & get_runningModels() const
Return the running models.
std::size_t nx_
State dimension.
Definition shooting.hpp:299
std::size_t get_nthreads() const
Return the number of threads.
std::vector< VectorXs > quasiStatic_xs(const std::vector< VectorXs > &xs)
Compute the quasic static commands given a state trajectory.
Scalar calc(const std::vector< VectorXs > &xs, const std::vector< VectorXs > &us)
Compute the cost and the next states.
const std::vector< std::shared_ptr< ActionDataAbstract > > & get_runningDatas() const
Return the running datas.
ShootingProblemTpl(const ShootingProblemTpl< Scalar > &problem)
Initialize the shooting problem.
bool is_updated()
Return only once true is the shooting problem has been changed, otherwise false.
std::size_t T_
number of running nodes
Definition shooting.hpp:290
void circularAppend(std::shared_ptr< ActionModelAbstract > model)
Circular append of the model and data onto the end running node.
void set_x0(const VectorXs &x0_in)
Modify the initial state.
std::vector< std::shared_ptr< ActionModelAbstract > > running_models_
Running action model.
Definition shooting.hpp:296
const std::shared_ptr< ActionModelAbstract > & get_terminalModel() const
Return the terminal model.
std::vector< std::shared_ptr< ActionDataAbstract > > running_datas_
Running action data.
Definition shooting.hpp:298
void set_nthreads(const int nthreads)
Modify the number of threads using with multithreading support.
std::size_t get_T() const
Return the number of running nodes.
ShootingProblemTpl(const VectorXs &x0, const std::vector< std::shared_ptr< ActionModelAbstract > > &running_models, std::shared_ptr< ActionModelAbstract > terminal_model)
Initialize the shooting problem and allocate its data.
ShootingProblemTpl(const VectorXs &x0, const std::vector< std::shared_ptr< ActionModelAbstract > > &running_models, std::shared_ptr< ActionModelAbstract > terminal_model, const std::vector< std::shared_ptr< ActionDataAbstract > > &running_datas, std::shared_ptr< ActionDataAbstract > terminal_data)
Initialize the shooting problem (models and datas)
std::shared_ptr< ActionDataAbstract > terminal_data_
Terminal action data.
Definition shooting.hpp:294
std::size_t get_nx() const
Return the dimension of the state tuple.
VectorXs x0_
Initial state.
Definition shooting.hpp:291
std::vector< VectorXs > rollout_us(const std::vector< VectorXs > &us)
Integrate the dynamics given a control sequence.
std::size_t ndx_
State rate dimension.
Definition shooting.hpp:300