21 OPW_IGNORE_WARNINGS_PUSH
22 #define IKFAST_HAS_LIBRARY 27 #define IKFAST_COMPILE_ASSERT(x) extern int __dummy[(int)x] 36 #define IKFAST_STRINGIZE2(s) #s 37 #define IKFAST_STRINGIZE(s) IKFAST_STRINGIZE2(s) 45 #ifndef __PRETTY_FUNCTION__ 46 #define __PRETTY_FUNCTION__ __FUNCDNAME__ 50 #ifndef __PRETTY_FUNCTION__ 51 #define __PRETTY_FUNCTION__ __func__ 54 #define IKFAST_ASSERT(b) { if( !(b) ) { std::stringstream ss; ss << "ikfast exception: " << __FILE__ << ":" << __LINE__ << ": " <<__PRETTY_FUNCTION__ << ": Assertion '" << #b << "' failed"; throw std::runtime_error(ss.str()); } } 59 #define IKFAST_ALIGNED16(x) __declspec(align(16)) x 61 #define IKFAST_ALIGNED16(x) x __attribute((aligned(16))) 64 #define IK2PI ((IkReal)6.28318530717959) 65 #define IKPI ((IkReal)3.14159265358979) 66 #define IKPI_2 ((IkReal)1.57079632679490) 76 void dgetrf_ (
const int* m,
const int* n,
double* a,
const int* lda,
int* ipiv,
int* info);
77 void zgetrf_ (
const int* m,
const int* n, std::complex<double>* a,
const int* lda,
int* ipiv,
int* info);
78 void dgetri_(
const int* n,
const double* a,
const int* lda,
int* ipiv,
double* work,
const int* lwork,
int* info);
79 void dgesv_ (
const int* n,
const int* nrhs,
double* a,
const int* lda,
int* ipiv,
double* b,
const int* ldb,
int* info);
80 void dgetrs_(
const char *trans,
const int *n,
const int *nrhs,
double *a,
const int *lda,
int *ipiv,
double *b,
const int *ldb,
int *info);
81 void dgeev_(
const char *jobvl,
const char *jobvr,
const int *n,
double *a,
const int *lda,
double *wr,
double *wi,
double *vl,
const int *ldvl,
double *vr,
const int *ldvr,
double *work,
const int *lwork,
int *info);
86 #ifdef IKFAST_NAMESPACE 87 namespace IKFAST_NAMESPACE {
90 inline float IKabs(
float f) {
return fabsf(f); }
91 inline double IKabs(
double f) {
return fabs(f); }
93 inline float IKsqr(
float f) {
return f*f; }
94 inline double IKsqr(
double f) {
return f*f; }
96 inline float IKlog(
float f) {
return logf(f); }
97 inline double IKlog(
double f) {
return log(f); }
100 #ifndef IKFAST_SINCOS_THRESH 101 #define IKFAST_SINCOS_THRESH ((IkReal)0.000001) 105 #ifndef IKFAST_ATAN2_MAGTHRESH 106 #define IKFAST_ATAN2_MAGTHRESH ((IkReal)2e-6) 110 #ifndef IKFAST_SOLUTION_THRESH 111 #define IKFAST_SOLUTION_THRESH ((IkReal)1e-6) 117 if( f <= -1 )
return float(-
IKPI_2);
118 else if( f >= 1 )
return float(
IKPI_2);
124 if( f <= -1 )
return -
IKPI_2;
125 else if( f >= 1 )
return IKPI_2;
150 if( f <= -1 )
return float(
IKPI);
151 else if( f >= 1 )
return float(0);
157 if( f <= -1 )
return IKPI;
158 else if( f >= 1 )
return 0;
161 inline float IKsin(
float f) {
return sinf(f); }
163 inline float IKcos(
float f) {
return cosf(f); }
165 inline float IKtan(
float f) {
return tanf(f); }
167 inline float IKsqrt(
float f) {
if( f <= 0.0f )
return 0.0f;
return sqrtf(f); }
168 inline double IKsqrt(
double f) {
if( f <= 0.0 )
return 0.0;
return sqrt(f); }
174 else if( isnan(fx) ) {
177 return atan2f(fy,fx);
184 else if( isnan(fx) ) {
212 IKFAST_API
void ComputeFk(
const IkReal* j, IkReal* eetrans, IkReal* eerot) {
213 IkReal x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49;
226 x12=((IkReal(0.0850000000000000))*(x1));
227 x13=((IkReal(0.135000000000000))*(x7));
228 x14=((IkReal(0.0850000000000000))*(x3));
229 x15=((IkReal(1.00000000000000))*(x7));
230 x16=((IkReal(1.00000000000000))*(x2));
231 x17=((IkReal(0.0850000000000000))*(x5));
232 x18=((IkReal(1.00000000000000))*(x9));
233 x19=((IkReal(1.00000000000000))*(x10));
234 x20=((IkReal(1.00000000000000))*(x0));
235 x21=((IkReal(0.755000000000000))*(x5));
236 x22=((IkReal(1.00000000000000))*(x5));
247 x33=((x27)+(((IkReal(-1.00000000000000))*(x30))));
248 x34=((x30)+(((IkReal(-1.00000000000000))*(x22)*(x4))));
249 x35=((((x22)*(x6)))+(((x15)*(x4))));
253 x39=((((IkReal(-1.00000000000000))*(x0)*(x30)))+(x31));
254 x40=((((IkReal(-1.00000000000000))*(x2)*(x30)))+(x32));
255 x41=((((x15)*(x23)))+(((x20)*(x25))));
256 x42=((IkReal(-1.00000000000000))*(x41));
257 x43=((((x15)*(x26)))+(((x16)*(x25))));
258 x44=((IkReal(-1.00000000000000))*(x43));
259 x45=((((x1)*(x42)))+(((IkReal(-1.00000000000000))*(x16)*(x3))));
260 x46=((((x3)*(x41)))+(((IkReal(-1.00000000000000))*(x1)*(x16))));
261 x47=((((x3)*(x43)))+(((x0)*(x1))));
262 x48=((((x0)*(x3)))+(((x1)*(x44))));
264 eerot[0]=((((x46)*(x8)))+(((x11)*(((x49)+(((x39)*(x9))))))));
265 eerot[1]=((((x8)*(((((IkReal(-1.00000000000000))*(x18)*(x39)))+(((IkReal(-1.00000000000000))*(x19)*(x45)))))))+(((x11)*(x46))));
266 eerot[2]=((((x45)*(x9)))+(((x10)*(((((IkReal(-1.00000000000000))*(x31)))+(((x0)*(x24))))))));
267 IkReal x50=((x0)*(x24));
268 IkReal x51=((IkReal(1.00000000000000))*(x23));
269 eetrans[0]=((((IkReal(0.135000000000000))*(x0)*(x25)))+(((IkReal(0.755000000000000))*(x50)))+(((IkReal(-1.00000000000000))*(x21)*(x51)))+(((x10)*(((((IkReal(0.0850000000000000))*(x50)))+(((IkReal(-1.00000000000000))*(x17)*(x51)))))))+(((x13)*(x23)))+(((IkReal(0.100000000000000))*(x0)))+(((x9)*(((((x12)*(x42)))+(((IkReal(-1.00000000000000))*(x14)*(x2)))))))+(((IkReal(0.705000000000000))*(x23))));
270 eerot[3]=((((x47)*(x8)))+(((x11)*(((((x40)*(x9)))+(((x10)*(x48))))))));
271 eerot[4]=((((x11)*(x47)))+(((x8)*(((((IkReal(-1.00000000000000))*(x18)*(x40)))+(((IkReal(-1.00000000000000))*(x19)*(x48))))))));
272 eerot[5]=((((x48)*(x9)))+(((x10)*(((((IkReal(-1.00000000000000))*(x32)))+(((x2)*(x24))))))));
273 IkReal x52=((x2)*(x24));
274 IkReal x53=((IkReal(1.00000000000000))*(x26));
275 eetrans[1]=((((IkReal(0.755000000000000))*(x52)))+(((x13)*(x26)))+(((x10)*(((((IkReal(0.0850000000000000))*(x52)))+(((IkReal(-1.00000000000000))*(x17)*(x53)))))))+(((x9)*(((((x0)*(x14)))+(((x12)*(x44)))))))+(((IkReal(0.100000000000000))*(x2)))+(((IkReal(-1.00000000000000))*(x21)*(x53)))+(((IkReal(0.705000000000000))*(x26)))+(((IkReal(0.135000000000000))*(x2)*(x25))));
276 eerot[6]=((((x11)*(((((x35)*(x9)))+(x38)))))+(((x37)*(x8))));
277 eerot[7]=((((x11)*(x37)))+(((x8)*(((((IkReal(-1.00000000000000))*(x18)*(x35)))+(((IkReal(-1.00000000000000))*(x19)*(x36))))))));
278 eerot[8]=((((IkReal(-1.00000000000000))*(x10)*(x35)))+(((x28)*(x33))));
279 IkReal x54=((IkReal(1.00000000000000))*(x6));
280 eetrans[2]=((IkReal(0.615000000000000))+(((x10)*(((((IkReal(-0.0850000000000000))*(x29)))+(((IkReal(-1.00000000000000))*(x17)*(x54)))))))+(((x13)*(x6)))+(((x28)*(((((IkReal(-0.0850000000000000))*(x24)))+(((x17)*(x4)))))))+(((IkReal(-1.00000000000000))*(x21)*(x54)))+(((IkReal(0.705000000000000))*(x6)))+(((IkReal(-0.755000000000000))*(x29)))+(((IkReal(-0.135000000000000))*(x27))));
293 IkReal j0,cj0,sj0,htj0,j1,cj1,sj1,htj1,j2,cj2,sj2,htj2,j3,cj3,sj3,htj3,j4,cj4,sj4,htj4,j5,cj5,
sj5,htj5,new_r00,r00,rxp0_0,new_r01,r01,rxp0_1,new_r02,r02,rxp0_2,new_r10,r10,rxp1_0,new_r11,r11,rxp1_1,new_r12,r12,rxp1_2,new_r20,r20,rxp2_0,new_r21,r21,rxp2_1,new_r22,r22,rxp2_2,new_px,px,npx,new_py,py,npy,new_pz,pz,npz,pp;
294 unsigned char _ij0[2], _nj0,_ij1[2], _nj1,_ij2[2], _nj2,_ij3[2], _nj3,_ij4[2], _nj4,_ij5[2],
_nj5;
297 j0=numeric_limits<IkReal>::quiet_NaN(); _ij0[0] = -1; _ij0[1] = -1; _nj0 = -1; j1=numeric_limits<IkReal>::quiet_NaN(); _ij1[0] = -1; _ij1[1] = -1; _nj1 = -1; j2=numeric_limits<IkReal>::quiet_NaN(); _ij2[0] = -1; _ij2[1] = -1; _nj2 = -1; j3=numeric_limits<IkReal>::quiet_NaN(); _ij3[0] = -1; _ij3[1] = -1; _nj3 = -1; j4=numeric_limits<IkReal>::quiet_NaN(); _ij4[0] = -1; _ij4[1] = -1; _nj4 = -1; j5=numeric_limits<IkReal>::quiet_NaN(); _ij5[0] = -1; _ij5[1] = -1; _nj5 = -1;
298 for(
int dummyiter = 0; dummyiter < 1; ++dummyiter) {
309 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
314 new_px=((((IkReal(-0.0850000000000000))*(r02)))+(px));
318 new_py=((((IkReal(-0.0850000000000000))*(r12)))+(py));
322 new_pz=((IkReal(-0.615000000000000))+(((IkReal(-0.0850000000000000))*(r22)))+(pz));
323 r00 = new_r00; r01 = new_r01; r02 = new_r02; r10 = new_r10; r11 = new_r11; r12 = new_r12; r20 = new_r20; r21 = new_r21; r22 = new_r22; px = new_px; py = new_py; pz = new_pz;
324 pp=(((px)*(px))+((pz)*(pz))+((py)*(py)));
325 npx=((((py)*(r10)))+(((pz)*(r20)))+(((px)*(r00))));
326 npy=((((px)*(r01)))+(((pz)*(r21)))+(((py)*(r11))));
327 npz=((((py)*(r12)))+(((pz)*(r22)))+(((px)*(r02))));
328 rxp0_0=((((IkReal(-1.00000000000000))*(py)*(r20)))+(((pz)*(r10))));
329 rxp0_1=((((px)*(r20)))+(((IkReal(-1.00000000000000))*(pz)*(r00))));
330 rxp0_2=((((py)*(r00)))+(((IkReal(-1.00000000000000))*(px)*(r10))));
331 rxp1_0=((((pz)*(r11)))+(((IkReal(-1.00000000000000))*(py)*(r21))));
332 rxp1_1=((((IkReal(-1.00000000000000))*(pz)*(r01)))+(((px)*(r21))));
333 rxp1_2=((((py)*(r01)))+(((IkReal(-1.00000000000000))*(px)*(r11))));
334 rxp2_0=((((IkReal(-1.00000000000000))*(py)*(r22)))+(((pz)*(r12))));
335 rxp2_1=((((px)*(r22)))+(((IkReal(-1.00000000000000))*(pz)*(r02))));
336 rxp2_2=((((py)*(r02)))+(((IkReal(-1.00000000000000))*(px)*(r12))));
338 IkReal j0array[2], cj0array[2], sj0array[2];
339 bool j0valid[2]={
false};
343 IkReal x55=
IKatan2(((IkReal(-1.00000000000000))*(py)), px);
344 j0array[0]=((IkReal(-1.00000000000000))*(x55));
345 sj0array[0]=
IKsin(j0array[0]);
346 cj0array[0]=
IKcos(j0array[0]);
347 j0array[1]=((IkReal(3.14159265358979))+(((IkReal(-1.00000000000000))*(x55))));
348 sj0array[1]=
IKsin(j0array[1]);
349 cj0array[1]=
IKcos(j0array[1]);
350 if( j0array[0] >
IKPI )
354 else if( j0array[0] < -
IKPI )
358 if( j0array[1] >
IKPI )
362 else if( j0array[1] < -
IKPI )
366 for(
int ij0 = 0; ij0 < 2; ++ij0)
372 _ij0[0] = ij0; _ij0[1] = -1;
373 for(
int iij0 = ij0+1; iij0 < 2; ++iij0)
377 j0valid[iij0]=
false; _ij0[1] = iij0;
break;
380 j0 = j0array[ij0]; cj0 = cj0array[ij0]; sj0 = sj0array[ij0];
383 IkReal j2array[2], cj2array[2], sj2array[2];
384 bool j2valid[2]={
false};
386 if( (((IkReal(0.994304644497180))+(((IkReal(0.184939600473773))*(py)*(sj0)))+(((IkReal(0.184939600473773))*(cj0)*(px)))+(((IkReal(-0.924698002368864))*(pp))))) < -1-
IKFAST_SINCOS_THRESH || (((IkReal(0.994304644497180))+(((IkReal(0.184939600473773))*(py)*(sj0)))+(((IkReal(0.184939600473773))*(cj0)*(px)))+(((IkReal(-0.924698002368864))*(pp))))) > 1+
IKFAST_SINCOS_THRESH )
388 IkReal x56=
IKasin(((IkReal(0.994304644497180))+(((IkReal(0.184939600473773))*(py)*(sj0)))+(((IkReal(0.184939600473773))*(cj0)*(px)))+(((IkReal(-0.924698002368864))*(pp)))));
389 j2array[0]=((IkReal(-2.96465459743209))+(((IkReal(-1.00000000000000))*(x56))));
390 sj2array[0]=
IKsin(j2array[0]);
391 cj2array[0]=
IKcos(j2array[0]);
392 j2array[1]=((IkReal(0.176938056157703))+(x56));
393 sj2array[1]=
IKsin(j2array[1]);
394 cj2array[1]=
IKcos(j2array[1]);
395 if( j2array[0] >
IKPI )
399 else if( j2array[0] < -
IKPI )
403 if( j2array[1] >
IKPI )
407 else if( j2array[1] < -
IKPI )
411 for(
int ij2 = 0; ij2 < 2; ++ij2)
417 _ij2[0] = ij2; _ij2[1] = -1;
418 for(
int iij2 = ij2+1; iij2 < 2; ++iij2)
422 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
425 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
430 IkReal x57=((IkReal(0.755000000000000))*(cj2));
431 IkReal x58=((py)*(sj0));
432 IkReal x59=((cj0)*(px));
433 IkReal x60=((IkReal(0.135000000000000))*(sj2));
434 gconst1=
IKsign(((((IkReal(0.705000000000000))*(pz)))+(((IkReal(-1.00000000000000))*(x58)*(x60)))+(((IkReal(0.0755000000000000))*(cj2)))+(((IkReal(-0.755000000000000))*(pz)*(sj2)))+(((IkReal(-1.00000000000000))*(x57)*(x58)))+(((IkReal(-1.00000000000000))*(x59)*(x60)))+(((IkReal(-1.00000000000000))*(x57)*(x59)))+(((IkReal(0.0135000000000000))*(sj2)))+(((IkReal(0.135000000000000))*(cj2)*(pz)))));
435 IkReal x61=((IkReal(10.0000000000000))*(sj2));
436 IkReal x62=((cj0)*(px));
437 IkReal x63=((py)*(sj0));
438 IkReal x64=((IkReal(55.9259259259259))*(cj2));
439 dummyeval[0]=((((IkReal(52.2222222222222))*(pz)))+(((IkReal(-1.00000000000000))*(x62)*(x64)))+(sj2)+(((IkReal(10.0000000000000))*(cj2)*(pz)))+(((IkReal(-1.00000000000000))*(x63)*(x64)))+(((IkReal(-1.00000000000000))*(x61)*(x62)))+(((IkReal(-1.00000000000000))*(x61)*(x63)))+(((IkReal(5.59259259259259))*(cj2)))+(((IkReal(-55.9259259259259))*(pz)*(sj2))));
440 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
445 IkReal x65=((IkReal(0.755000000000000))*(sj2));
446 IkReal x66=((cj0)*(px));
447 IkReal x67=((py)*(sj0));
448 IkReal x68=((IkReal(0.135000000000000))*(cj2));
449 gconst0=
IKsign(((IkReal(0.0705000000000000))+(((x65)*(x66)))+(((IkReal(-0.705000000000000))*(x67)))+(((x65)*(x67)))+(((IkReal(-0.755000000000000))*(cj2)*(pz)))+(((IkReal(-0.705000000000000))*(x66)))+(((IkReal(-1.00000000000000))*(x66)*(x68)))+(((IkReal(-1.00000000000000))*(x67)*(x68)))+(((IkReal(0.0135000000000000))*(cj2)))+(((IkReal(-0.135000000000000))*(pz)*(sj2)))+(((IkReal(-0.0755000000000000))*(sj2)))));
450 IkReal x69=((cj0)*(px));
451 IkReal x70=((IkReal(10.0000000000000))*(cj2));
452 IkReal x71=((IkReal(55.9259259259259))*(sj2));
453 IkReal x72=((py)*(sj0));
454 dummyeval[0]=((IkReal(5.22222222222222))+(((IkReal(-1.00000000000000))*(x70)*(x72)))+(((x71)*(x72)))+(((IkReal(-52.2222222222222))*(x72)))+(((IkReal(-10.0000000000000))*(pz)*(sj2)))+(cj2)+(((IkReal(-52.2222222222222))*(x69)))+(((IkReal(-1.00000000000000))*(x69)*(x70)))+(((IkReal(-5.59259259259259))*(sj2)))+(((IkReal(-55.9259259259259))*(cj2)*(pz)))+(((x69)*(x71))));
455 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
462 IkReal j1array[1], cj1array[1], sj1array[1];
463 bool j1valid[1]={
false};
465 IkReal x73=(sj2)*(sj2);
466 IkReal x74=(cj2)*(cj2);
467 IkReal x75=((cj2)*(sj2));
468 IkReal x76=((IkReal(1.00000000000000))*(pz));
469 if(
IKabs(((gconst0)*(((IkReal(-0.497025000000000))+(((IkReal(-0.190350000000000))*(cj2)))+((pz)*(pz))+(((IkReal(1.06455000000000))*(sj2)))+(((IkReal(0.203850000000000))*(x75)))+(((IkReal(-0.570025000000000))*(x73)))+(((IkReal(-0.0182250000000000))*(x74))))))) <
IKFAST_ATAN2_MAGTHRESH &&
IKabs(((gconst0)*(((((IkReal(0.101925000000000))*(x73)))+(((IkReal(-0.101925000000000))*(x74)))+(((IkReal(0.100000000000000))*(pz)))+(((IkReal(0.551800000000000))*(x75)))+(((IkReal(-1.00000000000000))*(py)*(sj0)*(x76)))+(((IkReal(-0.532275000000000))*(cj2)))+(((IkReal(-0.0951750000000000))*(sj2)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x76))))))) <
IKFAST_ATAN2_MAGTHRESH )
471 j1array[0]=
IKatan2(((gconst0)*(((IkReal(-0.497025000000000))+(((IkReal(-0.190350000000000))*(cj2)))+((pz)*(pz))+(((IkReal(1.06455000000000))*(sj2)))+(((IkReal(0.203850000000000))*(x75)))+(((IkReal(-0.570025000000000))*(x73)))+(((IkReal(-0.0182250000000000))*(x74)))))), ((gconst0)*(((((IkReal(0.101925000000000))*(x73)))+(((IkReal(-0.101925000000000))*(x74)))+(((IkReal(0.100000000000000))*(pz)))+(((IkReal(0.551800000000000))*(x75)))+(((IkReal(-1.00000000000000))*(py)*(sj0)*(x76)))+(((IkReal(-0.532275000000000))*(cj2)))+(((IkReal(-0.0951750000000000))*(sj2)))+(((IkReal(-1.00000000000000))*(cj0)*(px)*(x76)))))));
472 sj1array[0]=
IKsin(j1array[0]);
473 cj1array[0]=
IKcos(j1array[0]);
474 if( j1array[0] >
IKPI )
478 else if( j1array[0] < -
IKPI )
482 for(
int ij1 = 0; ij1 < 1; ++ij1)
488 _ij1[0] = ij1; _ij1[1] = -1;
489 for(
int iij1 = ij1+1; iij1 < 1; ++iij1)
493 j1valid[iij1]=
false; _ij1[1] = iij1;
break;
496 j1 = j1array[ij1]; cj1 = cj1array[ij1]; sj1 = sj1array[ij1];
499 IkReal x77=
IKsin(j1);
500 IkReal x78=
IKcos(j1);
501 IkReal x79=((IkReal(0.135000000000000))*(sj2));
502 IkReal x80=((cj0)*(px));
503 IkReal x81=((IkReal(0.755000000000000))*(sj2));
504 IkReal x82=((py)*(sj0));
505 IkReal x83=((IkReal(0.755000000000000))*(cj2));
506 IkReal x84=((IkReal(0.135000000000000))*(cj2));
507 IkReal x85=((IkReal(0.135000000000000))*(x78));
508 IkReal x86=((IkReal(1.00000000000000))*(x78));
509 IkReal x87=((IkReal(1.41000000000000))*(x77));
510 IkReal x88=((pz)*(x78));
511 evalcond[0]=((IkReal(-0.705000000000000))+(((x77)*(x80)))+(((x77)*(x82)))+(((IkReal(-0.100000000000000))*(x77)))+(((IkReal(-1.00000000000000))*(x84)))+(x88)+(x81));
512 evalcond[1]=((((IkReal(0.100000000000000))*(x78)))+(((IkReal(-1.00000000000000))*(x80)*(x86)))+(x79)+(((IkReal(-1.00000000000000))*(x82)*(x86)))+(x83)+(((pz)*(x77))));
513 evalcond[2]=((((IkReal(-0.705000000000000))*(x78)))+(((IkReal(-1.00000000000000))*(x78)*(x84)))+(((x77)*(x79)))+(pz)+(((x78)*(x81)))+(((x77)*(x83))));
514 evalcond[3]=((IkReal(0.0812250000000000))+(((IkReal(-0.141000000000000))*(x77)))+(((IkReal(-1.00000000000000))*(pp)))+(((x82)*(x87)))+(((IkReal(0.200000000000000))*(x82)))+(((IkReal(1.41000000000000))*(x88)))+(((x80)*(x87)))+(((IkReal(0.200000000000000))*(x80))));
515 evalcond[4]=((IkReal(0.100000000000000))+(((IkReal(-1.00000000000000))*(x82)))+(((x77)*(x84)))+(((IkReal(-1.00000000000000))*(x77)*(x81)))+(((x78)*(x83)))+(((x78)*(x79)))+(((IkReal(0.705000000000000))*(x77)))+(((IkReal(-1.00000000000000))*(x80))));
516 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 )
522 rotationfunction0(solutions);
533 IkReal j1array[1], cj1array[1], sj1array[1];
534 bool j1valid[1]={
false};
536 IkReal x228=(sj2)*(sj2);
537 IkReal x229=(cj2)*(cj2);
538 IkReal x230=((cj2)*(sj2));
539 if(
IKabs(((gconst1)*(((((IkReal(0.551800000000000))*(x230)))+(((IkReal(0.101925000000000))*(x228)))+(((IkReal(-0.100000000000000))*(pz)))+(((IkReal(-0.101925000000000))*(x229)))+(((cj0)*(px)*(pz)))+(((IkReal(-0.532275000000000))*(cj2)))+(((IkReal(-0.0951750000000000))*(sj2)))+(((py)*(pz)*(sj0))))))) <
IKFAST_ATAN2_MAGTHRESH &&
IKabs(((gconst1)*(((((IkReal(-0.0182250000000000))*(x228)))+((pz)*(pz))+(((IkReal(-0.203850000000000))*(x230)))+(((IkReal(-0.570025000000000))*(x229))))))) <
IKFAST_ATAN2_MAGTHRESH )
541 j1array[0]=
IKatan2(((gconst1)*(((((IkReal(0.551800000000000))*(x230)))+(((IkReal(0.101925000000000))*(x228)))+(((IkReal(-0.100000000000000))*(pz)))+(((IkReal(-0.101925000000000))*(x229)))+(((cj0)*(px)*(pz)))+(((IkReal(-0.532275000000000))*(cj2)))+(((IkReal(-0.0951750000000000))*(sj2)))+(((py)*(pz)*(sj0)))))), ((gconst1)*(((((IkReal(-0.0182250000000000))*(x228)))+((pz)*(pz))+(((IkReal(-0.203850000000000))*(x230)))+(((IkReal(-0.570025000000000))*(x229)))))));
542 sj1array[0]=
IKsin(j1array[0]);
543 cj1array[0]=
IKcos(j1array[0]);
544 if( j1array[0] >
IKPI )
548 else if( j1array[0] < -
IKPI )
552 for(
int ij1 = 0; ij1 < 1; ++ij1)
558 _ij1[0] = ij1; _ij1[1] = -1;
559 for(
int iij1 = ij1+1; iij1 < 1; ++iij1)
563 j1valid[iij1]=
false; _ij1[1] = iij1;
break;
566 j1 = j1array[ij1]; cj1 = cj1array[ij1]; sj1 = sj1array[ij1];
569 IkReal x231=
IKsin(j1);
570 IkReal x232=
IKcos(j1);
571 IkReal x233=((IkReal(0.135000000000000))*(sj2));
572 IkReal x234=((cj0)*(px));
573 IkReal x235=((IkReal(0.755000000000000))*(sj2));
574 IkReal x236=((py)*(sj0));
575 IkReal x237=((IkReal(0.755000000000000))*(cj2));
576 IkReal x238=((IkReal(0.135000000000000))*(cj2));
577 IkReal x239=((IkReal(0.135000000000000))*(x232));
578 IkReal x240=((IkReal(1.00000000000000))*(x232));
579 IkReal x241=((IkReal(1.41000000000000))*(x231));
580 IkReal x242=((pz)*(x232));
581 evalcond[0]=((IkReal(-0.705000000000000))+(((IkReal(-1.00000000000000))*(x238)))+(x235)+(((x231)*(x236)))+(x242)+(((IkReal(-0.100000000000000))*(x231)))+(((x231)*(x234))));
582 evalcond[1]=((((IkReal(0.100000000000000))*(x232)))+(((pz)*(x231)))+(x233)+(x237)+(((IkReal(-1.00000000000000))*(x234)*(x240)))+(((IkReal(-1.00000000000000))*(x236)*(x240))));
583 evalcond[2]=((((IkReal(-0.705000000000000))*(x232)))+(((x231)*(x237)))+(((x231)*(x233)))+(pz)+(((x232)*(x235)))+(((IkReal(-1.00000000000000))*(x232)*(x238))));
584 evalcond[3]=((IkReal(0.0812250000000000))+(((x236)*(x241)))+(((IkReal(0.200000000000000))*(x236)))+(((IkReal(0.200000000000000))*(x234)))+(((IkReal(-1.00000000000000))*(pp)))+(((x234)*(x241)))+(((IkReal(1.41000000000000))*(x242)))+(((IkReal(-0.141000000000000))*(x231))));
585 evalcond[4]=((IkReal(0.100000000000000))+(((IkReal(-1.00000000000000))*(x231)*(x235)))+(((IkReal(0.705000000000000))*(x231)))+(((IkReal(-1.00000000000000))*(x236)))+(((x231)*(x238)))+(((x232)*(x233)))+(((x232)*(x237)))+(((IkReal(-1.00000000000000))*(x234))));
586 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 )
592 rotationfunction0(solutions);
607 for(
int rotationiter = 0; rotationiter < 1; ++rotationiter) {
608 IkReal x89=((cj0)*(r00));
609 IkReal x90=((cj0)*(r01));
610 IkReal x91=((sj1)*(sj2));
611 IkReal x92=((IkReal(1.00000000000000))*(sj0));
612 IkReal x93=((r10)*(sj0));
613 IkReal x94=((IkReal(1.00000000000000))*(cj2));
614 IkReal x95=((r12)*(sj0));
615 IkReal x96=((cj0)*(r02));
616 IkReal x97=((r11)*(sj0));
617 IkReal x98=((((IkReal(-1.00000000000000))*(cj1)*(x94)))+(x91));
618 IkReal x99=((((IkReal(-1.00000000000000))*(x91)))+(((cj1)*(cj2))));
619 IkReal x100=((cj0)*(x99));
620 IkReal x101=((((IkReal(-1.00000000000000))*(sj1)*(x94)))+(((IkReal(-1.00000000000000))*(cj1)*(sj2))));
621 IkReal x102=((sj0)*(x101));
622 new_r00=((((r20)*(x98)))+(((x101)*(x89)))+(((x101)*(x93))));
623 new_r01=((((x101)*(x90)))+(((x101)*(x97)))+(((r21)*(x98))));
624 new_r02=((((x101)*(x95)))+(((r22)*(x98)))+(((x101)*(x96))));
625 new_r10=((((IkReal(-1.00000000000000))*(r00)*(x92)))+(((cj0)*(r10))));
626 new_r11=((((IkReal(-1.00000000000000))*(r01)*(x92)))+(((cj0)*(r11))));
627 new_r12=((((IkReal(-1.00000000000000))*(r02)*(x92)))+(((cj0)*(r12))));
628 new_r20=((((x93)*(x99)))+(((x89)*(x99)))+(((r20)*(x101))));
629 new_r21=((((r21)*(x101)))+(((x97)*(x99)))+(((x90)*(x99))));
630 new_r22=((((x96)*(x99)))+(((r22)*(x101)))+(((x95)*(x99))));
632 IkReal j4array[2], cj4array[2], sj4array[2];
633 bool j4valid[2]={
false};
638 j4valid[0] = j4valid[1] =
true;
639 j4array[0] =
IKacos(cj4array[0]);
640 sj4array[0] =
IKsin(j4array[0]);
641 cj4array[1] = cj4array[0];
642 j4array[1] = -j4array[0];
643 sj4array[1] = -sj4array[0];
645 else if( isnan(cj4array[0]) )
649 cj4array[0] = 1; sj4array[0] = 0; j4array[0] = 0;
651 for(
int ij4 = 0; ij4 < 2; ++ij4)
657 _ij4[0] = ij4; _ij4[1] = -1;
658 for(
int iij4 = ij4+1; iij4 < 2; ++iij4)
662 j4valid[iij4]=
false; _ij4[1] = iij4;
break;
665 j4 = j4array[ij4]; cj4 = cj4array[ij4]; sj4 = sj4array[ij4];
672 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
677 gconst2=
IKsign((((new_r12)*(new_r12))+((new_r02)*(new_r02))));
678 dummyeval[0]=(((new_r12)*(new_r12))+((new_r02)*(new_r02)));
679 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
684 gconst3=
IKsign(((((new_r10)*(new_r12)*(sj4)))+(((new_r00)*(new_r02)*(sj4)))));
685 dummyeval[0]=((((new_r10)*(new_r12)*(sj4)))+(((new_r00)*(new_r02)*(sj4))));
686 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
690 IkReal x103=((IkReal(-1.00000000000000))+(new_r22));
691 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(((IkReal(3.14159265358979))+(j4)), IkReal(6.28318530717959))));
698 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 )
701 IkReal j3array[2], cj3array[2], sj3array[2];
702 bool j3valid[2]={
false};
706 IkReal x104=
IKatan2(new_r02, new_r12);
707 j3array[0]=((IkReal(-1.00000000000000))*(x104));
708 sj3array[0]=
IKsin(j3array[0]);
709 cj3array[0]=
IKcos(j3array[0]);
710 j3array[1]=((IkReal(3.14159265358979))+(((IkReal(-1.00000000000000))*(x104))));
711 sj3array[1]=
IKsin(j3array[1]);
712 cj3array[1]=
IKcos(j3array[1]);
713 if( j3array[0] >
IKPI )
717 else if( j3array[0] < -
IKPI )
721 if( j3array[1] >
IKPI )
725 else if( j3array[1] < -
IKPI )
729 for(
int ij3 = 0; ij3 < 2; ++ij3)
735 _ij3[0] = ij3; _ij3[1] = -1;
736 for(
int iij3 = ij3+1; iij3 < 2; ++iij3)
740 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
743 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
746 evalcond[0]=((((new_r12)*(
IKcos(j3))))+(((IkReal(-1.00000000000000))*(new_r02)*(
IKsin(j3)))));
747 if(
IKabs(evalcond[0]) > 0.000001 )
754 IkReal j5array[1], cj5array[1], sj5array[1];
755 bool j5valid[1]={
false};
759 j5array[0]=
IKatan2(((((IkReal(-1.00000000000000))*(new_r11)*(sj3)))+(((IkReal(-1.00000000000000))*(cj3)*(new_r01)))), ((((new_r10)*(sj3)))+(((cj3)*(new_r00)))));
760 sj5array[0]=
IKsin(j5array[0]);
761 cj5array[0]=
IKcos(j5array[0]);
762 if( j5array[0] >
IKPI )
766 else if( j5array[0] < -
IKPI )
770 for(
int ij5 = 0; ij5 < 1; ++ij5)
776 _ij5[0] = ij5; _ij5[1] = -1;
777 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
781 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
784 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
787 IkReal x105=
IKsin(j5);
788 IkReal x106=((IkReal(1.00000000000000))*(sj3));
789 IkReal x107=((IkReal(1.00000000000000))*(
IKcos(j5)));
790 evalcond[0]=((((IkReal(-1.00000000000000))*(new_r00)*(x106)))+(((cj3)*(new_r10)))+(((IkReal(-1.00000000000000))*(x105))));
791 evalcond[1]=((((IkReal(-1.00000000000000))*(x107)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x106))));
792 evalcond[2]=((((new_r11)*(sj3)))+(x105)+(((cj3)*(new_r01))));
793 evalcond[3]=((((IkReal(-1.00000000000000))*(x107)))+(((new_r10)*(sj3)))+(((cj3)*(new_r00))));
794 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
801 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
802 vinfos[0].jointtype = 1;
803 vinfos[0].foffset = j0;
804 vinfos[0].indices[0] = _ij0[0];
805 vinfos[0].indices[1] = _ij0[1];
806 vinfos[0].maxsolutions = _nj0;
807 vinfos[1].jointtype = 1;
808 vinfos[1].foffset = j1;
809 vinfos[1].indices[0] = _ij1[0];
810 vinfos[1].indices[1] = _ij1[1];
811 vinfos[1].maxsolutions = _nj1;
812 vinfos[2].jointtype = 1;
813 vinfos[2].foffset = j2;
814 vinfos[2].indices[0] = _ij2[0];
815 vinfos[2].indices[1] = _ij2[1];
816 vinfos[2].maxsolutions = _nj2;
817 vinfos[3].jointtype = 1;
818 vinfos[3].foffset = j3;
819 vinfos[3].indices[0] = _ij3[0];
820 vinfos[3].indices[1] = _ij3[1];
821 vinfos[3].maxsolutions = _nj3;
822 vinfos[4].jointtype = 1;
823 vinfos[4].foffset = j4;
824 vinfos[4].indices[0] = _ij4[0];
825 vinfos[4].indices[1] = _ij4[1];
826 vinfos[4].maxsolutions = _nj4;
827 vinfos[5].jointtype = 1;
828 vinfos[5].foffset = j5;
829 vinfos[5].indices[0] = _ij5[0];
830 vinfos[5].indices[1] = _ij5[1];
831 vinfos[5].maxsolutions = _nj5;
832 std::vector<int> vfree(0);
842 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(j4, IkReal(6.28318530717959))));
843 evalcond[1]=((IkReal(1.00000000000000))+(new_r22));
846 evalcond[4]=((IkReal(-1.00000000000000))*(new_r20));
847 evalcond[5]=((IkReal(-1.00000000000000))*(new_r21));
848 evalcond[6]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(new_r22))));
849 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 )
852 IkReal j3array[2], cj3array[2], sj3array[2];
853 bool j3valid[2]={
false};
857 IkReal x108=
IKatan2(new_r02, new_r12);
858 j3array[0]=((IkReal(-1.00000000000000))*(x108));
859 sj3array[0]=
IKsin(j3array[0]);
860 cj3array[0]=
IKcos(j3array[0]);
861 j3array[1]=((IkReal(3.14159265358979))+(((IkReal(-1.00000000000000))*(x108))));
862 sj3array[1]=
IKsin(j3array[1]);
863 cj3array[1]=
IKcos(j3array[1]);
864 if( j3array[0] >
IKPI )
868 else if( j3array[0] < -
IKPI )
872 if( j3array[1] >
IKPI )
876 else if( j3array[1] < -
IKPI )
880 for(
int ij3 = 0; ij3 < 2; ++ij3)
886 _ij3[0] = ij3; _ij3[1] = -1;
887 for(
int iij3 = ij3+1; iij3 < 2; ++iij3)
891 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
894 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
897 evalcond[0]=((((new_r12)*(
IKcos(j3))))+(((IkReal(-1.00000000000000))*(new_r02)*(
IKsin(j3)))));
898 if(
IKabs(evalcond[0]) > 0.000001 )
905 IkReal j5array[1], cj5array[1], sj5array[1];
906 bool j5valid[1]={
false};
910 j5array[0]=
IKatan2(((((new_r11)*(sj3)))+(((cj3)*(new_r01)))), ((((IkReal(-1.00000000000000))*(cj3)*(new_r00)))+(((IkReal(-1.00000000000000))*(new_r10)*(sj3)))));
911 sj5array[0]=
IKsin(j5array[0]);
912 cj5array[0]=
IKcos(j5array[0]);
913 if( j5array[0] >
IKPI )
917 else if( j5array[0] < -
IKPI )
921 for(
int ij5 = 0; ij5 < 1; ++ij5)
927 _ij5[0] = ij5; _ij5[1] = -1;
928 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
932 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
935 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
938 IkReal x109=
IKcos(j5);
939 IkReal x110=((IkReal(1.00000000000000))*(sj3));
940 IkReal x111=((IkReal(1.00000000000000))*(
IKsin(j5)));
941 evalcond[0]=((((IkReal(-1.00000000000000))*(new_r00)*(x110)))+(((IkReal(-1.00000000000000))*(x111)))+(((cj3)*(new_r10))));
942 evalcond[1]=((((IkReal(-1.00000000000000))*(x109)))+(((IkReal(-1.00000000000000))*(new_r01)*(x110)))+(((cj3)*(new_r11))));
943 evalcond[2]=((((new_r11)*(sj3)))+(((IkReal(-1.00000000000000))*(x111)))+(((cj3)*(new_r01))));
944 evalcond[3]=((((new_r10)*(sj3)))+(x109)+(((cj3)*(new_r00))));
945 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
952 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
953 vinfos[0].jointtype = 1;
954 vinfos[0].foffset = j0;
955 vinfos[0].indices[0] = _ij0[0];
956 vinfos[0].indices[1] = _ij0[1];
957 vinfos[0].maxsolutions = _nj0;
958 vinfos[1].jointtype = 1;
959 vinfos[1].foffset = j1;
960 vinfos[1].indices[0] = _ij1[0];
961 vinfos[1].indices[1] = _ij1[1];
962 vinfos[1].maxsolutions = _nj1;
963 vinfos[2].jointtype = 1;
964 vinfos[2].foffset = j2;
965 vinfos[2].indices[0] = _ij2[0];
966 vinfos[2].indices[1] = _ij2[1];
967 vinfos[2].maxsolutions = _nj2;
968 vinfos[3].jointtype = 1;
969 vinfos[3].foffset = j3;
970 vinfos[3].indices[0] = _ij3[0];
971 vinfos[3].indices[1] = _ij3[1];
972 vinfos[3].maxsolutions = _nj3;
973 vinfos[4].jointtype = 1;
974 vinfos[4].foffset = j4;
975 vinfos[4].indices[0] = _ij4[0];
976 vinfos[4].indices[1] = _ij4[1];
977 vinfos[4].maxsolutions = _nj4;
978 vinfos[5].jointtype = 1;
979 vinfos[5].foffset = j5;
980 vinfos[5].indices[0] = _ij5[0];
981 vinfos[5].indices[1] = _ij5[1];
982 vinfos[5].maxsolutions = _nj5;
983 std::vector<int> vfree(0);
1007 IkReal j3array[1], cj3array[1], sj3array[1];
1008 bool j3valid[1]={
false};
1010 IkReal x112=((IkReal(-1.00000000000000))*(cj4)*(gconst3)*(new_r20));
1013 j3array[0]=
IKatan2(((new_r12)*(x112)), ((new_r02)*(x112)));
1014 sj3array[0]=
IKsin(j3array[0]);
1015 cj3array[0]=
IKcos(j3array[0]);
1016 if( j3array[0] >
IKPI )
1020 else if( j3array[0] < -
IKPI )
1021 { j3array[0]+=
IK2PI;
1024 for(
int ij3 = 0; ij3 < 1; ++ij3)
1030 _ij3[0] = ij3; _ij3[1] = -1;
1031 for(
int iij3 = ij3+1; iij3 < 1; ++iij3)
1035 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
1038 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
1041 IkReal x113=
IKsin(j3);
1042 IkReal x114=
IKcos(j3);
1043 IkReal x115=((IkReal(1.00000000000000))*(sj4));
1044 IkReal x116=((sj4)*(x113));
1045 IkReal x117=((sj4)*(x114));
1046 IkReal x118=((new_r02)*(x114));
1047 IkReal x119=((new_r12)*(x113));
1048 evalcond[0]=((((IkReal(-1.00000000000000))*(new_r02)*(x113)))+(((new_r12)*(x114))));
1049 evalcond[1]=((((IkReal(-1.00000000000000))*(x115)))+(x119)+(x118));
1050 evalcond[2]=((((new_r00)*(x117)))+(((cj4)*(new_r20)))+(((new_r10)*(x116))));
1051 evalcond[3]=((((new_r11)*(x116)))+(((new_r01)*(x117)))+(((cj4)*(new_r21))));
1052 evalcond[4]=((IkReal(-1.00000000000000))+(((new_r02)*(x117)))+(((new_r12)*(x116)))+(((cj4)*(new_r22))));
1053 evalcond[5]=((((cj4)*(x118)))+(((cj4)*(x119)))+(((IkReal(-1.00000000000000))*(new_r22)*(x115))));
1054 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 )
1061 IkReal dummyeval[1];
1065 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1068 IkReal dummyeval[1];
1070 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1073 IkReal dummyeval[1];
1075 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1078 IkReal evalcond[11];
1079 IkReal x120=((IkReal(-1.00000000000000))+(new_r22));
1080 IkReal x121=((((cj3)*(new_r12)))+(((IkReal(-1.00000000000000))*(new_r02)*(sj3))));
1081 IkReal x122=((((new_r12)*(sj3)))+(((cj3)*(new_r02))));
1082 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(((IkReal(3.14159265358979))+(j4)), IkReal(6.28318530717959))));
1084 evalcond[2]=new_r20;
1085 evalcond[3]=new_r21;
1089 evalcond[7]=new_r20;
1090 evalcond[8]=new_r21;
1093 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 &&
IKabs(evalcond[7]) < 0.0000010000000000 &&
IKabs(evalcond[8]) < 0.0000010000000000 &&
IKabs(evalcond[9]) < 0.0000010000000000 &&
IKabs(evalcond[10]) < 0.0000010000000000 )
1096 IkReal j5array[1], cj5array[1], sj5array[1];
1097 bool j5valid[1]={
false};
1101 j5array[0]=
IKatan2(((((IkReal(-1.00000000000000))*(new_r11)*(sj3)))+(((IkReal(-1.00000000000000))*(cj3)*(new_r01)))), ((((new_r10)*(sj3)))+(((cj3)*(new_r00)))));
1102 sj5array[0]=
IKsin(j5array[0]);
1103 cj5array[0]=
IKcos(j5array[0]);
1104 if( j5array[0] >
IKPI )
1108 else if( j5array[0] < -
IKPI )
1109 { j5array[0]+=
IK2PI;
1112 for(
int ij5 = 0; ij5 < 1; ++ij5)
1118 _ij5[0] = ij5; _ij5[1] = -1;
1119 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1123 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1126 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1129 IkReal x123=
IKsin(j5);
1130 IkReal x124=((IkReal(1.00000000000000))*(sj3));
1131 IkReal x125=((IkReal(1.00000000000000))*(
IKcos(j5)));
1132 evalcond[0]=((((IkReal(-1.00000000000000))*(x123)))+(((IkReal(-1.00000000000000))*(new_r00)*(x124)))+(((cj3)*(new_r10))));
1133 evalcond[1]=((((IkReal(-1.00000000000000))*(new_r01)*(x124)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(x125))));
1134 evalcond[2]=((((new_r11)*(sj3)))+(x123)+(((cj3)*(new_r01))));
1135 evalcond[3]=((((new_r10)*(sj3)))+(((IkReal(-1.00000000000000))*(x125)))+(((cj3)*(new_r00))));
1136 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
1143 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1144 vinfos[0].jointtype = 1;
1145 vinfos[0].foffset = j0;
1146 vinfos[0].indices[0] = _ij0[0];
1147 vinfos[0].indices[1] = _ij0[1];
1148 vinfos[0].maxsolutions = _nj0;
1149 vinfos[1].jointtype = 1;
1150 vinfos[1].foffset = j1;
1151 vinfos[1].indices[0] = _ij1[0];
1152 vinfos[1].indices[1] = _ij1[1];
1153 vinfos[1].maxsolutions = _nj1;
1154 vinfos[2].jointtype = 1;
1155 vinfos[2].foffset = j2;
1156 vinfos[2].indices[0] = _ij2[0];
1157 vinfos[2].indices[1] = _ij2[1];
1158 vinfos[2].maxsolutions = _nj2;
1159 vinfos[3].jointtype = 1;
1160 vinfos[3].foffset = j3;
1161 vinfos[3].indices[0] = _ij3[0];
1162 vinfos[3].indices[1] = _ij3[1];
1163 vinfos[3].maxsolutions = _nj3;
1164 vinfos[4].jointtype = 1;
1165 vinfos[4].foffset = j4;
1166 vinfos[4].indices[0] = _ij4[0];
1167 vinfos[4].indices[1] = _ij4[1];
1168 vinfos[4].maxsolutions = _nj4;
1169 vinfos[5].jointtype = 1;
1170 vinfos[5].foffset = j5;
1171 vinfos[5].indices[0] = _ij5[0];
1172 vinfos[5].indices[1] = _ij5[1];
1173 vinfos[5].maxsolutions = _nj5;
1174 std::vector<int> vfree(0);
1182 IkReal x126=((new_r12)*(sj3));
1183 IkReal x127=((IkReal(1.00000000000000))*(new_r02));
1184 IkReal x128=((((IkReal(-1.00000000000000))*(sj3)*(x127)))+(((cj3)*(new_r12))));
1185 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(j4, IkReal(6.28318530717959))));
1186 evalcond[1]=((IkReal(1.00000000000000))+(new_r22));
1187 evalcond[2]=new_r20;
1188 evalcond[3]=new_r21;
1191 evalcond[6]=((x126)+(((cj3)*(new_r02))));
1192 evalcond[7]=((IkReal(-1.00000000000000))*(new_r20));
1193 evalcond[8]=((IkReal(-1.00000000000000))*(new_r21));
1194 evalcond[9]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(new_r22))));
1195 evalcond[10]=((((IkReal(-1.00000000000000))*(cj3)*(x127)))+(((IkReal(-1.00000000000000))*(x126))));
1196 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 &&
IKabs(evalcond[7]) < 0.0000010000000000 &&
IKabs(evalcond[8]) < 0.0000010000000000 &&
IKabs(evalcond[9]) < 0.0000010000000000 &&
IKabs(evalcond[10]) < 0.0000010000000000 )
1199 IkReal j5array[1], cj5array[1], sj5array[1];
1200 bool j5valid[1]={
false};
1204 j5array[0]=
IKatan2(((((new_r11)*(sj3)))+(((cj3)*(new_r01)))), ((((IkReal(-1.00000000000000))*(cj3)*(new_r00)))+(((IkReal(-1.00000000000000))*(new_r10)*(sj3)))));
1205 sj5array[0]=
IKsin(j5array[0]);
1206 cj5array[0]=
IKcos(j5array[0]);
1207 if( j5array[0] >
IKPI )
1211 else if( j5array[0] < -
IKPI )
1212 { j5array[0]+=
IK2PI;
1215 for(
int ij5 = 0; ij5 < 1; ++ij5)
1221 _ij5[0] = ij5; _ij5[1] = -1;
1222 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1226 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1229 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1232 IkReal x129=
IKcos(j5);
1233 IkReal x130=((IkReal(1.00000000000000))*(sj3));
1234 IkReal x131=((IkReal(1.00000000000000))*(
IKsin(j5)));
1235 evalcond[0]=((((IkReal(-1.00000000000000))*(x131)))+(((IkReal(-1.00000000000000))*(new_r00)*(x130)))+(((cj3)*(new_r10))));
1236 evalcond[1]=((((IkReal(-1.00000000000000))*(x129)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x130))));
1237 evalcond[2]=((((IkReal(-1.00000000000000))*(x131)))+(((new_r11)*(sj3)))+(((cj3)*(new_r01))));
1238 evalcond[3]=((x129)+(((new_r10)*(sj3)))+(((cj3)*(new_r00))));
1239 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
1246 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1247 vinfos[0].jointtype = 1;
1248 vinfos[0].foffset = j0;
1249 vinfos[0].indices[0] = _ij0[0];
1250 vinfos[0].indices[1] = _ij0[1];
1251 vinfos[0].maxsolutions = _nj0;
1252 vinfos[1].jointtype = 1;
1253 vinfos[1].foffset = j1;
1254 vinfos[1].indices[0] = _ij1[0];
1255 vinfos[1].indices[1] = _ij1[1];
1256 vinfos[1].maxsolutions = _nj1;
1257 vinfos[2].jointtype = 1;
1258 vinfos[2].foffset = j2;
1259 vinfos[2].indices[0] = _ij2[0];
1260 vinfos[2].indices[1] = _ij2[1];
1261 vinfos[2].maxsolutions = _nj2;
1262 vinfos[3].jointtype = 1;
1263 vinfos[3].foffset = j3;
1264 vinfos[3].indices[0] = _ij3[0];
1265 vinfos[3].indices[1] = _ij3[1];
1266 vinfos[3].maxsolutions = _nj3;
1267 vinfos[4].jointtype = 1;
1268 vinfos[4].foffset = j4;
1269 vinfos[4].indices[0] = _ij4[0];
1270 vinfos[4].indices[1] = _ij4[1];
1271 vinfos[4].maxsolutions = _nj4;
1272 vinfos[5].jointtype = 1;
1273 vinfos[5].foffset = j5;
1274 vinfos[5].indices[0] = _ij5[0];
1275 vinfos[5].indices[1] = _ij5[1];
1276 vinfos[5].maxsolutions = _nj5;
1277 std::vector<int> vfree(0);
1299 IkReal j5array[1], cj5array[1], sj5array[1];
1300 bool j5valid[1]={
false};
1304 j5array[0]=
IKatan2(((((IkReal(-1.00000000000000))*(new_r00)*(sj3)))+(((cj3)*(new_r10)))), ((IkReal(-1.00000000000000))*(new_r20)*(((
IKabs(sj4) != 0)?((IkReal)1/(sj4)):(IkReal)1.0e30))));
1305 sj5array[0]=
IKsin(j5array[0]);
1306 cj5array[0]=
IKcos(j5array[0]);
1307 if( j5array[0] >
IKPI )
1311 else if( j5array[0] < -
IKPI )
1312 { j5array[0]+=
IK2PI;
1315 for(
int ij5 = 0; ij5 < 1; ++ij5)
1321 _ij5[0] = ij5; _ij5[1] = -1;
1322 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1326 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1329 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1332 IkReal x132=
IKsin(j5);
1333 IkReal x133=
IKcos(j5);
1334 IkReal x134=((IkReal(1.00000000000000))*(sj3));
1335 IkReal x135=((new_r11)*(sj3));
1336 IkReal x136=((new_r10)*(sj3));
1337 IkReal x137=((cj3)*(cj4));
1338 IkReal x138=((IkReal(1.00000000000000))*(sj4));
1339 IkReal x139=((IkReal(1.00000000000000))*(x133));
1340 IkReal x140=((IkReal(1.00000000000000))*(x132));
1341 evalcond[0]=((new_r20)+(((sj4)*(x133))));
1342 evalcond[1]=((((IkReal(-1.00000000000000))*(x132)*(x138)))+(new_r21));
1343 evalcond[2]=((((IkReal(-1.00000000000000))*(x140)))+(((cj3)*(new_r10)))+(((IkReal(-1.00000000000000))*(new_r00)*(x134))));
1344 evalcond[3]=((((IkReal(-1.00000000000000))*(x139)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x134))));
1345 evalcond[4]=((((cj4)*(x132)))+(x135)+(((cj3)*(new_r01))));
1346 evalcond[5]=((x136)+(((IkReal(-1.00000000000000))*(cj4)*(x139)))+(((cj3)*(new_r00))));
1347 evalcond[6]=((((cj4)*(x135)))+(((new_r01)*(x137)))+(x132)+(((IkReal(-1.00000000000000))*(new_r21)*(x138))));
1348 evalcond[7]=((((IkReal(-1.00000000000000))*(x139)))+(((IkReal(-1.00000000000000))*(new_r20)*(x138)))+(((cj4)*(x136)))+(((new_r00)*(x137))));
1349 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
1356 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1357 vinfos[0].jointtype = 1;
1358 vinfos[0].foffset = j0;
1359 vinfos[0].indices[0] = _ij0[0];
1360 vinfos[0].indices[1] = _ij0[1];
1361 vinfos[0].maxsolutions = _nj0;
1362 vinfos[1].jointtype = 1;
1363 vinfos[1].foffset = j1;
1364 vinfos[1].indices[0] = _ij1[0];
1365 vinfos[1].indices[1] = _ij1[1];
1366 vinfos[1].maxsolutions = _nj1;
1367 vinfos[2].jointtype = 1;
1368 vinfos[2].foffset = j2;
1369 vinfos[2].indices[0] = _ij2[0];
1370 vinfos[2].indices[1] = _ij2[1];
1371 vinfos[2].maxsolutions = _nj2;
1372 vinfos[3].jointtype = 1;
1373 vinfos[3].foffset = j3;
1374 vinfos[3].indices[0] = _ij3[0];
1375 vinfos[3].indices[1] = _ij3[1];
1376 vinfos[3].maxsolutions = _nj3;
1377 vinfos[4].jointtype = 1;
1378 vinfos[4].foffset = j4;
1379 vinfos[4].indices[0] = _ij4[0];
1380 vinfos[4].indices[1] = _ij4[1];
1381 vinfos[4].maxsolutions = _nj4;
1382 vinfos[5].jointtype = 1;
1383 vinfos[5].foffset = j5;
1384 vinfos[5].indices[0] = _ij5[0];
1385 vinfos[5].indices[1] = _ij5[1];
1386 vinfos[5].maxsolutions = _nj5;
1387 std::vector<int> vfree(0);
1400 IkReal j5array[1], cj5array[1], sj5array[1];
1401 bool j5valid[1]={
false};
1405 j5array[0]=
IKatan2(((new_r21)*(((
IKabs(sj4) != 0)?((IkReal)1/(sj4)):(IkReal)1.0e30))), ((((IkReal(-1.00000000000000))*(new_r01)*(sj3)))+(((cj3)*(new_r11)))));
1406 sj5array[0]=
IKsin(j5array[0]);
1407 cj5array[0]=
IKcos(j5array[0]);
1408 if( j5array[0] >
IKPI )
1412 else if( j5array[0] < -
IKPI )
1413 { j5array[0]+=
IK2PI;
1416 for(
int ij5 = 0; ij5 < 1; ++ij5)
1422 _ij5[0] = ij5; _ij5[1] = -1;
1423 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1427 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1430 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1433 IkReal x141=
IKsin(j5);
1434 IkReal x142=
IKcos(j5);
1435 IkReal x143=((IkReal(1.00000000000000))*(sj3));
1436 IkReal x144=((new_r11)*(sj3));
1437 IkReal x145=((new_r10)*(sj3));
1438 IkReal x146=((cj3)*(cj4));
1439 IkReal x147=((IkReal(1.00000000000000))*(sj4));
1440 IkReal x148=((IkReal(1.00000000000000))*(x142));
1441 IkReal x149=((IkReal(1.00000000000000))*(x141));
1442 evalcond[0]=((((sj4)*(x142)))+(new_r20));
1443 evalcond[1]=((new_r21)+(((IkReal(-1.00000000000000))*(x141)*(x147))));
1444 evalcond[2]=((((IkReal(-1.00000000000000))*(new_r00)*(x143)))+(((cj3)*(new_r10)))+(((IkReal(-1.00000000000000))*(x149))));
1445 evalcond[3]=((((IkReal(-1.00000000000000))*(x148)))+(((IkReal(-1.00000000000000))*(new_r01)*(x143)))+(((cj3)*(new_r11))));
1446 evalcond[4]=((((cj4)*(x141)))+(x144)+(((cj3)*(new_r01))));
1447 evalcond[5]=((((IkReal(-1.00000000000000))*(cj4)*(x148)))+(x145)+(((cj3)*(new_r00))));
1448 evalcond[6]=((((cj4)*(x144)))+(((new_r01)*(x146)))+(x141)+(((IkReal(-1.00000000000000))*(new_r21)*(x147))));
1449 evalcond[7]=((((cj4)*(x145)))+(((IkReal(-1.00000000000000))*(x148)))+(((IkReal(-1.00000000000000))*(new_r20)*(x147)))+(((new_r00)*(x146))));
1450 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
1457 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1458 vinfos[0].jointtype = 1;
1459 vinfos[0].foffset = j0;
1460 vinfos[0].indices[0] = _ij0[0];
1461 vinfos[0].indices[1] = _ij0[1];
1462 vinfos[0].maxsolutions = _nj0;
1463 vinfos[1].jointtype = 1;
1464 vinfos[1].foffset = j1;
1465 vinfos[1].indices[0] = _ij1[0];
1466 vinfos[1].indices[1] = _ij1[1];
1467 vinfos[1].maxsolutions = _nj1;
1468 vinfos[2].jointtype = 1;
1469 vinfos[2].foffset = j2;
1470 vinfos[2].indices[0] = _ij2[0];
1471 vinfos[2].indices[1] = _ij2[1];
1472 vinfos[2].maxsolutions = _nj2;
1473 vinfos[3].jointtype = 1;
1474 vinfos[3].foffset = j3;
1475 vinfos[3].indices[0] = _ij3[0];
1476 vinfos[3].indices[1] = _ij3[1];
1477 vinfos[3].maxsolutions = _nj3;
1478 vinfos[4].jointtype = 1;
1479 vinfos[4].foffset = j4;
1480 vinfos[4].indices[0] = _ij4[0];
1481 vinfos[4].indices[1] = _ij4[1];
1482 vinfos[4].maxsolutions = _nj4;
1483 vinfos[5].jointtype = 1;
1484 vinfos[5].foffset = j5;
1485 vinfos[5].indices[0] = _ij5[0];
1486 vinfos[5].indices[1] = _ij5[1];
1487 vinfos[5].maxsolutions = _nj5;
1488 std::vector<int> vfree(0);
1501 IkReal j5array[1], cj5array[1], sj5array[1];
1502 bool j5valid[1]={
false};
1506 j5array[0]=
IKatan2(((gconst5)*(new_r21)), ((IkReal(-1.00000000000000))*(gconst5)*(new_r20)));
1507 sj5array[0]=
IKsin(j5array[0]);
1508 cj5array[0]=
IKcos(j5array[0]);
1509 if( j5array[0] >
IKPI )
1513 else if( j5array[0] < -
IKPI )
1514 { j5array[0]+=
IK2PI;
1517 for(
int ij5 = 0; ij5 < 1; ++ij5)
1523 _ij5[0] = ij5; _ij5[1] = -1;
1524 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1528 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1531 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1534 IkReal x150=
IKsin(j5);
1535 IkReal x151=
IKcos(j5);
1536 IkReal x152=((IkReal(1.00000000000000))*(sj3));
1537 IkReal x153=((new_r11)*(sj3));
1538 IkReal x154=((new_r10)*(sj3));
1539 IkReal x155=((cj3)*(cj4));
1540 IkReal x156=((IkReal(1.00000000000000))*(sj4));
1541 IkReal x157=((IkReal(1.00000000000000))*(x151));
1542 IkReal x158=((IkReal(1.00000000000000))*(x150));
1543 evalcond[0]=((((sj4)*(x151)))+(new_r20));
1544 evalcond[1]=((new_r21)+(((IkReal(-1.00000000000000))*(x150)*(x156))));
1545 evalcond[2]=((((IkReal(-1.00000000000000))*(new_r00)*(x152)))+(((IkReal(-1.00000000000000))*(x158)))+(((cj3)*(new_r10))));
1546 evalcond[3]=((((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(x157)))+(((IkReal(-1.00000000000000))*(new_r01)*(x152))));
1547 evalcond[4]=((x153)+(((cj4)*(x150)))+(((cj3)*(new_r01))));
1548 evalcond[5]=((x154)+(((IkReal(-1.00000000000000))*(cj4)*(x157)))+(((cj3)*(new_r00))));
1549 evalcond[6]=((((IkReal(-1.00000000000000))*(new_r21)*(x156)))+(x150)+(((new_r01)*(x155)))+(((cj4)*(x153))));
1550 evalcond[7]=((((IkReal(-1.00000000000000))*(x157)))+(((IkReal(-1.00000000000000))*(new_r20)*(x156)))+(((cj4)*(x154)))+(((new_r00)*(x155))));
1551 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
1558 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1559 vinfos[0].jointtype = 1;
1560 vinfos[0].foffset = j0;
1561 vinfos[0].indices[0] = _ij0[0];
1562 vinfos[0].indices[1] = _ij0[1];
1563 vinfos[0].maxsolutions = _nj0;
1564 vinfos[1].jointtype = 1;
1565 vinfos[1].foffset = j1;
1566 vinfos[1].indices[0] = _ij1[0];
1567 vinfos[1].indices[1] = _ij1[1];
1568 vinfos[1].maxsolutions = _nj1;
1569 vinfos[2].jointtype = 1;
1570 vinfos[2].foffset = j2;
1571 vinfos[2].indices[0] = _ij2[0];
1572 vinfos[2].indices[1] = _ij2[1];
1573 vinfos[2].maxsolutions = _nj2;
1574 vinfos[3].jointtype = 1;
1575 vinfos[3].foffset = j3;
1576 vinfos[3].indices[0] = _ij3[0];
1577 vinfos[3].indices[1] = _ij3[1];
1578 vinfos[3].maxsolutions = _nj3;
1579 vinfos[4].jointtype = 1;
1580 vinfos[4].foffset = j4;
1581 vinfos[4].indices[0] = _ij4[0];
1582 vinfos[4].indices[1] = _ij4[1];
1583 vinfos[4].maxsolutions = _nj4;
1584 vinfos[5].jointtype = 1;
1585 vinfos[5].foffset = j5;
1586 vinfos[5].indices[0] = _ij5[0];
1587 vinfos[5].indices[1] = _ij5[1];
1588 vinfos[5].maxsolutions = _nj5;
1589 std::vector<int> vfree(0);
1608 IkReal j3array[1], cj3array[1], sj3array[1];
1609 bool j3valid[1]={
false};
1611 IkReal x159=((gconst2)*(sj4));
1614 j3array[0]=
IKatan2(((new_r12)*(x159)), ((new_r02)*(x159)));
1615 sj3array[0]=
IKsin(j3array[0]);
1616 cj3array[0]=
IKcos(j3array[0]);
1617 if( j3array[0] >
IKPI )
1621 else if( j3array[0] < -
IKPI )
1622 { j3array[0]+=
IK2PI;
1625 for(
int ij3 = 0; ij3 < 1; ++ij3)
1631 _ij3[0] = ij3; _ij3[1] = -1;
1632 for(
int iij3 = ij3+1; iij3 < 1; ++iij3)
1636 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
1639 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
1642 IkReal x160=
IKsin(j3);
1643 IkReal x161=
IKcos(j3);
1644 IkReal x162=((IkReal(1.00000000000000))*(sj4));
1645 IkReal x163=((sj4)*(x160));
1646 IkReal x164=((sj4)*(x161));
1647 IkReal x165=((new_r02)*(x161));
1648 IkReal x166=((new_r12)*(x160));
1649 evalcond[0]=((((new_r12)*(x161)))+(((IkReal(-1.00000000000000))*(new_r02)*(x160))));
1650 evalcond[1]=((x166)+(x165)+(((IkReal(-1.00000000000000))*(x162))));
1651 evalcond[2]=((((new_r00)*(x164)))+(((new_r10)*(x163)))+(((cj4)*(new_r20))));
1652 evalcond[3]=((((new_r01)*(x164)))+(((new_r11)*(x163)))+(((cj4)*(new_r21))));
1653 evalcond[4]=((IkReal(-1.00000000000000))+(((new_r02)*(x164)))+(((new_r12)*(x163)))+(((cj4)*(new_r22))));
1654 evalcond[5]=((((cj4)*(x165)))+(((IkReal(-1.00000000000000))*(new_r22)*(x162)))+(((cj4)*(x166))));
1655 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 )
1662 IkReal dummyeval[1];
1666 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1669 IkReal dummyeval[1];
1671 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1674 IkReal dummyeval[1];
1676 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
1679 IkReal evalcond[11];
1680 IkReal x167=((IkReal(-1.00000000000000))+(new_r22));
1681 IkReal x168=((((cj3)*(new_r12)))+(((IkReal(-1.00000000000000))*(new_r02)*(sj3))));
1682 IkReal x169=((((new_r12)*(sj3)))+(((cj3)*(new_r02))));
1683 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(((IkReal(3.14159265358979))+(j4)), IkReal(6.28318530717959))));
1685 evalcond[2]=new_r20;
1686 evalcond[3]=new_r21;
1690 evalcond[7]=new_r20;
1691 evalcond[8]=new_r21;
1694 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 &&
IKabs(evalcond[7]) < 0.0000010000000000 &&
IKabs(evalcond[8]) < 0.0000010000000000 &&
IKabs(evalcond[9]) < 0.0000010000000000 &&
IKabs(evalcond[10]) < 0.0000010000000000 )
1697 IkReal j5array[1], cj5array[1], sj5array[1];
1698 bool j5valid[1]={
false};
1702 j5array[0]=
IKatan2(((((IkReal(-1.00000000000000))*(new_r11)*(sj3)))+(((IkReal(-1.00000000000000))*(cj3)*(new_r01)))), ((((new_r10)*(sj3)))+(((cj3)*(new_r00)))));
1703 sj5array[0]=
IKsin(j5array[0]);
1704 cj5array[0]=
IKcos(j5array[0]);
1705 if( j5array[0] >
IKPI )
1709 else if( j5array[0] < -
IKPI )
1710 { j5array[0]+=
IK2PI;
1713 for(
int ij5 = 0; ij5 < 1; ++ij5)
1719 _ij5[0] = ij5; _ij5[1] = -1;
1720 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1724 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1727 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1730 IkReal x170=
IKsin(j5);
1731 IkReal x171=((IkReal(1.00000000000000))*(sj3));
1732 IkReal x172=((IkReal(1.00000000000000))*(
IKcos(j5)));
1733 evalcond[0]=((((IkReal(-1.00000000000000))*(x170)))+(((cj3)*(new_r10)))+(((IkReal(-1.00000000000000))*(new_r00)*(x171))));
1734 evalcond[1]=((((IkReal(-1.00000000000000))*(new_r01)*(x171)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(x172))));
1735 evalcond[2]=((x170)+(((new_r11)*(sj3)))+(((cj3)*(new_r01))));
1736 evalcond[3]=((((new_r10)*(sj3)))+(((IkReal(-1.00000000000000))*(x172)))+(((cj3)*(new_r00))));
1737 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
1744 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1745 vinfos[0].jointtype = 1;
1746 vinfos[0].foffset = j0;
1747 vinfos[0].indices[0] = _ij0[0];
1748 vinfos[0].indices[1] = _ij0[1];
1749 vinfos[0].maxsolutions = _nj0;
1750 vinfos[1].jointtype = 1;
1751 vinfos[1].foffset = j1;
1752 vinfos[1].indices[0] = _ij1[0];
1753 vinfos[1].indices[1] = _ij1[1];
1754 vinfos[1].maxsolutions = _nj1;
1755 vinfos[2].jointtype = 1;
1756 vinfos[2].foffset = j2;
1757 vinfos[2].indices[0] = _ij2[0];
1758 vinfos[2].indices[1] = _ij2[1];
1759 vinfos[2].maxsolutions = _nj2;
1760 vinfos[3].jointtype = 1;
1761 vinfos[3].foffset = j3;
1762 vinfos[3].indices[0] = _ij3[0];
1763 vinfos[3].indices[1] = _ij3[1];
1764 vinfos[3].maxsolutions = _nj3;
1765 vinfos[4].jointtype = 1;
1766 vinfos[4].foffset = j4;
1767 vinfos[4].indices[0] = _ij4[0];
1768 vinfos[4].indices[1] = _ij4[1];
1769 vinfos[4].maxsolutions = _nj4;
1770 vinfos[5].jointtype = 1;
1771 vinfos[5].foffset = j5;
1772 vinfos[5].indices[0] = _ij5[0];
1773 vinfos[5].indices[1] = _ij5[1];
1774 vinfos[5].maxsolutions = _nj5;
1775 std::vector<int> vfree(0);
1783 IkReal x173=((new_r12)*(sj3));
1784 IkReal x174=((IkReal(1.00000000000000))*(new_r02));
1785 IkReal x175=((((cj3)*(new_r12)))+(((IkReal(-1.00000000000000))*(sj3)*(x174))));
1786 evalcond[0]=((IkReal(-3.14159265358979))+(
IKfmod(j4, IkReal(6.28318530717959))));
1787 evalcond[1]=((IkReal(1.00000000000000))+(new_r22));
1788 evalcond[2]=new_r20;
1789 evalcond[3]=new_r21;
1792 evalcond[6]=((x173)+(((cj3)*(new_r02))));
1793 evalcond[7]=((IkReal(-1.00000000000000))*(new_r20));
1794 evalcond[8]=((IkReal(-1.00000000000000))*(new_r21));
1795 evalcond[9]=((IkReal(-1.00000000000000))+(((IkReal(-1.00000000000000))*(new_r22))));
1796 evalcond[10]=((((IkReal(-1.00000000000000))*(x173)))+(((IkReal(-1.00000000000000))*(cj3)*(x174))));
1797 if(
IKabs(evalcond[0]) < 0.0000010000000000 &&
IKabs(evalcond[1]) < 0.0000010000000000 &&
IKabs(evalcond[2]) < 0.0000010000000000 &&
IKabs(evalcond[3]) < 0.0000010000000000 &&
IKabs(evalcond[4]) < 0.0000010000000000 &&
IKabs(evalcond[5]) < 0.0000010000000000 &&
IKabs(evalcond[6]) < 0.0000010000000000 &&
IKabs(evalcond[7]) < 0.0000010000000000 &&
IKabs(evalcond[8]) < 0.0000010000000000 &&
IKabs(evalcond[9]) < 0.0000010000000000 &&
IKabs(evalcond[10]) < 0.0000010000000000 )
1800 IkReal j5array[1], cj5array[1], sj5array[1];
1801 bool j5valid[1]={
false};
1805 j5array[0]=
IKatan2(((((new_r11)*(sj3)))+(((cj3)*(new_r01)))), ((((IkReal(-1.00000000000000))*(cj3)*(new_r00)))+(((IkReal(-1.00000000000000))*(new_r10)*(sj3)))));
1806 sj5array[0]=
IKsin(j5array[0]);
1807 cj5array[0]=
IKcos(j5array[0]);
1808 if( j5array[0] >
IKPI )
1812 else if( j5array[0] < -
IKPI )
1813 { j5array[0]+=
IK2PI;
1816 for(
int ij5 = 0; ij5 < 1; ++ij5)
1822 _ij5[0] = ij5; _ij5[1] = -1;
1823 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1827 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1830 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1833 IkReal x176=
IKcos(j5);
1834 IkReal x177=((IkReal(1.00000000000000))*(sj3));
1835 IkReal x178=((IkReal(1.00000000000000))*(
IKsin(j5)));
1836 evalcond[0]=((((IkReal(-1.00000000000000))*(new_r00)*(x177)))+(((IkReal(-1.00000000000000))*(x178)))+(((cj3)*(new_r10))));
1837 evalcond[1]=((((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x177)))+(((IkReal(-1.00000000000000))*(x176))));
1838 evalcond[2]=((((IkReal(-1.00000000000000))*(x178)))+(((new_r11)*(sj3)))+(((cj3)*(new_r01))));
1839 evalcond[3]=((x176)+(((new_r10)*(sj3)))+(((cj3)*(new_r00))));
1840 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 )
1847 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1848 vinfos[0].jointtype = 1;
1849 vinfos[0].foffset = j0;
1850 vinfos[0].indices[0] = _ij0[0];
1851 vinfos[0].indices[1] = _ij0[1];
1852 vinfos[0].maxsolutions = _nj0;
1853 vinfos[1].jointtype = 1;
1854 vinfos[1].foffset = j1;
1855 vinfos[1].indices[0] = _ij1[0];
1856 vinfos[1].indices[1] = _ij1[1];
1857 vinfos[1].maxsolutions = _nj1;
1858 vinfos[2].jointtype = 1;
1859 vinfos[2].foffset = j2;
1860 vinfos[2].indices[0] = _ij2[0];
1861 vinfos[2].indices[1] = _ij2[1];
1862 vinfos[2].maxsolutions = _nj2;
1863 vinfos[3].jointtype = 1;
1864 vinfos[3].foffset = j3;
1865 vinfos[3].indices[0] = _ij3[0];
1866 vinfos[3].indices[1] = _ij3[1];
1867 vinfos[3].maxsolutions = _nj3;
1868 vinfos[4].jointtype = 1;
1869 vinfos[4].foffset = j4;
1870 vinfos[4].indices[0] = _ij4[0];
1871 vinfos[4].indices[1] = _ij4[1];
1872 vinfos[4].maxsolutions = _nj4;
1873 vinfos[5].jointtype = 1;
1874 vinfos[5].foffset = j5;
1875 vinfos[5].indices[0] = _ij5[0];
1876 vinfos[5].indices[1] = _ij5[1];
1877 vinfos[5].maxsolutions = _nj5;
1878 std::vector<int> vfree(0);
1900 IkReal j5array[1], cj5array[1], sj5array[1];
1901 bool j5valid[1]={
false};
1905 j5array[0]=
IKatan2(((((IkReal(-1.00000000000000))*(new_r00)*(sj3)))+(((cj3)*(new_r10)))), ((IkReal(-1.00000000000000))*(new_r20)*(((
IKabs(sj4) != 0)?((IkReal)1/(sj4)):(IkReal)1.0e30))));
1906 sj5array[0]=
IKsin(j5array[0]);
1907 cj5array[0]=
IKcos(j5array[0]);
1908 if( j5array[0] >
IKPI )
1912 else if( j5array[0] < -
IKPI )
1913 { j5array[0]+=
IK2PI;
1916 for(
int ij5 = 0; ij5 < 1; ++ij5)
1922 _ij5[0] = ij5; _ij5[1] = -1;
1923 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
1927 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
1930 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
1933 IkReal x179=
IKsin(j5);
1934 IkReal x180=
IKcos(j5);
1935 IkReal x181=((IkReal(1.00000000000000))*(sj3));
1936 IkReal x182=((new_r11)*(sj3));
1937 IkReal x183=((new_r10)*(sj3));
1938 IkReal x184=((cj3)*(cj4));
1939 IkReal x185=((IkReal(1.00000000000000))*(sj4));
1940 IkReal x186=((IkReal(1.00000000000000))*(x180));
1941 IkReal x187=((IkReal(1.00000000000000))*(x179));
1942 evalcond[0]=((((sj4)*(x180)))+(new_r20));
1943 evalcond[1]=((new_r21)+(((IkReal(-1.00000000000000))*(x179)*(x185))));
1944 evalcond[2]=((((IkReal(-1.00000000000000))*(new_r00)*(x181)))+(((IkReal(-1.00000000000000))*(x187)))+(((cj3)*(new_r10))));
1945 evalcond[3]=((((IkReal(-1.00000000000000))*(new_r01)*(x181)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(x186))));
1946 evalcond[4]=((x182)+(((cj3)*(new_r01)))+(((cj4)*(x179))));
1947 evalcond[5]=((x183)+(((IkReal(-1.00000000000000))*(cj4)*(x186)))+(((cj3)*(new_r00))));
1948 evalcond[6]=((x179)+(((cj4)*(x182)))+(((new_r01)*(x184)))+(((IkReal(-1.00000000000000))*(new_r21)*(x185))));
1949 evalcond[7]=((((new_r00)*(x184)))+(((cj4)*(x183)))+(((IkReal(-1.00000000000000))*(new_r20)*(x185)))+(((IkReal(-1.00000000000000))*(x186))));
1950 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
1957 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
1958 vinfos[0].jointtype = 1;
1959 vinfos[0].foffset = j0;
1960 vinfos[0].indices[0] = _ij0[0];
1961 vinfos[0].indices[1] = _ij0[1];
1962 vinfos[0].maxsolutions = _nj0;
1963 vinfos[1].jointtype = 1;
1964 vinfos[1].foffset = j1;
1965 vinfos[1].indices[0] = _ij1[0];
1966 vinfos[1].indices[1] = _ij1[1];
1967 vinfos[1].maxsolutions = _nj1;
1968 vinfos[2].jointtype = 1;
1969 vinfos[2].foffset = j2;
1970 vinfos[2].indices[0] = _ij2[0];
1971 vinfos[2].indices[1] = _ij2[1];
1972 vinfos[2].maxsolutions = _nj2;
1973 vinfos[3].jointtype = 1;
1974 vinfos[3].foffset = j3;
1975 vinfos[3].indices[0] = _ij3[0];
1976 vinfos[3].indices[1] = _ij3[1];
1977 vinfos[3].maxsolutions = _nj3;
1978 vinfos[4].jointtype = 1;
1979 vinfos[4].foffset = j4;
1980 vinfos[4].indices[0] = _ij4[0];
1981 vinfos[4].indices[1] = _ij4[1];
1982 vinfos[4].maxsolutions = _nj4;
1983 vinfos[5].jointtype = 1;
1984 vinfos[5].foffset = j5;
1985 vinfos[5].indices[0] = _ij5[0];
1986 vinfos[5].indices[1] = _ij5[1];
1987 vinfos[5].maxsolutions = _nj5;
1988 std::vector<int> vfree(0);
2001 IkReal j5array[1], cj5array[1], sj5array[1];
2002 bool j5valid[1]={
false};
2006 j5array[0]=
IKatan2(((new_r21)*(((
IKabs(sj4) != 0)?((IkReal)1/(sj4)):(IkReal)1.0e30))), ((((IkReal(-1.00000000000000))*(new_r01)*(sj3)))+(((cj3)*(new_r11)))));
2007 sj5array[0]=
IKsin(j5array[0]);
2008 cj5array[0]=
IKcos(j5array[0]);
2009 if( j5array[0] >
IKPI )
2013 else if( j5array[0] < -
IKPI )
2014 { j5array[0]+=
IK2PI;
2017 for(
int ij5 = 0; ij5 < 1; ++ij5)
2023 _ij5[0] = ij5; _ij5[1] = -1;
2024 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
2028 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
2031 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
2034 IkReal x188=
IKsin(j5);
2035 IkReal x189=
IKcos(j5);
2036 IkReal x190=((IkReal(1.00000000000000))*(sj3));
2037 IkReal x191=((new_r11)*(sj3));
2038 IkReal x192=((new_r10)*(sj3));
2039 IkReal x193=((cj3)*(cj4));
2040 IkReal x194=((IkReal(1.00000000000000))*(sj4));
2041 IkReal x195=((IkReal(1.00000000000000))*(x189));
2042 IkReal x196=((IkReal(1.00000000000000))*(x188));
2043 evalcond[0]=((new_r20)+(((sj4)*(x189))));
2044 evalcond[1]=((new_r21)+(((IkReal(-1.00000000000000))*(x188)*(x194))));
2045 evalcond[2]=((((IkReal(-1.00000000000000))*(x196)))+(((IkReal(-1.00000000000000))*(new_r00)*(x190)))+(((cj3)*(new_r10))));
2046 evalcond[3]=((((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x190)))+(((IkReal(-1.00000000000000))*(x195))));
2047 evalcond[4]=((((cj4)*(x188)))+(x191)+(((cj3)*(new_r01))));
2048 evalcond[5]=((((IkReal(-1.00000000000000))*(cj4)*(x195)))+(x192)+(((cj3)*(new_r00))));
2049 evalcond[6]=((((IkReal(-1.00000000000000))*(new_r21)*(x194)))+(((cj4)*(x191)))+(x188)+(((new_r01)*(x193))));
2050 evalcond[7]=((((new_r00)*(x193)))+(((IkReal(-1.00000000000000))*(x195)))+(((cj4)*(x192)))+(((IkReal(-1.00000000000000))*(new_r20)*(x194))));
2051 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
2058 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
2059 vinfos[0].jointtype = 1;
2060 vinfos[0].foffset = j0;
2061 vinfos[0].indices[0] = _ij0[0];
2062 vinfos[0].indices[1] = _ij0[1];
2063 vinfos[0].maxsolutions = _nj0;
2064 vinfos[1].jointtype = 1;
2065 vinfos[1].foffset = j1;
2066 vinfos[1].indices[0] = _ij1[0];
2067 vinfos[1].indices[1] = _ij1[1];
2068 vinfos[1].maxsolutions = _nj1;
2069 vinfos[2].jointtype = 1;
2070 vinfos[2].foffset = j2;
2071 vinfos[2].indices[0] = _ij2[0];
2072 vinfos[2].indices[1] = _ij2[1];
2073 vinfos[2].maxsolutions = _nj2;
2074 vinfos[3].jointtype = 1;
2075 vinfos[3].foffset = j3;
2076 vinfos[3].indices[0] = _ij3[0];
2077 vinfos[3].indices[1] = _ij3[1];
2078 vinfos[3].maxsolutions = _nj3;
2079 vinfos[4].jointtype = 1;
2080 vinfos[4].foffset = j4;
2081 vinfos[4].indices[0] = _ij4[0];
2082 vinfos[4].indices[1] = _ij4[1];
2083 vinfos[4].maxsolutions = _nj4;
2084 vinfos[5].jointtype = 1;
2085 vinfos[5].foffset = j5;
2086 vinfos[5].indices[0] = _ij5[0];
2087 vinfos[5].indices[1] = _ij5[1];
2088 vinfos[5].maxsolutions = _nj5;
2089 std::vector<int> vfree(0);
2102 IkReal j5array[1], cj5array[1], sj5array[1];
2103 bool j5valid[1]={
false};
2107 j5array[0]=
IKatan2(((gconst5)*(new_r21)), ((IkReal(-1.00000000000000))*(gconst5)*(new_r20)));
2108 sj5array[0]=
IKsin(j5array[0]);
2109 cj5array[0]=
IKcos(j5array[0]);
2110 if( j5array[0] >
IKPI )
2114 else if( j5array[0] < -
IKPI )
2115 { j5array[0]+=
IK2PI;
2118 for(
int ij5 = 0; ij5 < 1; ++ij5)
2124 _ij5[0] = ij5; _ij5[1] = -1;
2125 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
2129 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
2132 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
2135 IkReal x197=
IKsin(j5);
2136 IkReal x198=
IKcos(j5);
2137 IkReal x199=((IkReal(1.00000000000000))*(sj3));
2138 IkReal x200=((new_r11)*(sj3));
2139 IkReal x201=((new_r10)*(sj3));
2140 IkReal x202=((cj3)*(cj4));
2141 IkReal x203=((IkReal(1.00000000000000))*(sj4));
2142 IkReal x204=((IkReal(1.00000000000000))*(x198));
2143 IkReal x205=((IkReal(1.00000000000000))*(x197));
2144 evalcond[0]=((new_r20)+(((sj4)*(x198))));
2145 evalcond[1]=((new_r21)+(((IkReal(-1.00000000000000))*(x197)*(x203))));
2146 evalcond[2]=((((IkReal(-1.00000000000000))*(x205)))+(((cj3)*(new_r10)))+(((IkReal(-1.00000000000000))*(new_r00)*(x199))));
2147 evalcond[3]=((((IkReal(-1.00000000000000))*(x204)))+(((cj3)*(new_r11)))+(((IkReal(-1.00000000000000))*(new_r01)*(x199))));
2148 evalcond[4]=((((cj4)*(x197)))+(x200)+(((cj3)*(new_r01))));
2149 evalcond[5]=((x201)+(((IkReal(-1.00000000000000))*(cj4)*(x204)))+(((cj3)*(new_r00))));
2150 evalcond[6]=((((new_r01)*(x202)))+(((cj4)*(x200)))+(x197)+(((IkReal(-1.00000000000000))*(new_r21)*(x203))));
2151 evalcond[7]=((((cj4)*(x201)))+(((new_r00)*(x202)))+(((IkReal(-1.00000000000000))*(x204)))+(((IkReal(-1.00000000000000))*(new_r20)*(x203))));
2152 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 )
2159 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
2160 vinfos[0].jointtype = 1;
2161 vinfos[0].foffset = j0;
2162 vinfos[0].indices[0] = _ij0[0];
2163 vinfos[0].indices[1] = _ij0[1];
2164 vinfos[0].maxsolutions = _nj0;
2165 vinfos[1].jointtype = 1;
2166 vinfos[1].foffset = j1;
2167 vinfos[1].indices[0] = _ij1[0];
2168 vinfos[1].indices[1] = _ij1[1];
2169 vinfos[1].maxsolutions = _nj1;
2170 vinfos[2].jointtype = 1;
2171 vinfos[2].foffset = j2;
2172 vinfos[2].indices[0] = _ij2[0];
2173 vinfos[2].indices[1] = _ij2[1];
2174 vinfos[2].maxsolutions = _nj2;
2175 vinfos[3].jointtype = 1;
2176 vinfos[3].foffset = j3;
2177 vinfos[3].indices[0] = _ij3[0];
2178 vinfos[3].indices[1] = _ij3[1];
2179 vinfos[3].maxsolutions = _nj3;
2180 vinfos[4].jointtype = 1;
2181 vinfos[4].foffset = j4;
2182 vinfos[4].indices[0] = _ij4[0];
2183 vinfos[4].indices[1] = _ij4[1];
2184 vinfos[4].maxsolutions = _nj4;
2185 vinfos[5].jointtype = 1;
2186 vinfos[5].foffset = j5;
2187 vinfos[5].indices[0] = _ij5[0];
2188 vinfos[5].indices[1] = _ij5[1];
2189 vinfos[5].maxsolutions = _nj5;
2190 std::vector<int> vfree(0);
2209 IkReal j5array[1], cj5array[1], sj5array[1];
2210 bool j5valid[1]={
false};
2214 j5array[0]=
IKatan2(((gconst4)*(new_r21)), ((IkReal(-1.00000000000000))*(gconst4)*(new_r20)));
2215 sj5array[0]=
IKsin(j5array[0]);
2216 cj5array[0]=
IKcos(j5array[0]);
2217 if( j5array[0] >
IKPI )
2221 else if( j5array[0] < -
IKPI )
2222 { j5array[0]+=
IK2PI;
2225 for(
int ij5 = 0; ij5 < 1; ++ij5)
2231 _ij5[0] = ij5; _ij5[1] = -1;
2232 for(
int iij5 = ij5+1; iij5 < 1; ++iij5)
2236 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
2239 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
2242 evalcond[0]=((new_r20)+(((sj4)*(
IKcos(j5)))));
2243 evalcond[1]=((((IkReal(-1.00000000000000))*(sj4)*(
IKsin(j5))))+(new_r21));
2244 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 )
2251 IkReal dummyeval[1];
2253 gconst6=
IKsign((((new_r12)*(new_r12))+((new_r02)*(new_r02))));
2254 dummyeval[0]=(((new_r12)*(new_r12))+((new_r02)*(new_r02)));
2255 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
2258 IkReal dummyeval[1];
2260 gconst7=
IKsign(((((IkReal(-1.00000000000000))*(new_r01)*(new_r02)))+(((IkReal(-1.00000000000000))*(new_r11)*(new_r12)))));
2261 dummyeval[0]=((((IkReal(-1.00000000000000))*(new_r01)*(new_r02)))+(((IkReal(-1.00000000000000))*(new_r11)*(new_r12))));
2262 if(
IKabs(dummyeval[0]) < 0.0000010000000000 )
2269 IkReal j3array[1], cj3array[1], sj3array[1];
2270 bool j3valid[1]={
false};
2272 IkReal x206=((cj4)*(gconst7)*(sj5));
2275 j3array[0]=
IKatan2(((new_r12)*(x206)), ((new_r02)*(x206)));
2276 sj3array[0]=
IKsin(j3array[0]);
2277 cj3array[0]=
IKcos(j3array[0]);
2278 if( j3array[0] >
IKPI )
2282 else if( j3array[0] < -
IKPI )
2283 { j3array[0]+=
IK2PI;
2286 for(
int ij3 = 0; ij3 < 1; ++ij3)
2292 _ij3[0] = ij3; _ij3[1] = -1;
2293 for(
int iij3 = ij3+1; iij3 < 1; ++iij3)
2297 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
2300 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
2302 IkReal evalcond[12];
2303 IkReal x207=
IKsin(j3);
2304 IkReal x208=
IKcos(j3);
2305 IkReal x209=((IkReal(1.00000000000000))*(cj5));
2306 IkReal x210=((IkReal(1.00000000000000))*(sj4));
2307 IkReal x211=((cj4)*(x208));
2308 IkReal x212=((sj4)*(x208));
2309 IkReal x213=((cj4)*(x207));
2310 IkReal x214=((new_r11)*(x207));
2311 IkReal x215=((sj4)*(x207));
2312 IkReal x216=((IkReal(1.00000000000000))*(x207));
2313 evalcond[0]=((((IkReal(-1.00000000000000))*(new_r02)*(x216)))+(((new_r12)*(x208))));
2314 evalcond[1]=((((IkReal(-1.00000000000000))*(x210)))+(((new_r12)*(x207)))+(((new_r02)*(x208))));
2315 evalcond[2]=((((new_r10)*(x208)))+(((IkReal(-1.00000000000000))*(new_r00)*(x216)))+(((IkReal(-1.00000000000000))*(sj5))));
2316 evalcond[3]=((((IkReal(-1.00000000000000))*(new_r01)*(x216)))+(((IkReal(-1.00000000000000))*(x209)))+(((new_r11)*(x208))));
2317 evalcond[4]=((((new_r01)*(x208)))+(x214)+(((cj4)*(sj5))));
2318 evalcond[5]=((((new_r10)*(x207)))+(((new_r00)*(x208)))+(((IkReal(-1.00000000000000))*(cj4)*(x209))));
2319 evalcond[6]=((((new_r00)*(x212)))+(((new_r10)*(x215)))+(((cj4)*(new_r20))));
2320 evalcond[7]=((((cj4)*(new_r21)))+(((new_r01)*(x212)))+(((sj4)*(x214))));
2321 evalcond[8]=((IkReal(-1.00000000000000))+(((cj4)*(new_r22)))+(((new_r02)*(x212)))+(((new_r12)*(x215))));
2322 evalcond[9]=((((new_r12)*(x213)))+(((new_r02)*(x211)))+(((IkReal(-1.00000000000000))*(new_r22)*(x210))));
2323 evalcond[10]=((((new_r11)*(x213)))+(((IkReal(-1.00000000000000))*(new_r21)*(x210)))+(sj5)+(((new_r01)*(x211))));
2324 evalcond[11]=((((IkReal(-1.00000000000000))*(x209)))+(((new_r00)*(x211)))+(((IkReal(-1.00000000000000))*(new_r20)*(x210)))+(((new_r10)*(x213))));
2325 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 ||
IKabs(evalcond[8]) > 0.000001 ||
IKabs(evalcond[9]) > 0.000001 ||
IKabs(evalcond[10]) > 0.000001 ||
IKabs(evalcond[11]) > 0.000001 )
2332 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
2333 vinfos[0].jointtype = 1;
2334 vinfos[0].foffset = j0;
2335 vinfos[0].indices[0] = _ij0[0];
2336 vinfos[0].indices[1] = _ij0[1];
2337 vinfos[0].maxsolutions = _nj0;
2338 vinfos[1].jointtype = 1;
2339 vinfos[1].foffset = j1;
2340 vinfos[1].indices[0] = _ij1[0];
2341 vinfos[1].indices[1] = _ij1[1];
2342 vinfos[1].maxsolutions = _nj1;
2343 vinfos[2].jointtype = 1;
2344 vinfos[2].foffset = j2;
2345 vinfos[2].indices[0] = _ij2[0];
2346 vinfos[2].indices[1] = _ij2[1];
2347 vinfos[2].maxsolutions = _nj2;
2348 vinfos[3].jointtype = 1;
2349 vinfos[3].foffset = j3;
2350 vinfos[3].indices[0] = _ij3[0];
2351 vinfos[3].indices[1] = _ij3[1];
2352 vinfos[3].maxsolutions = _nj3;
2353 vinfos[4].jointtype = 1;
2354 vinfos[4].foffset = j4;
2355 vinfos[4].indices[0] = _ij4[0];
2356 vinfos[4].indices[1] = _ij4[1];
2357 vinfos[4].maxsolutions = _nj4;
2358 vinfos[5].jointtype = 1;
2359 vinfos[5].foffset = j5;
2360 vinfos[5].indices[0] = _ij5[0];
2361 vinfos[5].indices[1] = _ij5[1];
2362 vinfos[5].maxsolutions = _nj5;
2363 std::vector<int> vfree(0);
2376 IkReal j3array[1], cj3array[1], sj3array[1];
2377 bool j3valid[1]={
false};
2379 IkReal x217=((gconst6)*(sj4));
2382 j3array[0]=
IKatan2(((new_r12)*(x217)), ((new_r02)*(x217)));
2383 sj3array[0]=
IKsin(j3array[0]);
2384 cj3array[0]=
IKcos(j3array[0]);
2385 if( j3array[0] >
IKPI )
2389 else if( j3array[0] < -
IKPI )
2390 { j3array[0]+=
IK2PI;
2393 for(
int ij3 = 0; ij3 < 1; ++ij3)
2399 _ij3[0] = ij3; _ij3[1] = -1;
2400 for(
int iij3 = ij3+1; iij3 < 1; ++iij3)
2404 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
2407 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
2409 IkReal evalcond[12];
2410 IkReal x218=
IKsin(j3);
2411 IkReal x219=
IKcos(j3);
2412 IkReal x220=((IkReal(1.00000000000000))*(cj5));
2413 IkReal x221=((IkReal(1.00000000000000))*(sj4));
2414 IkReal x222=((cj4)*(x219));
2415 IkReal x223=((sj4)*(x219));
2416 IkReal x224=((cj4)*(x218));
2417 IkReal x225=((new_r11)*(x218));
2418 IkReal x226=((sj4)*(x218));
2419 IkReal x227=((IkReal(1.00000000000000))*(x218));
2420 evalcond[0]=((((new_r12)*(x219)))+(((IkReal(-1.00000000000000))*(new_r02)*(x227))));
2421 evalcond[1]=((((IkReal(-1.00000000000000))*(x221)))+(((new_r12)*(x218)))+(((new_r02)*(x219))));
2422 evalcond[2]=((((IkReal(-1.00000000000000))*(new_r00)*(x227)))+(((new_r10)*(x219)))+(((IkReal(-1.00000000000000))*(sj5))));
2423 evalcond[3]=((((IkReal(-1.00000000000000))*(x220)))+(((new_r11)*(x219)))+(((IkReal(-1.00000000000000))*(new_r01)*(x227))));
2424 evalcond[4]=((((new_r01)*(x219)))+(x225)+(((cj4)*(sj5))));
2425 evalcond[5]=((((new_r00)*(x219)))+(((new_r10)*(x218)))+(((IkReal(-1.00000000000000))*(cj4)*(x220))));
2426 evalcond[6]=((((new_r00)*(x223)))+(((cj4)*(new_r20)))+(((new_r10)*(x226))));
2427 evalcond[7]=((((sj4)*(x225)))+(((cj4)*(new_r21)))+(((new_r01)*(x223))));
2428 evalcond[8]=((IkReal(-1.00000000000000))+(((new_r12)*(x226)))+(((new_r02)*(x223)))+(((cj4)*(new_r22))));
2429 evalcond[9]=((((IkReal(-1.00000000000000))*(new_r22)*(x221)))+(((new_r12)*(x224)))+(((new_r02)*(x222))));
2430 evalcond[10]=((((new_r11)*(x224)))+(((new_r01)*(x222)))+(sj5)+(((IkReal(-1.00000000000000))*(new_r21)*(x221))));
2431 evalcond[11]=((((IkReal(-1.00000000000000))*(x220)))+(((new_r10)*(x224)))+(((IkReal(-1.00000000000000))*(new_r20)*(x221)))+(((new_r00)*(x222))));
2432 if(
IKabs(evalcond[0]) > 0.000001 ||
IKabs(evalcond[1]) > 0.000001 ||
IKabs(evalcond[2]) > 0.000001 ||
IKabs(evalcond[3]) > 0.000001 ||
IKabs(evalcond[4]) > 0.000001 ||
IKabs(evalcond[5]) > 0.000001 ||
IKabs(evalcond[6]) > 0.000001 ||
IKabs(evalcond[7]) > 0.000001 ||
IKabs(evalcond[8]) > 0.000001 ||
IKabs(evalcond[9]) > 0.000001 ||
IKabs(evalcond[10]) > 0.000001 ||
IKabs(evalcond[11]) > 0.000001 )
2439 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(6);
2440 vinfos[0].jointtype = 1;
2441 vinfos[0].foffset = j0;
2442 vinfos[0].indices[0] = _ij0[0];
2443 vinfos[0].indices[1] = _ij0[1];
2444 vinfos[0].maxsolutions = _nj0;
2445 vinfos[1].jointtype = 1;
2446 vinfos[1].foffset = j1;
2447 vinfos[1].indices[0] = _ij1[0];
2448 vinfos[1].indices[1] = _ij1[1];
2449 vinfos[1].maxsolutions = _nj1;
2450 vinfos[2].jointtype = 1;
2451 vinfos[2].foffset = j2;
2452 vinfos[2].indices[0] = _ij2[0];
2453 vinfos[2].indices[1] = _ij2[1];
2454 vinfos[2].maxsolutions = _nj2;
2455 vinfos[3].jointtype = 1;
2456 vinfos[3].foffset = j3;
2457 vinfos[3].indices[0] = _ij3[0];
2458 vinfos[3].indices[1] = _ij3[1];
2459 vinfos[3].maxsolutions = _nj3;
2460 vinfos[4].jointtype = 1;
2461 vinfos[4].foffset = j4;
2462 vinfos[4].indices[0] = _ij4[0];
2463 vinfos[4].indices[1] = _ij4[1];
2464 vinfos[4].maxsolutions = _nj4;
2465 vinfos[5].jointtype = 1;
2466 vinfos[5].foffset = j5;
2467 vinfos[5].indices[0] = _ij5[0];
2468 vinfos[5].indices[1] = _ij5[1];
2469 vinfos[5].maxsolutions = _nj5;
2470 std::vector<int> vfree(0);
2495 return solver.
ComputeIk(eetrans,eerot,pfree,solutions);
2498 IKFAST_API
const char*
GetKinematicsHash() {
return "<robot:genericrobot - abb_irb2400 (1f04c8a90b29778d31a8f2cb88b4a166)>"; }
2502 #ifdef IKFAST_NAMESPACE 2506 #ifndef IKFAST_NO_MAIN 2509 #ifdef IKFAST_NAMESPACE 2510 using namespace IKFAST_NAMESPACE;
2515 printf(
"\nUsage: ./ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n" 2516 "Returns the ik solutions given the transformation of the end effector specified by\n" 2517 "a 3x3 rotation R (rXX), and a 3x1 translation (tX).\n" 2524 IkReal eerot[9],eetrans[3];
2525 eerot[0] = atof(argv[1]); eerot[1] = atof(argv[2]); eerot[2] = atof(argv[3]); eetrans[0] = atof(argv[4]);
2526 eerot[3] = atof(argv[5]); eerot[4] = atof(argv[6]); eerot[5] = atof(argv[7]); eetrans[1] = atof(argv[8]);
2527 eerot[6] = atof(argv[9]); eerot[7] = atof(argv[10]); eerot[8] = atof(argv[11]); eetrans[2] = atof(argv[12]);
2528 for(std::size_t i = 0; i < vfree.size(); ++i)
2529 vfree[i] = atof(argv[13+i]);
2530 bool bSuccess =
ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions);
2533 fprintf(stderr,
"Failed to get ik solution\n");
2541 printf(
"sol%d (free=%d): ", (
int)i, (
int)sol.
GetFree().size());
2542 std::vector<IkReal> vsolfree(sol.
GetFree().size());
2543 sol.
GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL);
2544 for( std::size_t j = 0; j < solvalues.size(); ++j)
2545 printf(
"%.15f, ", solvalues[j]);
2550 IkReal rot[9], trans[3];
2551 IkReal sol[6] = {0.46365, 0.93285, 1.75595 -
M_PI / 2.0, 6.28319, -2.68880, -0.46365};
2553 printf(
"FK: %f %f %f\n", trans[0],trans[1],trans[2] );
2559 OPW_IGNORE_WARNINGS_POP
virtual const IkSolutionBase< T > & GetSolution(size_t index) const
returns the solution pointer
IKFAST_API int GetIkRealSize()
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info)
IKFAST_API int GetIkType()
#define IKFAST_STRINGIZE(s)
float IKatan2(float fy, float fx)
INLINE Rall1d< T, V, S > log(const Rall1d< T, V, S > &arg)
virtual size_t GetNumSolutions() const
returns the number of solutions stored
#define IKFAST_SOLUTION_THRESH
void dgesv_(const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info)
The discrete solutions are returned in this structure.
void dgeev_(const char *jobvl, const char *jobvr, const int *n, double *a, const int *lda, double *wr, double *wi, double *vl, const int *ldvl, double *vr, const int *ldvr, double *work, const int *lwork, int *info)
virtual const std::vector< int > & GetFree() const =0
Gets the indices of the configuration space that have to be preset before a full solution can be retu...
void rotationfunction0(IkSolutionListBase< IkReal > &solutions)
int main(int argc, char **argv)
virtual size_t AddSolution(const std::vector< IkSingleDOFSolutionBase< T > > &vinfos, const std::vector< int > &vfree)=0
add one solution and return its index for later retrieval
#define IKFAST_COMPILE_ASSERT(x)
IKFAST_API bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
void dgetrs_(const char *trans, const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info)
IKFAST_API int * GetFreeParameters()
#define IKFAST_ATAN2_MAGTHRESH
IKFAST_API int GetNumFreeParameters()
INLINE Rall1d< T, V, S > asin(const Rall1d< T, V, S > &x)
virtual void Clear()=0
clears all current solutions, note that any memory addresses returned from GetSolution will be invali...
IKFAST_API int GetNumJoints()
INLINE Rall1d< T, V, S > sqrt(const Rall1d< T, V, S > &arg)
IKFAST_API void ComputeFk(const IkReal *j, IkReal *eetrans, IkReal *eerot)
IKFAST_API const char * GetKinematicsHash()
virtual void GetSolution(T *solution, const T *freevalues) const =0
gets a concrete solution
bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
void dgetri_(const int *n, const double *a, const int *lda, int *ipiv, double *work, const int *lwork, int *info)
INLINE Rall1d< T, V, S > acos(const Rall1d< T, V, S > &x)
Default implementation of IkSolutionListBase.
INLINE Rall1d< T, V, S > atan2(const Rall1d< T, V, S > &y, const Rall1d< T, V, S > &x)
#define IKFAST_VERSION
Header file for all ikfast c++ files/shared objects.
float IKfmod(float x, float y)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > tan(const Rall1d< T, V, S > &arg)
void zgetrf_(const int *m, const int *n, std::complex< double > *a, const int *lda, int *ipiv, int *info)
IKFAST_API const char * GetIkFastVersion()
manages all the solutions
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
virtual size_t GetNumSolutions() const =0
returns the number of solutions stored
#define IKFAST_SINCOS_THRESH