00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027
00028 class Grasp;
00029
00031
00055 class LMIOptimizer
00056 {
00057 private:
00059 static double GFO_WEIGHT_FACTOR;
00060
00062 Grasp *mGrasp;
00063
00065 int numWrenches;
00066
00068 double *graspMap;
00069
00071 int nullDim;
00072
00074 double *nullSpace;
00075
00077 double *optmx0;
00078
00080 double *optTorques;
00081
00083 double *Jacobian;
00084
00086 double *minNormSln;
00087
00089 int numDOF;
00090
00092 double *externalTorques;
00093
00095 int L, K, GPkRow, *F_blkszs,*G_blkszs;
00096
00098 double *F, *G, *Z, *W, *c, constOffset;
00099
00101 double gamma, abstol, reltol;
00102
00104 int negativeFlag;
00105
00107 int feasible;
00108
00110 int feasNTiters;
00111
00113 int graspCounter;
00114
00116 double *initz0;
00117
00119 int optmNTiters;
00120
00122 double *optmz0;
00123
00125 double *extendOptmz0;
00126
00128 double *feasZHistory;
00129
00130
00131 double *optmZHistory;
00132
00134 double *extendOptmZHistory;
00135
00137 double *feasXHistory;
00138
00140 double *optmXHistory;
00141
00143 FILE *pRstFile;
00144
00146 void minimalNorm();
00148 void computeNullSpace();
00149
00151 void buildJacobian();
00152
00154 void buildGraspMap();
00155
00157 void lmiFL(double *lmi,int rowInit, int colInit, int totalRow);
00159 void lmiPCWF(double cof, double *lmi,int rowInit, int colInit, int totalRow);
00161 void lmiSFCE(double cof, double cof_t,double *lmi,int rowInit, int colInit,
00162 int totalRow);
00164 void lmiSFCL(double cof, double cof_t,double *lmi,int rowInit, int colInit,
00165 int totalRow);
00167 double *lmiTorqueLimits();
00169 void lmiFL();
00171 void lmiPWCF();
00173 void lmiSFCE();
00175 void lmiSFCL();
00177 double *lmiFrictionCones();
00178
00180 double *weightVec();
00182 void feasibilityAnalysis();
00184 void optm_EffortBarrier();
00186 void computeObjectives();
00188 double *xzHistoryTransfrom(double *zHistory,int numIters);
00189
00190 public:
00191 LMIOptimizer(Grasp *g) : mGrasp(g) {}
00192
00194 int findOptimalGraspForce();
00195
00196 };