37 #ifndef COVARIANT_TRAJECTORY_POLICY_H_
38 #define COVARIANT_TRAJECTORY_POLICY_H_
41 #include "planner/TrajectoryOptim/Chomp/chompUtils.hpp"
44 namespace stomp_motion_planner
56 const int num_time_steps,
57 const int num_dimensions,
58 const double movement_duration,
59 const double cost_ridge_factor,
60 const std::vector<double>& derivative_costs);
63 bool getParametersAll(std::vector<Eigen::VectorXd>& parameters);
64 void setFileNameBase(
const std::string& file_name_base);
65 void setPrintDebug(
bool print_debug) { print_debug_ = print_debug; }
131 bool getParameters(std::vector<Eigen::VectorXd>& parameters);
138 bool setParameters(
const std::vector<Eigen::VectorXd>& parameters);
148 bool computeControlCosts(
const std::vector<Eigen::MatrixXd>& control_cost_matrices,
const std::vector<std::vector<Eigen::VectorXd> >& parameters,
149 const double weight, std::vector<Eigen::VectorXd>& control_costs);
151 bool computeControlCosts(
const std::vector<Eigen::MatrixXd>& control_cost_matrices,
const std::vector<Eigen::VectorXd>& parameters,
152 const std::vector<Eigen::VectorXd>& noise,
const double weight, std::vector<Eigen::VectorXd>& control_costs);
156 std::string getInfoString();
157 std::string getClassName();
158 bool readFromDisc(
const std::string directory_name,
const int item_id,
const int trial_id = 0);
159 bool writeToDisc(
const int trial_id = 0);
160 bool readFromDisc(
const std::string abs_file_name);
161 bool writeToDisc(
const std::string abs_file_name);
162 std::string getFileName(
const int trial_id);
169 std::string file_name_base_;
175 int free_vars_start_index_;
176 int free_vars_end_index_;
178 double movement_duration_;
179 double cost_ridge_factor_;
180 std::vector<double> derivative_costs_;
182 std::vector<int> num_parameters_;
183 std::vector<Eigen::MatrixXd> basis_functions_;
184 std::vector<Eigen::MatrixXd> control_costs_;
185 std::vector<Eigen::MatrixXd> inv_control_costs_;
186 std::vector<Eigen::MatrixXd> control_costs_all_;
188 std::vector<Eigen::VectorXd> linear_control_costs_;
190 std::vector<Eigen::VectorXd> parameters_all_;
192 std::vector<Eigen::MatrixXd> differentiation_matrices_;
193 void createDifferentiationMatrices();
194 bool readParameters();
195 bool initializeVariables();
196 bool initializeCosts();
197 bool initializeBasisFunctions();
199 bool computeLinearControlCosts();
200 bool computeMinControlCostParameters();
207 if (
int(parameters.size()) != num_dimensions_)
209 parameters.resize(num_dimensions_, Eigen::VectorXd::Zero(num_time_steps_));
211 for (
int d=0; d<num_dimensions_; ++d)
213 parameters[d] = parameters_all_[d].segment(free_vars_start_index_, num_vars_free_);
220 Eigen::MatrixXd parameters( num_time_steps_, num_dimensions_);
222 for (
int d=0; d<num_dimensions_; ++d)
224 parameters.col(d) = parameters_all_[d].segment(free_vars_start_index_, num_vars_free_);
227 std::cout << parameters << std::endl;
230 inline bool CovariantTrajectoryPolicy::getParametersAll(std::vector<Eigen::VectorXd>& parameters)
232 parameters = parameters_all_;
239 for (
int d=0; d<num_dimensions_; ++d)
241 parameters_all_[d].segment(free_vars_start_index_, num_vars_free_) = parameters[d];
249 basis_functions = basis_functions_;
255 control_costs = control_costs_;
261 num_time_steps = num_time_steps_;
267 num_dimensions = num_dimensions_;
273 num_params = num_parameters_;
283 inline std::string CovariantTrajectoryPolicy::getInfoString()
288 inline std::string CovariantTrajectoryPolicy::getClassName()
290 return "CovariantTrajectoryPolicy";
293 inline void CovariantTrajectoryPolicy::setFileNameBase(
const std::string& file_name_base)
295 file_name_base_ = file_name_base;
bool setParameters(const std::vector< Eigen::VectorXd > ¶meters)
Set the policy parameters per dimension.
Definition: covariant_trajectory_policy.hpp:236
bool getNumDimensions(int &num_dimensions)
Gets the number of dimensions.
Definition: covariant_trajectory_policy.hpp:265
Definition: policy.hpp:47
void printParameters()
print paramters in standard output
Definition: covariant_trajectory_policy.hpp:218
bool updateParameters(const std::vector< Eigen::MatrixXd > &updates)
Update the policy parameters based on the updates per timestep.
Definition: covariant_trajectory_policy.cpp:395
bool getBasisFunctions(std::vector< Eigen::MatrixXd > &basis_functions)
Gets the basis functions that multiply the policy parameters in the dynamical system.
Definition: covariant_trajectory_policy.hpp:247
bool getNumTimeSteps(int &num_time_steps)
Gets the number of time steps used in reinforcement learning.
Definition: covariant_trajectory_policy.hpp:259
bool getControlCosts(std::vector< Eigen::MatrixXd > &control_costs)
Gets the positive semi-definite matrix of the quadratic control cost The weight of this control cost ...
Definition: covariant_trajectory_policy.hpp:253
bool setToMinControlCost(Eigen::VectorXd &start, Eigen::VectorXd &goal)
compute the minmal control costs given a start and goal state
Definition: covariant_trajectory_policy.cpp:147
bool getParameters(std::vector< Eigen::VectorXd > ¶meters)
Get the policy parameters per dimension.
Definition: covariant_trajectory_policy.hpp:205
bool setNumTimeSteps(const int num_time_steps)
Sets the number of time steps used in reinforcement learning.
Definition: covariant_trajectory_policy.hpp:277
bool getNumParameters(std::vector< int > &num_params)
Gets the number of policy parameters per dimension.
Definition: covariant_trajectory_policy.hpp:271
Definition: covariant_trajectory_policy.hpp:46
bool computeControlCosts(const std::vector< Eigen::MatrixXd > &control_cost_matrices, const std::vector< std::vector< Eigen::VectorXd > > ¶meters, const double weight, std::vector< Eigen::VectorXd > &control_costs)
Compute the control costs over time, given the control cost matrix per dimension and parameters over ...
Definition: covariant_trajectory_policy.cpp:347