1 #ifndef _RCACCREATOR_HPP_ 2 #define _RCACCREATOR_HPP_ 6 #include "RCACGrad.hpp" 23 std::string useRLS =
"RLS";
24 std::string useGrad =
"Grad";
44 void *FLAGStemp = (
void*)&FLAGS;
46 if (rcacType == useRLS)
50 return new RCACRLS(*FLAGSnew, FILT);
52 else if (rcacType == useGrad)
56 return new RCACGrad(*FLAGSnew, FILT);
60 std::cout <<
"Bad RCAC Type!" <<
"\n";
118 FILT.filtNu.resize(lz, lu*filtorder);
119 FILT.filtNu = Eigen::Map<Eigen::MatrixXd>(&FILTmx[filtIndex], (double)lz, (
double)lu*filtorder);
120 for (
int i = 0; i < (lz*lu*filtorder); i++)
127 FILT.filtDu.resize(lz, lz*(filtorder-1));
128 FILT.filtDu = Eigen::Map<Eigen::MatrixXd>(&FILTmx[filtIndex], (double)lz, (
double)lz*(filtorder-1));
129 for (
int i = 0; i < (lz*lz*(filtorder-1)); i++)
136 FILT.filtNz.resize(lz, lz);
137 FILT.filtNz = Eigen::Map<Eigen::MatrixXd>(&FILTmx[filtIndex], (double)lz, (
double)lz);
138 for (
int i = 0; i < (lz*lz); i++)
145 FILT.filtDz.resize(lz, lz);
146 FILT.filtDz = Eigen::Map<Eigen::MatrixXd>(&FILTmx[filtIndex], (double)lz, (
double)lz);
147 for (
int i = 0; i < (lz*lz); i++)
179 std::string &rcacType
182 if (rcacType == useRLS)
192 FLAGS.lz = FLAGSmx[flagsIndex]; flagsIndex++;
193 FLAGS.ly = FLAGSmx[flagsIndex]; flagsIndex++;
194 FLAGS.lu = FLAGSmx[flagsIndex]; flagsIndex++;
195 FLAGS.Nc = FLAGSmx[flagsIndex]; flagsIndex++;
196 FLAGS.filtorder = FLAGSmx[flagsIndex]; flagsIndex++;
197 FLAGS.k_0 = (int)FLAGSmx[flagsIndex]; flagsIndex++;
200 int ltheta = FLAGS.Nc*FLAGS.lu*(FLAGS.lu+FLAGS.ly);
201 FLAGS.P0.resize(ltheta, ltheta);
205 FLAGS.P0 = Eigen::Map<Eigen::MatrixXd>(&FLAGSmx[flagsIndex], (double)ltheta, (
double)ltheta);
206 for (
int i = 0; i < pow(ltheta,2); i++)
213 FLAGS.Ru.resize(FLAGS.lu, FLAGS.lu);
214 FLAGS.Ru = Eigen::Map<Eigen::MatrixXd>(&FLAGSmx[flagsIndex], (double)FLAGS.lu, (
double)FLAGS.lu);
215 for (
int i = 0; i < pow(FLAGS.lu,2); i++)
222 FLAGS.Rz.resize(FLAGS.lz, FLAGS.lz);
223 FLAGS.Rz = Eigen::Map<Eigen::MatrixXd>(&FLAGSmx[flagsIndex], (double)FLAGS.lz, (
double)FLAGS.lz);
224 for (
int i = 0; i < pow(FLAGS.lz,2); i++)
231 FLAGS.lambda = FLAGSmx[flagsIndex]; flagsIndex++;
234 FLAGS.theta_0.resize(ltheta);
235 FLAGS.theta_0 = Eigen::Map<Eigen::VectorXd>(&FLAGSmx[flagsIndex], (double)ltheta, 1);
236 for (
int i = 0; i < ltheta; i++)
242 rcacFilt FILT = initFiltSimulink(FLAGS.lz, FLAGS.ly, FLAGS.lu,
243 FLAGS.Nc, FLAGS.filtorder, FILTmx);
246 return new RCACRLS(FLAGS, FILT);
248 else if (rcacType == useGrad)
258 FLAGS.lz = FLAGSmx[flagsIndex]; flagsIndex++;
259 FLAGS.ly = FLAGSmx[flagsIndex]; flagsIndex++;
260 FLAGS.lu = FLAGSmx[flagsIndex]; flagsIndex++;
261 FLAGS.Nc = FLAGSmx[flagsIndex]; flagsIndex++;
262 FLAGS.filtorder = FLAGSmx[flagsIndex]; flagsIndex++;
263 FLAGS.k_0 = (int)FLAGSmx[flagsIndex]; flagsIndex++;
266 FLAGS.alpha = FLAGSmx[flagsIndex]; flagsIndex++;
268 int ltheta = FLAGS.Nc*FLAGS.lu*(FLAGS.lu+FLAGS.ly);
271 FLAGS.theta_0.resize(ltheta);
272 FLAGS.theta_0 = Eigen::Map<Eigen::VectorXd>(&FLAGSmx[flagsIndex], (double)ltheta, 1);
273 for (
int i = 0; i < ltheta; i++)
279 rcacFilt FILT = initFiltSimulink(FLAGS.lz, FLAGS.ly, FLAGS.lu,
280 FLAGS.Nc, FLAGS.filtorder, FILTmx);
288 std::cout <<
"Bad RCAC Type (Simulink)!" <<
"\n";
290 throw "Bad RCAC Type (Simulink)!";
RCAC * initSimulink(double *&FLAGSmx, double *&FILTmx, std::string &rcacType)
Definition: RCACCreator.hpp:176
static RCAC * init(T &FLAGS, rcacFilt &FILT, std::string &whichRCAC)
Definition: RCACCreator.hpp:36
Definition: RCACRLS.hpp:55
Definition: RCACRLS.hpp:33
Definition: RCACGrad.hpp:48
Definition: RCACGrad.hpp:28