newPGstepStudy.cpp
Go to the documentation of this file.
00001 //  Copyright AIST-CNRS Joint Robotics Laboratory
00002 //  Author: Nicolas Perrin
00003 
00004 #include <cassert>
00005 #include "newPGstepStudy.h"
00006 
00007 #define DELAY_1 0.005
00008 #define DELAY_2 0.2
00009 
00010 using namespace std;
00011 
00012 CnewPGstepStudy::CnewPGstepStudy()
00013 {
00014 
00015 }
00016 
00017 CnewPGstepStudy::~CnewPGstepStudy()
00018 {
00019 
00020 }
00021 
00022 void CnewPGstepStudy::drawSeqStepFeatures(ofstream & fb, double incrTime, double zc, double g, double t1, double t2, double t3, double t4, double t5, vector<double> vect_input, char leftOrRightFootStable, double coefFeet)
00023 {
00024 
00025   double downBound, upBound, leftBound, rightBound;
00026 
00027   StepFeatures stepF;
00028   produceSeqStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, t4, t5, vect_input, leftOrRightFootStable);
00029 
00030   double centre_x;
00031   double centre_y;
00032   double abs_orientation;
00033 
00034   for(int i=0; i < (int) (vect_input.size()-6)/4+2 ; i++)
00035     {
00036 
00037       double abs_orientationRAD;
00038 
00039       if(i==0) {
00040         centre_x = vect_input[0];
00041         centre_y = vect_input[1];
00042         abs_orientation = vect_input[2] * PI/180;
00043 
00044         leftBound = -centre_y;
00045         rightBound = -centre_y;
00046         upBound = centre_x;
00047         downBound = centre_x;
00048       }
00049       else if(i==1) {
00050         centre_x = vect_input[3];
00051         centre_y = vect_input[4];
00052         abs_orientationRAD = vect_input[5] * PI/180;
00053       }
00054       else if(i==2) {
00055         centre_x = vect_input[0];
00056         centre_y = vect_input[1];
00057         abs_orientation = vect_input[2];
00058       }
00059 
00060       if(i>=2){
00061 
00062         abs_orientationRAD = abs_orientation * PI/180;
00063 
00064         centre_x = centre_x + cos(abs_orientationRAD)*vect_input[4*i-1]-sin(abs_orientationRAD)*vect_input[4*i];
00065         centre_y = centre_y + sin(abs_orientationRAD)*vect_input[4*i-1]+cos(abs_orientationRAD)*vect_input[4*i];
00066         abs_orientation = abs_orientation + vect_input[4*i+1];
00067 
00068         abs_orientationRAD = abs_orientation * PI/180;
00069 
00070       }
00071 
00072       leftBound = min(leftBound,-centre_y-0.24*coefFeet);
00073       rightBound = max(rightBound,-centre_y+0.24*coefFeet);
00074       downBound = min(downBound,centre_x-0.24*coefFeet);
00075       upBound = max(upBound,centre_x+0.24*coefFeet);
00076 
00077       vector<double> cosinuss (4, 0);
00078       vector<double> sinuss (4, 0);
00079       vector<double> x (4, 0);
00080       vector<double> y (4, 0);
00081 
00082       cosinuss[0] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*0.065;
00083       sinuss[0] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*0.115;
00084 
00085       cosinuss[1] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*0.065;
00086       sinuss[1] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*(-0.115);
00087 
00088       cosinuss[2] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*(-0.065);
00089       sinuss[2] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*(-0.115);
00090 
00091       cosinuss[3] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*(-0.065);
00092       sinuss[3] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*0.115;
00093 
00094       for(int j = 0; j<4; j++)
00095         {
00096           x[j] = centre_x + cosinuss[j]*coefFeet;
00097           y[j] = centre_y + sinuss[j]*coefFeet;
00098         }
00099 
00100       for(int j = 0; j<4; j++)
00101         {
00102           fb << -y[j]
00103              << " " << x[j]
00104              << " " << -y[(j+1) % 4] + y[j]
00105              << " " << x[(j+1) % 4] - x[j]
00106              << endl;
00107         }
00108       fb << -y[0]
00109          << " " << +x[0]
00110          << " " << -y[0]
00111          << " " << +x[0]
00112          << endl << endl;
00113 
00114     }
00115 
00116   double squareCenter_h = (rightBound + leftBound)/2;
00117   double squareCenter_v = (upBound + downBound)/2;
00118   double halfSide = max((rightBound - leftBound)/2,(upBound - downBound)/2);
00119 
00120   leftBound = squareCenter_h - halfSide;
00121   rightBound = squareCenter_h + halfSide;
00122   downBound = squareCenter_v - halfSide;
00123   upBound =squareCenter_v + halfSide;
00124 
00125   //we plot a big rectangle which contains the whole track:
00126   fb << leftBound
00127      << " " << downBound
00128      << " " << leftBound
00129      << " " << upBound
00130      << endl;
00131   fb << leftBound
00132      << " " << upBound
00133      << " " << rightBound
00134      << " " << upBound
00135      << endl;
00136   fb << rightBound
00137      << " " << upBound
00138      << " " << rightBound
00139      << " " << downBound
00140      << endl;
00141   fb << rightBound
00142      << " " << downBound
00143      << " " << leftBound
00144      << " " << downBound
00145      << endl;
00146   fb << leftBound
00147      << " " << downBound
00148      << " " << leftBound
00149      << " " << downBound
00150      << endl << endl;
00151 
00152   fb << endl;
00153   //After 3 endl, new index in gnuplot.
00154 
00155   for(int i=0; i < stepF.size-1 ; i++)
00156     {
00157       fb << -stepF.rightfootYtraj[i]
00158          << " " << stepF.rightfootXtraj[i]
00159          << " " << -stepF.rightfootYtraj[i+1]
00160          << " " << stepF.rightfootXtraj[i+1]
00161          << endl;
00162       fb << -stepF.rightfootYtraj[i+1]
00163          << " " << stepF.rightfootXtraj[i+1]
00164          << " " << -stepF.rightfootYtraj[i+1]
00165          << " " << stepF.rightfootXtraj[i+1]
00166          << endl << endl;
00167     }
00168   fb << endl;
00169   //After 3 endl, new index in gnuplot.
00170 
00171   for(int i=0; i < stepF.size-1 ; i++)
00172     {
00173       fb << -stepF.leftfootYtraj[i]
00174          << " " << stepF.leftfootXtraj[i]
00175          << " " << -stepF.leftfootYtraj[i+1]
00176          << " " << stepF.leftfootXtraj[i+1]
00177          << endl;
00178       fb << -stepF.leftfootYtraj[i+1]
00179          << " " << stepF.leftfootXtraj[i+1]
00180          << " " << -stepF.leftfootYtraj[i+1]
00181          << " " << stepF.leftfootXtraj[i+1]
00182          << endl << endl;
00183     }
00184   fb << endl;
00185   //After 3 endl, new index in gnuplot.
00186 
00187   for(int i=0; i < stepF.size-1 ; i++)
00188     {
00189       fb << -stepF.comTrajY[i]
00190          << " " << stepF.comTrajX[i]
00191          << " " << -stepF.comTrajY[i+1]
00192          << " " << stepF.comTrajX[i+1]
00193          << endl;
00194       fb << -stepF.comTrajY[i+1]
00195          << " " << stepF.comTrajX[i+1]
00196          << " " << -stepF.comTrajY[i+1]
00197          << " " << stepF.comTrajX[i+1]
00198          << endl << endl;
00199     }
00200   fb << endl;
00201   //After 3 endl, new index in gnuplot.
00202 
00203   for(int i=0; i < stepF.size-1 ; i++)
00204     {
00205       fb << -stepF.zmpTrajY[i]
00206          << " " << stepF.zmpTrajX[i]
00207          << " " << -stepF.zmpTrajY[i+1]
00208          << " " << stepF.zmpTrajX[i+1]
00209          << endl;
00210       fb << -stepF.zmpTrajY[i+1]
00211          << " " << stepF.zmpTrajX[i+1]
00212          << " " << -stepF.zmpTrajY[i+1]
00213          << " " << stepF.zmpTrajX[i+1]
00214          << endl << endl;
00215     }
00216   fb << endl;
00217 
00218 
00219   ofstream fb_com("com.dat");
00220   ofstream fb_zmp("zmp.dat");
00221   ofstream fb_la("left-ankle.dat");
00222   ofstream fb_ra("right-ankle.dat");
00223 
00224   for(int i=0; i < stepF.size-1 ; i++)
00225     {
00226       fb_com << stepF.comTrajX[i]
00227              << " " << stepF.comTrajY[i] << endl;
00228 
00229       fb_zmp << stepF.zmpTrajX[i]
00230              << " " << stepF.zmpTrajY[i] << endl;
00231 
00232       fb_la << stepF.leftfootXtraj[i]
00233             << " " << stepF.leftfootYtraj[i]
00234             << " " << stepF.leftfootHeight[i]
00235             << " " << stepF.leftfootOrient[i] << endl;
00236 
00237       fb_ra << stepF.rightfootXtraj[i]
00238             << " " << stepF.rightfootYtraj[i]
00239             << " " << stepF.rightfootHeight[i]
00240             << " " << stepF.rightfootOrient[i] << endl;
00241     }
00242 }
00243 
00244 void CnewPGstepStudy::drawSeqHalfStepFeatures(ofstream & fb, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable, double coefFeet)
00245 {
00246 
00247   StepFeatures stepF;
00248   produceSeqHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00249 
00250   double downBound, upBound, leftBound, rightBound;
00251 
00252   double centre_x;
00253   double centre_y;
00254   double abs_orientation;
00255 
00256   for(int i=0; i < (int) (vect_input.size()-6)/5+2 ; i++)
00257     {
00258 
00259       double abs_orientationRAD;
00260 
00261       if(i==0) {
00262         centre_x = vect_input[0];
00263         centre_y = vect_input[1];
00264         abs_orientation = vect_input[2] * PI/180;
00265 
00266         leftBound = -centre_y;
00267         rightBound = -centre_y;
00268         upBound = centre_x;
00269         downBound = centre_x;
00270       }
00271       else if(i==1) {
00272         centre_x = vect_input[3];
00273         centre_y = vect_input[4];
00274         abs_orientationRAD = vect_input[5] * PI/180;
00275       }
00276       else if(i==2) {
00277         centre_x = vect_input[0];
00278         centre_y = vect_input[1];
00279         abs_orientation = vect_input[2];
00280       }
00281 
00282       if(i>=2){
00283 
00284         abs_orientationRAD = abs_orientation * PI/180;
00285 
00286         centre_x = centre_x + cos(abs_orientationRAD)*vect_input[5*i-2]-sin(abs_orientationRAD)*vect_input[5*i-1];
00287         centre_y = centre_y + sin(abs_orientationRAD)*vect_input[5*i-2]+cos(abs_orientationRAD)*vect_input[5*i-1];
00288         abs_orientation = abs_orientation + vect_input[5*i];
00289 
00290         abs_orientationRAD = abs_orientation * PI/180;
00291 
00292       }
00293 
00294       leftBound = min(leftBound,-centre_y-0.24*coefFeet);
00295       rightBound = max(rightBound,-centre_y+0.24*coefFeet);
00296       downBound = min(downBound,centre_x-0.24*coefFeet);
00297       upBound = max(upBound,centre_x+0.24*coefFeet);
00298 
00299       vector<double> cosinuss (4, 0);
00300       vector<double> sinuss (4, 0);
00301       vector<double> x (4, 0);
00302       vector<double> y (4, 0);
00303 
00304       cosinuss[0] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*0.065;
00305       sinuss[0] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*0.115;
00306 
00307       cosinuss[1] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*0.065;
00308       sinuss[1] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*(-0.115);
00309 
00310       cosinuss[2] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*(-0.065);
00311       sinuss[2] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*(-0.115);
00312 
00313       cosinuss[3] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*(-0.065);
00314       sinuss[3] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*0.115;
00315 
00316       for(int j = 0; j<4; j++)
00317         {
00318           x[j] = centre_x + cosinuss[j]*coefFeet;
00319           y[j] = centre_y + sinuss[j]*coefFeet;
00320         }
00321 
00322       for(int j = 0; j<4; j++)
00323         {
00324           fb << -y[j]
00325              << " " << x[j]
00326              << " " << -y[(j+1) % 4] + y[j]
00327              << " " << x[(j+1) % 4] - x[j]
00328              << endl;
00329         }
00330       fb << -y[0]
00331          << " " << +x[0]
00332          << " " << -y[0]
00333          << " " << +x[0]
00334          << endl << endl;
00335     }
00336 
00337   double squareCenter_h = (rightBound + leftBound)/2;
00338   double squareCenter_v = (upBound + downBound)/2;
00339   double halfSide = max((rightBound - leftBound)/2,(upBound - downBound)/2);
00340 
00341   leftBound = squareCenter_h - halfSide;
00342   rightBound = squareCenter_h + halfSide;
00343   downBound = squareCenter_v - halfSide;
00344   upBound =squareCenter_v + halfSide;
00345 
00346   //we plot a big rectangle which contains the whole track:
00347   fb << leftBound
00348      << " " << downBound
00349      << " " << leftBound
00350      << " " << upBound
00351      << endl;
00352   fb << leftBound
00353      << " " << upBound
00354      << " " << rightBound
00355      << " " << upBound
00356      << endl;
00357   fb << rightBound
00358      << " " << upBound
00359      << " " << rightBound
00360      << " " << downBound
00361      << endl;
00362   fb << rightBound
00363      << " " << downBound
00364      << " " << leftBound
00365      << " " << downBound
00366      << endl;
00367   fb << leftBound
00368      << " " << downBound
00369      << " " << leftBound
00370      << " " << downBound
00371      << endl << endl;
00372 
00373   fb << endl;
00374   //After 3 endl, new index in gnuplot.
00375 
00376   for(int i=0; i < stepF.size-1 ; i++)
00377     {
00378       fb << -stepF.rightfootYtraj[i]
00379          << " " << stepF.rightfootXtraj[i]
00380          << " " << -stepF.rightfootYtraj[i+1]
00381          << " " << stepF.rightfootXtraj[i+1]
00382          << endl;
00383       fb << -stepF.rightfootYtraj[i+1]
00384          << " " << stepF.rightfootXtraj[i+1]
00385          << " " << -stepF.rightfootYtraj[i+1]
00386          << " " << stepF.rightfootXtraj[i+1]
00387          << endl << endl;
00388     }
00389   fb << endl;
00390   //After 3 endl, new index in gnuplot.
00391 
00392   for(int i=0; i < stepF.size-1 ; i++)
00393     {
00394       fb << -stepF.leftfootYtraj[i]
00395          << " " << stepF.leftfootXtraj[i]
00396          << " " << -stepF.leftfootYtraj[i+1]
00397          << " " << stepF.leftfootXtraj[i+1]
00398          << endl;
00399       fb << -stepF.leftfootYtraj[i+1]
00400          << " " << stepF.leftfootXtraj[i+1]
00401          << " " << -stepF.leftfootYtraj[i+1]
00402          << " " << stepF.leftfootXtraj[i+1]
00403          << endl << endl;
00404     }
00405   fb << endl;
00406   //After 3 endl, new index in gnuplot.
00407 
00408   for(int i=0; i < stepF.size-1 ; i++)
00409     {
00410       fb << -stepF.comTrajY[i]
00411          << " " << stepF.comTrajX[i]
00412          << " " << -stepF.comTrajY[i+1]
00413          << " " << stepF.comTrajX[i+1]
00414          << endl;
00415       fb << -stepF.comTrajY[i+1]
00416          << " " << stepF.comTrajX[i+1]
00417          << " " << -stepF.comTrajY[i+1]
00418          << " " << stepF.comTrajX[i+1]
00419          << endl << endl;
00420     }
00421   fb << endl;
00422   //After 3 endl, new index in gnuplot.
00423 
00424   for(int i=0; i < stepF.size-1 ; i++)
00425     {
00426       fb << -stepF.zmpTrajY[i]
00427          << " " << stepF.zmpTrajX[i]
00428          << " " << -stepF.zmpTrajY[i+1]
00429          << " " << stepF.zmpTrajX[i+1]
00430          << endl;
00431       fb << -stepF.zmpTrajY[i+1]
00432          << " " << stepF.zmpTrajX[i+1]
00433          << " " << -stepF.zmpTrajY[i+1]
00434          << " " << stepF.zmpTrajX[i+1]
00435          << endl << endl;
00436     }
00437   fb << endl;
00438 
00439   ofstream fb_com("com.dat");
00440   ofstream fb_zmp("zmp.dat");
00441   ofstream fb_la("left-ankle.dat");
00442   ofstream fb_ra("right-ankle.dat");
00443 
00444   for(int i=0; i < stepF.size-1 ; i++)
00445     {
00446       fb_com << stepF.comTrajX[i]
00447              << " " << stepF.comTrajY[i] << endl;
00448 
00449       fb_zmp << stepF.zmpTrajX[i]
00450              << " " << stepF.zmpTrajY[i] << endl;
00451 
00452       fb_la << stepF.leftfootXtraj[i]
00453             << " " << stepF.leftfootYtraj[i]
00454             << " " << stepF.leftfootHeight[i]
00455             << " " << stepF.leftfootOrient[i] << endl;
00456 
00457       fb_ra << stepF.rightfootXtraj[i]
00458             << " " << stepF.rightfootYtraj[i]
00459             << " " << stepF.rightfootHeight[i]
00460             << " " << stepF.rightfootOrient[i] << endl;
00461     }
00462 }
00463 
00464 void CnewPGstepStudy::drawSeqSlidedHalfStepFeatures(ofstream & fb, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable, double coefFeet)
00465 {
00466 
00467   StepFeatures stepF;
00468   produceSeqSlidedHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00469 
00470   double downBound, upBound, leftBound, rightBound;
00471 
00472   double centre_x;
00473   double centre_y;
00474   double abs_orientation;
00475 
00476   for(int i=0; i < (int) (vect_input.size()-6)/7+2 ; i++)
00477     {
00478 
00479       double abs_orientationRAD;
00480 
00481       if(i==0) {
00482         centre_x = vect_input[0];
00483         centre_y = vect_input[1];
00484         abs_orientation = vect_input[2] * PI/180;
00485 
00486         leftBound = -centre_y;
00487         rightBound = -centre_y;
00488         upBound = centre_x;
00489         downBound = centre_x;
00490       }
00491       else if(i==1) {
00492         centre_x = vect_input[3];
00493         centre_y = vect_input[4];
00494         abs_orientationRAD = vect_input[5] * PI/180;
00495       }
00496       else if(i==2) {
00497         centre_x = vect_input[0];
00498         centre_y = vect_input[1];
00499         abs_orientation = vect_input[2];
00500       }
00501 
00502       if(i>=2){
00503 
00504         abs_orientationRAD = abs_orientation * PI/180;
00505 
00506         centre_x = centre_x + cos(abs_orientationRAD)*vect_input[7*i-4]-sin(abs_orientationRAD)*vect_input[7*i-3];
00507         centre_y = centre_y + sin(abs_orientationRAD)*vect_input[7*i-4]+cos(abs_orientationRAD)*vect_input[7*i-3];
00508         abs_orientation = abs_orientation + vect_input[7*i-2];
00509 
00510         abs_orientationRAD = abs_orientation * PI/180;
00511 
00512       }
00513 
00514       leftBound = min(leftBound,-centre_y-0.24*coefFeet);
00515       rightBound = max(rightBound,-centre_y+0.24*coefFeet);
00516       downBound = min(downBound,centre_x-0.24*coefFeet);
00517       upBound = max(upBound,centre_x+0.24*coefFeet);
00518 
00519       vector<double> cosinuss (4, 0);
00520       vector<double> sinuss (4, 0);
00521       vector<double> x (4, 0);
00522       vector<double> y (4, 0);
00523 
00524       cosinuss[0] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*0.065;
00525       sinuss[0] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*0.115;
00526 
00527       cosinuss[1] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*0.065;
00528       sinuss[1] = cos(abs_orientationRAD)*0.065 + sin(abs_orientationRAD)*(-0.115);
00529 
00530       cosinuss[2] = cos(abs_orientationRAD)*(-0.115) - sin(abs_orientationRAD)*(-0.065);
00531       sinuss[2] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*(-0.115);
00532 
00533       cosinuss[3] = cos(abs_orientationRAD)*0.115 - sin(abs_orientationRAD)*(-0.065);
00534       sinuss[3] = cos(abs_orientationRAD)*(-0.065) + sin(abs_orientationRAD)*0.115;
00535 
00536       for(int j = 0; j<4; j++)
00537         {
00538           x[j] = centre_x + cosinuss[j]*coefFeet;
00539           y[j] = centre_y + sinuss[j]*coefFeet;
00540         }
00541 
00542       for(int j = 0; j<4; j++)
00543         {
00544           fb << -y[j]
00545              << " " << x[j]
00546              << " " << -y[(j+1) % 4] + y[j]
00547              << " " << x[(j+1) % 4] - x[j]
00548              << endl;
00549         }
00550       fb << -y[0]
00551          << " " << +x[0]
00552          << " " << -y[0]
00553          << " " << +x[0]
00554          << endl << endl;
00555     }
00556 
00557   double squareCenter_h = (rightBound + leftBound)/2;
00558   double squareCenter_v = (upBound + downBound)/2;
00559   double halfSide = max((rightBound - leftBound)/2,(upBound - downBound)/2);
00560 
00561   leftBound = squareCenter_h - halfSide;
00562   rightBound = squareCenter_h + halfSide;
00563   downBound = squareCenter_v - halfSide;
00564   upBound =squareCenter_v + halfSide;
00565 
00566   //we plot a big rectangle which contains the whole track:
00567   fb << leftBound
00568      << " " << downBound
00569      << " " << leftBound
00570      << " " << upBound
00571      << endl;
00572   fb << leftBound
00573      << " " << upBound
00574      << " " << rightBound
00575      << " " << upBound
00576      << endl;
00577   fb << rightBound
00578      << " " << upBound
00579      << " " << rightBound
00580      << " " << downBound
00581      << endl;
00582   fb << rightBound
00583      << " " << downBound
00584      << " " << leftBound
00585      << " " << downBound
00586      << endl;
00587   fb << leftBound
00588      << " " << downBound
00589      << " " << leftBound
00590      << " " << downBound
00591      << endl << endl;
00592 
00593   fb << endl;
00594   //After 3 endl, new index in gnuplot.
00595 
00596   for(int i=0; i < stepF.size-1 ; i++)
00597     {
00598       fb << -stepF.rightfootYtraj[i]
00599          << " " << stepF.rightfootXtraj[i]
00600          << " " << -stepF.rightfootYtraj[i+1]
00601          << " " << stepF.rightfootXtraj[i+1]
00602          << endl;
00603       fb << -stepF.rightfootYtraj[i+1]
00604          << " " << stepF.rightfootXtraj[i+1]
00605          << " " << -stepF.rightfootYtraj[i+1]
00606          << " " << stepF.rightfootXtraj[i+1]
00607          << endl << endl;
00608     }
00609   fb << endl;
00610   //After 3 endl, new index in gnuplot.
00611 
00612   for(int i=0; i < stepF.size-1 ; i++)
00613     {
00614       fb << -stepF.leftfootYtraj[i]
00615          << " " << stepF.leftfootXtraj[i]
00616          << " " << -stepF.leftfootYtraj[i+1]
00617          << " " << stepF.leftfootXtraj[i+1]
00618          << endl;
00619       fb << -stepF.leftfootYtraj[i+1]
00620          << " " << stepF.leftfootXtraj[i+1]
00621          << " " << -stepF.leftfootYtraj[i+1]
00622          << " " << stepF.leftfootXtraj[i+1]
00623          << endl << endl;
00624     }
00625   fb << endl;
00626   //After 3 endl, new index in gnuplot.
00627 
00628   for(int i=0; i < stepF.size-1 ; i++)
00629     {
00630       fb << -stepF.comTrajY[i]
00631          << " " << stepF.comTrajX[i]
00632          << " " << -stepF.comTrajY[i+1]
00633          << " " << stepF.comTrajX[i+1]
00634          << endl;
00635       fb << -stepF.comTrajY[i+1]
00636          << " " << stepF.comTrajX[i+1]
00637          << " " << -stepF.comTrajY[i+1]
00638          << " " << stepF.comTrajX[i+1]
00639          << endl << endl;
00640     }
00641   fb << endl;
00642   //After 3 endl, new index in gnuplot.
00643 
00644   for(int i=0; i < stepF.size-1 ; i++)
00645     {
00646       fb << -stepF.zmpTrajY[i]
00647          << " " << stepF.zmpTrajX[i]
00648          << " " << -stepF.zmpTrajY[i+1]
00649          << " " << stepF.zmpTrajX[i+1]
00650          << endl;
00651       fb << -stepF.zmpTrajY[i+1]
00652          << " " << stepF.zmpTrajX[i+1]
00653          << " " << -stepF.zmpTrajY[i+1]
00654          << " " << stepF.zmpTrajX[i+1]
00655          << endl << endl;
00656     }
00657   fb << endl;
00658 
00659   ofstream fb_com("com.dat");
00660   ofstream fb_zmp("zmp.dat");
00661   ofstream fb_la("left-ankle.dat");
00662   ofstream fb_ra("right-ankle.dat");
00663 
00664   for(int i=0; i < stepF.size-1 ; i++)
00665     {
00666       fb_com << stepF.comTrajX[i]
00667              << " " << stepF.comTrajY[i] << endl;
00668 
00669       fb_zmp << stepF.zmpTrajX[i]
00670              << " " << stepF.zmpTrajY[i] << endl;
00671 
00672       fb_la << stepF.leftfootXtraj[i]
00673             << " " << stepF.leftfootYtraj[i]
00674             << " " << stepF.leftfootHeight[i]
00675             << " " << stepF.leftfootOrient[i] << endl;
00676 
00677       fb_ra << stepF.rightfootXtraj[i]
00678             << " " << stepF.rightfootYtraj[i]
00679             << " " << stepF.rightfootHeight[i]
00680             << " " << stepF.rightfootOrient[i] << endl;
00681     }
00682 }
00683 
00684 void CnewPGstepStudy::plotOneDimensionCOMZMPSeqStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, double t4, double t5, vector<double> vect_input, char leftOrRightFootStable) {
00685 
00686   StepFeatures stepF;
00687   produceSeqStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, t4, t5, vect_input, leftOrRightFootStable);
00688 
00689   if(whichDimension=='x') {
00690 
00691     for(int i=0; i < stepF.size-1 ; i++)
00692       {
00693         fb << (double) i*incrTime << "  " << stepF.comTrajX[i] << endl;
00694       }
00695     fb << endl << endl;
00696     //After 3 endl, new index in gnuplot.
00697 
00698     for(int i=0; i < stepF.size-1 ; i++)
00699       {
00700         fb << (double) i*incrTime << "  " << stepF.zmpTrajX[i] << endl;
00701       }
00702     fb << endl << endl;
00703     //After 3 endl, new index in gnuplot.
00704 
00705   }
00706   else if(whichDimension=='y') {
00707 
00708     for(int i=0; i < stepF.size-1 ; i++)
00709       {
00710         fb << (double) i*incrTime << "  " << stepF.comTrajY[i] << endl;
00711       }
00712     fb << endl << endl;
00713     //After 3 endl, new index in gnuplot.
00714 
00715     for(int i=0; i < stepF.size-1 ; i++)
00716       {
00717         fb << (double) i*incrTime << "  " << stepF.zmpTrajY[i] << endl;
00718       }
00719     fb << endl << endl;
00720     //After 3 endl, new index in gnuplot.
00721 
00722   }
00723 }
00724 
00725 void CnewPGstepStudy::plotFootHeightSeqStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, double t4, double t5, vector<double> vect_input, char leftOrRightFootStable) {
00726 
00727   StepFeatures stepF;
00728   produceSeqStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, t4, t5, vect_input, leftOrRightFootStable);
00729 
00730   if(whichDimension=='L') {
00731 
00732     for(int i=0; i < stepF.size-1 ; i++)
00733       {
00734         fb << (double) i*incrTime << "  " << stepF.leftfootHeight[i] << endl;
00735       }
00736     fb << endl << endl;
00737 
00738   }
00739   else if(whichDimension=='R') {
00740 
00741     for(int i=0; i < stepF.size-1 ; i++)
00742       {
00743         fb << (double) i*incrTime << "  " << stepF.rightfootHeight[i] << endl;
00744       }
00745     fb << endl << endl;
00746 
00747   }
00748 }
00749 
00750 void CnewPGstepStudy::plotOneDimensionCOMZMPSeqHalfStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable){
00751 
00752   StepFeatures stepF;
00753   produceSeqHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00754 
00755   if(whichDimension=='x') {
00756 
00757     for(int i=0; i < stepF.size-1 ; i++)
00758       {
00759         fb << (double) i*incrTime << "  " << stepF.comTrajX[i] << endl;
00760       }
00761     fb << endl << endl;
00762     //After 3 endl, new index in gnuplot.
00763 
00764     for(int i=0; i < stepF.size-1 ; i++)
00765       {
00766         fb << (double) i*incrTime << "  " << stepF.zmpTrajX[i] << endl;
00767       }
00768     fb << endl << endl;
00769     //After 3 endl, new index in gnuplot.
00770 
00771   }
00772   else if(whichDimension=='y') {
00773 
00774     for(int i=0; i < stepF.size-1 ; i++)
00775       {
00776         fb << (double) i*incrTime << "  " << stepF.comTrajY[i] << endl;
00777       }
00778     fb << endl << endl;
00779     //After 3 endl, new index in gnuplot.
00780 
00781     for(int i=0; i < stepF.size-1 ; i++)
00782       {
00783         fb << (double) i*incrTime << "  " << stepF.zmpTrajY[i] << endl;
00784       }
00785     fb << endl << endl;
00786     //After 3 endl, new index in gnuplot.
00787 
00788   }
00789 }
00790 
00791 void CnewPGstepStudy::plotFootHeightSeqHalfStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable){
00792 
00793   StepFeatures stepF;
00794   produceSeqHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00795 
00796   if(whichDimension=='L') {
00797 
00798     for(int i=0; i < stepF.size-1 ; i++)
00799       {
00800         fb << (double) i*incrTime << "  " << stepF.leftfootHeight[i] << endl;
00801       }
00802     fb << endl << endl;
00803 
00804   }
00805   else if(whichDimension=='R') {
00806 
00807     for(int i=0; i < stepF.size-1 ; i++)
00808       {
00809         fb << (double) i*incrTime << "  " << stepF.rightfootHeight[i] << endl;
00810       }
00811     fb << endl << endl;
00812 
00813   }
00814 }
00815 
00816 void CnewPGstepStudy::plotOneDimensionCOMZMPSeqSlidedHalfStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable){
00817 
00818   StepFeatures stepF;
00819   produceSeqSlidedHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00820 
00821   if(whichDimension=='x') {
00822 
00823     for(int i=0; i < stepF.size-1 ; i++)
00824       {
00825         fb << (double) i*incrTime << "  " << stepF.comTrajX[i] << endl;
00826       }
00827     fb << endl << endl;
00828     //After 3 endl, new index in gnuplot.
00829 
00830     for(int i=0; i < stepF.size-1 ; i++)
00831       {
00832         fb << (double) i*incrTime << "  " << stepF.zmpTrajX[i] << endl;
00833       }
00834     fb << endl << endl;
00835     //After 3 endl, new index in gnuplot.
00836 
00837   }
00838   else if(whichDimension=='y') {
00839 
00840     for(int i=0; i < stepF.size-1 ; i++)
00841       {
00842         fb << (double) i*incrTime << "  " << stepF.comTrajY[i] << endl;
00843       }
00844     fb << endl << endl;
00845     //After 3 endl, new index in gnuplot.
00846 
00847     for(int i=0; i < stepF.size-1 ; i++)
00848       {
00849         fb << (double) i*incrTime << "  " << stepF.zmpTrajY[i] << endl;
00850       }
00851     fb << endl << endl;
00852     //After 3 endl, new index in gnuplot.
00853 
00854   }
00855 }
00856 
00857 void CnewPGstepStudy::plotFootHeightSeqSlidedHalfStep(ofstream & fb, char whichDimension, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vect_input, char leftOrRightFootStable){
00858 
00859   StepFeatures stepF;
00860   produceSeqSlidedHalfStepFeatures(stepF, incrTime, zc, g, t1, t2, t3, vect_input, leftOrRightFootStable);
00861 
00862   if(whichDimension=='L') {
00863 
00864     for(int i=0; i < stepF.size-1 ; i++)
00865       {
00866         fb << (double) i*incrTime << "  " << stepF.leftfootHeight[i] << endl;
00867       }
00868     fb << endl << endl;
00869 
00870   }
00871   else if(whichDimension=='R') {
00872 
00873     for(int i=0; i < stepF.size-1 ; i++)
00874       {
00875         fb << (double) i*incrTime << "  " << stepF.rightfootHeight[i] << endl;
00876       }
00877     fb << endl << endl;
00878 
00879   }
00880 }
00881 
00882 
00883 
00884 
00885 double w (double t, double g, double zc, double delta0, double deltaX, double t1, double t2, double V, double W)
00886 {
00887 
00888   return(delta0+(V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc/pow(t2-t1,2.0)/g)*cosh(sqrt(g/zc)*(t-t1))+(V*sinh(sqrt(g/zc)*t1)*sqrt(g/zc
00889                                                                                                                                                  )+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*sinh(
00890                                                                                                                                                                                                                           sqrt(g/zc)*(t-t1))/sqrt(g/zc)-2.0*deltaX*pow(t-t1,3.0)/pow(t2-t1,3.0)+3.0*
00891          deltaX*pow(t-t1,2.0)/pow(t2-t1,2.0)-12.0*deltaX*zc*(t-t1)/pow(t2-t1,3.0
00892                                                                        )/g+6.0*deltaX*zc/pow(t2-t1,2.0)/g);
00893 
00894 };
00895 
00896 double w2 (double t, double g, double zc, double deltaX2, double t2, double t3, double t4, double K2, double V2, double W2)
00897 {
00898 
00899   return(K2+(V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*
00900              deltaX2*zc/pow(t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t-t3))+(V2*sinh(sqrt(g/zc)*(
00901                                                                                        t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2*zc/
00902                                                                    pow(t4-t3,3.0)/g)*sinh(sqrt(g/zc)*(t-t3))/sqrt(g/zc)-2.0*deltaX2*pow(t-t3,
00903                                                                                                                                         3.0)/pow(t4-t3,3.0)+3.0*deltaX2*pow(t-t3,2.0)/pow(t4-t3,2.0)-12.0*deltaX2
00904          *zc*(t-t3)/pow(t4-t3,3.0)/g+6.0*deltaX2*zc/pow(t4-t3,2.0)/g);
00905 
00906 };
00907 
00908 double u (double t, double g, double zc, double t2, double K2, double V2, double W2)
00909 {
00910 
00911   return(V2*cosh(sqrt(g/zc)*(t-t2))+W2*sinh(sqrt(g/zc)*(t-t2))+K2);
00912 
00913 };
00914 
00915 double u2 (double t, double g, double zc, double t4, double K3, double V3, double W3)
00916 {
00917 
00918   return(V3*cosh(sqrt(g/zc)*(t-t4))+W3*sinh(sqrt(g/zc)*(t-t4))+K3);
00919 
00920 };
00921 
00922 double hZMP (double t, double g, double zc, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double V, double W, double K2, double V2, double W2, double K3, double V3, double W3)
00923 {
00924 
00925   if(t <= t1)
00926     {
00927       return delta0;
00928     }
00929   else if(t <= t2)
00930     {
00931       return (delta0*t1*t1*t1-delta0*t2*t2*t2+2.0*deltaX*t*t*t+deltaX*t1*t1*t1-3.0*deltaX*t*t*t1-3.0*deltaX*t*t*t2+6.0*deltaX*t*t1*t2
00932               -3.0*delta0*t1*t1*t2+3.0*delta0*t1*t2*t2-3.0*deltaX*t1*t1*t2)/pow(t1-
00933                                                                                 t2,3.0);
00934     }
00935   else if(t <= t3)
00936     {
00937       return K2;
00938     }
00939   else if(t <= t4)
00940     {
00941       return (-K2*t4*t4*t4+K2*t3*t3*t3+2.0*deltaX2*t*t*t+deltaX2*t3*t3*t3
00942               -3.0*deltaX2*t*t*t3-3.0*deltaX2*t*t*t4+6.0*deltaX2*t*t3*t4-3.0*
00943               deltaX2*t4*t3*t3+3.0*K2*t4*t4*t3-3.0*K2*t4*t3*t3)/pow(-t4+t3,3.0);
00944     }
00945   else
00946     {
00947       return K3;
00948     }
00949 
00950 };
00951 
00952 double h (double t, double g, double zc, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double V, double W, double K2, double V2, double W2, double K3, double V3, double W3)
00953 {
00954 
00955   if(t <= t1)
00956     {
00957       return V*cosh(sqrt(g/zc)*t)+W*sinh(sqrt(g/zc)*t)+delta0;
00958     }
00959   else if(t <= t2)
00960     {
00961       return w(t, g, zc, delta0, deltaX, t1, t2, V, W);
00962     }
00963   else if(t <= t3)
00964     {
00965       return u(t, g, zc, t2, K2, V2, W2);
00966     }
00967   else if(t <= t4)
00968     {
00969       return w2(t, g, zc, deltaX2, t2, t3, t4, K2, V2, W2);
00970     }
00971   else
00972     {
00973       return u2(t, g, zc, t4, K3, V3, W3);
00974     }
00975 
00976 };
00977 
00978 vector<double> hVinit (double t, double g, double zc, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double t5, double pinit, double vinit)
00979 {
00980 
00981   vector<double> PairToReturn;
00982   double V = pinit-delta0;
00983   double W = vinit/sqrt(g/zc);
00984   double K2 = delta0+(V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0
00985                       *deltaX*zc/pow(t2-t1,2.0)/g)*cosh(sqrt(g/zc)*(t2-t1))+(V*sinh(sqrt(g/zc)*t1
00986                                                                                     )*sqrt(g/zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)
00987                                                                              /g)*sinh(sqrt(g/zc)*(t2-t1))/sqrt(g/zc)+deltaX-6.0*deltaX*zc/pow(t2-t1,2.0)/g-zc/g*((V*
00988                                                                                                                                                                   cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc/pow(t2-t1,2.0)/g)*
00989                                                                                                                                                                  cosh(sqrt(g/zc)*(t2-t1))*g/zc+(V*sinh(sqrt(g/zc)*t1)*sqrt(g/zc)+W*cosh(sqrt(g/
00990                                                                                                                                                                                                                                              zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*sinh(sqrt(g/zc)*(t2-t1)
00991                                                                                                                                                                                                                                                                                                       )*sqrt(g/zc)-6.0*deltaX/pow(t2-t1,2.0));
00992   double V2 = zc/g*((V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc
00993                      /pow(t2-t1,2.0)/g)*cosh(sqrt(g/zc)*(t2-t1))*g/zc+(V*sinh(sqrt(g/zc)*t1)*sqrt(g/
00994                                                                                                   zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*sinh(
00995                                                                                                                                                                              sqrt(g/zc)*(t2-t1))*sqrt(g/zc)-6.0*deltaX/pow(t2-t1,2.0));
00996   double W2 = ((V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc/pow(
00997                                                                               t2-t1,2.0)/g)*sinh(sqrt(g/zc)*(t2-t1))*sqrt(g/zc)+(V*sinh(sqrt(g/zc)*t1)*sqrt(g
00998                                                                                                                                                             /zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*cosh
00999                (sqrt(g/zc)*(t2-t1))-12.0*deltaX*zc/pow(t2-t1,3.0)/g)/sqrt(g/zc);
01000   double K3 = K2+(V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2)
01001                                                       )-6.0*deltaX2*zc/pow(t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))+(V2*sinh(sqrt(g
01002                                                                                                                                 /zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01003                                                                                                                    *zc/pow(t4-t3,3.0)/g)*sinh(sqrt(g/zc)*(t4-t3))/sqrt(g/zc)+deltaX2-6.0*deltaX2*zc/pow(t4-t3,2.0)/g-zc/g*((
01004                                                                                                                                                                                                                             V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*deltaX2*zc/pow(
01005                                                                                                                                                                                                                                                                                                        t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))*g/zc+(V2*sinh(sqrt(g/zc)*(t3-t2))*sqrt(g
01006                                                                                                                                                                                                                                                                                                                                                                                      /zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2*zc/pow(t4-t3,3.0)/
01007                                                                                                                                                                                                                                                                                                                                                     g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)-6.0*deltaX2/pow(t4-t3,2.0));
01008   double V3 = zc/g*((V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*
01009                      deltaX2*zc/pow(t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))*g/zc+(V2*sinh(sqrt(g/
01010                                                                                               zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01011                                                                                  *zc/pow(t4-t3,3.0)/g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)-6.0*deltaX2/pow(
01012                                                                                                                                                            t4-t3,2.0));
01013   double W3 = ((V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*deltaX2*
01014                 zc/pow(t4-t3,2.0)/g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)+(V2*sinh(sqrt(g/
01015                                                                                        zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01016                                                                           *zc/pow(t4-t3,3.0)/g)*cosh(sqrt(g/zc)*(t4-t3))-12.0*deltaX2*zc/pow(t4-t3,
01017                                                                                                                                              3.0)/g)/sqrt(g/zc);
01018   PairToReturn.push_back(h(t, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, V, W, K2, V2, W2, K3, V3, W3));
01019   PairToReturn.push_back(hZMP(t, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, V, W, K2, V2, W2, K3, V3, W3));
01020   return PairToReturn;
01021 };
01022 
01023 double hVinitCOMonly (double t, double g, double zc, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double t5, double pinit, double vinit)
01024 {
01025 
01026   double V = pinit-delta0;
01027   double W = vinit/sqrt(g/zc);
01028   double K2 = delta0+(V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0
01029                       *deltaX*zc/pow(t2-t1,2.0)/g)*cosh(sqrt(g/zc)*(t2-t1))+(V*sinh(sqrt(g/zc)*t1
01030                                                                                     )*sqrt(g/zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)
01031                                                                              /g)*sinh(sqrt(g/zc)*(t2-t1))/sqrt(g/zc)+deltaX-6.0*deltaX*zc/pow(t2-t1,2.0)/g-zc/g*((V*
01032                                                                                                                                                                   cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc/pow(t2-t1,2.0)/g)*
01033                                                                                                                                                                  cosh(sqrt(g/zc)*(t2-t1))*g/zc+(V*sinh(sqrt(g/zc)*t1)*sqrt(g/zc)+W*cosh(sqrt(g/
01034                                                                                                                                                                                                                                              zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*sinh(sqrt(g/zc)*(t2-t1)
01035                                                                                                                                                                                                                                                                                                       )*sqrt(g/zc)-6.0*deltaX/pow(t2-t1,2.0));
01036   double V2 = zc/g*((V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc
01037                      /pow(t2-t1,2.0)/g)*cosh(sqrt(g/zc)*(t2-t1))*g/zc+(V*sinh(sqrt(g/zc)*t1)*sqrt(g/
01038                                                                                                   zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*sinh(
01039                                                                                                                                                                              sqrt(g/zc)*(t2-t1))*sqrt(g/zc)-6.0*deltaX/pow(t2-t1,2.0));
01040   double W2 = ((V*cosh(sqrt(g/zc)*t1)+W*sinh(sqrt(g/zc)*t1)-6.0*deltaX*zc/pow(
01041                                                                               t2-t1,2.0)/g)*sinh(sqrt(g/zc)*(t2-t1))*sqrt(g/zc)+(V*sinh(sqrt(g/zc)*t1)*sqrt(g
01042                                                                                                                                                             /zc)+W*cosh(sqrt(g/zc)*t1)*sqrt(g/zc)+12.0*deltaX*zc/pow(t2-t1,3.0)/g)*cosh
01043                (sqrt(g/zc)*(t2-t1))-12.0*deltaX*zc/pow(t2-t1,3.0)/g)/sqrt(g/zc);
01044   double K3 = K2+(V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2)
01045                                                       )-6.0*deltaX2*zc/pow(t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))+(V2*sinh(sqrt(g
01046                                                                                                                                 /zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01047                                                                                                                    *zc/pow(t4-t3,3.0)/g)*sinh(sqrt(g/zc)*(t4-t3))/sqrt(g/zc)+deltaX2-6.0*deltaX2*zc/pow(t4-t3,2.0)/g-zc/g*((
01048                                                                                                                                                                                                                             V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*deltaX2*zc/pow(
01049                                                                                                                                                                                                                                                                                                        t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))*g/zc+(V2*sinh(sqrt(g/zc)*(t3-t2))*sqrt(g
01050                                                                                                                                                                                                                                                                                                                                                                                      /zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2*zc/pow(t4-t3,3.0)/
01051                                                                                                                                                                                                                                                                                                                                                     g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)-6.0*deltaX2/pow(t4-t3,2.0));
01052   double V3 = zc/g*((V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*
01053                      deltaX2*zc/pow(t4-t3,2.0)/g)*cosh(sqrt(g/zc)*(t4-t3))*g/zc+(V2*sinh(sqrt(g/
01054                                                                                               zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01055                                                                                  *zc/pow(t4-t3,3.0)/g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)-6.0*deltaX2/pow(
01056                                                                                                                                                            t4-t3,2.0));
01057   double W3 = ((V2*cosh(sqrt(g/zc)*(t3-t2))+W2*sinh(sqrt(g/zc)*(t3-t2))-6.0*deltaX2*
01058                 zc/pow(t4-t3,2.0)/g)*sinh(sqrt(g/zc)*(t4-t3))*sqrt(g/zc)+(V2*sinh(sqrt(g/
01059                                                                                        zc)*(t3-t2))*sqrt(g/zc)+W2*cosh(sqrt(g/zc)*(t3-t2))*sqrt(g/zc)+12.0*deltaX2
01060                                                                           *zc/pow(t4-t3,3.0)/g)*cosh(sqrt(g/zc)*(t4-t3))-12.0*deltaX2*zc/pow(t4-t3,
01061                                                                                                                                              3.0)/g)/sqrt(g/zc);
01062   return h(t, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, V, W, K2, V2, W2, K3, V3, W3);
01063 };
01064 
01065 double searchVinit (double g, double zc, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double t5, double pinit)
01066 {
01067 
01068   double vinitBmin = -10.0;
01069 
01070   double vinitBmax = 10.0;
01071 
01072   if (
01073       hVinitCOMonly(t5, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, pinit, vinitBmin) >= delta0 + deltaX + deltaX2
01074       ||
01075       hVinitCOMonly(t5, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, pinit, vinitBmax) <= delta0 + deltaX + deltaX2
01076       ) return -999;
01077 
01078   while (vinitBmax - vinitBmin > 0.00000001)
01079     {
01080 
01081       if (hVinitCOMonly(t5, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, pinit, (vinitBmax + vinitBmin) / 2) > delta0 + deltaX + deltaX2)
01082         {
01083           vinitBmax = (vinitBmax + vinitBmin) / 2;
01084         }
01085       else
01086         {
01087           vinitBmin = (vinitBmax + vinitBmin) / 2;
01088         }
01089 
01090     }
01091 
01092   return (vinitBmax + vinitBmin) / 2;
01093 
01094 }
01095 
01096 
01097 // void CnewPGstepStudy::plotOneDimensionCOMtrajectory(ofstream & fb, double incrTime, double zc, double g, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double t5)
01098 // {
01099 //
01100 //      double vinit = searchVinit(g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, 0);
01101 //
01102 //      for(double i = 0.0 ; i < t5 ; i += incrTime)
01103 //      {
01104 //
01105 //              fb << i << " " << hVinitCOMonly(i, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, 0, vinit) << endl;
01106 //      }
01107 //
01108 // }
01109 
01110 
01111 void CnewPGstepStudy::genCOMZMPtrajectory(vector<double> & outputCOM, vector<double> & outputZMP, double incrTime, double zc, double g, double delta0, double deltaX, double deltaX2, double t1, double t2, double t3, double t4, double t5)
01112 {
01113 
01114   double sensitivityLimit = 0.00001; //because of the instability of the formula.
01115 
01116   outputCOM.clear();
01117   outputZMP.clear();
01118 
01119   double vinit = searchVinit(g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, 0);
01120 
01121   if(abs(deltaX) < sensitivityLimit && abs(deltaX2) < sensitivityLimit) {
01122     for(double i = 0.0 ; i < t5 ; i += incrTime)
01123       {
01124         outputCOM.push_back(delta0);
01125         outputZMP.push_back(delta0);
01126       }
01127   }
01128   else {
01129 
01130     int count = 0;
01131     int countSav = 0;
01132     //double minVal = 99999999;
01133     double valPrev = 99999999;
01134     double valTmp;
01135     for(double i = 0.0 ; i < t5 ; i += incrTime)
01136       {
01137 
01138         //fb << i << " " << hVinit(i, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, vinit) << endl;
01139         vector<double> ComZmp = hVinit(i, g, zc, delta0, deltaX, deltaX2, t1, t2, t3, t4, t5, 0, vinit);
01140 
01141         outputCOM.push_back(ComZmp[0]);
01142         outputZMP.push_back(ComZmp[1]);
01143 
01144         valTmp = abs(ComZmp[0] - delta0 - deltaX - deltaX2);
01145         if(valTmp < valPrev) {
01146           countSav = count;
01147         }
01148         valPrev = valTmp;
01149         count++;
01150       }
01151 
01152     //again, due to the instability of the formula:
01153     if(countSav != outputCOM.size()-1) {
01154       for(unsigned int i = countSav ; i < outputCOM.size() ; i++)
01155         {
01156           outputCOM[i] = (outputCOM[countSav]*(outputCOM.size()-1-i) + (delta0 + deltaX + deltaX2)*(i-countSav))/(outputCOM.size()-1-countSav);
01157         }
01158     }
01159 
01160 
01161 
01162   }
01163 
01164 }
01165 
01166 
01167 void CnewPGstepStudy::genFOOTposition(vector<double> & outputX, vector<double> & outputY, double incrTime, double xinit, double yinit, double xend, double yend, double delay, double t1, double t2, double t3, double t4, double t5, char du)
01168 {
01169 
01170   if(du == '2') {
01171 
01172     outputX.clear();
01173     outputY.clear();
01174 
01175     for(double i = 0.0 ; i < t5 ; i += incrTime)
01176       {
01177 
01178         if(i < t2+delay)
01179           {
01180 
01181             outputX.push_back(xinit);
01182             outputY.push_back(yinit);
01183 
01184           }
01185         else if(i < t3-delay)
01186           {
01187 
01188             outputX.push_back(xinit + (-2/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0)+3/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0))*(xend-xinit));
01189             outputY.push_back(yinit + (-2/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0)+3/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0))*(yend-yinit));
01190 
01191           }
01192         else
01193           {
01194 
01195             outputX.push_back(xend);
01196             outputY.push_back(yend);
01197 
01198           }
01199 
01200       }
01201 
01202   }
01203 
01204   if(du == 'd') {
01205 
01206     outputX.clear();
01207     outputY.clear();
01208 
01209     for(double i = 0.0 ; i < t5 ; i += incrTime)
01210       {
01211 
01212         if(i < t2)
01213           {
01214 
01215             outputX.push_back(xinit);
01216             outputY.push_back(yinit);
01217 
01218           }
01219         else if(i < t3-delay)
01220           {
01221 
01222             outputX.push_back(xinit + (-2/pow(t3-t2-delay,3.0)*pow(i-t2,3.0)+3/pow(t3-t2-delay,2.0)*pow(i-t2,2.0))*(xend-xinit));
01223             outputY.push_back(yinit + (-2/pow(t3-t2-delay,3.0)*pow(i-t2,3.0)+3/pow(t3-t2-delay,2.0)*pow(i-t2,2.0))*(yend-yinit));
01224 
01225           }
01226         else
01227           {
01228 
01229             outputX.push_back(xend);
01230             outputY.push_back(yend);
01231 
01232           }
01233 
01234       }
01235 
01236   }
01237 
01238   if(du == 'u') {
01239 
01240     outputX.clear();
01241     outputY.clear();
01242 
01243     for(double i = 0.0 ; i < t5 ; i += incrTime)
01244       {
01245 
01246         if(i < t2+delay)
01247           {
01248 
01249             outputX.push_back(xinit);
01250             outputY.push_back(yinit);
01251 
01252           }
01253         else if(i < t3)
01254           {
01255 
01256             outputX.push_back(xinit + (-2/pow(t3-t2-delay,3.0)*pow(i-t2-delay,3.0)+3/pow(t3-t2-delay,2.0)*pow(i-t2-delay,2.0))*(xend-xinit));
01257             outputY.push_back(yinit + (-2/pow(t3-t2-delay,3.0)*pow(i-t2-delay,3.0)+3/pow(t3-t2-delay,2.0)*pow(i-t2-delay,2.0))*(yend-yinit));
01258 
01259           }
01260         else
01261           {
01262 
01263             outputX.push_back(xend);
01264             outputY.push_back(yend);
01265 
01266           }
01267 
01268       }
01269 
01270   }
01271 
01272 }
01273 
01274 void CnewPGstepStudy::genFOOTheight(vector<double> & output, double incrTime, double heightMax, double delay, double t1, double t2, double t3, double t4, double t5)
01275 {
01276 
01277   output.clear();
01278 
01279   for(double i = 0.0 ; i < t5 ; i += incrTime)
01280     {
01281 
01282       if(i < t2+delay)
01283         {
01284 
01285           output.push_back(0);
01286 
01287         }
01288       else if(i < t3-delay)
01289         {
01290 
01291           output.push_back( 16*heightMax/pow(t3-t2-2*delay,4.0)*pow(i-t2-delay,4.0)  -  32*heightMax/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0)  +  16*heightMax/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0));
01292 
01293         }
01294       else
01295         {
01296 
01297           output.push_back(0);
01298 
01299         }
01300 
01301     }
01302 
01303 }
01304 
01305 void CnewPGstepStudy::genFOOTdownUPheight(vector<double> & output, double incrTime, double heightMax, double delay, double t1, double t2, double t3)
01306 {
01307 
01308   output.clear();
01309 
01310   for(double i = 0.0 ; i < t3 ; i += incrTime)
01311     {
01312 
01313       if(i < t2+delay)
01314         {
01315 
01316           output.push_back(0);
01317 
01318         }
01319       else if(i < t3-delay)
01320         {
01321 
01322           output.push_back( -2*heightMax/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0) + 3*heightMax/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0));
01323 
01324         }
01325       else
01326         {
01327 
01328           output.push_back(heightMax);
01329 
01330         }
01331 
01332     }
01333 
01334 }
01335 
01336 void CnewPGstepStudy::genFOOTupDOWNheight(vector<double> & output, double incrTime, double heightMax, double delay, double t1, double t2, double t3)
01337 {
01338 
01339   output.clear();
01340 
01341   for(double i = 0.0 ; i < t3 ; i += incrTime)
01342     {
01343       if(i < delay) {
01344         output.push_back(heightMax);
01345       } else if(i < t1-delay)
01346         {
01347 
01348           output.push_back( -2*heightMax/pow(delay-t1+delay,3.0)*pow(i-t1+delay,3.0)  +  3*heightMax/pow(delay-t1+delay,2.0)*pow(i-t1+delay,2.0));
01349 
01350         }
01351       else
01352         {
01353 
01354           output.push_back(0);
01355 
01356         }
01357 
01358     }
01359 
01360 }
01361 
01362 void CnewPGstepStudy::genFOOTorientation(vector<double> & output, double incrTime, double initOrient, double endOrient, double delay, double t1, double t2, double t3, double t4, double t5, char du)
01363 {
01364 
01365   if(du == '2') {
01366 
01367     output.clear();
01368 
01369     for(double i = 0.0 ; i < t5 ; i += incrTime)
01370       {
01371 
01372         if(i < t2+delay)
01373           {
01374 
01375             output.push_back(initOrient);
01376 
01377           }
01378         else if(i < t3-delay)
01379           {
01380 
01381             output.push_back( initOrient + (-2/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0) + 3/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0))*(endOrient - initOrient) );
01382 
01383           }
01384         else
01385           {
01386 
01387             output.push_back(endOrient);
01388 
01389           }
01390 
01391       }
01392 
01393   }
01394 
01395   if(du == 'd') {
01396 
01397     output.clear();
01398 
01399     for(double i = 0.0 ; i < t5 ; i += incrTime)
01400       {
01401 
01402         if(i < t2)
01403           {
01404 
01405             output.push_back(initOrient);
01406 
01407           }
01408         else if(i < t3-delay)
01409           {
01410 
01411             output.push_back( initOrient + (-2/pow(t3-t2-delay,3.0)*pow(i-t2,3.0) + 3/pow(t3-t2-delay,2.0)*pow(i-t2,2.0))*(endOrient - initOrient) );
01412 
01413           }
01414         else
01415           {
01416 
01417             output.push_back(endOrient);
01418 
01419           }
01420 
01421       }
01422 
01423   }
01424 
01425   if(du == 'u') {
01426 
01427     output.clear();
01428 
01429     for(double i = 0.0 ; i < t5 ; i += incrTime)
01430       {
01431 
01432         if(i < t2+delay)
01433           {
01434 
01435             output.push_back(initOrient);
01436 
01437           }
01438         else if(i < t3)
01439           {
01440 
01441             output.push_back( initOrient + (-2/pow(t3-t2-delay,3.0)*pow(i-t2-delay,3.0) + 3/pow(t3-t2-delay,2.0)*pow(i-t2-delay,2.0))*(endOrient - initOrient) );
01442 
01443           }
01444         else
01445           {
01446 
01447             output.push_back(endOrient);
01448 
01449           }
01450 
01451       }
01452 
01453   }
01454 
01455 }
01456 
01457 
01458 void CnewPGstepStudy::genWAISTorientation(vector<double> & output, double incrTime, double initOrient, double endOrient, double delay, double t1, double t2, double t3, double t4, double t5, char du)
01459 {
01460 
01461   if(du == '2') {
01462 
01463     output.clear();
01464 
01465     for(double i = 0.0 ; i < t5 ; i += incrTime)
01466       {
01467 
01468         if(i < t2+delay)
01469           {
01470 
01471             output.push_back(initOrient);
01472 
01473           }
01474         else if(i < t3-delay)
01475           {
01476 
01477             output.push_back( initOrient + (-2/pow(t3-t2-2*delay,3.0)*pow(i-t2-delay,3.0) + 3/pow(t3-t2-2*delay,2.0)*pow(i-t2-delay,2.0))*(endOrient - initOrient) );
01478 
01479           }
01480         else
01481           {
01482 
01483             output.push_back(endOrient);
01484 
01485           }
01486 
01487       }
01488 
01489   }
01490   if(du == 'd') {
01491 
01492     output.clear();
01493 
01494     for(double i = 0.0 ; i < t5 ; i += incrTime)
01495       {
01496 
01497         if(i < t2)
01498           {
01499 
01500             output.push_back(initOrient);
01501 
01502           }
01503         else if(i < t3-delay)
01504           {
01505 
01506             output.push_back( initOrient + (-2/pow(t3-t2-delay,3.0)*pow(i-t2,3.0) + 3/pow(t3-t2-delay,2.0)*pow(i-t2,2.0))*(endOrient - initOrient) );
01507 
01508           }
01509         else
01510           {
01511 
01512             output.push_back(endOrient);
01513 
01514           }
01515 
01516       }
01517 
01518   }
01519   if(du == 'u') {
01520 
01521     output.clear();
01522 
01523     for(double i = 0.0 ; i < t5 ; i += incrTime)
01524       {
01525 
01526         if(i < t2+delay)
01527           {
01528 
01529             output.push_back(initOrient);
01530 
01531           }
01532         else if(i < t3)
01533           {
01534 
01535             output.push_back( initOrient + (-2/pow(t3-t2-delay,3.0)*pow(i-t2-delay,3.0) + 3/pow(t3-t2-delay,2.0)*pow(i-t2-delay,2.0))*(endOrient - initOrient) );
01536 
01537           }
01538         else
01539           {
01540 
01541             output.push_back(endOrient);
01542 
01543           }
01544 
01545       }
01546 
01547   }
01548 
01549 
01550 }
01551 
01552 
01553 void CnewPGstepStudy::addStepFeaturesWithSlide(
01554                                                StepFeatures & stepF1,
01555                                                StepFeatures & stepF2,
01556                                                double negativeSlideTime
01557                                                )
01558 {
01559 
01560   //PHASE 1: modify stepF2 according to the change of origin
01561   double lastwaistX = stepF1.comTrajX[stepF1.size - 1];
01562   double lastwaistY = stepF1.comTrajY[stepF1.size - 1];
01563   double radlastwaistOrient = stepF1.waistOrient[stepF1.size - 1]*PI/180;
01564 
01565   for(unsigned int count = 0 ; count < stepF2.size ; count++) {
01566 
01567     /*  double newcomX = (stepF2.comTrajX[count]+lastwaistX)*cos(radlastwaistOrient)
01568         -(stepF2.comTrajY[count]+lastwaistY)*sin(radlastwaistOrient);
01569         double newcomY = (stepF2.comTrajX[count]+lastwaistX)*sin(radlastwaistOrient)
01570         +(stepF2.comTrajY[count]+lastwaistY)*cos(radlastwaistOrient);
01571         double newzmpX = (stepF2.zmpTrajX[count]+lastwaistX)*cos(radlastwaistOrient)
01572         -(stepF2.zmpTrajY[count]+lastwaistY)*sin(radlastwaistOrient);
01573         double newzmpY = (stepF2.zmpTrajX[count]+lastwaistX)*sin(radlastwaistOrient)
01574         +(stepF2.zmpTrajY[count]+lastwaistY)*cos(radlastwaistOrient);
01575         double newlfX = (stepF2.leftfootXtraj[count]+lastwaistX)*cos(radlastwaistOrient)
01576         -(stepF2.leftfootYtraj[count]+lastwaistY)*sin(radlastwaistOrient);
01577         double newlfY = (stepF2.leftfootXtraj[count]+lastwaistX)*sin(radlastwaistOrient)
01578         +(stepF2.leftfootYtraj[count]+lastwaistY)*cos(radlastwaistOrient);
01579         double newrfX = (stepF2.rightfootXtraj[count]+lastwaistX)*cos(radlastwaistOrient)
01580         -(stepF2.rightfootYtraj[count]+lastwaistY)*sin(radlastwaistOrient);
01581         double newrfY = (stepF2.rightfootXtraj[count]+lastwaistX)*sin(radlastwaistOrient)
01582         +(stepF2.rightfootYtraj[count]+lastwaistY)*cos(radlastwaistOrient);*/
01583 
01584     double newcomX = (stepF2.comTrajX[count])*cos(radlastwaistOrient)
01585       -(stepF2.comTrajY[count])*sin(radlastwaistOrient)+lastwaistX;
01586     double newcomY = (stepF2.comTrajX[count])*sin(radlastwaistOrient)
01587       +(stepF2.comTrajY[count])*cos(radlastwaistOrient)+lastwaistY;
01588     double newzmpX = (stepF2.zmpTrajX[count])*cos(radlastwaistOrient)
01589       -(stepF2.zmpTrajY[count])*sin(radlastwaistOrient)+lastwaistX;
01590     double newzmpY = (stepF2.zmpTrajX[count])*sin(radlastwaistOrient)
01591       +(stepF2.zmpTrajY[count])*cos(radlastwaistOrient)+lastwaistY;
01592     double newlfX = (stepF2.leftfootXtraj[count])*cos(radlastwaistOrient)
01593       -(stepF2.leftfootYtraj[count])*sin(radlastwaistOrient)+lastwaistX;
01594     double newlfY = (stepF2.leftfootXtraj[count])*sin(radlastwaistOrient)
01595       +(stepF2.leftfootYtraj[count])*cos(radlastwaistOrient)+lastwaistY;
01596     double newrfX = (stepF2.rightfootXtraj[count])*cos(radlastwaistOrient)
01597       -(stepF2.rightfootYtraj[count])*sin(radlastwaistOrient)+lastwaistX;
01598     double newrfY = (stepF2.rightfootXtraj[count])*sin(radlastwaistOrient)
01599       +(stepF2.rightfootYtraj[count])*cos(radlastwaistOrient)+lastwaistY;
01600 
01601     stepF2.comTrajX[count] = newcomX;
01602     stepF2.zmpTrajX[count] = newzmpX;
01603 
01604     stepF2.comTrajY[count] = newcomY;
01605     stepF2.zmpTrajY[count] = newzmpY;
01606 
01607     stepF2.leftfootXtraj[count] = newlfX;
01608     stepF2.leftfootYtraj[count] = newlfY;
01609 
01610     stepF2.leftfootOrient[count] += stepF1.waistOrient[stepF1.size - 1];
01611 
01612     stepF2.rightfootXtraj[count] = newrfX;
01613     stepF2.rightfootYtraj[count] = newrfY;
01614 
01615     stepF2.rightfootOrient[count] += stepF1.waistOrient[stepF1.size - 1];
01616 
01617     stepF2.waistOrient[count] += stepF1.waistOrient[stepF1.size - 1];
01618 
01619   }
01620 
01621   int delayInt = (int) (abs(negativeSlideTime)/stepF2.incrTime);
01622 
01623   //PHASE 2: add the new stepF2 to stepF1
01624   for(unsigned int count = 0 ; count < stepF2.size ; count++) {
01625 
01626     if(count < delayInt) {
01627 
01628       stepF1.comTrajX[stepF1.size - delayInt + count] =
01629         (stepF1.comTrajX[stepF1.size - delayInt + count] + stepF2.comTrajX[count])
01630         -stepF1.comTrajX[stepF1.size - 1];
01631       stepF1.zmpTrajX[stepF1.size - delayInt + count] =
01632         (stepF1.zmpTrajX[stepF1.size - delayInt + count] + stepF2.zmpTrajX[count])
01633         -stepF1.zmpTrajX[stepF1.size - 1];
01634 
01635       stepF1.comTrajY[stepF1.size - delayInt + count] =
01636         ( stepF1.comTrajY[stepF1.size - delayInt + count] + stepF2.comTrajY[count])
01637         -stepF1.comTrajY[stepF1.size - 1];
01638       stepF1.zmpTrajY[stepF1.size - delayInt + count] =
01639         ( stepF1.zmpTrajY[stepF1.size - delayInt + count] + stepF2.zmpTrajY[count])
01640         -stepF1.zmpTrajY[stepF1.size - 1];
01641 
01642       stepF1.leftfootXtraj[stepF1.size - delayInt + count] =
01643         ( stepF1.leftfootXtraj[stepF1.size - delayInt + count] + stepF2.leftfootXtraj[count])
01644         -stepF1.leftfootXtraj[stepF1.size - 1];
01645       stepF1.leftfootYtraj[stepF1.size - delayInt + count] =
01646         ( stepF1.leftfootYtraj[stepF1.size - delayInt + count] + stepF2.leftfootYtraj[count])
01647         -stepF1.leftfootYtraj[stepF1.size - 1];
01648 
01649       stepF1.leftfootOrient[stepF1.size - delayInt + count] =
01650         ( stepF1.leftfootOrient[stepF1.size - delayInt + count] + stepF2.leftfootOrient[count])
01651         -stepF1.leftfootOrient[stepF1.size - 1];
01652       stepF1.leftfootHeight[stepF1.size - delayInt + count] =
01653         (  stepF1.leftfootHeight[stepF1.size - delayInt + count] + stepF2.leftfootHeight[count])
01654         -stepF1.leftfootHeight[stepF1.size - 1];
01655 
01656       stepF1.rightfootXtraj[stepF1.size - delayInt + count] =
01657         ( stepF1.rightfootXtraj[stepF1.size - delayInt + count] + stepF2.rightfootXtraj[count])
01658         -stepF1.rightfootXtraj[stepF1.size - 1];
01659       stepF1.rightfootYtraj[stepF1.size - delayInt + count] =
01660         ( stepF1.rightfootYtraj[stepF1.size - delayInt + count] + stepF2.rightfootYtraj[count])
01661         -stepF1.rightfootYtraj[stepF1.size - 1];
01662 
01663       stepF1.rightfootOrient[stepF1.size - delayInt + count] =
01664         ( stepF1.rightfootOrient[stepF1.size - delayInt + count] + stepF2.rightfootOrient[count])
01665         -stepF1.rightfootOrient[stepF1.size - 1];
01666       stepF1.rightfootHeight[stepF1.size - delayInt + count] =
01667         ( stepF1.rightfootHeight[stepF1.size - delayInt + count] + stepF2.rightfootHeight[count])
01668         -stepF1.rightfootHeight[stepF1.size - 1];
01669 
01670       stepF1.waistOrient[stepF1.size - delayInt + count] =
01671         ( stepF1.waistOrient[stepF1.size - delayInt + count] + stepF2.waistOrient[count])
01672         -stepF1.waistOrient[stepF1.size - 1];
01673 
01674     } else {
01675 
01676       stepF1.comTrajX.push_back(stepF2.comTrajX[count]);
01677       stepF1.zmpTrajX.push_back(stepF2.zmpTrajX[count]);
01678 
01679       stepF1.comTrajY.push_back(stepF2.comTrajY[count]);
01680       stepF1.zmpTrajY.push_back(stepF2.zmpTrajY[count]);
01681 
01682       stepF1.leftfootXtraj.push_back(stepF2.leftfootXtraj[count]);
01683       stepF1.leftfootYtraj.push_back(stepF2.leftfootYtraj[count]);
01684 
01685       stepF1.leftfootOrient.push_back(stepF2.leftfootOrient[count]);
01686       stepF1.leftfootHeight.push_back(stepF2.leftfootHeight[count]);
01687 
01688       stepF1.rightfootXtraj.push_back(stepF2.rightfootXtraj[count]);
01689       stepF1.rightfootYtraj.push_back(stepF2.rightfootYtraj[count]);
01690 
01691       stepF1.rightfootOrient.push_back(stepF2.rightfootOrient[count]);
01692       stepF1.rightfootHeight.push_back(stepF2.rightfootHeight[count]);
01693 
01694       stepF1.waistOrient.push_back(stepF2.waistOrient[count]);
01695 
01696     }
01697 
01698   }
01699 
01700   stepF1.size = stepF1.size + stepF2.size - delayInt;
01701 
01702 }
01703 
01704 
01705 void CnewPGstepStudy::produceOneStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, double t4, double t5, vector<double> vectStep_input, char leftOrRightFootStable)
01706 {
01707 
01708   double stepHeight = vectStep_input[6];
01709 
01710   vector<double> comTrajX;
01711   vector<double> zmpTrajX;
01712   genCOMZMPtrajectory(comTrajX, zmpTrajX, incrTime, zc, g, 0, vectStep_input[0], vectStep_input[7]/2, t1, t2, t3, t4, t5);
01713 
01714   vector<double> comTrajY;
01715   vector<double> zmpTrajY;
01716   genCOMZMPtrajectory(comTrajY, zmpTrajY, incrTime, zc, g, 0, vectStep_input[1], vectStep_input[8]/2, t1, t2, t3, t4, t5);
01717 
01718   vector<double> footXtraj;
01719   vector<double> footYtraj;
01720   genFOOTposition(footXtraj, footYtraj, incrTime, vectStep_input[3], vectStep_input[4], vectStep_input[0]+vectStep_input[7], vectStep_input[1]+vectStep_input[8], DELAY_2, t1, t2, t3, t4, t5, '2');
01721 
01722   vector<double> footHeight;
01723   genFOOTheight(footHeight, incrTime, stepHeight, DELAY_1, t1, t2, t3, t4, t5);
01724 
01725   vector<double> footOrient;
01726   genFOOTorientation(footOrient, incrTime, vectStep_input[5], vectStep_input[9], DELAY_2, t1, t2, t3, t4, t5, '2');
01727 
01728   vector<double> stablefootXtraj;
01729   vector<double> stablefootYtraj;
01730   vector<double> stablefootHeight;
01731   vector<double> stablefootOrient;
01732 
01733   int count = -1;
01734 
01735   for(double i = 0.0 ; i < t5 ; i += incrTime)
01736     {
01737       count++;
01738       stablefootXtraj.push_back(vectStep_input[0]);
01739       stablefootYtraj.push_back(vectStep_input[1]);
01740       stablefootHeight.push_back(0);
01741       stablefootOrient.push_back(0);
01742     }
01743 
01744   vector<double> waistOrient;
01745   genWAISTorientation(waistOrient, incrTime, 0, vectStep_input[9], DELAY_1, t1, t2, t3, t4, t5, '2');
01746 
01747 
01748   stepF.comTrajX = comTrajX;
01749   stepF.zmpTrajX = zmpTrajX;
01750   stepF.comTrajY = comTrajY;
01751   stepF.zmpTrajY = zmpTrajY;
01752 
01753   if(leftOrRightFootStable == 'L') {
01754     stepF.leftfootXtraj = stablefootXtraj;
01755     stepF.leftfootYtraj = stablefootYtraj;
01756     stepF.leftfootHeight = stablefootHeight;
01757     stepF.leftfootOrient = stablefootOrient;
01758     stepF.rightfootXtraj = footXtraj;
01759     stepF.rightfootYtraj = footYtraj;
01760     stepF.rightfootHeight = footHeight;
01761     stepF.rightfootOrient = footOrient;
01762   } else {
01763     stepF.leftfootXtraj = footXtraj;
01764     stepF.leftfootYtraj = footYtraj;
01765     stepF.leftfootHeight = footHeight;
01766     stepF.leftfootOrient = footOrient;
01767     stepF.rightfootXtraj = stablefootXtraj;
01768     stepF.rightfootYtraj = stablefootYtraj;
01769     stepF.rightfootHeight = stablefootHeight;
01770     stepF.rightfootOrient = stablefootOrient;
01771   }
01772 
01773   stepF.waistOrient =  waistOrient;
01774   stepF.incrTime = incrTime;
01775   stepF.zc = zc;
01776   stepF.size = waistOrient.size();
01777 
01778 }
01779 
01780 
01781 void CnewPGstepStudy::produceOneUPHalfStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vectUPHalfStep_input, char leftOrRightFootStable)
01782 {
01783 
01784   vector<double> comTrajX;
01785   vector<double> zmpTrajX;
01786   genCOMZMPtrajectory(comTrajX, zmpTrajX, incrTime, zc, g, 0, 0, vectUPHalfStep_input[0], t1/2, t1*3/4, t1, t2, t3);
01787 
01788   vector<double> comTrajY;
01789   vector<double> zmpTrajY;
01790   genCOMZMPtrajectory(comTrajY, zmpTrajY, incrTime, zc, g, 0, 0, vectUPHalfStep_input[1], t1/2, t1*3/4, t1, t2, t3);
01791 
01792   vector<double> footXtraj;
01793   vector<double> footYtraj;
01794   int leftRightCoef = 0;
01795   if(leftOrRightFootStable == 'L') leftRightCoef = -1; else leftRightCoef = 1;
01796   genFOOTposition(footXtraj, footYtraj, incrTime, vectUPHalfStep_input[3], vectUPHalfStep_input[4], vectUPHalfStep_input[0], vectUPHalfStep_input[1]+leftRightCoef*vectUPHalfStep_input[6], DELAY_2, t1, t2, t3, t3, t3, 'u');
01797 
01798   vector<double> footHeight;
01799   genFOOTdownUPheight(footHeight, incrTime, vectUPHalfStep_input[7], DELAY_1, t1, t2, t3);
01800 
01801   vector<double> footOrient;
01802   genFOOTorientation(footOrient, incrTime, vectUPHalfStep_input[5], 0, DELAY_2, t1, t2, t3, t3, t3, 'u');
01803 
01804   vector<double> stablefootXtraj;
01805   vector<double> stablefootYtraj;
01806   vector<double> stablefootHeight;
01807   vector<double> stablefootOrient;
01808 
01809   int count = -1;
01810 
01811   for(double i = 0.0 ; i < t3 ; i += incrTime)
01812     {
01813       count++;
01814       stablefootXtraj.push_back(vectUPHalfStep_input[0]);
01815       stablefootYtraj.push_back(vectUPHalfStep_input[1]);
01816       stablefootHeight.push_back(0);
01817       stablefootOrient.push_back(0);
01818     }
01819 
01820   vector<double> waistOrient;
01821   genWAISTorientation(waistOrient, incrTime, 0, 0, DELAY_1, t1, t2, t3, t3, t3, 'u');
01822 
01823 
01824   stepF.comTrajX = comTrajX;
01825   stepF.zmpTrajX = zmpTrajX;
01826   stepF.comTrajY = comTrajY;
01827   stepF.zmpTrajY = zmpTrajY;
01828 
01829   if(leftOrRightFootStable == 'L') {
01830     stepF.leftfootXtraj = stablefootXtraj;
01831     stepF.leftfootYtraj = stablefootYtraj;
01832     stepF.leftfootHeight = stablefootHeight;
01833     stepF.leftfootOrient = stablefootOrient;
01834     stepF.rightfootXtraj = footXtraj;
01835     stepF.rightfootYtraj = footYtraj;
01836     stepF.rightfootHeight = footHeight;
01837     stepF.rightfootOrient = footOrient;
01838   } else {
01839     stepF.leftfootXtraj = footXtraj;
01840     stepF.leftfootYtraj = footYtraj;
01841     stepF.leftfootHeight = footHeight;
01842     stepF.leftfootOrient = footOrient;
01843     stepF.rightfootXtraj = stablefootXtraj;
01844     stepF.rightfootYtraj = stablefootYtraj;
01845     stepF.rightfootHeight = stablefootHeight;
01846     stepF.rightfootOrient = stablefootOrient;
01847   }
01848 
01849   stepF.waistOrient =  waistOrient;
01850   stepF.incrTime = incrTime;
01851   stepF.zc = zc;
01852   stepF.size = waistOrient.size();
01853 
01854 }
01855 
01856 
01857 void CnewPGstepStudy::produceOneDOWNHalfStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vectDOWNHalfStep_input, char leftOrRightFootStable)
01858 {
01859 
01860   vector<double> comTrajX;
01861   vector<double> zmpTrajX;
01862   genCOMZMPtrajectory(comTrajX, zmpTrajX, incrTime, zc, g, 0, 0, vectDOWNHalfStep_input[2]/2, t1/2, t1*3/4, t1, t2, t3);
01863 
01864   vector<double> comTrajY;
01865   vector<double> zmpTrajY;
01866   genCOMZMPtrajectory(comTrajY, zmpTrajY, incrTime, zc, g, 0, 0, vectDOWNHalfStep_input[3]/2, t1/2, t1*3/4, t1, t2, t3);
01867 
01868   vector<double> footXtraj;
01869   vector<double> footYtraj;
01870   int leftRightCoef = 0;
01871   if(leftOrRightFootStable == 'L') leftRightCoef = -1; else leftRightCoef = 1;
01872   genFOOTposition(footXtraj, footYtraj, incrTime, 0, leftRightCoef*vectDOWNHalfStep_input[0], vectDOWNHalfStep_input[2], vectDOWNHalfStep_input[3], DELAY_2, 0, 0, t1, t2, t3, 'd');
01873 
01874   vector<double> footHeight;
01875   genFOOTupDOWNheight(footHeight, incrTime, vectDOWNHalfStep_input[1], DELAY_1, t1, t2, t3);
01876 
01877   vector<double> footOrient;
01878   genFOOTorientation(footOrient, incrTime, 0, vectDOWNHalfStep_input[4], DELAY_2, 0, 0, t1, t2, t3, 'd');
01879 
01880   vector<double> waistOrient;
01881   genWAISTorientation(waistOrient, incrTime, 0, vectDOWNHalfStep_input[4], DELAY_1, 0, 0, t1, t2, t3, 'd');
01882 
01883   vector<double> stablefootXtraj;
01884   vector<double> stablefootYtraj;
01885   vector<double> stablefootHeight;
01886   vector<double> stablefootOrient;
01887 
01888   for(double i = 0.0 ; i < t3 ; i += incrTime)
01889     {
01890       stablefootXtraj.push_back(0);
01891       stablefootYtraj.push_back(0);
01892       stablefootHeight.push_back(0);
01893       stablefootOrient.push_back(0);
01894     }
01895 
01896   stepF.comTrajX = comTrajX;
01897   stepF.zmpTrajX = zmpTrajX;
01898   stepF.comTrajY = comTrajY;
01899   stepF.zmpTrajY = zmpTrajY;
01900 
01901   if(leftOrRightFootStable == 'L') {
01902     stepF.leftfootXtraj = stablefootXtraj;
01903     stepF.leftfootYtraj = stablefootYtraj;
01904     stepF.leftfootHeight = stablefootHeight;
01905     stepF.leftfootOrient = stablefootOrient;
01906     stepF.rightfootXtraj = footXtraj;
01907     stepF.rightfootYtraj = footYtraj;
01908     stepF.rightfootHeight = footHeight;
01909     stepF.rightfootOrient = footOrient;
01910   } else {
01911     stepF.leftfootXtraj = footXtraj;
01912     stepF.leftfootYtraj = footYtraj;
01913     stepF.leftfootHeight = footHeight;
01914     stepF.leftfootOrient = footOrient;
01915     stepF.rightfootXtraj = stablefootXtraj;
01916     stepF.rightfootYtraj = stablefootYtraj;
01917     stepF.rightfootHeight = stablefootHeight;
01918     stepF.rightfootOrient = stablefootOrient;
01919   }
01920 
01921   stepF.waistOrient =  waistOrient;
01922   stepF.incrTime = incrTime;
01923   stepF.zc = zc;
01924   stepF.size = waistOrient.size();
01925 
01926 }
01927 
01928 
01929 void CnewPGstepStudy::produceSeqStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, double t4, double t5, vector<double> vectSteps_input, char leftOrRightFootStable)
01930 {
01931 
01932   char alternate = leftOrRightFootStable;
01933 
01934   vector<StepFeatures> vectSFeat;
01935 
01936   vector<double> tmpNine;
01937   tmpNine.resize(10);
01938 
01939   tmpNine[7] = (vectSteps_input[0]*2)*cos(-vectSteps_input[5]*PI/180)-(vectSteps_input[1]*2)*sin(-vectSteps_input[5]*PI/180);
01940   tmpNine[8] = (vectSteps_input[0]*2)*sin(-vectSteps_input[5]*PI/180)+(vectSteps_input[1]*2)*cos(-vectSteps_input[5]*PI/180) ;
01941   tmpNine[9] = -vectSteps_input[5];
01942 
01943   for(unsigned int i = 1; i <= (vectSteps_input.size()-6)/4; i++) {
01944 
01945     tmpNine[0] = (tmpNine[7]/2)*cos(-tmpNine[9]*PI/180) - (tmpNine[8]/2)*sin(-tmpNine[9]*PI/180);
01946     tmpNine[1] = (tmpNine[7]/2)*sin(-tmpNine[9]*PI/180) + (tmpNine[8]/2)*cos(-tmpNine[9]*PI/180);
01947     tmpNine[2] = 0;
01948     tmpNine[3] = -tmpNine[0];
01949     tmpNine[4] = -tmpNine[1];
01950     tmpNine[5] = -tmpNine[9];
01951     tmpNine[6] = vectSteps_input[4*i+2];
01952     tmpNine[7] = vectSteps_input[4*i+3];
01953     tmpNine[8] = vectSteps_input[4*i+4];
01954     tmpNine[9] = vectSteps_input[4*i+5];
01955 
01956     vector<vector<double> > tmp_fb;
01957     vector<vector<double> > tmp_fbZMP;
01958 
01959     StepFeatures tmp_step;
01960 
01961     produceOneStepFeatures(tmp_step, incrTime, zc, g, t1, t2, t3, t4, t5, tmpNine, alternate);
01962 
01963     vectSFeat.push_back(tmp_step);
01964 
01965     if(alternate == 'L') alternate = 'R'; else alternate = 'L';
01966 
01967   }
01968 
01969   for(unsigned int i = 1; i < vectSFeat.size(); i++) {
01970     addStepFeaturesWithSlide(vectSFeat[0],vectSFeat[i],0); //no slide
01971   }
01972 
01973   stepF = vectSFeat[0];
01974 
01975 }
01976 
01977 
01978 void CnewPGstepStudy::produceSeqHalfStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vectSteps_input, char leftOrRightFootStable)
01979 {
01980 
01981   char alternate = leftOrRightFootStable;
01982 
01983   vector<StepFeatures> vectSFeat;
01984 
01985   vector<double> tmpEleven;
01986   tmpEleven.resize(11);
01987 
01988   vector<double> tmpPart1;
01989   tmpPart1.resize(8);
01990 
01991   vector<double> tmpPart2;
01992   tmpPart2.resize(5);
01993 
01994   tmpEleven[8] = (vectSteps_input[0]*2)*cos(-vectSteps_input[5]*PI/180)-(vectSteps_input[1]*2)*sin(-vectSteps_input[5]*PI/180);
01995   tmpEleven[9] = (vectSteps_input[0]*2)*sin(-vectSteps_input[5]*PI/180)+(vectSteps_input[1]*2)*cos(-vectSteps_input[5]*PI/180) ;
01996   tmpEleven[10] = -vectSteps_input[5];
01997 
01998   for(unsigned int i = 1; i <= (vectSteps_input.size()-6)/5; i++) {
01999 
02000     tmpEleven[0] = (tmpEleven[8]/2)*cos(-tmpEleven[10]*PI/180) - (tmpEleven[9]/2)*sin(-tmpEleven[10]*PI/180);
02001     tmpEleven[1] = (tmpEleven[8]/2)*sin(-tmpEleven[10]*PI/180) + (tmpEleven[9]/2)*cos(-tmpEleven[10]*PI/180);
02002     tmpEleven[2] = 0;
02003     tmpEleven[3] = -tmpEleven[0];
02004     tmpEleven[4] = -tmpEleven[1];
02005     tmpEleven[5] = -tmpEleven[10];
02006 
02007     tmpEleven[6] = vectSteps_input[5*i+1];
02008     tmpEleven[7] = vectSteps_input[5*i+2];
02009 
02010     tmpEleven[8] = vectSteps_input[5*i+3];
02011     tmpEleven[9] = vectSteps_input[5*i+4];
02012     tmpEleven[10] = vectSteps_input[5*i+5];
02013 
02014     StepFeatures tmp_hstepUp;
02015     StepFeatures tmp_hstepDown;
02016 
02017     tmpPart1[0] = tmpEleven[0];
02018     tmpPart1[1] = tmpEleven[1];
02019     tmpPart1[2] = tmpEleven[2];
02020     tmpPart1[3] = tmpEleven[3];
02021     tmpPart1[4] = tmpEleven[4];
02022     tmpPart1[5] = tmpEleven[5];
02023     tmpPart1[6] = tmpEleven[6];
02024     tmpPart1[7] = tmpEleven[7];
02025 
02026     tmpPart2[0] = tmpEleven[6];
02027     tmpPart2[1] = tmpEleven[7];
02028     tmpPart2[2] = tmpEleven[8];
02029     tmpPart2[3] = tmpEleven[9];
02030     tmpPart2[4] = tmpEleven[10];
02031 
02032     produceOneUPHalfStepFeatures(tmp_hstepUp, incrTime, zc, g, t1, t2, t3, tmpPart1, alternate);
02033 
02034     vectSFeat.push_back(tmp_hstepUp);
02035 
02036     produceOneDOWNHalfStepFeatures(tmp_hstepDown, incrTime, zc, g, t1, t2, t3, tmpPart2, alternate);
02037 
02038     vectSFeat.push_back(tmp_hstepDown);
02039 
02040     if(alternate == 'L') alternate = 'R'; else alternate = 'L';
02041 
02042   }
02043 
02044   for(unsigned int i = 1; i < vectSFeat.size(); i++) {
02045     addStepFeaturesWithSlide(vectSFeat[0],vectSFeat[i],0); //no slide
02046   }
02047 
02048   stepF = vectSFeat[0];
02049 
02050 }
02051 
02052 
02053 void CnewPGstepStudy::produceSeqSlidedHalfStepFeatures(StepFeatures & stepF, double incrTime, double zc, double g, double t1, double t2, double t3, vector<double> vectSteps_input, char leftOrRightFootStable)
02054 {
02055 
02056   char alternate = leftOrRightFootStable;
02057 
02058   vector<StepFeatures> vectSFeat;
02059   vector<double> slideProfile;
02060 
02061   vector<double> tmpEleven;
02062   tmpEleven.resize(11);
02063 
02064   vector<double> tmpPart1;
02065   tmpPart1.resize(8);
02066 
02067   vector<double> tmpPart2;
02068   tmpPart2.resize(5);
02069 
02070   tmpEleven[8] = (vectSteps_input[0]*2)*cos(-vectSteps_input[5]*PI/180)-(vectSteps_input[1]*2)*sin(-vectSteps_input[5]*PI/180);
02071   tmpEleven[9] = (vectSteps_input[0]*2)*sin(-vectSteps_input[5]*PI/180)+(vectSteps_input[1]*2)*cos(-vectSteps_input[5]*PI/180) ;
02072   tmpEleven[10] = -vectSteps_input[5];
02073 
02074   for(unsigned int i = 1; i <= (vectSteps_input.size()-6)/7; i++) {
02075 
02076     tmpEleven[0] = (tmpEleven[8]/2)*cos(-tmpEleven[10]*PI/180) - (tmpEleven[9]/2)*sin(-tmpEleven[10]*PI/180);
02077     tmpEleven[1] = (tmpEleven[8]/2)*sin(-tmpEleven[10]*PI/180) + (tmpEleven[9]/2)*cos(-tmpEleven[10]*PI/180);
02078     tmpEleven[2] = 0;
02079     tmpEleven[3] = -tmpEleven[0];
02080     tmpEleven[4] = -tmpEleven[1];
02081     tmpEleven[5] = -tmpEleven[10];
02082 
02083     slideProfile.push_back(vectSteps_input[7*i-1]);
02084     tmpEleven[6] = vectSteps_input[7*i];
02085     tmpEleven[7] = vectSteps_input[7*i+1];
02086 
02087     slideProfile.push_back(vectSteps_input[7*i+2]);
02088     tmpEleven[8] = vectSteps_input[7*i+3];
02089     tmpEleven[9] = vectSteps_input[7*i+4];
02090     tmpEleven[10] = vectSteps_input[7*i+5];
02091 
02092     StepFeatures tmp_hstepUp;
02093     StepFeatures tmp_hstepDown;
02094 
02095     tmpPart1[0] = tmpEleven[0];
02096     tmpPart1[1] = tmpEleven[1];
02097     tmpPart1[2] = tmpEleven[2];
02098     tmpPart1[3] = tmpEleven[3];
02099     tmpPart1[4] = tmpEleven[4];
02100     tmpPart1[5] = tmpEleven[5];
02101     tmpPart1[6] = tmpEleven[6];
02102     tmpPart1[7] = tmpEleven[7];
02103 
02104     tmpPart2[0] = tmpEleven[6];
02105     tmpPart2[1] = tmpEleven[7];
02106     tmpPart2[2] = tmpEleven[8];
02107     tmpPart2[3] = tmpEleven[9];
02108     tmpPart2[4] = tmpEleven[10];
02109 
02110     produceOneUPHalfStepFeatures(tmp_hstepUp, incrTime, zc, g, t1, t2, t3, tmpPart1, alternate);
02111 
02112     vectSFeat.push_back(tmp_hstepUp);
02113 
02114     produceOneDOWNHalfStepFeatures(tmp_hstepDown, incrTime, zc, g, t1, t2, t3, tmpPart2, alternate);
02115 
02116     vectSFeat.push_back(tmp_hstepDown);
02117 
02118     if(alternate == 'L') alternate = 'R'; else alternate = 'L';
02119 
02120   }
02121 
02122   for(unsigned int i = 1; i < vectSFeat.size(); i++) {
02123     addStepFeaturesWithSlide(vectSFeat[0],vectSFeat[i],slideProfile[i]);
02124   }
02125 
02126   assert(!vectSFeat.empty());
02127   stepF = vectSFeat[0];
02128 
02129 }


halfsteps_pattern_generator
Author(s): Nicolas Perrin, Thomas Moulard/thomas.moulard@gmail.com
autogenerated on Sat Dec 28 2013 17:05:31