10template <
typename Scalar>
17 const std::size_t N = us.size();
18 if (dyn_models.size() != N) {
20 "Number of controls should be the same as number of dynamical models!");
25 for (std::size_t i = 0; i < N; i++) {
26 shared_ptr<Data> data = dyn_models[i]->createData();
28 xout.push_back(space.
neutral());
35template <
typename Scalar>
36typename math_types<Scalar>::VectorOfVectors
42 const std::size_t N = us.size();
43 std::vector<VectorXs> xs{x0};
45 shared_ptr<DynamicsDataTpl<Scalar>> data = dyn_model.
createData();
47 for (std::size_t i = 0; i < N; i++) {
57template <
typename Scalar>
65 const std::size_t N = us.size();
68 if (dyn_models.size() != N) {
70 "number of dynamical models ({:d})!",
71 N, dyn_models.size());
74 for (std::size_t i = 0; i < N; i++) {
75 shared_ptr<DataType> data =
76 std::static_pointer_cast<DataType>(dyn_models[i]->createData());
77 dyn_models[i]->forward(xout[i], us[i], *data);
78 xout[i + 1] = data->xnext_;
83template <
typename Scalar>
89 const std::size_t N = us.size();
93 shared_ptr<DataType> data =
94 std::static_pointer_cast<DataType>(dyn_model.
createData());
95 for (std::size_t i = 0; i < N; i++) {
96 dyn_model.
forward(xout[i], us[i], *data);
97 xout[i + 1] = data->xnext_;
102template <
template <
typename>
class C,
typename Scalar>
103typename math_types<Scalar>::VectorOfVectors
106 const std::size_t N = us.size();
114template <
template <
typename>
class C,
typename Scalar>
115typename math_types<Scalar>::VectorOfVectors
116rollout(
const std::vector<xyz::polymorphic<C<Scalar>>> &dms,
119 const std::size_t N = us.size();
#define ALIGATOR_RUNTIME_ERROR(...)
void forwardDynamics(const M< T > &model, const typename math_types< T >::ConstVectorRef &x, const typename math_types< T >::ConstVectorRef &u, D &data, const typename math_types< T >::VectorRef xout, const std::optional< typename math_types< T >::ConstVectorRef > &gap=std::nullopt, ForwardDynamicsOptions< T > opts={})
Evaluates the forward map for a discrete dynamics model, implicit or explicit.
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 void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Evaluate the forward discrete dynamics.
virtual shared_ptr< Data > createData() const
Base class for manifolds, to use in cost funcs, solvers...
VectorXs neutral() const
Get the neutral element from the manifold (if this makes sense).
Typedefs for math (Eigen vectors, matrices) depending on scalar type.