ocra-recipes
Doxygen documentation for the ocra-recipes repository
GaussianProcessTrajectory.h
Go to the documentation of this file.
1 #ifndef GAUSSIANPROCESS_H
2 #define GAUSSIANPROCESS_H
3 
5 #include <math.h>
6 #include "smlt/gaussianProcess.hpp"
7 #include "smlt/bayesianOptimization.hpp"
8 #include "smlt/smltUtilities.hpp"
9 #include <iomanip>
10 
11 
12 namespace ocra
13 {
14 
15  typedef std::vector<bool> boolVector;
16 
17 
19 {
21 
22  public:
23 
24  Eigen::MatrixXd getDesiredValues(double time);
25  Eigen::VectorXd getVariance(double time);
26  void getDesiredValues(double time, Eigen::MatrixXd& desiredValues, Eigen::VectorXd& variance);
27 
28  void addWaypoint(const Eigen::VectorXd newWaypoint, const double waypointTime);
29 
30  void addWaypoint(const Eigen::VectorXd newWaypoint, const double waypointTime, const Eigen::VectorXi& dofToOpt, const bool useForMean=true, const bool useForVar=true, const bool useForOpt=true);
31  void removeWaypoint(int index);
32 
33  bool setMeanWaypoints(boolVector& bMeanVec);
34  bool setVarianceWaypoints(boolVector& bVarVec);
35  bool setOptimizationWaypoints(boolVector& bOptVec);
36  bool setDofToOptimize(std::vector<Eigen::VectorXi>& dofToOptVec);
37 
38  void printWaypointData();
39 
40  Eigen::MatrixXd getWaypointData();
41  Eigen::MatrixXd getMeanGPData();
42  Eigen::MatrixXd getVarGPData();
43 
44 
45  Eigen::VectorXd getBoptVariables(const int extraPointsToAdd=0, std::vector<Eigen::VectorXi> dofToOptVec = std::vector<Eigen::VectorXi>() );
46  Eigen::MatrixXd getBoptCovarianceMatrix();
47  Eigen::VectorXd getBoptSearchSpaceMinBound();
48  Eigen::VectorXd getBoptSearchSpaceMaxBound();
49  // smlt::bopt_Parameters getBoptParameters();
50 
51  bool setBoptVariables(const Eigen::VectorXd& newOptVariables);
52 
53 
54  void saveTrajectoryToFile(const std::string dirPath = "./");
55  void saveWaypointDataToFile(const std::string dirPath = "./");
56 
57  // Simple getters/setters
58  double getMaxVariance(){return maxCovariance.maxCoeff();}
59  Eigen::VectorXd getMaxCovarianceVector(){return maxCovariance;}
60  double getVarianceLengthParameter(){return varLengthParameter;}
61  double getMeanTime(){return meanKernelCenters.mean();}
62  double getDuration(){return meanKernelCenters.maxCoeff();}
63 
64  protected:
65  virtual void initializeTrajectory();
66 
67 
68  private:
69  smlt::gaussianProcess* meanGP;
70  smlt::gaussianProcess* varianceGP;
71 
72  // Eigen::MatrixXd meanKernelCenters;
73  // Eigen::MatrixXd varKernelCenters;
74 
75  Eigen::VectorXd meanKernelCenters;
76  Eigen::VectorXd varKernelCenters;
77 
78  Eigen::MatrixXd meanKernelTrainingData;
79  Eigen::MatrixXd varKernelTrainingData;
80 
81  Eigen::MatrixXd originalWaypoints;
82  Eigen::VectorXd timeline;
83 
84 
85  bool gpParametersAreSet();
86  void calculateGaussianProcessParameters();
87 
88  void precalculateTrajectory(Eigen::MatrixXd& traj, Eigen::MatrixXd& variance, Eigen::VectorXd& timeline, const double DT=0.01);
89 
90 
91  Eigen::VectorXd maxCovariance;
92  double meanLengthParameter;
93  double varLengthParameter;
94 
95  Eigen::VectorXd posOld;
96  Eigen::VectorXd velOld;
97  double t_old;
98  double t0, t0_variance;
99  bool varianceStartTrigger;
100 
101 
102  double extraWpDt;
103 
104  int numberOfOptimizationWaypoints;
105  bool boptVariablesSet;
106 
107 
108  int extraWaypoints;
109 
110 
111  boolVector isMeanWaypoint, isVarWaypoint, isOptWaypoint;
112  std::vector<Eigen::VectorXi> dofToOptimize;
113 };
114 
115 
116 
117 
118 
119 
120 } // end of namespace ocra
121 #endif // GAUSSIANPROCESS_H
bool setVarianceWaypoints(boolVector &bVarVec)
Eigen::VectorXd getBoptVariables(const int extraPointsToAdd=0, std::vector< Eigen::VectorXi > dofToOptVec=std::vector< Eigen::VectorXi >())
Eigen::MatrixXd getDesiredValues(double time)
#define DEFINE_CLASS_POINTER_TYPEDEFS(Class)
Definition: Macros.h:8
bool setOptimizationWaypoints(boolVector &bOptVec)
void addWaypoint(const Eigen::VectorXd newWaypoint, const double waypointTime)
Optimization-based Robot Controller namespace. a library of classes to write and solve optimization p...
Eigen::VectorXd getVariance(double time)
bool setMeanWaypoints(boolVector &bMeanVec)
void saveTrajectoryToFile(const std::string dirPath="./")
void saveWaypointDataToFile(const std::string dirPath="./")
std::vector< bool > boolVector
bool setDofToOptimize(std::vector< Eigen::VectorXi > &dofToOptVec)
bool setBoptVariables(const Eigen::VectorXd &newOptVariables)