00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __GT2004EvolutionBasicBehaviors_h_
00010 #define __GT2004EvolutionBasicBehaviors_h_
00011
00012 #include "../../BehaviorControl.h"
00013 #include "Tools/Xabsl2/Xabsl2Engine/Xabsl2Engine.h"
00014 #include "Tools/Xabsl2/Xabsl2Engine/Xabsl2BasicBehavior.h"
00015 #include "Tools/Evolution/Population.h"
00016 #include "Tools/Evolution/Parcour.h"
00017 #include "Tools/Math/PIDsmoothedValue.h"
00018 #include "Modules/WalkingEngine/GT2004ParameterSet.h"
00019 #include "Modules/WalkingEngine/InvKinWalkingParameterSets.h"
00020
00021
00022
00023
00024
00025 class GT2004BasicBehaviorMeasureGT2004Parameters : public Xabsl2BasicBehavior, public BehaviorControlInterfaces
00026 {
00027 public:
00028
00029
00030
00031
00032
00033 GT2004BasicBehaviorMeasureGT2004Parameters(const BehaviorControlInterfaces& interfaces,
00034 Xabsl2ErrorHandler& errorHandler,
00035 GT2004ParametersSet& gt2004ParametersSet,
00036 GT2004Parameters& gt2004ExtraParameters,
00037 Pose2D* gt2004ParametersCalibration,
00038 int& gt2004CurrentIndex,
00039 Pose2D& measurementRequest,
00040 int& evolutionMode):
00041 Xabsl2BasicBehavior("measure-gt2004-parameters", errorHandler),
00042 BehaviorControlInterfaces(interfaces),
00043 gt2004ParametersSet(gt2004ParametersSet),
00044 gt2004ExtraParameters(gt2004ExtraParameters),
00045 gt2004ParametersCalibration(gt2004ParametersCalibration),
00046 gt2004CurrentIndex(gt2004CurrentIndex),
00047 measurementRequest(measurementRequest),
00048 evolutionMode(evolutionMode),
00049 startFrameNumber(0),lastFrameNumber(0)
00050 {
00051 }
00052
00053 virtual void execute();
00054 private:
00055
00056 unsigned long startFrameNumber;
00057
00058 unsigned long lastFrameNumber;
00059
00060 double x0,y0,r0,t0;
00061
00062
00063 GT2004ParametersSet& gt2004ParametersSet;
00064 GT2004Parameters& gt2004ExtraParameters;
00065 Pose2D* gt2004ParametersCalibration;
00066 int& gt2004CurrentIndex;
00067 Pose2D& measurementRequest;
00068 int& evolutionMode;
00069 };
00070
00071
00072
00073
00074
00075 class GT2004BasicBehaviorMeasureGT2004ParametersBlind : public Xabsl2BasicBehavior, public BehaviorControlInterfaces
00076 {
00077 public:
00078
00079
00080
00081
00082
00083 GT2004BasicBehaviorMeasureGT2004ParametersBlind(const BehaviorControlInterfaces& interfaces,
00084 Xabsl2ErrorHandler& errorHandler,
00085 GT2004ParametersSet& gt2004ParametersSet,
00086 GT2004Parameters& gt2004ExtraParameters,
00087 Pose2D* gt2004ParametersCalibration,
00088 int& gt2004CurrentIndex,
00089 Pose2D& measurementRequest,
00090 int& evolutionMode):
00091 Xabsl2BasicBehavior("measure-gt2004-parameters-blind", errorHandler),
00092 BehaviorControlInterfaces(interfaces),
00093 gt2004ParametersSet(gt2004ParametersSet),
00094 gt2004ExtraParameters(gt2004ExtraParameters),
00095 gt2004ParametersCalibration(gt2004ParametersCalibration),
00096 gt2004CurrentIndex(gt2004CurrentIndex),
00097 measurementRequest(measurementRequest),
00098 evolutionMode(evolutionMode),
00099 startFrameNumber(0),lastFrameNumber(0),clusterFrames(0),goodFrames(0)
00100 {
00101 }
00102
00103 virtual void execute();
00104 private:
00105
00106 unsigned long startFrameNumber;
00107
00108 unsigned long lastFrameNumber;
00109
00110 unsigned long clusterFrames;
00111
00112 double x0,y0,r0,t0;
00113 double lastRot;
00114 double lastTime;
00115 double firstNullTime;
00116 double lastNullTime;
00117 double nullTime;
00118 Pose2D speed;
00119 int clusterNumber;
00120 int goodFrames;
00121 double dr,dx,dy;
00122
00123
00124 GT2004ParametersSet& gt2004ParametersSet;
00125 GT2004Parameters& gt2004ExtraParameters;
00126 Pose2D* gt2004ParametersCalibration;
00127 int& gt2004CurrentIndex;
00128 Pose2D& measurementRequest;
00129 int& evolutionMode;
00130 };
00131
00132
00133
00134
00135
00136
00137
00138
00139 class GT2004BasicBehaviorEvolveOmniParameters : public Xabsl2BasicBehavior, public BehaviorControlInterfaces
00140 {
00141 public:
00142
00143
00144
00145
00146
00147 GT2004BasicBehaviorEvolveOmniParameters(const BehaviorControlInterfaces& interfaces,
00148 Xabsl2ErrorHandler& errorHandler,
00149 GT2004ParametersSet& gt2004ParametersSet,
00150 Pose2D* gt2004ParametersCalibration,
00151 int& gt2004CurrentIndex,
00152 Pose2D& measurementRequest,
00153 int& evolutionMode):
00154 Xabsl2BasicBehavior("evolve-walking-parameters", errorHandler),
00155 BehaviorControlInterfaces(interfaces),
00156 gt2004ParametersSet(gt2004ParametersSet),
00157 gt2004ParametersCalibration(gt2004ParametersCalibration),
00158 gt2004CurrentIndex(gt2004CurrentIndex),
00159 measurementRequest(measurementRequest),
00160 evolutionMode(evolutionMode),
00161 lastMode(0),
00162 motionRequestX(0.15, 0.25, 0.0, 0, -300, 300, 50),
00163 motionRequestY(0.15, 0.25, 0.0, 0, -300, 300, 50),
00164 motionRequestR(0.15, 0.25, 0.0, 0, -pi, pi, 0.5)
00165 {
00166 registerParameter("execution-mode", mode);
00167
00168 delete(ftPopulation.individual[0]);
00169 delete(bPopulation.individual[0]);
00170 ERS7EvolveWalkingParameters ers7;
00171
00172 InvKinWalkingParameters msh7backward("", 0, 88.5057, 79.127, 43.2139, 101.905, 77.6874, -49.6692, 9.76973, 28.5799, +0.0724927, -0.0922574, 1.20455, 0.843727, 1.44822, 34.8207, 38.8411, 100, 100, 1, 0.06, 61, 0.461105, 0.0361205, 0.0391534, 0.508829, 0.0532571, 0.0469326, 0, 0.5, 0.5, 0, 0, 0, 0.0337565);
00173 GT2004Parameters msh7(0, Pose2D(0, 0, 0), 77.5836, 80.2702, 50.3536, 105.174, 81.5432, -52.0932, 5, 24, -0.25, 0.016, 64, 0, 0.49, 0.06, 0.06, 0.49, 0.06, 0.06, 0, 0.5, 0.5, 0);
00174
00175 ftPopulation.individual[0]= new GT2004Parameters(msh7);
00176 bPopulation.individual[0]= new GT2004Parameters(msh7backward);
00177 for (int i=1;i<10;i++)
00178 {
00179 ftPopulation.individual[i]->mutationOf(ftPopulation.individual[0], 0.3, 0.12, true);
00180 ftPopulation.individual[i]->index=ftPopulation.individual[0]->index;
00181 bPopulation.individual[i]->mutationOf(bPopulation.individual[0], 0.3, 0.12, true);
00182 bPopulation.individual[i]->index=bPopulation.individual[0]->index;
00183 }
00184 InTextFile inFTPopul("ft_pop.dat");
00185 if (inFTPopul.exists())
00186 {
00187 inFTPopul >> ftPopulation;
00188 }
00189 InTextFile inBPopul("b_pop.dat");
00190 if (inBPopul.exists())
00191 {
00192 inBPopul >> bPopulation;
00193 }
00194 }
00195
00196
00197 virtual void execute();
00198
00199 private:
00200
00201 Population<GT2004Parameters,10> ftPopulation;
00202 Population<GT2004Parameters,10> bPopulation;
00203
00204
00205 double mode;
00206 int lastMode;
00207
00208 ForwardTurningParcour forwardTurningParcour;
00209 SimpleBackwardParcour simpleBackwardParcour;
00210 PIDsmoothedValue motionRequestX, motionRequestY, motionRequestR;
00211
00212
00213 GT2004ParametersSet& gt2004ParametersSet;
00214 Pose2D* gt2004ParametersCalibration;
00215 int& gt2004CurrentIndex;
00216 Pose2D& measurementRequest;
00217 int& evolutionMode;
00218 };
00219
00220
00221
00222
00223
00224
00225
00226
00227 class GT2004BasicBehaviorSendCurrentGT2004ParametersAndChooseNext : public Xabsl2BasicBehavior, public BehaviorControlInterfaces
00228 {
00229 public:
00230
00231
00232
00233
00234
00235 GT2004BasicBehaviorSendCurrentGT2004ParametersAndChooseNext(const BehaviorControlInterfaces& interfaces,
00236 Xabsl2ErrorHandler& errorHandler,
00237 GT2004ParametersSet& gt2004ParametersSet,
00238 Pose2D* gt2004ParametersCalibration,
00239 int& gt2004CurrentIndex,
00240 Pose2D& measurementRequest,
00241 int& evolutionMode):
00242 Xabsl2BasicBehavior("send-current-gt2004-parameters-and-choose-next", errorHandler),
00243 BehaviorControlInterfaces(interfaces),
00244 gt2004ParametersSet(gt2004ParametersSet),
00245 gt2004ParametersCalibration(gt2004ParametersCalibration),
00246 gt2004CurrentIndex(gt2004CurrentIndex),
00247 measurementRequest(measurementRequest),
00248 evolutionMode(evolutionMode)
00249 {
00250 }
00251
00252
00253 virtual void execute();
00254
00255 private:
00256
00257 GT2004ParametersSet& gt2004ParametersSet;
00258 Pose2D* gt2004ParametersCalibration;
00259 int& gt2004CurrentIndex;
00260 Pose2D& measurementRequest;
00261 int& evolutionMode;
00262 };
00263
00264
00265
00266
00267
00268
00269
00270 class GT2004BasicBehaviorNextGT2004ParametersToBeMeasured : public Xabsl2BasicBehavior, public BehaviorControlInterfaces
00271 {
00272 public:
00273
00274
00275
00276
00277
00278 GT2004BasicBehaviorNextGT2004ParametersToBeMeasured(const BehaviorControlInterfaces& interfaces,
00279 Xabsl2ErrorHandler& errorHandler,
00280 GT2004ParametersSet& gt2004ParametersSet,
00281 GT2004Parameters& gt2004ExtraParameters,
00282 Pose2D* gt2004ParametersCalibration,
00283 int& gt2004CurrentIndex,
00284 Pose2D& measurementRequest,
00285 int& evolutionMode):
00286 Xabsl2BasicBehavior("next-gt2004-parameters-to-measure", errorHandler),
00287 BehaviorControlInterfaces(interfaces),
00288 gt2004ParametersSet(gt2004ParametersSet),
00289 gt2004ExtraParameters(gt2004ExtraParameters),
00290 gt2004ParametersCalibration(gt2004ParametersCalibration),
00291 gt2004CurrentIndex(gt2004CurrentIndex),
00292 measurementRequest(measurementRequest),
00293 evolutionMode(evolutionMode),tableIndex(0),trials(0),maxSpeed(0),
00294 maxSpeedRatio(0),maxYRatio(0),maxRRatio(0)
00295 {
00296 }
00297
00298
00299 virtual void execute();
00300
00301 private:
00302
00303 GT2004ParametersSet& gt2004ParametersSet;
00304 GT2004Parameters& gt2004ExtraParameters;
00305 Pose2D* gt2004ParametersCalibration;
00306 int& gt2004CurrentIndex;
00307 Pose2D& measurementRequest;
00308 int& evolutionMode;
00309
00310 Pose2D requestTable[40];
00311 Pose2D measureTable[40];
00312 int tableIndex;
00313 int trials;
00314 double maxSpeed;
00315 double maxSpeedRatio;
00316 double maxYRatio;
00317 double maxRRatio;
00318 };
00319
00320
00321
00322
00323
00324
00325 class GT2004EvolutionBasicBehaviors : public BehaviorControlInterfaces
00326 {
00327 public:
00328
00329
00330
00331 GT2004EvolutionBasicBehaviors(const BehaviorControlInterfaces& interfaces,
00332 Xabsl2ErrorHandler& errorHandler,
00333 GT2004ParametersSet& gt2004ParametersSet,
00334 GT2004Parameters& gt2004ExtraParameters,
00335 Pose2D* gt2004ParametersCalibration,
00336 int& gt2004CurrentIndex,
00337 Pose2D& measurementRequest,
00338 int& evolutionMode)
00339 : BehaviorControlInterfaces(interfaces),
00340 errorHandler(errorHandler),
00341 basicBehaviorEvolveOmniParameters(interfaces,errorHandler, gt2004ParametersSet, gt2004ParametersCalibration, gt2004CurrentIndex, measurementRequest, evolutionMode),
00342 basicBehaviorMeasureGT2004Parameters(interfaces,errorHandler, gt2004ParametersSet, gt2004ExtraParameters, gt2004ParametersCalibration, gt2004CurrentIndex, measurementRequest, evolutionMode),
00343 basicBehaviorMeasureGT2004ParametersBlind(interfaces,errorHandler, gt2004ParametersSet, gt2004ExtraParameters, gt2004ParametersCalibration, gt2004CurrentIndex, measurementRequest, evolutionMode),
00344 basicBehaviorSendCurrentGT2004ParametersAndChooseNext(interfaces,errorHandler, gt2004ParametersSet, gt2004ParametersCalibration, gt2004CurrentIndex, measurementRequest, evolutionMode),
00345 basicBehaviorNextGT2004ParametersToBeMeasured(interfaces,errorHandler, gt2004ParametersSet, gt2004ExtraParameters, gt2004ParametersCalibration, gt2004CurrentIndex, measurementRequest, evolutionMode)
00346 {}
00347
00348
00349 void registerBasicBehaviors(Xabsl2Engine& engine);
00350
00351 private:
00352
00353 Xabsl2ErrorHandler& errorHandler;
00354
00355
00356
00357 GT2004BasicBehaviorEvolveOmniParameters basicBehaviorEvolveOmniParameters;
00358 GT2004BasicBehaviorMeasureGT2004Parameters basicBehaviorMeasureGT2004Parameters;
00359 GT2004BasicBehaviorMeasureGT2004ParametersBlind basicBehaviorMeasureGT2004ParametersBlind;
00360 GT2004BasicBehaviorSendCurrentGT2004ParametersAndChooseNext basicBehaviorSendCurrentGT2004ParametersAndChooseNext;
00361 GT2004BasicBehaviorNextGT2004ParametersToBeMeasured basicBehaviorNextGT2004ParametersToBeMeasured;
00362
00363 };
00364
00365 #endif // __GT2004EvolutionBasicBehaviors_h_
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506