34 #include <boost/serialization/assume_abstract.hpp> 36 #include <boost/random.hpp> 37 #include <boost/random/variate_generator.hpp> 38 #include <boost/random/normal_distribution.hpp> 45 class FunctionApproximator;
46 class SpringDamperSystem;
61 enum DmpType { IJSPEERT_2002_MOVEMENT, KULVICIUS_2012_JOINING, COUNTDOWN_2013 };
78 Dmp(
double tau, Eigen::VectorXd y_init, Eigen::VectorXd y_attr,
79 std::vector<FunctionApproximator*> function_approximators,
95 Dmp(
int n_dims_dmp, std::vector<FunctionApproximator*> function_approximators,
109 Dmp(
double tau, Eigen::VectorXd y_init, Eigen::VectorXd y_attr,
110 std::vector<FunctionApproximator*> function_approximators,
111 DmpType dmp_type=KULVICIUS_2012_JOINING,
123 Dmp(
int n_dims_dmp, std::vector<FunctionApproximator*> function_approximators,
134 Dmp(
double tau, Eigen::VectorXd y_init, Eigen::VectorXd y_attr,
double alpha_spring_damper,
DynamicalSystem* goal_system);
145 virtual void integrateStart(Eigen::Ref<Eigen::VectorXd> x, Eigen::Ref<Eigen::VectorXd> xd)
const;
148 const Eigen::Ref<const Eigen::VectorXd>& x,
149 Eigen::Ref<Eigen::VectorXd> xd)
const;
162 void analyticalSolution(
const Eigen::VectorXd& ts, Eigen::MatrixXd& xs, Eigen::MatrixXd& xds, Eigen::MatrixXd& forcing_terms, Eigen::MatrixXd& fa_output)
const;
174 inline void analyticalSolution(
const Eigen::VectorXd& ts, Eigen::MatrixXd& xs, Eigen::MatrixXd& xds, Eigen::MatrixXd& forcing_terms)
const 176 Eigen::MatrixXd fa_output;
180 inline void analyticalSolution(
const Eigen::VectorXd& ts, Eigen::MatrixXd& xs, Eigen::MatrixXd& xds)
const 182 Eigen::MatrixXd forcing_terms, fa_output;
194 Eigen::MatrixXd xs, xds;
208 Eigen::MatrixXd xs, xds;
230 virtual void statesAsTrajectory(
const Eigen::MatrixXd& x_in,
const Eigen::MatrixXd& xd_in, Eigen::MatrixXd& y_out, Eigen::MatrixXd& yd_out, Eigen::MatrixXd& ydd_out)
const;
245 virtual void statesAsTrajectory(
const Eigen::VectorXd& ts,
const Eigen::MatrixXd& x_in,
const Eigen::MatrixXd& xd_in,
Trajectory& trajectory)
const;
259 virtual void train(
const Trajectory& trajectory, std::string save_directory,
bool overwrite=
false);
267 virtual void set_tau(
double tau);
304 void getParameterVectorMask(
const std::set<std::string> selected_values_labels, Eigen::VectorXi& selected_mask)
const;
320 const Eigen::Ref<const Eigen::MatrixXd>& phase_state, Eigen::MatrixXd& fa_output)
const;
336 return perturbation_standard_deviation_;
347 assert(i_dim<(
int)function_approximators_.size());
348 return function_approximators_[i_dim];
371 std::vector<FunctionApproximator*> function_approximators_;
377 Eigen::VectorXd trajectory_amplitudes_;
380 double perturbation_standard_deviation_ = 0.0;
385 mutable Eigen::VectorXd attractor_state_prealloc_;
388 mutable Eigen::VectorXd initial_state_prealloc_;
391 mutable Eigen::MatrixXd fa_outputs_one_prealloc_;
394 mutable Eigen::MatrixXd fa_outputs_prealloc_;
397 mutable Eigen::MatrixXd fa_output_prealloc_;
400 mutable Eigen::VectorXd forcing_term_prealloc_;
403 mutable Eigen::VectorXd g_minus_y0_prealloc_;
413 void initSubSystems(
double alpha_spring_system,
DynamicalSystem* goal_system,
416 void initSubSystems(
DmpType dmp_type);
418 void initFunctionApproximators(std::vector<FunctionApproximator*> function_approximators);
421 static boost::mt19937 rng;
422 mutable boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > *analytical_solution_perturber_ = NULL;
436 template<
class Archive>
437 void serialize(Archive & ar,
const unsigned int version);
443 #include <boost/serialization/export.hpp> double tau(void) const
Accessor function for the time constant.
Parameterizable class header file.
void getParameterVectorMask(const std::set< std::string > selected_values_labels, Eigen::VectorXi &selected_mask) const
Get a mask for selecting parameters.
DynamicalSystem class header file.
BOOST_SERIALIZATION_ASSUME_ABSTRACT(DmpBbo::Dmp)
Don't add version information to archives.
virtual void set_attractor_state(const Eigen::VectorXd &y_attr)
Accessor function for the attractor state of the system.
void getParameterVectorAll(Eigen::VectorXd &values) const
Return a vector that returns all available parameter values.
void analyticalSolution(const Eigen::VectorXd &ts, Eigen::MatrixXd &xs, Eigen::MatrixXd &xds) const
Return analytical solution of the system at certain times.
Implementation of Dynamical Movement Primitives.
virtual void set_tau(double tau)
Accessor function for the time constant.
void computeFunctionApproximatorInputsAndTargets(const Trajectory &trajectory, Eigen::VectorXd &fa_inputs_phase, Eigen::MatrixXd &fa_targets) const
Given a trajectory, compute the inputs and targets for the function approximators.
A class for storing trajectories: positions, velocities and accelerations of variables over time...
virtual void statesAsTrajectory(const Eigen::MatrixXd &x_in, const Eigen::MatrixXd &xd_in, Eigen::MatrixXd &y_out, Eigen::MatrixXd &yd_out, Eigen::MatrixXd &ydd_out) const
Get the output of a DMP dynamical system as a trajectory.
Class for providing access to a model's parameters as a vector.
double get_perturbation_analytical_solution() const
Get the perturbation to the forcing term when computing the analytical solution.
int getParameterVectorAllSize(void) const
Get the size of the parameter values vector when it contains all available parameter values...
virtual void analyticalSolution(const Eigen::VectorXd &ts, Trajectory &trajectory) const
Return analytical solution of the system at certain times.
Base class for all function approximators.
void analyticalSolution(const Eigen::VectorXd &ts, Eigen::MatrixXd &xs, Eigen::MatrixXd &xds, Eigen::MatrixXd &forcing_terms) const
Return analytical solution of the system at certain times (and return forcing terms) ...
void differentialEquation(const Eigen::Ref< const Eigen::VectorXd > &x, Eigen::Ref< Eigen::VectorXd > xd) const
The differential equation which defines the system.
void setSelectedParameters(const std::set< std::string > &selected_values_labels)
Determine which subset of parameters is represented in the vector returned by Parameterizable::getPar...
DmpType
Different types of DMPs that can be initialized.
virtual void train(const Trajectory &trajectory)
Train a DMP with a trajectory.
virtual void computeFunctionApproximatorOutput(const Eigen::Ref< const Eigen::MatrixXd > &phase_state, Eigen::MatrixXd &fa_output) const
Compute the outputs of the function approximators.
Dmp * clone(void) const
Return a deep copy of this object.
void setParameterVectorAll(const Eigen::VectorXd &values)
Set all available parameter values with one vector.
FunctionApproximator * function_approximator(int i_dim) const
Get a pointer to the function approximator for a certain dimension.
Interface for implementing dynamical systems.
Header file for adding real-time debugging using several macros.
BOOST_CLASS_IMPLEMENTATION(DmpBbo::Dmp, boost::serialization::object_serializable)
Don't add version information to archives.
void analyticalSolution(const Eigen::VectorXd &ts, Trajectory &trajectory, Eigen::MatrixXd &forcing_terms) const
Return analytical solution of the system at certain times.
friend class boost::serialization::access
Give boost serialization access to private members.
void set_spring_constant(double spring_constant)
Accessor function for spring constant of spring-damper system.
ForcingTermScaling
Different ways to scale the forcing term.
virtual void integrateStart(Eigen::Ref< Eigen::VectorXd > x, Eigen::Ref< Eigen::VectorXd > xd) const
Start integrating the system.
void set_perturbation_analytical_solution(double perturbation_standard_deviation)
Add a perturbation to the forcing term when computing the analytical solution.
virtual void set_initial_state(const Eigen::VectorXd &y_init)
Accessor function for the initial state of the system.
std::string toString(void) const
Returns a string representation of the object.
Dynamical System modelling the evolution of a spring-damper system: .
void analyticalSolution(const Eigen::VectorXd &ts, Eigen::MatrixXd &xs, Eigen::MatrixXd &xds, Eigen::MatrixXd &forcing_terms, Eigen::MatrixXd &fa_output) const
Return analytical solution of the system at certain times (and return forcing terms) ...
void getSelectableParameters(std::set< std::string > &selectable_values_labels) const
Return all the names of the parameter types that can be selected.
Header file for serialization of Eigen matrices.
void set_damping_coefficient(double damping_coefficient)
Accessor function for damping coefficient of spring-damper system.