8template <
typename Scalar>
15 const std::size_t N = us.size();
16 if (dyn_models.size() != N) {
18 "Number of controls should be the same as number of dynamical models!");
23 for (std::size_t i = 0; i < N; i++) {
24 shared_ptr<Data> data = dyn_models[i]->createData();
26 xout.push_back(space.
neutral());
34template <
typename Scalar>
35typename math_types<Scalar>::VectorOfVectors
41 const std::size_t N = us.size();
42 std::vector<VectorXs> xs{x0};
44 shared_ptr<DynamicsDataTpl<Scalar>> data = dyn_model.
createData();
46 for (std::size_t i = 0; i < N; i++) {
56template <
typename Scalar>
64 const std::size_t N = us.size();
67 if (dyn_models.size() != N) {
69 "number of dynamical models ({:d})!",
70 N, dyn_models.size());
73 for (std::size_t i = 0; i < N; i++) {
74 shared_ptr<DataType> data =
75 std::static_pointer_cast<DataType>(dyn_models[i]->createData());
76 dyn_models[i]->forward(xout[i], us[i], *data);
77 xout[i + 1] = data->xnext_;
82template <
typename Scalar>
88 const std::size_t N = us.size();
92 shared_ptr<DataType> data =
93 std::static_pointer_cast<DataType>(dyn_model.
createData());
94 for (std::size_t i = 0; i < N; i++) {
95 dyn_model.
forward(xout[i], us[i], *data);
96 xout[i + 1] = data->xnext_;
101template <
template <
typename>
class C,
typename Scalar>
102typename math_types<Scalar>::VectorOfVectors
105 const std::size_t N = us.size();
113template <
template <
typename>
class C,
typename Scalar>
114typename math_types<Scalar>::VectorOfVectors
118 const std::size_t N = us.size();
#define ALIGATOR_RUNTIME_ERROR(...)
math_types< Scalar >::VectorOfVectors rollout(const std::vector< xyz::polymorphic< DynamicsModelTpl< Scalar > > > &dyn_models, const typename math_types< Scalar >::VectorXs &x0, const typename math_types< Scalar >::VectorOfVectors &us, typename math_types< Scalar >::VectorOfVectors &xout)
Perform a rollout of the supplied dynamical models.
Dynamics model: describes system dynamics through an implicit relation .
const Manifold & space() const
State space for the input.
virtual shared_ptr< Data > createData() const
Specific data struct for explicit dynamics ExplicitDynamicsModelTpl.
Explicit forward dynamics model .
virtual shared_ptr< BaseData > createData() const
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Evaluate the forward discrete dynamics.
Base class for manifolds, to use in cost funcs, solvers...
VectorXs neutral() const
Get the neutral element from the manifold (if this makes sense).
static void run(const DynamicsModelTpl< T > &model, const ConstVectorRef &x, const ConstVectorRef &u, DynamicsDataTpl< T > &data, VectorRef xout, const std::optional< ConstVectorRef > &gap=std::nullopt, const uint max_iters=1000, const T EPS=1e-6)
Typedefs for math (Eigen vectors, matrices) depending on scalar type.