1 #define IKFAST_HAS_LIBRARY 26 #define IKFAST_COMPILE_ASSERT(x) extern int __dummy[(int)x] 41 #ifndef __PRETTY_FUNCTION__ 42 #define __PRETTY_FUNCTION__ __FUNCDNAME__ 46 #ifndef __PRETTY_FUNCTION__ 47 #define __PRETTY_FUNCTION__ __func__ 50 #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()); } } 55 #define IKFAST_ALIGNED16(x) __declspec(align(16)) x 57 #define IKFAST_ALIGNED16(x) x __attribute((aligned(16))) 60 #define IK2PI ((IkReal)6.28318530717959) 61 #define IKPI ((IkReal)3.14159265358979) 62 #define IKPI_2 ((IkReal)1.57079632679490) 78 void dgetrf_ (
const int* m,
const int* n,
double* a,
const int* lda,
int* ipiv,
int* info);
79 void zgetrf_ (
const int* m,
const int* n, std::complex<double>* a,
const int* lda,
int* ipiv,
int* info);
80 void dgetri_(
const int* n,
const double* a,
const int* lda,
int* ipiv,
double* work,
const int* lwork,
int* info);
81 void dgesv_ (
const int* n,
const int* nrhs,
double* a,
const int* lda,
int* ipiv,
double* b,
const int* ldb,
int* info);
82 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);
83 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);
88 #ifdef IKFAST_NAMESPACE 89 namespace IKFAST_NAMESPACE {
92 inline float IKabs(
float f) {
return fabsf(f); }
93 inline double IKabs(
double f) {
return fabs(f); }
95 inline float IKsqr(
float f) {
return f*f; }
96 inline double IKsqr(
double f) {
return f*f; }
98 inline float IKlog(
float f) {
return logf(f); }
99 inline double IKlog(
double f) {
return log(f); }
102 #ifndef IKFAST_SINCOS_THRESH 103 #define IKFAST_SINCOS_THRESH ((IkReal)1e-7) 107 #ifndef IKFAST_ATAN2_MAGTHRESH 108 #define IKFAST_ATAN2_MAGTHRESH ((IkReal)1e-7) 112 #ifndef IKFAST_SOLUTION_THRESH 113 #define IKFAST_SOLUTION_THRESH ((IkReal)1e-6) 117 #ifndef IKFAST_EVALCOND_THRESH 118 #define IKFAST_EVALCOND_THRESH ((IkReal)0.00001) 125 if( f <= -1 )
return float(-
IKPI_2);
126 else if( f >= 1 )
return float(
IKPI_2);
132 if( f <= -1 )
return -
IKPI_2;
133 else if( f >= 1 )
return IKPI_2;
158 if( f <= -1 )
return float(
IKPI);
159 else if( f >= 1 )
return float(0);
165 if( f <= -1 )
return IKPI;
166 else if( f >= 1 )
return 0;
169 inline float IKsin(
float f) {
return sinf(f); }
171 inline float IKcos(
float f) {
return cosf(f); }
173 inline float IKtan(
float f) {
return tanf(f); }
175 inline float IKsqrt(
float f) {
if( f <= 0.0f )
return 0.0f;
return sqrtf(f); }
176 inline double IKsqrt(
double f) {
if( f <= 0.0 )
return 0.0;
return sqrt(f); }
178 return atan2f(fy,fx);
185 else if( isnan(fx) ) {
188 return atan2f(fy,fx);
198 else if( isnan(fx) ) {
204 template <
typename T>
211 template <
typename T>
217 if( !isnan(fy) && !isnan(fx) ) {
246 template <
typename T>
265 ret.
value = (T)1.0e30;
269 ret.
value = T(1.0)/f;
274 int num = n > 0 ? n : -n;
278 else if( num == 3 ) {
300 IKFAST_API
void ComputeFk(
const IkReal* j, IkReal* eetrans, IkReal* eerot) {
301 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;
327 eetrans[0]=((-3.0e-8)+((x7*((((x11*x21))+(((-1.0)*x10*x18))))))+(((0.106)*x18))+(((-1.0)*x24))+(((-1.0)*x16*x21))+((x17*x18))+((x12*x18))+(((0.106)*x0*x20))+((x6*((((x11*x18))+((x10*x21)))))));
328 eetrans[1]=(((x6*((((x11*x19))+((x10*x22))))))+(((0.106)*x20*x5))+(((0.106)*x19))+(((-1.0)*x16*x22))+(((-1.1e-7)*x22))+((x17*x19))+((x12*x19))+((x7*((((x11*x22))+(((-1.0)*x10*x19)))))));
329 IkReal x25=((1.0)*x3);
330 eetrans[2]=((0.0605)+(((0.106)*x2))+(((1.1e-7)*x3))+(((-0.106)*x23))+((x17*x2))+((x16*x3))+((x7*(((((-1.0)*x10*x2))+(((-1.0)*x11*x25))))))+((x6*(((((-1.0)*x10*x25))+((x11*x2))))))+((x12*x2)));
331 eerot[0]=(((x5*x9))+((x8*((((x7*((((x18*x4))+((x0*x20))))))+((x6*((((x1*x18))+(((-1.0)*x14*x21)))))))))));
332 IkReal x26=((1.0)*x19);
333 eerot[1]=((((-1.0)*x8*((((x13*(((((-1.0)*x1*x26))+((x22*x4))))))+((x15*(((((-1.0)*x14*x26))+(((-1.0)*x20*x5))))))))))+(((-1.0)*x0*x9)));
334 IkReal x27=((1.0)*x14);
335 eerot[2]=((-1.0)*x8*((((x13*(((((-1.0)*x20))+(((-1.0)*x27*x3))))))+((x15*((x23+(((-1.0)*x2*x27)))))))));
348 IkReal j0,cj0,sj0,htj0,j0mul,j1,cj1,sj1,htj1,j1mul,j2,cj2,sj2,htj2,j2mul,j3,cj3,sj3,htj3,j3mul,j5,cj5,
sj5,htj5,j5mul,new_r00,r00,rxp0_0,new_r01,r01,rxp0_1,new_r02,r02,rxp0_2,new_px,px,npx,new_py,py,npy,new_pz,pz,npz,pp;
349 unsigned char _ij0[2], _nj0,_ij1[2], _nj1,_ij2[2], _nj2,_ij3[2], _nj3,_ij5[2],
_nj5;
354 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; j5=numeric_limits<IkReal>::quiet_NaN(); _ij5[0] = -1; _ij5[1] = -1; _nj5 = -1;
355 for(
int dummyiter = 0; dummyiter < 1; ++dummyiter) {
357 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
362 px = eetrans[0]; py = eetrans[1]; pz = eetrans[2];
365 new_r01=((-1.0)*r00);
366 new_py=((-3.0e-8)+(((-1.0)*px)));
368 new_pz=((-0.0605)+pz);
369 r00 = new_r00; r01 = new_r01; r02 = new_r02; px = new_px; py = new_py; pz = new_pz;
371 pp=((px*px)+(py*py)+(pz*pz));
375 if(
IKabs(j0eval[0]) < 0.0000010000000000 )
382 IkReal j0array[2], cj0array[2], sj0array[2];
383 bool j0valid[2]={
false};
389 IkReal x28=x29.
value;
390 j0array[0]=((-1.0)*x28);
391 sj0array[0]=
IKsin(j0array[0]);
392 cj0array[0]=
IKcos(j0array[0]);
393 j0array[1]=((3.14159265358979)+(((-1.0)*x28)));
394 sj0array[1]=
IKsin(j0array[1]);
395 cj0array[1]=
IKcos(j0array[1]);
396 if( j0array[0] >
IKPI )
400 else if( j0array[0] < -
IKPI )
404 if( j0array[1] >
IKPI )
408 else if( j0array[1] < -
IKPI )
412 for(
int ij0 = 0; ij0 < 2; ++ij0)
418 _ij0[0] = ij0; _ij0[1] = -1;
419 for(
int iij0 = ij0+1; iij0 < 2; ++iij0)
423 j0valid[iij0]=
false; _ij0[1] = iij0;
break;
426 j0 = j0array[ij0]; cj0 = cj0array[ij0]; sj0 = sj0array[ij0];
428 IkReal op[4+1], zeror[4];
430 op[0]=((((4.4e-7)*cj0*py*(px*px)*(r01*r01)))+(((-1.0)*(cj0*cj0)*(py*py*py*py)*(r01*r01)))+(((0.005318656)*pz*(cj0*cj0)*(r01*r01)))+(((1.17010432e-9)*r00*r02*sj0))+(((-8.0)*px*pz*r00*r02*(cj0*cj0)*(py*py)))+(((2.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r01*r01)))+(((-4.4e-7)*cj0*py*(px*px)*(r02*r02)))+(((-8.8e-7)*pz*r00*r02*sj0*(py*py)))+(((-4.0)*cj0*pz*r01*r02*sj0*(px*px*px)))+(((0.039712)*cj0*r00*r01*sj0*(pz*pz)))+(((2.0)*cj0*r00*r01*sj0*(pz*pz*pz*pz)))+(((4.0)*py*r00*r01*(cj0*cj0)*(px*px*px)))+(((8.0)*cj0*px*py*sj0*(pz*pz)*(r02*r02)))+(((-5.51936e-9)*cj0*py*(r01*r01)))+(((-0.140064)*py*pz*r01*r02))+(((-8.0)*py*pz*r01*r02*(px*px)*(sj0*sj0)))+(((1.32e-6)*py*r00*r01*sj0*(px*px)))+(((4.0)*cj0*py*sj0*(px*px*px)*(r00*r00)))+(((1.696)*cj0*px*py*pz*sj0*(r02*r02)))+(((-4.0)*(px*px)*(pz*pz)*(r02*r02)*(sj0*sj0)))+(((-4.0)*(px*px)*(pz*pz)*(r00*r00)))+(((0.848)*px*py*pz*r00*r01*(sj0*sj0)))+(((0.848)*px*py*pz*r00*r01*(cj0*cj0)))+(((-0.424)*r01*r02*(cj0*cj0)*(py*py*py)))+(((-0.005318656)*pz*(r02*r02)))+(((-4.0)*px*r00*r01*(cj0*cj0)*(py*py*py)))+(((-0.039712)*cj0*py*pz*r00*r02*sj0))+(((2.0)*(px*px)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-1.0)*(px*px*px*px)*(r00*r00)*(sj0*sj0)))+(((-8.8e-7)*cj0*py*(px*px)*(r00*r00)))+(((-0.005318656)*py*r01*r02))+(((-1.0)*(cj0*cj0)*(pz*pz*pz*pz)*(r01*r01)))+(((-4.0)*cj0*px*r01*r02*sj0*(pz*pz*pz)))+(((-4.0)*py*r00*r01*(px*px*px)*(sj0*sj0)))+(((4.4e-7)*px*sj0*(pz*pz)*(r02*r02)))+(((0.005318656)*cj0*px*r01*r02*sj0))+(((4.0)*px*py*r00*r01*(cj0*cj0)*(pz*pz)))+(((-0.848)*pz*(px*px)*(r02*r02)*(sj0*sj0)))+(((-0.424)*r00*r02*(px*px*px)*(sj0*sj0)))+(((-0.848)*cj0*px*py*pz*sj0*(r01*r01)))+(((0.848)*cj0*r00*r01*sj0*(pz*pz*pz)))+(((0.0250879999999516)*(px*px)*(r02*r02)))+(((-0.019856)*(cj0*cj0)*(px*px)*(r01*r01)))+(((0.424)*py*r01*r02*(px*px)))+(((-0.424)*(pz*pz*pz)*(r02*r02)))+(((12.0)*cj0*px*pz*r01*r02*sj0*(py*py)))+(((-5.51936e-9)*px*sj0*(r02*r02)))+(((-4.0)*cj0*py*r00*r02*sj0*(pz*pz*pz)))+(((-0.019856)*(cj0*cj0)*(pz*pz)*(r01*r01)))+(((5.51936e-9)*py*r00*r01*sj0))+(((-2.0)*(px*px)*(py*py)*(r02*r02)))+(((-4.0)*cj0*px*py*sj0*(pz*pz)*(r01*r01)))+(((0.424)*py*r01*r02*(cj0*cj0)*(px*px)))+(((-8.0)*px*py*r00*r01*(pz*pz)))+(((2.0)*(cj0*cj0)*(px*px)*(py*py)*(r01*r01)))+(((-0.039712)*cj0*px*py*sj0*(r01*r01)))+(((1.103872e-8)*pz*r00*r02*sj0))+(((-0.000157351935999393)*(r02*r02)))+(((-0.005318656)*px*r00*r02*(sj0*sj0)))+(((0.019856)*(cj0*cj0)*(py*py)*(r01*r01)))+(((5.51936e-9)*cj0*py*(r02*r02)))+(((-0.019856)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-4.0)*cj0*px*sj0*(py*py*py)*(r00*r00)))+(((-2.0)*cj0*r00*r01*sj0*(py*py*py*py)))+(((2.0)*(px*px)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.039712)*cj0*px*py*sj0*(r00*r00)))+(((0.039712)*py*pz*r01*r02*(cj0*cj0)))+(((-9.328e-8)*cj0*px*py*r00*r02))+(((1.272)*py*r01*r02*(cj0*cj0)*(pz*pz)))+(((-0.039712)*cj0*px*pz*r01*r02*sj0))+(((4.0)*pz*r01*r02*(py*py*py)))+(((-0.424)*(pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((1.272)*cj0*py*r00*r02*sj0*(px*px)))+(((-0.848)*px*r00*r02*(cj0*cj0)*(py*py)))+(((-1.32e-6)*cj0*px*r00*r01*(py*py)))+(((-4.4e-7)*cj0*py*(pz*pz)*(r02*r02)))+(((-0.848)*pz*(cj0*cj0)*(py*py)*(r02*r02)))+(((-4.0)*py*r01*r02*(pz*pz*pz)))+(((-0.424)*pz*(py*py)*(r00*r00)*(sj0*sj0)))+(((-4.0)*cj0*pz*r00*r02*sj0*(py*py*py)))+(((-1.272)*cj0*py*r00*r02*sj0*(pz*pz)))+(((-4.0)*cj0*py*sj0*(px*px*px)*(r01*r01)))+(((-0.424)*cj0*r01*r02*sj0*(px*px*px)))+(((-1.17010432e-9)*cj0*r01*r02))+(((4.4e-7)*sj0*(px*px*px)*(r02*r02)))+(((4.0)*px*r00*r01*(py*py*py)*(sj0*sj0)))+(((4.0)*py*pz*r01*r02*(px*px)))+(((9.328e-8)*py*pz*r00*r01*sj0))+(((-4.4e-7)*px*sj0*(py*py)*(r00*r00)))+(((-4.4e-7)*cj0*py*(pz*pz)*(r01*r01)))+(((0.424)*px*r00*r02*(py*py)))+(((-4.4e-7)*cj0*px*r00*r01*(pz*pz)))+(((4.4e-7)*px*sj0*(py*py)*(r02*r02)))+(((-9.328e-8)*r00*r02*sj0*(py*py)))+(((9.328e-8)*px*pz*sj0*(r00*r00)))+(((4.0)*cj0*px*sj0*(py*py*py)*(r01*r01)))+(((4.0)*pz*r00*r02*(px*px*px)))+(((0.0250879999999516)*(py*py)*(r02*r02)))+(((-0.424)*pz*(cj0*cj0)*(px*px)*(r01*r01)))+(((4.4e-7)*cj0*r00*r01*(px*px*px)))+(((-1.272)*cj0*px*r01*r02*sj0*(pz*pz)))+(((-0.848)*pz*(px*px)*(r00*r00)))+(((1.272)*px*r00*r02*(pz*pz)*(sj0*sj0)))+(((0.424)*r00*r02*(px*px*px)))+(((5.51936e-9)*px*sj0*(r00*r00)))+(((-4.0)*pz*r01*r02*(cj0*cj0)*(py*py*py)))+(((-4.4e-7)*r00*r01*sj0*(py*py*py)))+(((-0.140064)*px*pz*r00*r02))+(((-4.0)*cj0*px*py*sj0*(pz*pz)*(r00*r00)))+(((-4.0)*pz*r00*r02*(px*px*px)*(sj0*sj0)))+(((-1.696)*px*py*pz*r00*r01))+(((-2.0)*(py*py)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.848)*pz*(py*py)*(r01*r01)))+(((-0.848)*cj0*px*py*pz*sj0*(r00*r00)))+(((-9.328e-8)*cj0*py*pz*(r01*r01)))+(((2.0)*(px*px)*(pz*pz)*(r02*r02)))+(((4.4e-7)*sj0*(px*px*px)*(r00*r00)))+(((0.424)*pz*(px*px)*(r02*r02)))+(((-0.0008128512)*cj0*r00*r01*sj0))+(((-1.0)*(py*py*py*py)*(r02*r02)))+(((0.019856)*(px*px)*(r00*r00)*(sj0*sj0)))+(((-2.0)*(cj0*cj0)*(px*px)*(pz*pz)*(r01*r01)))+(((4.0)*px*r00*r02*(pz*pz*pz)*(sj0*sj0)))+(((-0.010637312)*cj0*pz*r00*r01*sj0))+(((-0.070032)*(pz*pz)*(r02*r02)))+(((0.005318656)*pz*(r00*r00)*(sj0*sj0)))+(((-0.424)*(cj0*cj0)*(pz*pz*pz)*(r01*r01)))+(((-2.0)*cj0*r00*r01*sj0*(px*px*px*px)))+(((0.0004064256)*(cj0*cj0)*(r01*r01)))+(((-1.0)*(pz*pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((-1.272)*px*r00*r02*(pz*pz)))+(((4.0)*px*pz*r00*r02*(py*py)*(sj0*sj0)))+(((9.328e-8)*px*pz*sj0*(r02*r02)))+(((-4.4e-7)*cj0*(py*py*py)*(r02*r02)))+(((-8.8e-7)*cj0*px*py*pz*r00*r02))+(((0.039712)*px*py*r00*r01*(sj0*sj0)))+(((-0.424)*cj0*r00*r02*sj0*(py*py*py)))+(((0.424)*pz*(cj0*cj0)*(py*py)*(r01*r01)))+(((4.0)*py*r01*r02*(cj0*cj0)*(pz*pz*pz)))+(((9.328e-8)*px*py*r01*r02*sj0))+(((-4.0)*(cj0*cj0)*(px*px)*(py*py)*(r00*r00)))+(((9.328e-8)*cj0*r01*r02*(px*px)))+(((-4.0)*(py*py)*(pz*pz)*(r01*r01)))+(((-1.0)*(pz*pz*pz*pz)*(r02*r02)))+(((0.424)*pz*(px*px)*(r00*r00)*(sj0*sj0)))+(((12.0)*cj0*r00*r01*sj0*(px*px)*(py*py)))+(((-0.005318656)*px*r00*r02))+(((-4.0)*px*r00*r02*(pz*pz*pz)))+(((0.0004064256)*(r00*r00)*(sj0*sj0)))+(((-9.328e-8)*cj0*px*pz*r00*r01))+(((4.4e-7)*px*sj0*(pz*pz)*(r00*r00)))+(((-0.0449440000000484)*(py*py)*(r01*r01)))+(((0.424)*r01*r02*(py*py*py)))+(((8.8e-7)*cj0*pz*r01*r02*(px*px)))+(((4.0)*px*py*r00*r01*(pz*pz)*(sj0*sj0)))+(((-0.005318656)*py*r01*r02*(cj0*cj0)))+(((-1.272)*py*r01*r02*(pz*pz)))+(((8.8e-7)*px*sj0*(py*py)*(r01*r01)))+(((0.039712)*px*pz*r00*r02*(sj0*sj0)))+(((4.0)*py*pz*r01*r02*(cj0*cj0)*(px*px)))+(((1.272)*cj0*px*r01*r02*sj0*(py*py)))+(((0.424)*px*r00*r02*(py*py)*(sj0*sj0)))+(((4.0)*px*pz*r00*r02*(py*py)))+(((2.0)*(py*py)*(pz*pz)*(r02*r02)))+(((-1.103872e-8)*cj0*pz*r01*r02))+(((0.424)*pz*(py*py)*(r02*r02)))+(((-5.51936e-9)*cj0*px*r00*r01))+(((-4.0)*(px*px)*(py*py)*(r01*r01)*(sj0*sj0)))+(((4.4e-7)*py*r00*r01*sj0*(pz*pz)))+(((-1.0)*(cj0*cj0)*(px*px*px*px)*(r01*r01)))+(((-1.0)*(py*py*py*py)*(r00*r00)*(sj0*sj0)))+(((0.039712)*px*py*r00*r01*(cj0*cj0)))+(((8.8e-7)*px*py*pz*r01*r02*sj0))+(((-9.328e-8)*cj0*py*pz*(r02*r02)))+(((-4.4e-7)*cj0*(py*py*py)*(r01*r01)))+(((0.005318656)*cj0*py*r00*r02*sj0))+(((-0.019856)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-1.0)*(px*px*px*px)*(r02*r02)))+(((-4.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r02*r02)))+(((12.0)*cj0*py*pz*r00*r02*sj0*(px*px)))+(((-0.0449440000000484)*(px*px)*(r00*r00)))+(((-0.848)*py*r01*r02*(px*px)*(sj0*sj0)))+(((-0.0898880000000968)*px*py*r00*r01)));
431 op[1]=((((1.696)*px*sj0*(py*py)*(r01*r01)))+(((1.696)*cj0*pz*r01*r02*(px*px)))+(((0.179775999999806)*px*py*r01*r02*sj0))+(((-8.8e-7)*r00*r02*(px*px*px)))+(((-8.8e-7)*pz*(px*px)*(r02*r02)))+(((-0.179775999999806)*cj0*px*pz*r00*r01))+(((-0.848)*cj0*py*(pz*pz)*(r01*r01)))+(((-0.848)*cj0*px*r00*r01*(pz*pz)))+(((-0.848)*cj0*(py*py*py)*(r01*r01)))+(((1.8656e-7)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-1.696)*cj0*px*py*pz*r00*r02))+(((-8.8e-7)*px*r00*r02*(py*py)))+(((-0.010637312)*cj0*py*(r01*r01)))+(((-8.8e-7)*py*r01*r02*(cj0*cj0)*(px*px)))+(((-0.848)*px*sj0*(py*py)*(r00*r00)))+(((1.103872e-8)*px*r00*r02*(sj0*sj0)))+(((-2.64e-6)*cj0*py*r00*r02*sj0*(px*px)))+(((2.207744e-8)*cj0*pz*r00*r01*sj0))+(((-2.34020864e-9)*(r00*r00)*(sj0*sj0)))+(((-1.8656e-7)*(cj0*cj0)*(py*py)*(r01*r01)))+(((2.544)*py*r00*r01*sj0*(px*px)))+(((-1.76e-6)*px*py*pz*r00*r01*(cj0*cj0)))+(((0.848)*sj0*(px*px*px)*(r00*r00)))+(((0.00225511014399757)*r00*r02*sj0))+(((-0.179775999999806)*r00*r02*sj0*(py*py)))+(((1.8656e-7)*(cj0*cj0)*(px*px)*(r01*r01)))+(((1.76e-6)*pz*(px*px)*(r02*r02)*(sj0*sj0)))+(((0.010637312)*py*r00*r01*sj0))+(((8.8e-7)*(pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((-3.7312e-7)*py*pz*r01*r02*(cj0*cj0)))+(((-0.179775999999806)*cj0*py*pz*(r01*r01)))+(((-1.696)*pz*r00*r02*sj0*(py*py)))+(((-2.64e-6)*py*r01*r02*(cj0*cj0)*(pz*pz)))+(((1.76e-6)*pz*(px*px)*(r00*r00)))+(((0.179775999999806)*px*pz*sj0*(r02*r02)))+(((1.76e-6)*cj0*px*py*pz*sj0*(r01*r01)))+(((-3.7312e-7)*px*pz*r00*r02*(sj0*sj0)))+(((3.7312e-7)*cj0*px*py*sj0*(r00*r00)))+(((-1.103872e-8)*pz*(cj0*cj0)*(r01*r01)))+(((-3.52e-6)*cj0*px*py*pz*sj0*(r02*r02)))+(((3.7312e-7)*cj0*py*pz*r00*r02*sj0))+(((-1.8656e-7)*(px*px)*(r02*r02)))+(((8.8e-7)*pz*(py*py)*(r00*r00)*(sj0*sj0)))+(((-0.848)*cj0*py*(px*px)*(r02*r02)))+(((0.848)*sj0*(px*px*px)*(r02*r02)))+(((1.8656e-7)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((3.7312e-7)*cj0*px*py*sj0*(r01*r01)))+(((-8.8e-7)*pz*(py*py)*(r02*r02)))+(((8.8e-7)*cj0*r01*r02*sj0*(px*px*px)))+(((-1.76e-6)*cj0*r00*r01*sj0*(pz*pz*pz)))+(((-1.103872e-8)*pz*(r00*r00)*(sj0*sj0)))+(((1.103872e-8)*py*r01*r02))+(((-1.103872e-8)*cj0*px*r01*r02*sj0))+(((2.64e-6)*cj0*px*r01*r02*sj0*(pz*pz)))+(((-3.7312e-7)*cj0*r00*r01*sj0*(pz*pz)))+(((3.7312e-7)*cj0*px*pz*r01*r02*sj0))+(((2.64e-6)*py*r01*r02*(pz*pz)))+(((0.179775999999806)*cj0*r01*r02*(px*px)))+(((0.010637312)*px*sj0*(r00*r00)))+(((-2.34020864e-9)*(cj0*cj0)*(r01*r01)))+(((1.76e-6)*pz*(cj0*cj0)*(py*py)*(r02*r02)))+(((8.8e-7)*(cj0*cj0)*(pz*pz*pz)*(r01*r01)))+(((-0.00225511014399757)*cj0*r01*r02))+(((2.64e-6)*px*r00*r02*(pz*pz)))+(((1.76e-6)*pz*(py*py)*(r01*r01)))+(((0.848)*py*r00*r01*sj0*(pz*pz)))+(((2.64e-6)*cj0*py*r00*r02*sj0*(pz*pz)))+(((0.848)*px*sj0*(py*py)*(r02*r02)))+(((3.52e-6)*px*py*pz*r00*r01))+(((8.8e-7)*(pz*pz*pz)*(r02*r02)))+(((0.021274624)*pz*r00*r02*sj0))+(((-0.179775999999806)*cj0*px*py*r00*r02))+(((1.8656e-7)*(cj0*cj0)*(pz*pz)*(r01*r01)))+(((-2.64e-6)*px*r00*r02*(pz*pz)*(sj0*sj0)))+(((-0.848)*cj0*py*(pz*pz)*(r02*r02)))+(((-0.848)*cj0*(py*py*py)*(r02*r02)))+(((0.179775999999806)*px*pz*sj0*(r00*r00)))+(((1.8656e-7)*(pz*pz)*(r02*r02)))+(((1.696)*px*py*pz*r01*r02*sj0))+(((-1.696)*cj0*py*(px*px)*(r00*r00)))+(((-8.8e-7)*px*r00*r02*(py*py)*(sj0*sj0)))+(((-1.103872e-8)*cj0*py*r00*r02*sj0))+(((0.848)*cj0*py*(px*px)*(r01*r01)))+(((-1.76e-6)*px*py*pz*r00*r01*(sj0*sj0)))+(((1.103872e-8)*px*r00*r02))+(((-8.8e-7)*pz*(px*px)*(r00*r00)*(sj0*sj0)))+(((4.68041728e-9)*cj0*r00*r01*sj0))+(((-0.021274624)*cj0*pz*r01*r02))+(((2.34020864e-9)*(r02*r02)))+(((8.8e-7)*r00*r02*(px*px*px)*(sj0*sj0)))+(((-0.848)*r00*r01*sj0*(py*py*py)))+(((-8.8e-7)*py*r01*r02*(px*px)))+(((-2.64e-6)*cj0*px*r01*r02*sj0*(py*py)))+(((-3.7312e-7)*px*py*r00*r01*(cj0*cj0)))+(((3.7312e-7)*px*pz*r00*r02))+(((-1.8656e-7)*(py*py)*(r02*r02)))+(((1.76e-6)*cj0*px*py*pz*sj0*(r00*r00)))+(((-8.8e-7)*r01*r02*(py*py*py)))+(((-0.010637312)*cj0*px*r00*r01))+(((0.179775999999806)*py*pz*r00*r01*sj0))+(((8.8e-7)*cj0*r00*r02*sj0*(py*py*py)))+(((0.848)*px*sj0*(pz*pz)*(r00*r00)))+(((1.76e-6)*py*r01*r02*(px*px)*(sj0*sj0)))+(((0.848)*px*sj0*(pz*pz)*(r02*r02)))+(((8.8e-7)*pz*(cj0*cj0)*(px*px)*(r01*r01)))+(((1.103872e-8)*pz*(r02*r02)))+(((1.103872e-8)*py*r01*r02*(cj0*cj0)))+(((3.7312e-7)*py*pz*r01*r02))+(((0.010637312)*cj0*py*(r02*r02)))+(((-0.179775999999806)*cj0*py*pz*(r02*r02)))+(((-0.010637312)*px*sj0*(r02*r02)))+(((-3.7312e-7)*px*py*r00*r01*(sj0*sj0)))+(((-1.8656e-7)*(px*px)*(r00*r00)*(sj0*sj0)))+(((-2.544)*cj0*px*r00*r01*(py*py)))+(((0.848)*cj0*r00*r01*(px*px*px)))+(((-8.8e-7)*pz*(cj0*cj0)*(py*py)*(r01*r01)))+(((1.76e-6)*px*r00*r02*(cj0*cj0)*(py*py)))+(((8.8e-7)*r01*r02*(cj0*cj0)*(py*py*py))));
432 op[2]=((((-8.0)*cj0*px*py*sj0*(pz*pz)*(r01*r01)))+(((0.0794239999996128)*px*pz*r00*r02))+(((7.02062592e-9)*cj0*r01*r02))+(((-2.0)*(px*px*px*px)*(r00*r00)*(sj0*sj0)))+(((-8.0)*px*r00*r02*(pz*pz*pz)))+(((-2.0)*(pz*pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((-2.0)*(cj0*cj0)*(pz*pz*pz*pz)*(r01*r01)))+(((-8.0)*cj0*pz*r01*r02*sj0*(px*px*px)))+(((8.0)*px*py*r00*r01*(pz*pz)*(sj0*sj0)))+(((0.00288451788799514)*cj0*r00*r01*sj0))+(((-2.0)*(cj0*cj0)*(px*px*px*px)*(r01*r01)))+(((-2.0)*(px*px*px*px)*(r02*r02)))+(((-0.140063999999806)*(px*px)*(r00*r00)*(sj0*sj0)))+(((0.280127999999613)*cj0*py*pz*r00*r02*sj0))+(((0.00194040627199879)*(r02*r02)))+(((5.5968e-7)*cj0*px*py*r00*r02))+(((4.0)*(px*px)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((8.0)*px*r00*r02*(pz*pz*pz)*(sj0*sj0)))+(((4.0)*(px*px)*(pz*pz)*(r02*r02)))+(((-2.0)*(py*py*py*py)*(r00*r00)*(sj0*sj0)))+(((24.0)*cj0*px*pz*r01*r02*sj0*(py*py)))+(((-0.00144225894399757)*(r00*r00)*(sj0*sj0)))+(((0.140063999999806)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-8.0)*(px*px)*(pz*pz)*(r00*r00)))+(((-8.0)*(px*px)*(pz*pz)*(r02*r02)*(sj0*sj0)))+(((8.0)*pz*r01*r02*(py*py*py)))+(((0.280127999999613)*cj0*px*py*sj0*(r00*r00)))+(((-4.0)*cj0*r00*r01*sj0*(py*py*py*py)))+(((-0.140063999999806)*(cj0*cj0)*(py*py)*(r01*r01)))+(((-8.0)*py*r01*r02*(pz*pz*pz)))+(((4.0)*(cj0*cj0)*(px*px)*(py*py)*(r01*r01)))+(((-2.0)*(pz*pz*pz*pz)*(r02*r02)))+(((-8.0)*px*r00*r01*(cj0*cj0)*(py*py*py)))+(((-8.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r02*r02)))+(((8.0)*px*pz*r00*r02*(py*py)*(sj0*sj0)))+(((24.0)*cj0*py*pz*r00*r02*sj0*(px*px)))+(((-5.5968e-7)*px*pz*sj0*(r02*r02)))+(((-8.0)*cj0*pz*r00*r02*sj0*(py*py*py)))+(((-5.5968e-7)*py*pz*r00*r01*sj0))+(((-8.0)*pz*r00*r02*(px*px*px)*(sj0*sj0)))+(((8.0)*py*r00*r01*(cj0*cj0)*(px*px*px)))+(((-0.129599999999903)*(py*py)*(r02*r02)))+(((8.0)*px*r00*r01*(py*py*py)*(sj0*sj0)))+(((-4.0)*(px*px)*(py*py)*(r02*r02)))+(((-16.0)*px*pz*r00*r02*(cj0*cj0)*(py*py)))+(((8.0)*cj0*px*sj0*(py*py*py)*(r01*r01)))+(((-0.129599999999903)*(px*px)*(r02*r02)))+(((-8.0)*(cj0*cj0)*(px*px)*(py*py)*(r00*r00)))+(((0.280127999999613)*cj0*px*pz*r01*r02*sj0))+(((0.140063999999806)*(cj0*cj0)*(pz*pz)*(r01*r01)))+(((4.0)*cj0*r00*r01*sj0*(pz*pz*pz*pz)))+(((-5.5968e-7)*px*pz*sj0*(r00*r00)))+(((8.0)*px*py*r00*r01*(cj0*cj0)*(pz*pz)))+(((0.0794239999996128)*py*pz*r01*r02))+(((-0.280127999999613)*px*py*r00*r01*(sj0*sj0)))+(((-4.0)*(cj0*cj0)*(px*px)*(pz*pz)*(r01*r01)))+(((-0.280127999999613)*px*pz*r00*r02*(sj0*sj0)))+(((24.0)*cj0*r00*r01*sj0*(px*px)*(py*py)))+(((4.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r01*r01)))+(((8.0)*cj0*py*sj0*(px*px*px)*(r00*r00)))+(((0.140063999999806)*(cj0*cj0)*(px*px)*(r01*r01)))+(((-0.280127999999613)*px*py*r00*r01*(cj0*cj0)))+(((-16.0)*py*pz*r01*r02*(px*px)*(sj0*sj0)))+(((8.0)*py*pz*r01*r02*(cj0*cj0)*(px*px)))+(((8.0)*py*r01*r02*(cj0*cj0)*(pz*pz*pz)))+(((0.280127999999613)*cj0*px*py*sj0*(r01*r01)))+(((-8.0)*pz*r01*r02*(cj0*cj0)*(py*py*py)))+(((16.0)*cj0*px*py*sj0*(pz*pz)*(r02*r02)))+(((-8.0)*py*r00*r01*(px*px*px)*(sj0*sj0)))+(((0.0397119999998064)*(pz*pz)*(r02*r02)))+(((0.140063999999806)*(py*py)*(r00*r00)*(sj0*sj0)))+(((8.0)*py*pz*r01*r02*(px*px)))+(((-16.0)*px*py*r00*r01*(pz*pz)))+(((5.5968e-7)*cj0*py*pz*(r01*r01)))+(((4.0)*(px*px)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-8.0)*cj0*px*py*sj0*(pz*pz)*(r00*r00)))+(((-0.280127999999613)*cj0*r00*r01*sj0*(pz*pz)))+(((-2.0)*(py*py*py*py)*(r02*r02)))+(((-5.5968e-7)*cj0*r01*r02*(px*px)))+(((-2.0)*(cj0*cj0)*(py*py*py*py)*(r01*r01)))+(((-8.0)*(px*px)*(py*py)*(r01*r01)*(sj0*sj0)))+(((5.5968e-7)*cj0*py*pz*(r02*r02)))+(((-8.0)*cj0*py*r00*r02*sj0*(pz*pz*pz)))+(((8.0)*pz*r00*r02*(px*px*px)))+(((-5.5968e-7)*px*py*r01*r02*sj0))+(((-4.0)*cj0*r00*r01*sj0*(px*px*px*px)))+(((8.0)*px*pz*r00*r02*(py*py)))+(((-0.0898880000000968)*(py*py)*(r01*r01)))+(((-8.0)*cj0*px*r01*r02*sj0*(pz*pz*pz)))+(((5.5968e-7)*cj0*px*pz*r00*r01))+(((-8.0)*(py*py)*(pz*pz)*(r01*r01)))+(((4.0)*(py*py)*(pz*pz)*(r02*r02)))+(((-0.179776000000194)*px*py*r00*r01))+(((-0.00144225894399757)*(cj0*cj0)*(r01*r01)))+(((-7.02062592e-9)*r00*r02*sj0))+(((-0.280127999999613)*py*pz*r01*r02*(cj0*cj0)))+(((-8.0)*cj0*px*sj0*(py*py*py)*(r00*r00)))+(((-8.0)*cj0*py*sj0*(px*px*px)*(r01*r01)))+(((5.5968e-7)*r00*r02*sj0*(py*py)))+(((-4.0)*(py*py)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.0898880000000968)*(px*px)*(r00*r00))));
433 op[3]=((((1.696)*px*sj0*(py*py)*(r01*r01)))+(((1.696)*cj0*pz*r01*r02*(px*px)))+(((-3.7312e-7)*px*pz*r00*r02))+(((-2.34020864e-9)*(r02*r02)))+(((0.179775999999806)*r00*r02*sj0*(py*py)))+(((-3.7312e-7)*cj0*px*py*sj0*(r01*r01)))+(((-8.8e-7)*r00*r02*(px*px*px)))+(((-8.8e-7)*pz*(px*px)*(r02*r02)))+(((-0.179775999999806)*px*py*r01*r02*sj0))+(((-0.848)*cj0*py*(pz*pz)*(r01*r01)))+(((2.34020864e-9)*(r00*r00)*(sj0*sj0)))+(((-0.848)*cj0*px*r00*r01*(pz*pz)))+(((-3.7312e-7)*cj0*px*pz*r01*r02*sj0))+(((-0.848)*cj0*(py*py*py)*(r01*r01)))+(((-1.696)*cj0*px*py*pz*r00*r02))+(((-8.8e-7)*px*r00*r02*(py*py)))+(((-0.010637312)*cj0*py*(r01*r01)))+(((-8.8e-7)*py*r01*r02*(cj0*cj0)*(px*px)))+(((-0.848)*px*sj0*(py*py)*(r00*r00)))+(((1.103872e-8)*px*r00*r02*(sj0*sj0)))+(((-2.64e-6)*cj0*py*r00*r02*sj0*(px*px)))+(((3.7312e-7)*px*py*r00*r01*(cj0*cj0)))+(((-1.8656e-7)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((2.207744e-8)*cj0*pz*r00*r01*sj0))+(((1.8656e-7)*(px*px)*(r00*r00)*(sj0*sj0)))+(((2.544)*py*r00*r01*sj0*(px*px)))+(((-4.68041728e-9)*cj0*r00*r01*sj0))+(((-0.00225511014399757)*r00*r02*sj0))+(((-1.76e-6)*px*py*pz*r00*r01*(cj0*cj0)))+(((0.848)*sj0*(px*px*px)*(r00*r00)))+(((3.7312e-7)*px*pz*r00*r02*(sj0*sj0)))+(((0.179775999999806)*cj0*py*pz*(r02*r02)))+(((1.76e-6)*pz*(px*px)*(r02*r02)*(sj0*sj0)))+(((0.010637312)*py*r00*r01*sj0))+(((8.8e-7)*(pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((2.34020864e-9)*(cj0*cj0)*(r01*r01)))+(((-1.8656e-7)*(cj0*cj0)*(px*px)*(r01*r01)))+(((-1.696)*pz*r00*r02*sj0*(py*py)))+(((-2.64e-6)*py*r01*r02*(cj0*cj0)*(pz*pz)))+(((3.7312e-7)*cj0*r00*r01*sj0*(pz*pz)))+(((-0.179775999999806)*py*pz*r00*r01*sj0))+(((1.76e-6)*pz*(px*px)*(r00*r00)))+(((1.76e-6)*cj0*px*py*pz*sj0*(r01*r01)))+(((-1.103872e-8)*pz*(cj0*cj0)*(r01*r01)))+(((-3.52e-6)*cj0*px*py*pz*sj0*(r02*r02)))+(((8.8e-7)*pz*(py*py)*(r00*r00)*(sj0*sj0)))+(((-0.848)*cj0*py*(px*px)*(r02*r02)))+(((0.179775999999806)*cj0*px*pz*r00*r01))+(((0.848)*sj0*(px*px*px)*(r02*r02)))+(((1.8656e-7)*(py*py)*(r02*r02)))+(((-0.179775999999806)*cj0*r01*r02*(px*px)))+(((-8.8e-7)*pz*(py*py)*(r02*r02)))+(((8.8e-7)*cj0*r01*r02*sj0*(px*px*px)))+(((-1.76e-6)*cj0*r00*r01*sj0*(pz*pz*pz)))+(((-1.8656e-7)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-1.103872e-8)*pz*(r00*r00)*(sj0*sj0)))+(((1.103872e-8)*py*r01*r02))+(((-1.103872e-8)*cj0*px*r01*r02*sj0))+(((2.64e-6)*cj0*px*r01*r02*sj0*(pz*pz)))+(((2.64e-6)*py*r01*r02*(pz*pz)))+(((0.010637312)*px*sj0*(r00*r00)))+(((1.76e-6)*pz*(cj0*cj0)*(py*py)*(r02*r02)))+(((-1.8656e-7)*(cj0*cj0)*(pz*pz)*(r01*r01)))+(((8.8e-7)*(cj0*cj0)*(pz*pz*pz)*(r01*r01)))+(((2.64e-6)*px*r00*r02*(pz*pz)))+(((1.76e-6)*pz*(py*py)*(r01*r01)))+(((0.848)*py*r00*r01*sj0*(pz*pz)))+(((-3.7312e-7)*cj0*px*py*sj0*(r00*r00)))+(((-0.179775999999806)*px*pz*sj0*(r02*r02)))+(((2.64e-6)*cj0*py*r00*r02*sj0*(pz*pz)))+(((0.848)*px*sj0*(py*py)*(r02*r02)))+(((3.52e-6)*px*py*pz*r00*r01))+(((8.8e-7)*(pz*pz*pz)*(r02*r02)))+(((0.021274624)*pz*r00*r02*sj0))+(((1.8656e-7)*(cj0*cj0)*(py*py)*(r01*r01)))+(((-2.64e-6)*px*r00*r02*(pz*pz)*(sj0*sj0)))+(((-0.848)*cj0*py*(pz*pz)*(r02*r02)))+(((-0.848)*cj0*(py*py*py)*(r02*r02)))+(((1.696)*px*py*pz*r01*r02*sj0))+(((-1.696)*cj0*py*(px*px)*(r00*r00)))+(((3.7312e-7)*px*py*r00*r01*(sj0*sj0)))+(((-8.8e-7)*px*r00*r02*(py*py)*(sj0*sj0)))+(((-1.103872e-8)*cj0*py*r00*r02*sj0))+(((-3.7312e-7)*cj0*py*pz*r00*r02*sj0))+(((0.848)*cj0*py*(px*px)*(r01*r01)))+(((-1.76e-6)*px*py*pz*r00*r01*(sj0*sj0)))+(((1.103872e-8)*px*r00*r02))+(((1.8656e-7)*(px*px)*(r02*r02)))+(((-8.8e-7)*pz*(px*px)*(r00*r00)*(sj0*sj0)))+(((-0.021274624)*cj0*pz*r01*r02))+(((8.8e-7)*r00*r02*(px*px*px)*(sj0*sj0)))+(((-0.848)*r00*r01*sj0*(py*py*py)))+(((-8.8e-7)*py*r01*r02*(px*px)))+(((-1.8656e-7)*(pz*pz)*(r02*r02)))+(((-2.64e-6)*cj0*px*r01*r02*sj0*(py*py)))+(((-0.179775999999806)*px*pz*sj0*(r00*r00)))+(((0.179775999999806)*cj0*py*pz*(r01*r01)))+(((1.76e-6)*cj0*px*py*pz*sj0*(r00*r00)))+(((-8.8e-7)*r01*r02*(py*py*py)))+(((-0.010637312)*cj0*px*r00*r01))+(((8.8e-7)*cj0*r00*r02*sj0*(py*py*py)))+(((3.7312e-7)*py*pz*r01*r02*(cj0*cj0)))+(((0.00225511014399757)*cj0*r01*r02))+(((0.848)*px*sj0*(pz*pz)*(r00*r00)))+(((0.179775999999806)*cj0*px*py*r00*r02))+(((1.76e-6)*py*r01*r02*(px*px)*(sj0*sj0)))+(((0.848)*px*sj0*(pz*pz)*(r02*r02)))+(((8.8e-7)*pz*(cj0*cj0)*(px*px)*(r01*r01)))+(((-3.7312e-7)*py*pz*r01*r02))+(((1.103872e-8)*pz*(r02*r02)))+(((1.103872e-8)*py*r01*r02*(cj0*cj0)))+(((0.010637312)*cj0*py*(r02*r02)))+(((-0.010637312)*px*sj0*(r02*r02)))+(((-2.544)*cj0*px*r00*r01*(py*py)))+(((0.848)*cj0*r00*r01*(px*px*px)))+(((-8.8e-7)*pz*(cj0*cj0)*(py*py)*(r01*r01)))+(((1.76e-6)*px*r00*r02*(cj0*cj0)*(py*py)))+(((8.8e-7)*r01*r02*(cj0*cj0)*(py*py*py))));
434 op[4]=((((1.32e-6)*cj0*px*r00*r01*(py*py)))+(((-1.0)*(cj0*cj0)*(py*py*py*py)*(r01*r01)))+(((4.4e-7)*cj0*px*r00*r01*(pz*pz)))+(((8.8e-7)*cj0*py*(px*px)*(r00*r00)))+(((1.17010432e-9)*r00*r02*sj0))+(((-8.0)*px*pz*r00*r02*(cj0*cj0)*(py*py)))+(((2.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r01*r01)))+(((-4.0)*cj0*pz*r01*r02*sj0*(px*px*px)))+(((0.039712)*cj0*r00*r01*sj0*(pz*pz)))+(((2.0)*cj0*r00*r01*sj0*(pz*pz*pz*pz)))+(((4.0)*py*r00*r01*(cj0*cj0)*(px*px*px)))+(((8.0)*cj0*px*py*sj0*(pz*pz)*(r02*r02)))+(((-0.140064)*py*pz*r01*r02))+(((-8.0)*py*pz*r01*r02*(px*px)*(sj0*sj0)))+(((4.0)*cj0*py*sj0*(px*px*px)*(r00*r00)))+(((-1.272)*cj0*px*r01*r02*sj0*(py*py)))+(((-4.0)*(px*px)*(pz*pz)*(r02*r02)*(sj0*sj0)))+(((-4.0)*(px*px)*(pz*pz)*(r00*r00)))+(((-0.848)*px*py*pz*r00*r01*(sj0*sj0)))+(((-4.4e-7)*cj0*py*(px*px)*(r01*r01)))+(((-4.4e-7)*py*r00*r01*sj0*(pz*pz)))+(((-4.0)*px*r00*r01*(cj0*cj0)*(py*py*py)))+(((0.424)*cj0*r01*r02*sj0*(px*px*px)))+(((-0.424)*py*r01*r02*(cj0*cj0)*(px*px)))+(((-0.039712)*cj0*py*pz*r00*r02*sj0))+(((2.0)*(px*px)*(py*py)*(r00*r00)*(sj0*sj0)))+(((-1.0)*(px*px*px*px)*(r00*r00)*(sj0*sj0)))+(((1.272)*cj0*px*r01*r02*sj0*(pz*pz)))+(((-1.0)*(cj0*cj0)*(pz*pz*pz*pz)*(r01*r01)))+(((0.848)*py*r01*r02*(px*px)*(sj0*sj0)))+(((-4.0)*cj0*px*r01*r02*sj0*(pz*pz*pz)))+(((-1.272)*px*r00*r02*(pz*pz)*(sj0*sj0)))+(((-4.0)*py*r00*r01*(px*px*px)*(sj0*sj0)))+(((-1.32e-6)*py*r00*r01*sj0*(px*px)))+(((4.0)*px*py*r00*r01*(cj0*cj0)*(pz*pz)))+(((0.0250879999999516)*(px*px)*(r02*r02)))+(((-0.019856)*(cj0*cj0)*(px*px)*(r01*r01)))+(((4.4e-7)*cj0*py*(pz*pz)*(r02*r02)))+(((12.0)*cj0*px*pz*r01*r02*sj0*(py*py)))+(((-4.0)*cj0*py*r00*r02*sj0*(pz*pz*pz)))+(((-0.019856)*(cj0*cj0)*(pz*pz)*(r01*r01)))+(((0.424)*cj0*r00*r02*sj0*(py*py*py)))+(((-4.4e-7)*px*sj0*(pz*pz)*(r02*r02)))+(((-2.0)*(px*px)*(py*py)*(r02*r02)))+(((-4.0)*cj0*px*py*sj0*(pz*pz)*(r01*r01)))+(((-8.0)*px*py*r00*r01*(pz*pz)))+(((0.848)*cj0*px*py*pz*sj0*(r01*r01)))+(((2.0)*(cj0*cj0)*(px*px)*(py*py)*(r01*r01)))+(((-0.039712)*cj0*px*py*sj0*(r01*r01)))+(((-0.424)*py*r01*r02*(px*px)))+(((0.424)*(pz*pz*pz)*(r02*r02)))+(((-5.51936e-9)*cj0*py*(r02*r02)))+(((0.424)*(pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.000157351935999393)*(r02*r02)))+(((0.019856)*(cj0*cj0)*(py*py)*(r01*r01)))+(((0.424)*(cj0*cj0)*(pz*pz*pz)*(r01*r01)))+(((-0.019856)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((0.424)*r00*r02*(px*px*px)*(sj0*sj0)))+(((-0.005318656)*pz*(r00*r00)*(sj0*sj0)))+(((-4.0)*cj0*px*sj0*(py*py*py)*(r00*r00)))+(((-2.0)*cj0*r00*r01*sj0*(py*py*py*py)))+(((2.0)*(px*px)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.039712)*cj0*px*py*sj0*(r00*r00)))+(((0.039712)*py*pz*r01*r02*(cj0*cj0)))+(((-9.328e-8)*cj0*px*py*r00*r02))+(((-1.272)*cj0*py*r00*r02*sj0*(px*px)))+(((4.4e-7)*px*sj0*(py*py)*(r00*r00)))+(((-0.039712)*cj0*px*pz*r01*r02*sj0))+(((4.0)*pz*r01*r02*(py*py*py)))+(((-0.005318656)*cj0*px*r01*r02*sj0))+(((0.010637312)*cj0*pz*r00*r01*sj0))+(((0.848)*cj0*px*py*pz*sj0*(r00*r00)))+(((5.51936e-9)*px*sj0*(r02*r02)))+(((-0.848)*px*py*pz*r00*r01*(cj0*cj0)))+(((1.103872e-8)*cj0*pz*r01*r02))+(((-0.424)*pz*(px*px)*(r02*r02)))+(((0.424)*pz*(cj0*cj0)*(px*px)*(r01*r01)))+(((-4.4e-7)*cj0*r00*r01*(px*px*px)))+(((-4.0)*py*r01*r02*(pz*pz*pz)))+(((-4.0)*cj0*pz*r00*r02*sj0*(py*py*py)))+(((-0.424)*px*r00*r02*(py*py)))+(((-4.0)*cj0*py*sj0*(px*px*px)*(r01*r01)))+(((-1.17010432e-9)*cj0*r01*r02))+(((4.0)*px*r00*r01*(py*py*py)*(sj0*sj0)))+(((4.0)*py*pz*r01*r02*(px*px)))+(((9.328e-8)*py*pz*r00*r01*sj0))+(((1.272)*py*r01*r02*(pz*pz)))+(((5.51936e-9)*cj0*py*(r01*r01)))+(((4.4e-7)*cj0*py*(pz*pz)*(r01*r01)))+(((-9.328e-8)*r00*r02*sj0*(py*py)))+(((0.005318656)*px*r00*r02*(sj0*sj0)))+(((-0.424)*r01*r02*(py*py*py)))+(((9.328e-8)*px*pz*sj0*(r00*r00)))+(((4.0)*cj0*px*sj0*(py*py*py)*(r01*r01)))+(((4.0)*pz*r00*r02*(px*px*px)))+(((0.005318656)*px*r00*r02))+(((4.4e-7)*cj0*(py*py*py)*(r02*r02)))+(((0.0250879999999516)*(py*py)*(r02*r02)))+(((0.424)*pz*(py*py)*(r00*r00)*(sj0*sj0)))+(((1.272)*cj0*py*r00*r02*sj0*(pz*pz)))+(((-1.103872e-8)*pz*r00*r02*sj0))+(((-4.0)*pz*r01*r02*(cj0*cj0)*(py*py*py)))+(((0.005318656)*pz*(r02*r02)))+(((-0.005318656)*pz*(cj0*cj0)*(r01*r01)))+(((-0.140064)*px*pz*r00*r02))+(((0.005318656)*py*r01*r02))+(((-4.0)*cj0*px*py*sj0*(pz*pz)*(r00*r00)))+(((-4.0)*pz*r00*r02*(px*px*px)*(sj0*sj0)))+(((-2.0)*(py*py)*(pz*pz)*(r00*r00)*(sj0*sj0)))+(((-0.424)*px*r00*r02*(py*py)*(sj0*sj0)))+(((-9.328e-8)*cj0*py*pz*(r01*r01)))+(((2.0)*(px*px)*(pz*pz)*(r02*r02)))+(((-0.848)*cj0*r00*r01*sj0*(pz*pz*pz)))+(((-0.0008128512)*cj0*r00*r01*sj0))+(((-1.0)*(py*py*py*py)*(r02*r02)))+(((-0.005318656)*cj0*py*r00*r02*sj0))+(((0.019856)*(px*px)*(r00*r00)*(sj0*sj0)))+(((-2.0)*(cj0*cj0)*(px*px)*(pz*pz)*(r01*r01)))+(((4.0)*px*r00*r02*(pz*pz*pz)*(sj0*sj0)))+(((-4.4e-7)*px*sj0*(py*py)*(r02*r02)))+(((-1.696)*cj0*px*py*pz*sj0*(r02*r02)))+(((-0.070032)*(pz*pz)*(r02*r02)))+(((-8.8e-7)*px*sj0*(py*py)*(r01*r01)))+(((8.8e-7)*cj0*px*py*pz*r00*r02))+(((-2.0)*cj0*r00*r01*sj0*(px*px*px*px)))+(((0.0004064256)*(cj0*cj0)*(r01*r01)))+(((-0.424)*r00*r02*(px*px*px)))+(((-1.0)*(pz*pz*pz*pz)*(r00*r00)*(sj0*sj0)))+(((4.0)*px*pz*r00*r02*(py*py)*(sj0*sj0)))+(((-0.424)*pz*(px*px)*(r00*r00)*(sj0*sj0)))+(((9.328e-8)*px*pz*sj0*(r02*r02)))+(((0.848)*pz*(py*py)*(r01*r01)))+(((-8.8e-7)*cj0*pz*r01*r02*(px*px)))+(((0.039712)*px*py*r00*r01*(sj0*sj0)))+(((0.424)*r01*r02*(cj0*cj0)*(py*py*py)))+(((-4.4e-7)*sj0*(px*px*px)*(r02*r02)))+(((4.0)*py*r01*r02*(cj0*cj0)*(pz*pz*pz)))+(((9.328e-8)*px*py*r01*r02*sj0))+(((-4.0)*(cj0*cj0)*(px*px)*(py*py)*(r00*r00)))+(((9.328e-8)*cj0*r01*r02*(px*px)))+(((-4.0)*(py*py)*(pz*pz)*(r01*r01)))+(((-1.0)*(pz*pz*pz*pz)*(r02*r02)))+(((-4.4e-7)*sj0*(px*px*px)*(r00*r00)))+(((12.0)*cj0*r00*r01*sj0*(px*px)*(py*py)))+(((-4.0)*px*r00*r02*(pz*pz*pz)))+(((0.0004064256)*(r00*r00)*(sj0*sj0)))+(((-9.328e-8)*cj0*px*pz*r00*r01))+(((0.848)*px*r00*r02*(cj0*cj0)*(py*py)))+(((-5.51936e-9)*py*r00*r01*sj0))+(((-5.51936e-9)*px*sj0*(r00*r00)))+(((-4.4e-7)*px*sj0*(pz*pz)*(r00*r00)))+(((-0.0449440000000484)*(py*py)*(r01*r01)))+(((-0.424)*pz*(cj0*cj0)*(py*py)*(r01*r01)))+(((0.848)*pz*(px*px)*(r02*r02)*(sj0*sj0)))+(((8.8e-7)*pz*r00*r02*sj0*(py*py)))+(((4.0)*px*py*r00*r01*(pz*pz)*(sj0*sj0)))+(((-8.8e-7)*px*py*pz*r01*r02*sj0))+(((0.039712)*px*pz*r00*r02*(sj0*sj0)))+(((4.0)*py*pz*r01*r02*(cj0*cj0)*(px*px)))+(((4.0)*px*pz*r00*r02*(py*py)))+(((2.0)*(py*py)*(pz*pz)*(r02*r02)))+(((0.848)*pz*(px*px)*(r00*r00)))+(((1.696)*px*py*pz*r00*r01))+(((0.005318656)*py*r01*r02*(cj0*cj0)))+(((0.848)*pz*(cj0*cj0)*(py*py)*(r02*r02)))+(((1.272)*px*r00*r02*(pz*pz)))+(((-1.272)*py*r01*r02*(cj0*cj0)*(pz*pz)))+(((-4.0)*(px*px)*(py*py)*(r01*r01)*(sj0*sj0)))+(((-1.0)*(cj0*cj0)*(px*px*px*px)*(r01*r01)))+(((-1.0)*(py*py*py*py)*(r00*r00)*(sj0*sj0)))+(((4.4e-7)*cj0*py*(px*px)*(r02*r02)))+(((0.039712)*px*py*r00*r01*(cj0*cj0)))+(((-9.328e-8)*cj0*py*pz*(r02*r02)))+(((-0.424)*pz*(py*py)*(r02*r02)))+(((-0.019856)*(py*py)*(r00*r00)*(sj0*sj0)))+(((5.51936e-9)*cj0*px*r00*r01))+(((-1.0)*(px*px*px*px)*(r02*r02)))+(((-4.0)*(cj0*cj0)*(py*py)*(pz*pz)*(r02*r02)))+(((12.0)*cj0*py*pz*r00*r02*sj0*(px*px)))+(((4.4e-7)*cj0*(py*py*py)*(r01*r01)))+(((4.4e-7)*r00*r01*sj0*(py*py*py)))+(((-0.0449440000000484)*(px*px)*(r00*r00)))+(((-0.0898880000000968)*px*py*r00*r01)));
435 polyroots4(op,zeror,numroots);
436 IkReal j1array[4], cj1array[4], sj1array[4], tempj1array[1];
437 int numsolutions = 0;
438 for(
int ij1 = 0; ij1 < numroots; ++ij1)
440 IkReal htj1 = zeror[ij1];
441 tempj1array[0]=((2.0)*(
atan(htj1)));
442 for(
int kj1 = 0; kj1 < 1; ++kj1)
444 j1array[numsolutions] = tempj1array[kj1];
445 if( j1array[numsolutions] >
IKPI )
447 j1array[numsolutions]-=
IK2PI;
449 else if( j1array[numsolutions] < -
IKPI )
451 j1array[numsolutions]+=
IK2PI;
453 sj1array[numsolutions] =
IKsin(j1array[numsolutions]);
454 cj1array[numsolutions] =
IKcos(j1array[numsolutions]);
458 bool j1valid[4]={
true,
true,
true,
true};
460 for(
int ij1 = 0; ij1 < numsolutions; ++ij1)
466 j1 = j1array[ij1]; cj1 = cj1array[ij1]; sj1 = sj1array[ij1];
469 _ij1[0] = ij1; _ij1[1] = -1;
470 for(
int iij1 = ij1+1; iij1 < numsolutions; ++iij1)
474 j1valid[iij1]=
false; _ij1[1] = iij1;
break;
478 IkReal j5array[2], cj5array[2], sj5array[2];
479 bool j5valid[2]={
false};
481 sj5array[0]=((((-1.0)*r01*sj0))+(((-1.0)*cj0*r00)));
484 j5valid[0] = j5valid[1] =
true;
485 j5array[0] =
IKasin(sj5array[0]);
486 cj5array[0] =
IKcos(j5array[0]);
487 sj5array[1] = sj5array[0];
488 j5array[1] = j5array[0] > 0 ? (
IKPI-j5array[0]) : (-
IKPI-j5array[0]);
489 cj5array[1] = -cj5array[0];
491 else if( isnan(sj5array[0]) )
495 cj5array[0] = 1; sj5array[0] = 0; j5array[0] = 0;
497 for(
int ij5 = 0; ij5 < 2; ++ij5)
503 _ij5[0] = ij5; _ij5[1] = -1;
504 for(
int iij5 = ij5+1; iij5 < 2; ++iij5)
508 j5valid[iij5]=
false; _ij5[1] = iij5;
break;
511 j5 = j5array[ij5]; cj5 = cj5array[ij5]; sj5 = sj5array[ij5];
517 if(
IKabs(j3eval[0]) < 0.0000010000000000 ||
IKabs(j3eval[1]) < 0.0000010000000000 )
521 bool bgotonextstatement =
true;
524 evalcond[0]=((-3.14159265358979)+(
IKfmod(((3.14159265358979)+(
IKabs(((-1.5707963267949)+j5)))), 6.28318530717959)));
525 if(
IKabs(evalcond[0]) < 0.0000050000000000 )
527 bgotonextstatement=
false;
529 IkReal j3array[2], cj3array[2], sj3array[2];
530 bool j3valid[2]={
false};
532 IkReal x30=((8.92857142856662)*sj1);
535 IkReal x33=((9.26549865228612e-6)*cj1);
536 if( (((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x30*x31))+(((-1.0)*x32*x33))+(((42.1159029649369)*(pz*pz)))+((x30*x32))+((x31*x33)))) < -1-
IKFAST_SINCOS_THRESH || (((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x30*x31))+(((-1.0)*x32*x33))+(((42.1159029649369)*(pz*pz)))+((x30*x32))+((x31*x33)))) > 1+
IKFAST_SINCOS_THRESH )
538 IkReal x34=((-1.0)*(
IKasin(((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x30*x31))+(((-1.0)*x32*x33))+(((42.1159029649369)*(pz*pz)))+((x30*x32))+((x31*x33))))));
539 j3array[0]=((-1.57079736453075)+(((-1.0)*x34)));
540 sj3array[0]=
IKsin(j3array[0]);
541 cj3array[0]=
IKcos(j3array[0]);
542 j3array[1]=((1.57079528905905)+x34);
543 sj3array[1]=
IKsin(j3array[1]);
544 cj3array[1]=
IKcos(j3array[1]);
545 if( j3array[0] >
IKPI )
549 else if( j3array[0] < -
IKPI )
553 if( j3array[1] >
IKPI )
557 else if( j3array[1] < -
IKPI )
561 for(
int ij3 = 0; ij3 < 2; ++ij3)
567 _ij3[0] = ij3; _ij3[1] = -1;
568 for(
int iij3 = ij3+1; iij3 < 2; ++iij3)
572 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
575 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
581 IkReal x38=((0.212)*py);
582 IkReal x39=(r00*sj1);
583 IkReal x40=(cj0*r00);
585 IkReal x42=((2.2e-7)*cj1);
586 IkReal x43=(cj1*r02);
587 IkReal x44=((2.0)*px);
590 IkReal x47=(r01*sj0);
591 IkReal x48=((2.2e-7)*sj1);
593 IkReal x50=((1.0)*x40);
594 IkReal x51=((0.212)*cj1*pz);
595 evalcond[0]=((-0.0237800000000121)+(((2.0)*x45*x46))+(((2.0)*cj0*py*x41))+(((-1.0)*sj0*x38*x43))+(((-0.212)*x43*x49))+(((-1.0)*x38*x39))+((x35*x40))+((cj0*x44*x45))+(((2.464e-8)*(
IKsin(j3))))+((x36*x47))+(((0.212)*sj1*x41))+((py*r00*x42))+(((-1.0)*x41*x42))+(((-1.0)*x37*x50))+(((-1.0)*x37*x47))+(((-0.023744)*(
IKcos(j3))))+((pz*x47*x48))+(((-1.0)*r02*x48*x49))+((x40*x51))+(((-1.0)*x36*x50))+((x47*x51))+((r00*x44*x46))+(((-0.0112360000000121)*x47))+(((-0.0112360000000121)*x40))+(((-1.0)*r02*x46*x48))+(((2.2e-7)*cj0*pz*x39))+(((-1.0)*x35*x47)));
607 j2eval[0]=((965097.402597894)+(((-1.0)*sj3))+(((963636.363636364)*cj3)));
608 j2eval[1]=
IKsign(((0.0237800000000121)+(((-2.464e-8)*sj3))+(((0.023744)*cj3))));
609 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
616 IkReal j2array[1], cj2array[1], sj2array[1];
617 bool j2valid[1]={
false};
619 IkReal x52=((0.112)*cj1);
621 IkReal x54=((0.106)*cj1);
624 IkReal x57=((1.1e-7)*cj1);
625 IkReal x58=((0.106)*sj1);
626 IkReal x59=((1.1e-7)*sj1);
627 IkReal x60=((0.112)*sj1);
628 IkReal x61=((0.112)*pz*sj3);
633 CheckValue<IkReal> x63 =
IKatan2WithCheck(IkReal(((((-1.0)*x53*x59))+(((-1.0)*x53*x54))+(((-1.0)*x56*x60))+(((1.232e-8)*cj3))+((cj3*x52*x55))+(((-1.0)*pz*sj3*x52))+(((-1.0)*sj3*x55*x60))+(((-1.0)*pz*x58))+((sj3*x53*x60))+((pz*x57))+(((-1.0)*cj3*x52*x53))+(((0.011872)*sj3))+((x55*x59))+((x54*x55)))),IkReal(((-0.0112360000000121)+(((-1.0)*x53*x58))+(((-1.0)*sj3*x52*x53))+(((-1.0)*pz*sj3*x60))+((cj3*x55*x60))+(((1.232e-8)*sj3))+(((-1.0)*x55*x57))+((x53*x57))+((x52*x56))+(((-0.011872)*cj3))+((pz*x54))+((pz*x59))+((sj3*x52*x55))+((x55*x58))+(((-1.0)*cj3*x53*x60)))),
IKFAST_ATAN2_MAGTHRESH);
637 j2array[0]=((-1.5707963267949)+(((1.5707963267949)*(x62.
value)))+(x63.
value));
638 sj2array[0]=
IKsin(j2array[0]);
639 cj2array[0]=
IKcos(j2array[0]);
640 if( j2array[0] >
IKPI )
644 else if( j2array[0] < -
IKPI )
648 for(
int ij2 = 0; ij2 < 1; ++ij2)
654 _ij2[0] = ij2; _ij2[1] = -1;
655 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
659 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
662 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
665 IkReal x64=
IKsin(j2);
666 IkReal x65=
IKcos(j2);
667 IkReal x66=((1.0)*r01);
669 IkReal x68=(r00*sj1);
670 IkReal x69=(cj0*r00);
672 IkReal x71=(cj0*r02);
674 IkReal x73=(r02*sj0);
675 IkReal x74=(r01*sj0);
678 IkReal x77=((1.1e-7)*x64);
679 IkReal x78=((0.106)*x65);
680 IkReal x79=((1.1e-7)*x65);
681 IkReal x80=((0.106)*x64);
682 IkReal x81=((0.112)*x65);
683 IkReal x82=((0.112)*x64);
684 IkReal x83=((1.0)*py*sj1);
685 IkReal x84=(sj3*x82);
686 IkReal x85=(cj3*x81);
687 IkReal x86=(cj3*x82);
688 IkReal x87=(sj3*x81);
689 IkReal x88=(x77+x78+x85);
690 IkReal x89=(x80+x86+x87);
691 evalcond[0]=((-1.1e-7)+(((-1.0)*x79))+((cj0*x72))+x76+x89+(((-1.0)*sj0*x75)));
692 evalcond[1]=((-0.106)+(((-1.0)*cj0*x83))+x67+x84+((sj0*x70))+(((-1.0)*x88)));
693 evalcond[2]=((((-1.0)*sj0*x66*x67))+(((-1.0)*x66*x70))+(((0.106)*x74))+(((0.106)*x69))+x84+(((-1.0)*x67*x69))+((x72*x73))+(((-1.0)*x88))+((py*x68))+((x71*x75)));
694 evalcond[3]=((((-1.0)*x73*x83))+(((-1.0)*x70*x71))+(((-1.0)*x66*x75))+((cj0*pz*x68))+(((-1.1e-7)*x74))+x79+(((-1.1e-7)*x69))+(((-1.0)*x89))+((x74*x76))+((r00*x72)));
702 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
703 vinfos[0].jointtype = 1;
704 vinfos[0].foffset = j0;
705 vinfos[0].indices[0] = _ij0[0];
706 vinfos[0].indices[1] = _ij0[1];
707 vinfos[0].maxsolutions = _nj0;
708 vinfos[1].jointtype = 1;
709 vinfos[1].foffset = j1;
710 vinfos[1].indices[0] = _ij1[0];
711 vinfos[1].indices[1] = _ij1[1];
712 vinfos[1].maxsolutions = _nj1;
713 vinfos[2].jointtype = 1;
714 vinfos[2].foffset = j2;
715 vinfos[2].indices[0] = _ij2[0];
716 vinfos[2].indices[1] = _ij2[1];
717 vinfos[2].maxsolutions = _nj2;
718 vinfos[3].jointtype = 1;
719 vinfos[3].foffset = j3;
720 vinfos[3].indices[0] = _ij3[0];
721 vinfos[3].indices[1] = _ij3[1];
722 vinfos[3].maxsolutions = _nj3;
723 vinfos[4].jointtype = 1;
724 vinfos[4].foffset = j5;
725 vinfos[4].indices[0] = _ij5[0];
726 vinfos[4].indices[1] = _ij5[1];
727 vinfos[4].maxsolutions = _nj5;
728 std::vector<int> vfree(0);
742 if( bgotonextstatement )
744 bool bgotonextstatement =
true;
747 evalcond[0]=((-3.14159265358979)+(
IKfmod(((3.14159265358979)+(
IKabs(((1.5707963267949)+j5)))), 6.28318530717959)));
748 if(
IKabs(evalcond[0]) < 0.0000050000000000 )
750 bgotonextstatement=
false;
752 IkReal j3array[2], cj3array[2], sj3array[2];
753 bool j3valid[2]={
false};
755 IkReal x90=((8.92857142856662)*sj1);
758 IkReal x93=((9.26549865228612e-6)*cj1);
759 if( (((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x90*x91))+((x90*x92))+(((42.1159029649369)*(pz*pz)))+(((-1.0)*x92*x93))+((x91*x93)))) < -1-
IKFAST_SINCOS_THRESH || (((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x90*x91))+((x90*x92))+(((42.1159029649369)*(pz*pz)))+(((-1.0)*x92*x93))+((x91*x93)))) > 1+
IKFAST_SINCOS_THRESH )
761 IkReal x94=((-1.0)*(
IKasin(((-0.528301886792168)+(((42.1159029649369)*(py*py)))+(((-8.92857142856662)*cj1*pz))+(((42.1159029649369)*(px*px)))+(((-9.26549865228612e-6)*pz*sj1))+(((-1.0)*x90*x91))+((x90*x92))+(((42.1159029649369)*(pz*pz)))+(((-1.0)*x92*x93))+((x91*x93))))));
762 j3array[0]=((-1.57079736453075)+(((-1.0)*x94)));
763 sj3array[0]=
IKsin(j3array[0]);
764 cj3array[0]=
IKcos(j3array[0]);
765 j3array[1]=((1.57079528905905)+x94);
766 sj3array[1]=
IKsin(j3array[1]);
767 cj3array[1]=
IKcos(j3array[1]);
768 if( j3array[0] >
IKPI )
772 else if( j3array[0] < -
IKPI )
776 if( j3array[1] >
IKPI )
780 else if( j3array[1] < -
IKPI )
784 for(
int ij3 = 0; ij3 < 2; ++ij3)
790 _ij3[0] = ij3; _ij3[1] = -1;
791 for(
int iij3 = ij3+1; iij3 < 2; ++iij3)
795 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
798 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
804 IkReal x98=((0.212)*py);
805 IkReal x99=(r00*sj1);
806 IkReal x100=(cj0*r00);
807 IkReal x101=(px*r01);
808 IkReal x102=((2.2e-7)*cj1);
809 IkReal x103=(cj1*r02);
810 IkReal x104=((2.0)*px);
811 IkReal x105=(pz*r02);
812 IkReal x106=(py*sj0);
813 IkReal x107=(r01*sj0);
814 IkReal x108=((2.2e-7)*sj1);
815 IkReal x109=(cj0*px);
816 IkReal x110=((1.0)*x100);
817 IkReal x111=((0.212)*cj1*pz);
818 evalcond[0]=((0.0237800000000121)+(((2.2e-7)*cj0*pz*x99))+((x100*x111))+(((-1.0)*x98*x99))+((x100*x95))+(((-1.0)*x101*x102))+(((2.0)*x105*x106))+((x107*x96))+(((-1.0)*r02*x106*x108))+((pz*x107*x108))+(((-1.0)*r02*x108*x109))+(((-2.464e-8)*(
IKsin(j3))))+(((-1.0)*x107*x97))+(((-1.0)*x107*x95))+(((-1.0)*x110*x96))+(((-1.0)*x110*x97))+(((2.0)*cj0*py*x101))+(((-0.212)*x103*x109))+(((0.212)*sj1*x101))+(((0.023744)*(
IKcos(j3))))+(((-1.0)*sj0*x103*x98))+((cj0*x104*x105))+((r00*x104*x106))+(((-0.0112360000000121)*x100))+(((-0.0112360000000121)*x107))+((py*r00*x102))+((x107*x111)));
830 j2eval[0]=((965097.402597894)+(((-1.0)*sj3))+(((963636.363636364)*cj3)));
831 j2eval[1]=
IKsign(((0.0237800000000121)+(((-2.464e-8)*sj3))+(((0.023744)*cj3))));
832 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
839 IkReal j2array[1], cj2array[1], sj2array[1];
840 bool j2valid[1]={
false};
842 IkReal x112=((0.112)*cj1);
843 IkReal x113=(cj0*py);
844 IkReal x114=((0.106)*cj1);
845 IkReal x115=(px*sj0);
846 IkReal x116=(cj3*pz);
847 IkReal x117=((1.1e-7)*cj1);
848 IkReal x118=((0.106)*sj1);
849 IkReal x119=((1.1e-7)*sj1);
850 IkReal x120=((0.112)*sj1);
851 IkReal x121=((0.112)*pz*sj3);
856 CheckValue<IkReal> x123 =
IKatan2WithCheck(IkReal((((cj3*x112*x115))+(((-1.0)*sj3*x115*x120))+(((1.232e-8)*cj3))+((pz*x117))+((x114*x115))+(((-1.0)*x113*x119))+(((-1.0)*x113*x114))+(((-1.0)*x116*x120))+(((-1.0)*cj3*x112*x113))+(((-1.0)*pz*sj3*x112))+(((0.011872)*sj3))+((x115*x119))+((sj3*x113*x120))+(((-1.0)*pz*x118)))),IkReal(((-0.0112360000000121)+((sj3*x112*x115))+((x112*x116))+(((-1.0)*cj3*x113*x120))+((pz*x119))+((pz*x114))+(((-1.0)*x113*x118))+(((1.232e-8)*sj3))+((x113*x117))+((cj3*x115*x120))+(((-1.0)*x115*x117))+(((-1.0)*pz*sj3*x120))+(((-1.0)*sj3*x112*x113))+(((-0.011872)*cj3))+((x115*x118)))),
IKFAST_ATAN2_MAGTHRESH);
860 j2array[0]=((-1.5707963267949)+(((1.5707963267949)*(x122.
value)))+(x123.
value));
861 sj2array[0]=
IKsin(j2array[0]);
862 cj2array[0]=
IKcos(j2array[0]);
863 if( j2array[0] >
IKPI )
867 else if( j2array[0] < -
IKPI )
871 for(
int ij2 = 0; ij2 < 1; ++ij2)
877 _ij2[0] = ij2; _ij2[1] = -1;
878 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
882 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
885 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
888 IkReal x124=
IKsin(j2);
889 IkReal x125=
IKcos(j2);
890 IkReal x126=((1.0)*r01);
891 IkReal x127=(cj1*pz);
892 IkReal x128=(r00*sj1);
893 IkReal x129=(cj0*r00);
894 IkReal x130=(px*sj1);
895 IkReal x131=(cj0*r02);
896 IkReal x132=(cj1*py);
897 IkReal x133=(r02*sj0);
898 IkReal x134=(r01*sj0);
899 IkReal x135=(cj1*px);
900 IkReal x136=(pz*sj1);
901 IkReal x137=((1.1e-7)*x124);
902 IkReal x138=((0.106)*x125);
903 IkReal x139=((0.106)*x124);
904 IkReal x140=((1.1e-7)*x125);
905 IkReal x141=((0.112)*x125);
906 IkReal x142=((0.112)*x124);
907 IkReal x143=((1.0)*py*sj1);
908 IkReal x144=(cj3*x141);
909 IkReal x145=(sj3*x142);
910 IkReal x146=(cj3*x142);
911 IkReal x147=(sj3*x141);
912 IkReal x148=(x144+x137+x138);
913 IkReal x149=(x146+x147+x139);
914 evalcond[0]=((-1.1e-7)+(((-1.0)*x140))+((cj0*x132))+x149+x136+(((-1.0)*sj0*x135)));
915 evalcond[1]=((-0.106)+(((-1.0)*x148))+(((-1.0)*cj0*x143))+x145+x127+((sj0*x130)));
916 evalcond[2]=((((-1.0)*x145))+(((0.106)*x134))+(((0.106)*x129))+(((-1.0)*x127*x129))+((py*x128))+(((-1.0)*x126*x130))+x148+((x131*x135))+(((-1.0)*sj0*x126*x127))+((x132*x133)));
917 evalcond[3]=(((cj0*pz*x128))+(((-1.0)*x140))+(((-1.0)*x130*x131))+(((-1.0)*x133*x143))+(((-1.1e-7)*x129))+(((-1.0)*x126*x135))+(((-1.1e-7)*x134))+((r00*x132))+x149+((x134*x136)));
925 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
926 vinfos[0].jointtype = 1;
927 vinfos[0].foffset = j0;
928 vinfos[0].indices[0] = _ij0[0];
929 vinfos[0].indices[1] = _ij0[1];
930 vinfos[0].maxsolutions = _nj0;
931 vinfos[1].jointtype = 1;
932 vinfos[1].foffset = j1;
933 vinfos[1].indices[0] = _ij1[0];
934 vinfos[1].indices[1] = _ij1[1];
935 vinfos[1].maxsolutions = _nj1;
936 vinfos[2].jointtype = 1;
937 vinfos[2].foffset = j2;
938 vinfos[2].indices[0] = _ij2[0];
939 vinfos[2].indices[1] = _ij2[1];
940 vinfos[2].maxsolutions = _nj2;
941 vinfos[3].jointtype = 1;
942 vinfos[3].foffset = j3;
943 vinfos[3].indices[0] = _ij3[0];
944 vinfos[3].indices[1] = _ij3[1];
945 vinfos[3].maxsolutions = _nj3;
946 vinfos[4].jointtype = 1;
947 vinfos[4].foffset = j5;
948 vinfos[4].indices[0] = _ij5[0];
949 vinfos[4].indices[1] = _ij5[1];
950 vinfos[4].maxsolutions = _nj5;
951 std::vector<int> vfree(0);
965 if( bgotonextstatement )
967 bool bgotonextstatement =
true;
972 bgotonextstatement=
false;
977 if( bgotonextstatement )
987 IkReal j3array[1], cj3array[1], sj3array[1];
988 bool j3valid[1]={
false};
990 IkReal x150=((1100000000.0)*px);
991 IkReal x151=(r02*sj0);
992 IkReal x152=((112360000000121.0)*r02);
993 IkReal x153=((1.06e+15)*r00);
994 IkReal x154=(pz*sj0);
995 IkReal x155=((112360000000121.0)*sj1);
996 IkReal x156=(cj0*r01);
997 IkReal x157=(py*r01);
998 IkReal x158=(r00*sj0);
999 IkReal x159=((112360000000121.0)*cj1);
1000 IkReal x160=(pz*r02);
1001 IkReal x161=(cj0*py*r02);
1002 CheckValue<IkReal> x162 =
IKatan2WithCheck(IkReal(((((1100000000.0)*r00*x154))+(((1.06e+15)*x160))+(((1.06e+15)*x157))+(((1100000000.0)*x161))+(((123200000.0)*cj5))+(((-1.0)*x150*x151))+((x155*x156))+(((-1100000000.0)*pz*x156))+((px*x153))+(((-1.0)*cj1*x152))+(((-1.0)*x155*x158)))),IkReal(((((-1.06e+15)*x161))+(((1100000000.0)*x157))+(((1100000000.0)*x160))+(((-1.0)*x153*x154))+((r00*x150))+(((-118720000000000.0)*cj5))+(((1.06e+15)*px*x151))+(((1.06e+15)*pz*x156))+(((-1.0)*x156*x159))+((x158*x159))+(((-1.0)*sj1*x152)))),
IKFAST_ATAN2_MAGTHRESH);
1010 j3array[0]=((-1.5707963267949)+(x162.
value)+(((1.5707963267949)*(x163.
value))));
1011 sj3array[0]=
IKsin(j3array[0]);
1012 cj3array[0]=
IKcos(j3array[0]);
1013 if( j3array[0] >
IKPI )
1017 else if( j3array[0] < -
IKPI )
1018 { j3array[0]+=
IK2PI;
1021 for(
int ij3 = 0; ij3 < 1; ++ij3)
1027 _ij3[0] = ij3; _ij3[1] = -1;
1028 for(
int iij3 = ij3+1; iij3 < 1; ++iij3)
1032 j3valid[iij3]=
false; _ij3[1] = iij3;
break;
1035 j3 = j3array[ij3]; cj3 = cj3array[ij3]; sj3 = sj3array[ij3];
1038 IkReal x164=
IKcos(j3);
1039 IkReal x165=
IKsin(j3);
1043 IkReal x169=(py*r00);
1044 IkReal x170=((2.0)*px);
1045 IkReal x171=((1.1e-7)*cj1);
1046 IkReal x172=(cj0*r01);
1047 IkReal x173=((0.212)*sj1);
1048 IkReal x174=(cj0*r00);
1049 IkReal x175=(r00*sj0);
1050 IkReal x176=((0.212)*cj1);
1051 IkReal x177=(cj0*py);
1052 IkReal x178=((1.1e-7)*sj1);
1053 IkReal x179=((2.2e-7)*cj1);
1054 IkReal x180=(px*r01);
1055 IkReal x181=((0.106)*cj1);
1056 IkReal x182=(cj0*r02);
1057 IkReal x183=(px*sj0);
1058 IkReal x184=((1.0)*pz);
1059 IkReal x185=(r01*sj0);
1060 IkReal x186=((2.2e-7)*sj1);
1061 IkReal x187=((0.106)*sj1);
1062 IkReal x188=(cj5*x165);
1063 IkReal x189=((1.0)*x167);
1064 IkReal x190=(py*r02*sj0);
1065 IkReal x191=((0.023744)*x164);
1066 IkReal x192=((2.464e-8)*x165);
1067 IkReal x193=(pz*x186);
1068 IkReal x194=(cj5*x164);
1069 IkReal x195=((1.0)*x168);
1070 IkReal x196=((1.0)*x166);
1071 evalcond[0]=((((-1.0)*px*r00))+(((1.1e-7)*x194))+(((-1.0)*r02*x184))+(((0.106)*x188))+((x175*x187))+((x171*x172))+(((-1.0)*x171*x175))+(((-1.0)*py*r01))+((r02*x181))+(((-1.0)*x172*x187))+((r02*x178)));
1072 evalcond[1]=((0.012544)+((pz*x176))+((x173*x183))+(((-1.0)*x189))+(((-1.0)*x195))+(((-1.0)*x196))+(((-1.0)*x192))+x193+x191+(((-1.0)*x179*x183))+(((-1.0)*x173*x177))+((x177*x179)));
1073 evalcond[2]=(((pz*x175))+(((-1.0)*x175*x178))+(((-1.0)*r02*x183))+(((0.112)*cj5))+((x172*x181))+(((-1.0)*r02*x171))+((x172*x178))+(((0.106)*x194))+(((-1.1e-7)*x188))+(((-1.0)*x175*x181))+((r02*x187))+(((-1.0)*x172*x184))+((r02*x177)));
1074 evalcond[3]=((((-1.0)*px*x182*x186))+((pz*x176*x185))+((pz*x170*x182))+(((-0.0112360000000121)*x185))+((py*x170*x172))+((x173*x180))+(((-1.0)*x186*x190))+(((-0.0112360000000121)*x174))+((x169*x179))+(((-1.0)*px*x176*x182))+((x174*x193))+((pz*x174*x176))+((x185*x193))+(((2.0)*pz*x190))+((x167*x185))+((x166*x174))+(((-0.0237800000000121)*sj5))+(((-1.0)*x176*x190))+(((-1.0)*sj5*x191))+(((-1.0)*x185*x196))+(((-1.0)*x185*x195))+(((-1.0)*x169*x173))+(((-1.0)*x179*x180))+(((-1.0)*x174*x195))+(((-1.0)*x174*x189))+((sj0*x169*x170))+((sj5*x192)));
1085 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
1089 IkReal x197=(cj3*cj5);
1090 IkReal x198=(cj5*sj3);
1091 j2eval[0]=((((-1.0)*x197))+(((-963636.363636364)*x198)));
1092 j2eval[1]=
IKsign(((((-1.1e-7)*x197))+(((-0.106)*x198))));
1093 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
1097 IkReal x199=(cj3*cj5);
1098 IkReal x200=(cj5*sj3);
1099 j2eval[0]=((((1018181.81818182)*cj5))+(((963636.363636364)*x199))+(((-1.0)*x200)));
1100 j2eval[1]=
IKsign(((((0.112)*cj5))+(((0.106)*x199))+(((-1.1e-7)*x200))));
1101 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
1105 bool bgotonextstatement =
true;
1108 evalcond[0]=((-3.14159265358979)+(
IKfmod(((3.14159265358979)+(
IKabs(((-1.5707963267949)+j5)))), 6.28318530717959)));
1109 if(
IKabs(evalcond[0]) < 0.0000050000000000 )
1111 bgotonextstatement=
false;
1117 j2eval[0]=((965097.402597894)+(((-1.0)*sj3))+(((963636.363636364)*cj3)));
1118 j2eval[1]=
IKsign(((0.0237800000000121)+(((-2.464e-8)*sj3))+(((0.023744)*cj3))));
1119 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
1126 IkReal j2array[1], cj2array[1], sj2array[1];
1127 bool j2valid[1]={
false};
1129 IkReal x201=((0.112)*cj1);
1130 IkReal x202=(cj0*py);
1131 IkReal x203=((0.106)*cj1);
1132 IkReal x204=(px*sj0);
1133 IkReal x205=(cj3*pz);
1134 IkReal x206=((1.1e-7)*cj1);
1135 IkReal x207=((0.106)*sj1);
1136 IkReal x208=((1.1e-7)*sj1);
1137 IkReal x209=((0.112)*sj1);
1138 IkReal x210=((0.112)*pz*sj3);
1139 CheckValue<IkReal> x211 =
IKatan2WithCheck(IkReal(((((1.232e-8)*cj3))+((cj3*x201*x204))+(((-1.0)*pz*sj3*x201))+((sj3*x202*x209))+(((-1.0)*pz*x207))+(((-1.0)*x202*x203))+(((-1.0)*x202*x208))+(((-1.0)*sj3*x204*x209))+((pz*x206))+((x204*x208))+(((-1.0)*cj3*x201*x202))+(((-1.0)*x205*x209))+((x203*x204))+(((0.011872)*sj3)))),IkReal(((-0.0112360000000121)+(((-1.0)*cj3*x202*x209))+(((-1.0)*x204*x206))+(((-1.0)*sj3*x201*x202))+((x201*x205))+(((-1.0)*pz*sj3*x209))+(((1.232e-8)*sj3))+(((-1.0)*x202*x207))+((pz*x203))+((pz*x208))+((x204*x207))+((cj3*x204*x209))+((x202*x206))+(((-0.011872)*cj3))+((sj3*x201*x204)))),
IKFAST_ATAN2_MAGTHRESH);
1147 j2array[0]=((-1.5707963267949)+(x211.
value)+(((1.5707963267949)*(x212.
value))));
1148 sj2array[0]=
IKsin(j2array[0]);
1149 cj2array[0]=
IKcos(j2array[0]);
1150 if( j2array[0] >
IKPI )
1154 else if( j2array[0] < -
IKPI )
1155 { j2array[0]+=
IK2PI;
1158 for(
int ij2 = 0; ij2 < 1; ++ij2)
1164 _ij2[0] = ij2; _ij2[1] = -1;
1165 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
1169 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
1172 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1175 IkReal x213=
IKsin(j2);
1176 IkReal x214=
IKcos(j2);
1177 IkReal x215=((1.0)*r01);
1178 IkReal x216=(cj1*pz);
1179 IkReal x217=(r00*sj1);
1180 IkReal x218=(cj0*r00);
1181 IkReal x219=(px*sj1);
1182 IkReal x220=(cj0*r02);
1183 IkReal x221=(cj1*py);
1184 IkReal x222=(r02*sj0);
1185 IkReal x223=(r01*sj0);
1186 IkReal x224=(cj1*px);
1187 IkReal x225=(pz*sj1);
1188 IkReal x226=((1.1e-7)*x213);
1189 IkReal x227=((0.106)*x214);
1190 IkReal x228=((1.1e-7)*x214);
1191 IkReal x229=((0.106)*x213);
1192 IkReal x230=((0.112)*x214);
1193 IkReal x231=((0.112)*x213);
1194 IkReal x232=((1.0)*py*sj1);
1195 IkReal x233=(sj3*x231);
1196 IkReal x234=(cj3*x230);
1197 IkReal x235=(cj3*x231);
1198 IkReal x236=(sj3*x230);
1199 IkReal x237=(x227+x226+x234);
1200 IkReal x238=(x229+x236+x235);
1201 evalcond[0]=((-1.1e-7)+(((-1.0)*sj0*x224))+((cj0*x221))+x225+x238+(((-1.0)*x228)));
1202 evalcond[1]=((-0.106)+(((-1.0)*cj0*x232))+(((-1.0)*x237))+x216+x233+((sj0*x219)));
1203 evalcond[2]=((((0.106)*x223))+((py*x217))+(((-1.0)*x216*x218))+(((0.106)*x218))+(((-1.0)*x237))+x233+((x220*x224))+((x221*x222))+(((-1.0)*x215*x219))+(((-1.0)*sj0*x215*x216)));
1204 evalcond[3]=((((-1.1e-7)*x223))+((cj0*pz*x217))+(((-1.0)*x215*x224))+(((-1.1e-7)*x218))+((r00*x221))+((x223*x225))+(((-1.0)*x238))+x228+(((-1.0)*x219*x220))+(((-1.0)*x222*x232)));
1212 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1213 vinfos[0].jointtype = 1;
1214 vinfos[0].foffset = j0;
1215 vinfos[0].indices[0] = _ij0[0];
1216 vinfos[0].indices[1] = _ij0[1];
1217 vinfos[0].maxsolutions = _nj0;
1218 vinfos[1].jointtype = 1;
1219 vinfos[1].foffset = j1;
1220 vinfos[1].indices[0] = _ij1[0];
1221 vinfos[1].indices[1] = _ij1[1];
1222 vinfos[1].maxsolutions = _nj1;
1223 vinfos[2].jointtype = 1;
1224 vinfos[2].foffset = j2;
1225 vinfos[2].indices[0] = _ij2[0];
1226 vinfos[2].indices[1] = _ij2[1];
1227 vinfos[2].maxsolutions = _nj2;
1228 vinfos[3].jointtype = 1;
1229 vinfos[3].foffset = j3;
1230 vinfos[3].indices[0] = _ij3[0];
1231 vinfos[3].indices[1] = _ij3[1];
1232 vinfos[3].maxsolutions = _nj3;
1233 vinfos[4].jointtype = 1;
1234 vinfos[4].foffset = j5;
1235 vinfos[4].indices[0] = _ij5[0];
1236 vinfos[4].indices[1] = _ij5[1];
1237 vinfos[4].maxsolutions = _nj5;
1238 std::vector<int> vfree(0);
1250 if( bgotonextstatement )
1252 bool bgotonextstatement =
true;
1255 evalcond[0]=((-3.14159265358979)+(
IKfmod(((3.14159265358979)+(
IKabs(((1.5707963267949)+j5)))), 6.28318530717959)));
1256 if(
IKabs(evalcond[0]) < 0.0000050000000000 )
1258 bgotonextstatement=
false;
1263 j5=-1.5707963267949;
1264 j2eval[0]=((965097.402597894)+(((-1.0)*sj3))+(((963636.363636364)*cj3)));
1265 j2eval[1]=
IKsign(((0.0237800000000121)+(((-2.464e-8)*sj3))+(((0.023744)*cj3))));
1266 if(
IKabs(j2eval[0]) < 0.0000010000000000 ||
IKabs(j2eval[1]) < 0.0000010000000000 )
1273 IkReal j2array[1], cj2array[1], sj2array[1];
1274 bool j2valid[1]={
false};
1276 IkReal x239=((0.112)*cj1);
1277 IkReal x240=(cj0*py);
1278 IkReal x241=((0.106)*cj1);
1279 IkReal x242=(px*sj0);
1280 IkReal x243=(cj3*pz);
1281 IkReal x244=((1.1e-7)*cj1);
1282 IkReal x245=((0.106)*sj1);
1283 IkReal x246=((1.1e-7)*sj1);
1284 IkReal x247=((0.112)*sj1);
1285 IkReal x248=((0.112)*pz*sj3);
1290 CheckValue<IkReal> x250 =
IKatan2WithCheck(IkReal(((((-1.0)*pz*x245))+((cj3*x239*x242))+(((1.232e-8)*cj3))+(((-1.0)*pz*sj3*x239))+(((-1.0)*x243*x247))+((x241*x242))+(((-1.0)*sj3*x242*x247))+((x242*x246))+((sj3*x240*x247))+(((-1.0)*x240*x241))+(((-1.0)*x240*x246))+(((0.011872)*sj3))+(((-1.0)*cj3*x239*x240))+((pz*x244)))),IkReal(((-0.0112360000000121)+(((-1.0)*cj3*x240*x247))+(((-1.0)*sj3*x239*x240))+(((-1.0)*x242*x244))+((x240*x244))+(((1.232e-8)*sj3))+((cj3*x242*x247))+((x239*x243))+((sj3*x239*x242))+((x242*x245))+(((-1.0)*x240*x245))+(((-0.011872)*cj3))+((pz*x246))+((pz*x241))+(((-1.0)*pz*sj3*x247)))),
IKFAST_ATAN2_MAGTHRESH);
1294 j2array[0]=((-1.5707963267949)+(((1.5707963267949)*(x249.
value)))+(x250.
value));
1295 sj2array[0]=
IKsin(j2array[0]);
1296 cj2array[0]=
IKcos(j2array[0]);
1297 if( j2array[0] >
IKPI )
1301 else if( j2array[0] < -
IKPI )
1302 { j2array[0]+=
IK2PI;
1305 for(
int ij2 = 0; ij2 < 1; ++ij2)
1311 _ij2[0] = ij2; _ij2[1] = -1;
1312 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
1316 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
1319 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1322 IkReal x251=
IKsin(j2);
1323 IkReal x252=
IKcos(j2);
1324 IkReal x253=((1.0)*r01);
1325 IkReal x254=(cj1*pz);
1326 IkReal x255=(r00*sj1);
1327 IkReal x256=(cj0*r00);
1328 IkReal x257=(px*sj1);
1329 IkReal x258=(cj0*r02);
1330 IkReal x259=(cj1*py);
1331 IkReal x260=(r02*sj0);
1332 IkReal x261=(r01*sj0);
1333 IkReal x262=(cj1*px);
1334 IkReal x263=(pz*sj1);
1335 IkReal x264=((1.1e-7)*x251);
1336 IkReal x265=((0.106)*x252);
1337 IkReal x266=((0.106)*x251);
1338 IkReal x267=((1.1e-7)*x252);
1339 IkReal x268=((0.112)*x252);
1340 IkReal x269=((0.112)*x251);
1341 IkReal x270=((1.0)*py*sj1);
1342 IkReal x271=(cj3*x268);
1343 IkReal x272=(sj3*x269);
1344 IkReal x273=(cj3*x269);
1345 IkReal x274=(sj3*x268);
1346 IkReal x275=(x265+x264+x271);
1347 IkReal x276=(x266+x274+x273);
1348 evalcond[0]=((-1.1e-7)+(((-1.0)*sj0*x262))+x263+x276+((cj0*x259))+(((-1.0)*x267)));
1349 evalcond[1]=((-0.106)+((sj0*x257))+x254+x272+(((-1.0)*cj0*x270))+(((-1.0)*x275)));
1350 evalcond[2]=((((0.106)*x256))+((x258*x262))+(((-1.0)*sj0*x253*x254))+((x259*x260))+((py*x255))+(((0.106)*x261))+x275+(((-1.0)*x254*x256))+(((-1.0)*x272))+(((-1.0)*x253*x257)));
1351 evalcond[3]=((((-1.1e-7)*x256))+((r00*x259))+(((-1.1e-7)*x261))+(((-1.0)*x253*x262))+(((-1.0)*x257*x258))+x276+((cj0*pz*x255))+((x261*x263))+(((-1.0)*x267))+(((-1.0)*x260*x270)));
1359 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1360 vinfos[0].jointtype = 1;
1361 vinfos[0].foffset = j0;
1362 vinfos[0].indices[0] = _ij0[0];
1363 vinfos[0].indices[1] = _ij0[1];
1364 vinfos[0].maxsolutions = _nj0;
1365 vinfos[1].jointtype = 1;
1366 vinfos[1].foffset = j1;
1367 vinfos[1].indices[0] = _ij1[0];
1368 vinfos[1].indices[1] = _ij1[1];
1369 vinfos[1].maxsolutions = _nj1;
1370 vinfos[2].jointtype = 1;
1371 vinfos[2].foffset = j2;
1372 vinfos[2].indices[0] = _ij2[0];
1373 vinfos[2].indices[1] = _ij2[1];
1374 vinfos[2].maxsolutions = _nj2;
1375 vinfos[3].jointtype = 1;
1376 vinfos[3].foffset = j3;
1377 vinfos[3].indices[0] = _ij3[0];
1378 vinfos[3].indices[1] = _ij3[1];
1379 vinfos[3].maxsolutions = _nj3;
1380 vinfos[4].jointtype = 1;
1381 vinfos[4].foffset = j5;
1382 vinfos[4].indices[0] = _ij5[0];
1383 vinfos[4].indices[1] = _ij5[1];
1384 vinfos[4].maxsolutions = _nj5;
1385 std::vector<int> vfree(0);
1397 if( bgotonextstatement )
1399 bool bgotonextstatement =
true;
1404 bgotonextstatement=
false;
1409 if( bgotonextstatement )
1419 IkReal j2array[1], cj2array[1], sj2array[1];
1420 bool j2valid[1]={
false};
1422 IkReal x277=((1.1e-7)*cj1);
1423 IkReal x278=(cj0*r01);
1424 IkReal x279=(cj5*sj3);
1425 IkReal x280=(cj3*cj5);
1426 IkReal x281=(cj1*sj0);
1427 IkReal x282=((0.112)*cj3);
1428 IkReal x283=(r02*sj1);
1429 IkReal x284=((0.112)*sj3);
1430 IkReal x285=((1.1e-7)*x279);
1431 IkReal x286=((1.0)*pz*sj1);
1432 IkReal x287=((1.0)*cj0*cj1*py);
1433 CheckValue<IkReal> x288 =
IKatan2WithCheck(IkReal(((((-1.0)*r00*sj0*x277))+(((1.1e-7)*x283))+(((1.1e-7)*x280))+((r00*x281*x284))+(((-1.0)*x280*x286))+(((-1.0)*x280*x287))+((px*x280*x281))+((x277*x278))+(((-1.0)*cj1*x278*x284))+(((-1.0)*x283*x284)))),IkReal((((cj1*x278*x282))+(((0.106)*x283))+(((0.106)*cj1*x278))+((px*x279*x281))+(((-0.106)*r00*x281))+(((-1.0)*r00*x281*x282))+x285+(((-1.0)*x279*x287))+(((-1.0)*x279*x286))+((x282*x283)))),
IKFAST_ATAN2_MAGTHRESH);
1441 j2array[0]=((-1.5707963267949)+(x288.
value)+(((1.5707963267949)*(x289.
value))));
1442 sj2array[0]=
IKsin(j2array[0]);
1443 cj2array[0]=
IKcos(j2array[0]);
1444 if( j2array[0] >
IKPI )
1448 else if( j2array[0] < -
IKPI )
1449 { j2array[0]+=
IK2PI;
1452 for(
int ij2 = 0; ij2 < 1; ++ij2)
1458 _ij2[0] = ij2; _ij2[1] = -1;
1459 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
1463 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
1466 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1469 IkReal x290=
IKcos(j2);
1470 IkReal x291=
IKsin(j2);
1474 IkReal x295=(py*sj1);
1475 IkReal x296=((2.0)*r01);
1476 IkReal x297=(px*sj0);
1477 IkReal x298=(pz*r00);
1478 IkReal x299=(cj0*sj1);
1479 IkReal x300=((0.0237799999999879)*cj3);
1480 IkReal x301=(cj0*r01);
1481 IkReal x302=(px*r00);
1482 IkReal x303=((0.212)*pz);
1483 IkReal x304=((1.0)*px);
1484 IkReal x305=((2.332e-8)*cj5);
1485 IkReal x306=(cj1*r01);
1486 IkReal x307=(cj1*r02);
1487 IkReal x308=((2.2e-7)*r02);
1488 IkReal x309=(r01*sj0);
1489 IkReal x310=(r00*sj0);
1490 IkReal x311=((1.0)*cj1);
1491 IkReal x312=((2.0)*pz);
1492 IkReal x313=(cj0*r00);
1493 IkReal x314=((0.112)*cj3);
1494 IkReal x315=(cj1*py);
1495 IkReal x316=((1.0)*cj3);
1496 IkReal x317=((2.0)*cj0);
1497 IkReal x318=(cj0*py);
1498 IkReal x319=(r02*sj1);
1499 IkReal x320=((2.332e-8)*cj1);
1500 IkReal x321=((1.0)*r01);
1501 IkReal x322=(pz*sj1);
1502 IkReal x323=((1.0)*sj0);
1503 IkReal x324=(py*r01);
1504 IkReal x325=((0.212)*r02);
1505 IkReal x326=((0.0112359999999879)*cj1);
1506 IkReal x327=((2.0)*px);
1507 IkReal x328=(sj3*x290);
1508 IkReal x329=(cj5*x290);
1509 IkReal x330=(cj1*x292);
1510 IkReal x331=((1.0)*x292);
1511 IkReal x332=(cj5*x291);
1512 IkReal x333=(sj1*x294);
1513 IkReal x334=(sj5*x291);
1514 IkReal x335=(sj3*x291);
1515 IkReal x336=((0.106)*x290);
1516 IkReal x337=((1.1e-7)*x290);
1517 IkReal x338=((1.0)*x293);
1518 evalcond[0]=(((cj1*x301))+(((-1.0)*x310*x311))+((sj3*x332))+x319+(((-1.0)*x316*x329)));
1519 evalcond[1]=((((-1.0)*x299*x321))+(((-1.0)*x316*x332))+((sj1*x310))+x307+(((-1.0)*cj5*x328)));
1520 evalcond[2]=((-1.1e-7)+(((-1.0)*x297*x311))+x322+(((0.112)*x328))+(((0.106)*x291))+((x291*x314))+(((-1.0)*x337))+((cj0*x315)));
1521 evalcond[3]=((-0.106)+(((-1.0)*cj0*x295))+(((-1.0)*x290*x314))+((sj1*x297))+((cj1*pz))+(((0.112)*x335))+(((-1.1e-7)*x291))+(((-1.0)*x336)));
1522 evalcond[4]=((((-1.0)*sj5*x290*x314))+(((-1.0)*sj5*x336))+(((-1.1e-7)*x334))+(((0.106)*x309))+((cj0*px*x307))+(((0.112)*sj3*x334))+(((-1.0)*cj0*x298*x311))+(((0.106)*x313))+((r00*x295))+(((-1.0)*pz*x306*x323))+(((-1.0)*r01*sj1*x304))+((py*sj0*x307)));
1523 evalcond[5]=((((-1.0)*r02*x295*x323))+(((-1.1e-7)*x309))+((sj5*x337))+(((-0.106)*x334))+(((-1.1e-7)*x313))+((x298*x299))+((r00*x315))+((x309*x322))+(((-1.0)*r02*x299*x304))+(((-1.0)*x304*x306))+(((-1.0)*x314*x334))+(((-0.112)*sj5*x328)));
1524 evalcond[6]=(((x294*x319))+((x318*x325))+((x301*x326))+(((-1.0)*x301*x303))+(((0.0112359999999879)*x319))+(((-2.464e-8)*x332))+(((-1.0)*x302*x315*x317))+(((-1.0)*x294*x310*x311))+(((-2.332e-8)*sj1*x310))+(((2.2e-7)*x324))+(((-1.0)*x294*x301*x311))+(((-1.0)*x319*x338))+(((-1.0)*cj3*x291*x305))+((x296*x297*x315))+(((-1.0)*pz*x295*x296))+((x305*x328))+(((-0.023744)*x329))+(((-1.0)*x307*x312*x318))+(((-1.0)*x300*x329))+((x297*x307*x312))+(((0.212)*sj0*x298))+(((0.0013080000000121)*sj3*x332))+((cj1*x293*x301))+(((-1.0)*x293*x310*x311))+(((2.2e-7)*x302))+(((2.332e-8)*r01*x299))+(((-1.0)*sj1*x298*x327))+(((-1.0)*x310*x326))+(((-1.0)*x297*x325))+((x292*x319))+(((-2.332e-8)*x307))+((x301*x330))+((x310*x330))+((pz*x308)));
1525 evalcond[7]=((((-1.0)*x300*x332))+(((-1.0)*x295*x296*x297))+(((2.2e-7)*pz*x301))+((x310*x320))+((x292*x307))+(((-1.0)*sj1*x310*x331))+(((0.212)*x302))+(((-0.023744)*x332))+(((-2.332e-8)*x319))+((r02*x303))+((cj0*r02*x295*x312))+(((-1.0)*x293*x299*x321))+(((-1.0)*x308*x318))+((x294*x307))+((x305*x335))+((x295*x302*x317))+(((-1.0)*x301*x320))+((x297*x308))+(((-1.0)*x307*x338))+(((-0.0112359999999879)*sj1*x310))+(((0.0112359999999879)*r01*x299))+((sj1*x293*x310))+(((-0.0112359999999879)*x307))+((cj3*x290*x305))+(((-1.0)*pz*x296*x315))+(((0.212)*x324))+((r01*x294*x299))+(((-2.2e-7)*sj0*x298))+(((-1.0)*x292*x299*x321))+(((-1.0)*x297*x312*x319))+((x310*x333))+(((2.464e-8)*x329))+(((-0.0013080000000121)*cj5*x328))+(((-1.0)*cj1*x298*x327)));
1533 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1534 vinfos[0].jointtype = 1;
1535 vinfos[0].foffset = j0;
1536 vinfos[0].indices[0] = _ij0[0];
1537 vinfos[0].indices[1] = _ij0[1];
1538 vinfos[0].maxsolutions = _nj0;
1539 vinfos[1].jointtype = 1;
1540 vinfos[1].foffset = j1;
1541 vinfos[1].indices[0] = _ij1[0];
1542 vinfos[1].indices[1] = _ij1[1];
1543 vinfos[1].maxsolutions = _nj1;
1544 vinfos[2].jointtype = 1;
1545 vinfos[2].foffset = j2;
1546 vinfos[2].indices[0] = _ij2[0];
1547 vinfos[2].indices[1] = _ij2[1];
1548 vinfos[2].maxsolutions = _nj2;
1549 vinfos[3].jointtype = 1;
1550 vinfos[3].foffset = j3;
1551 vinfos[3].indices[0] = _ij3[0];
1552 vinfos[3].indices[1] = _ij3[1];
1553 vinfos[3].maxsolutions = _nj3;
1554 vinfos[4].jointtype = 1;
1555 vinfos[4].foffset = j5;
1556 vinfos[4].indices[0] = _ij5[0];
1557 vinfos[4].indices[1] = _ij5[1];
1558 vinfos[4].maxsolutions = _nj5;
1559 std::vector<int> vfree(0);
1572 IkReal j2array[1], cj2array[1], sj2array[1];
1573 bool j2valid[1]={
false};
1575 IkReal x339=(cj5*sj3);
1576 IkReal x340=(pz*sj1);
1577 IkReal x341=(cj3*cj5);
1578 IkReal x342=((1.1e-7)*sj1);
1579 IkReal x343=(cj0*r01);
1580 IkReal x344=(cj1*r02);
1581 IkReal x345=((0.112)*sj3);
1582 IkReal x346=((0.112)*cj3);
1583 IkReal x347=(r00*sj0);
1584 IkReal x348=((0.106)*sj1);
1585 IkReal x349=((1.1e-7)*x341);
1586 IkReal x350=(cj1*px*sj0);
1587 IkReal x351=(cj0*cj1*py);
1588 IkReal x352=((0.112)*sj1*x347);
1593 CheckValue<IkReal> x354 =
IKatan2WithCheck(IkReal(((((-1.1e-7)*x344))+(((-1.1e-7)*x339))+(((-1.0)*sj1*x343*x345))+((sj1*x345*x347))+((x344*x345))+(((-1.0)*x339*x350))+((x339*x340))+(((-1.0)*x342*x347))+((x339*x351))+((x342*x343)))),IkReal(((((-1.0)*x341*x351))+(((-0.106)*x344))+((x341*x350))+x349+(((-1.0)*x344*x346))+((sj1*x343*x346))+(((-1.0)*x340*x341))+(((-1.0)*x347*x348))+(((-1.0)*sj1*x346*x347))+((x343*x348)))),
IKFAST_ATAN2_MAGTHRESH);
1597 j2array[0]=((-1.5707963267949)+(((1.5707963267949)*(x353.
value)))+(x354.
value));
1598 sj2array[0]=
IKsin(j2array[0]);
1599 cj2array[0]=
IKcos(j2array[0]);
1600 if( j2array[0] >
IKPI )
1604 else if( j2array[0] < -
IKPI )
1605 { j2array[0]+=
IK2PI;
1608 for(
int ij2 = 0; ij2 < 1; ++ij2)
1614 _ij2[0] = ij2; _ij2[1] = -1;
1615 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
1619 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
1622 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1625 IkReal x355=
IKcos(j2);
1626 IkReal x356=
IKsin(j2);
1630 IkReal x360=(py*sj1);
1631 IkReal x361=((2.0)*r01);
1632 IkReal x362=(px*sj0);
1633 IkReal x363=(pz*r00);
1634 IkReal x364=(cj0*sj1);
1635 IkReal x365=((0.0237799999999879)*cj3);
1636 IkReal x366=(cj0*r01);
1637 IkReal x367=(px*r00);
1638 IkReal x368=((0.212)*pz);
1639 IkReal x369=((1.0)*px);
1640 IkReal x370=((2.332e-8)*cj5);
1641 IkReal x371=(cj1*r01);
1642 IkReal x372=(cj1*r02);
1643 IkReal x373=((2.2e-7)*r02);
1644 IkReal x374=(r01*sj0);
1645 IkReal x375=(r00*sj0);
1646 IkReal x376=((1.0)*cj1);
1647 IkReal x377=((2.0)*pz);
1648 IkReal x378=(cj0*r00);
1649 IkReal x379=((0.112)*cj3);
1650 IkReal x380=(cj1*py);
1651 IkReal x381=((1.0)*cj3);
1652 IkReal x382=((2.0)*cj0);
1653 IkReal x383=(cj0*py);
1654 IkReal x384=(r02*sj1);
1655 IkReal x385=((2.332e-8)*cj1);
1656 IkReal x386=((1.0)*r01);
1657 IkReal x387=(pz*sj1);
1658 IkReal x388=((1.0)*sj0);
1659 IkReal x389=(py*r01);
1660 IkReal x390=((0.212)*r02);
1661 IkReal x391=((0.0112359999999879)*cj1);
1662 IkReal x392=((2.0)*px);
1663 IkReal x393=(sj3*x355);
1664 IkReal x394=(cj5*x355);
1665 IkReal x395=(cj1*x357);
1666 IkReal x396=((1.0)*x357);
1667 IkReal x397=(cj5*x356);
1668 IkReal x398=(sj1*x359);
1669 IkReal x399=(sj5*x356);
1670 IkReal x400=(sj3*x356);
1671 IkReal x401=((0.106)*x355);
1672 IkReal x402=((1.1e-7)*x355);
1673 IkReal x403=((1.0)*x358);
1674 evalcond[0]=(x384+((sj3*x397))+((cj1*x366))+(((-1.0)*x381*x394))+(((-1.0)*x375*x376)));
1675 evalcond[1]=(((sj1*x375))+(((-1.0)*x364*x386))+(((-1.0)*cj5*x393))+x372+(((-1.0)*x381*x397)));
1676 evalcond[2]=((-1.1e-7)+(((-1.0)*x362*x376))+((x356*x379))+x387+((cj0*x380))+(((0.112)*x393))+(((-1.0)*x402))+(((0.106)*x356)));
1677 evalcond[3]=((-0.106)+(((-1.0)*x355*x379))+((sj1*x362))+((cj1*pz))+(((-1.0)*cj0*x360))+(((0.112)*x400))+(((-1.1e-7)*x356))+(((-1.0)*x401)));
1678 evalcond[4]=((((-1.1e-7)*x399))+(((-1.0)*r01*sj1*x369))+(((-1.0)*sj5*x401))+((cj0*px*x372))+((r00*x360))+(((-1.0)*sj5*x355*x379))+((py*sj0*x372))+(((-1.0)*pz*x371*x388))+(((0.106)*x378))+(((0.106)*x374))+(((0.112)*sj3*x399))+(((-1.0)*cj0*x363*x376)));
1679 evalcond[5]=((((-0.106)*x399))+(((-1.0)*r02*x360*x388))+((x374*x387))+(((-1.0)*r02*x364*x369))+((sj5*x402))+(((-1.0)*x369*x371))+((r00*x380))+(((-1.0)*x379*x399))+((x363*x364))+(((-0.112)*sj5*x393))+(((-1.1e-7)*x374))+(((-1.1e-7)*x378)));
1680 evalcond[6]=((((-0.023744)*x394))+((cj1*x358*x366))+(((2.2e-7)*x367))+((x359*x384))+(((-1.0)*x362*x390))+(((-2.332e-8)*x372))+(((-1.0)*x359*x366*x376))+((x375*x395))+((x366*x395))+((x366*x391))+((x357*x384))+(((0.0013080000000121)*sj3*x397))+(((-1.0)*x384*x403))+(((-1.0)*sj1*x363*x392))+(((-1.0)*x366*x368))+(((-2.464e-8)*x397))+(((-1.0)*x367*x380*x382))+(((-2.332e-8)*sj1*x375))+(((-1.0)*cj3*x356*x370))+(((2.332e-8)*r01*x364))+((pz*x373))+(((-1.0)*x372*x377*x383))+(((-1.0)*x358*x375*x376))+(((0.212)*sj0*x363))+(((-1.0)*x359*x375*x376))+(((0.0112359999999879)*x384))+(((-1.0)*pz*x360*x361))+(((-1.0)*x365*x394))+((x362*x372*x377))+(((2.2e-7)*x389))+((x370*x393))+(((-1.0)*x375*x391))+((x383*x390))+((x361*x362*x380)));
1681 evalcond[7]=((((-0.023744)*x397))+(((-1.0)*x373*x383))+(((-1.0)*x372*x403))+(((-2.2e-7)*sj0*x363))+((r01*x359*x364))+(((-1.0)*sj1*x375*x396))+((sj1*x358*x375))+((x360*x367*x382))+(((-0.0112359999999879)*x372))+(((-1.0)*x358*x364*x386))+(((-0.0112359999999879)*sj1*x375))+((x370*x400))+((cj3*x355*x370))+((x375*x398))+(((0.212)*x389))+((x359*x372))+(((-2.332e-8)*x384))+(((-1.0)*x360*x361*x362))+(((2.464e-8)*x394))+(((-1.0)*pz*x361*x380))+(((0.212)*x367))+(((-1.0)*cj1*x363*x392))+(((-1.0)*x365*x397))+(((-0.0013080000000121)*cj5*x393))+(((-1.0)*x357*x364*x386))+((x357*x372))+((x375*x385))+(((0.0112359999999879)*r01*x364))+((cj0*r02*x360*x377))+(((-1.0)*x366*x385))+((x362*x373))+((r02*x368))+(((2.2e-7)*pz*x366))+(((-1.0)*x362*x377*x384)));
1689 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1690 vinfos[0].jointtype = 1;
1691 vinfos[0].foffset = j0;
1692 vinfos[0].indices[0] = _ij0[0];
1693 vinfos[0].indices[1] = _ij0[1];
1694 vinfos[0].maxsolutions = _nj0;
1695 vinfos[1].jointtype = 1;
1696 vinfos[1].foffset = j1;
1697 vinfos[1].indices[0] = _ij1[0];
1698 vinfos[1].indices[1] = _ij1[1];
1699 vinfos[1].maxsolutions = _nj1;
1700 vinfos[2].jointtype = 1;
1701 vinfos[2].foffset = j2;
1702 vinfos[2].indices[0] = _ij2[0];
1703 vinfos[2].indices[1] = _ij2[1];
1704 vinfos[2].maxsolutions = _nj2;
1705 vinfos[3].jointtype = 1;
1706 vinfos[3].foffset = j3;
1707 vinfos[3].indices[0] = _ij3[0];
1708 vinfos[3].indices[1] = _ij3[1];
1709 vinfos[3].maxsolutions = _nj3;
1710 vinfos[4].jointtype = 1;
1711 vinfos[4].foffset = j5;
1712 vinfos[4].indices[0] = _ij5[0];
1713 vinfos[4].indices[1] = _ij5[1];
1714 vinfos[4].maxsolutions = _nj5;
1715 std::vector<int> vfree(0);
1728 IkReal j2array[1], cj2array[1], sj2array[1];
1729 bool j2valid[1]={
false};
1731 IkReal x404=(cj3*r02);
1732 IkReal x405=((1.0)*sj1);
1733 IkReal x406=(r02*sj3);
1734 IkReal x407=(r00*sj0*sj3);
1735 IkReal x408=(cj3*r00*sj0);
1736 IkReal x409=(cj0*cj3*r01);
1737 IkReal x410=((1.0)*cj0*r01*sj3);
1738 CheckValue<IkReal> x411 =
IKatan2WithCheck(IkReal((((sj1*x408))+(((-1.0)*cj1*x410))+(((-1.0)*x405*x406))+(((-1.0)*x405*x409))+((cj1*x404))+((cj1*x407)))),IkReal((((sj1*x407))+((sj1*x404))+(((-1.0)*cj1*x408))+(((-1.0)*cj0*r01*sj3*x405))+((cj1*x406))+((cj1*x409)))),
IKFAST_ATAN2_MAGTHRESH);
1746 j2array[0]=((-1.5707963267949)+(x411.
value)+(((1.5707963267949)*(x412.
value))));
1747 sj2array[0]=
IKsin(j2array[0]);
1748 cj2array[0]=
IKcos(j2array[0]);
1749 if( j2array[0] >
IKPI )
1753 else if( j2array[0] < -
IKPI )
1754 { j2array[0]+=
IK2PI;
1757 for(
int ij2 = 0; ij2 < 1; ++ij2)
1763 _ij2[0] = ij2; _ij2[1] = -1;
1764 for(
int iij2 = ij2+1; iij2 < 1; ++iij2)
1768 j2valid[iij2]=
false; _ij2[1] = iij2;
break;
1771 j2 = j2array[ij2]; cj2 = cj2array[ij2]; sj2 = sj2array[ij2];
1774 IkReal x413=
IKcos(j2);
1775 IkReal x414=
IKsin(j2);
1779 IkReal x418=(py*sj1);
1780 IkReal x419=((2.0)*r01);
1781 IkReal x420=(px*sj0);
1782 IkReal x421=(pz*r00);
1783 IkReal x422=(cj0*sj1);
1784 IkReal x423=((0.0237799999999879)*cj3);
1785 IkReal x424=(cj0*r01);
1786 IkReal x425=(px*r00);
1787 IkReal x426=((0.212)*pz);
1788 IkReal x427=((1.0)*px);
1789 IkReal x428=((2.332e-8)*cj5);
1790 IkReal x429=(cj1*r01);
1791 IkReal x430=(cj1*r02);
1792 IkReal x431=((2.2e-7)*r02);
1793 IkReal x432=(r01*sj0);
1794 IkReal x433=(r00*sj0);
1795 IkReal x434=((1.0)*cj1);
1796 IkReal x435=((2.0)*pz);
1797 IkReal x436=(cj0*r00);
1798 IkReal x437=((0.112)*cj3);
1799 IkReal x438=(cj1*py);
1800 IkReal x439=((1.0)*cj3);
1801 IkReal x440=((2.0)*cj0);
1802 IkReal x441=(cj0*py);
1803 IkReal x442=(r02*sj1);
1804 IkReal x443=((2.332e-8)*cj1);
1805 IkReal x444=((1.0)*r01);
1806 IkReal x445=(pz*sj1);
1807 IkReal x446=((1.0)*sj0);
1808 IkReal x447=(py*r01);
1809 IkReal x448=((0.212)*r02);
1810 IkReal x449=((0.0112359999999879)*cj1);
1811 IkReal x450=((2.0)*px);
1812 IkReal x451=(sj3*x413);
1813 IkReal x452=(cj5*x413);
1814 IkReal x453=(cj1*x415);
1815 IkReal x454=((1.0)*x415);
1816 IkReal x455=(cj5*x414);
1817 IkReal x456=(sj1*x417);
1818 IkReal x457=(sj5*x414);
1819 IkReal x458=(sj3*x414);
1820 IkReal x459=((0.106)*x413);
1821 IkReal x460=((1.1e-7)*x413);
1822 IkReal x461=((1.0)*x416);
1823 evalcond[0]=(((sj3*x455))+(((-1.0)*x433*x434))+(((-1.0)*x439*x452))+x442+((cj1*x424)));
1824 evalcond[1]=((((-1.0)*x439*x455))+(((-1.0)*cj5*x451))+x430+(((-1.0)*x422*x444))+((sj1*x433)));
1825 evalcond[2]=((-1.1e-7)+((x414*x437))+(((-1.0)*x420*x434))+(((0.112)*x451))+(((-1.0)*x460))+((cj0*x438))+x445+(((0.106)*x414)));
1826 evalcond[3]=((-0.106)+(((-1.0)*x413*x437))+(((-1.1e-7)*x414))+(((-1.0)*cj0*x418))+(((0.112)*x458))+((cj1*pz))+(((-1.0)*x459))+((sj1*x420)));
1827 evalcond[4]=(((py*sj0*x430))+(((-1.0)*pz*x429*x446))+(((0.112)*sj3*x457))+(((-1.0)*r01*sj1*x427))+(((-1.0)*sj5*x459))+(((0.106)*x436))+(((0.106)*x432))+(((-1.0)*cj0*x421*x434))+((cj0*px*x430))+((r00*x418))+(((-1.1e-7)*x457))+(((-1.0)*sj5*x413*x437)));
1828 evalcond[5]=((((-1.1e-7)*x436))+(((-1.1e-7)*x432))+(((-1.0)*x437*x457))+(((-1.0)*x427*x429))+(((-0.112)*sj5*x451))+((r00*x438))+(((-1.0)*r02*x418*x446))+((sj5*x460))+(((-0.106)*x457))+((x421*x422))+((x432*x445))+(((-1.0)*r02*x422*x427)));
1829 evalcond[6]=((((-1.0)*x416*x433*x434))+((x419*x420*x438))+(((0.0112359999999879)*x442))+((x428*x451))+(((-1.0)*x430*x435*x441))+((x424*x449))+((x415*x442))+(((-1.0)*x423*x452))+(((-1.0)*sj1*x421*x450))+(((-1.0)*x433*x449))+(((2.332e-8)*r01*x422))+((x433*x453))+(((-1.0)*x420*x448))+(((-1.0)*cj3*x414*x428))+(((-1.0)*pz*x418*x419))+((pz*x431))+(((-2.332e-8)*sj1*x433))+((cj1*x416*x424))+((x424*x453))+(((-1.0)*x417*x424*x434))+((x441*x448))+(((-1.0)*x442*x461))+(((2.2e-7)*x425))+((x420*x430*x435))+(((-1.0)*x424*x426))+(((0.212)*sj0*x421))+(((-0.023744)*x452))+((x417*x442))+(((2.2e-7)*x447))+(((-1.0)*x417*x433*x434))+(((-1.0)*x425*x438*x440))+(((0.0013080000000121)*sj3*x455))+(((-2.464e-8)*x455))+(((-2.332e-8)*x430)));
1830 evalcond[7]=(((x428*x458))+(((-2.332e-8)*x442))+(((-1.0)*x423*x455))+((x415*x430))+(((2.2e-7)*pz*x424))+((x433*x456))+(((2.464e-8)*x452))+((r01*x417*x422))+(((-1.0)*x418*x419*x420))+(((-1.0)*x431*x441))+(((-1.0)*x420*x435*x442))+((r02*x426))+(((-1.0)*pz*x419*x438))+(((0.212)*x425))+(((-1.0)*cj1*x421*x450))+(((0.212)*x447))+(((-1.0)*x424*x443))+((sj1*x416*x433))+((cj0*r02*x418*x435))+(((-2.2e-7)*sj0*x421))+((cj3*x413*x428))+(((-0.0112359999999879)*sj1*x433))+(((-0.023744)*x455))+(((-1.0)*sj1*x433*x454))+(((-1.0)*x415*x422*x444))+((x418*x425*x440))+(((-1.0)*x416*x422*x444))+((x420*x431))+((x433*x443))+((x417*x430))+(((-0.0112359999999879)*x430))+(((-1.0)*x430*x461))+(((-0.0013080000000121)*cj5*x451))+(((0.0112359999999879)*r01*x422)));
1838 std::vector<IkSingleDOFSolutionBase<IkReal> > vinfos(5);
1839 vinfos[0].jointtype = 1;
1840 vinfos[0].foffset = j0;
1841 vinfos[0].indices[0] = _ij0[0];
1842 vinfos[0].indices[1] = _ij0[1];
1843 vinfos[0].maxsolutions = _nj0;
1844 vinfos[1].jointtype = 1;
1845 vinfos[1].foffset = j1;
1846 vinfos[1].indices[0] = _ij1[0];
1847 vinfos[1].indices[1] = _ij1[1];
1848 vinfos[1].maxsolutions = _nj1;
1849 vinfos[2].jointtype = 1;
1850 vinfos[2].foffset = j2;
1851 vinfos[2].indices[0] = _ij2[0];
1852 vinfos[2].indices[1] = _ij2[1];
1853 vinfos[2].maxsolutions = _nj2;
1854 vinfos[3].jointtype = 1;
1855 vinfos[3].foffset = j3;
1856 vinfos[3].indices[0] = _ij3[0];
1857 vinfos[3].indices[1] = _ij3[1];
1858 vinfos[3].maxsolutions = _nj3;
1859 vinfos[4].jointtype = 1;
1860 vinfos[4].foffset = j5;
1861 vinfos[4].indices[0] = _ij5[0];
1862 vinfos[4].indices[1] = _ij5[1];
1863 vinfos[4].maxsolutions = _nj5;
1864 std::vector<int> vfree(0);
1891 static inline void polyroots3(IkReal rawcoeffs[3+1], IkReal rawroots[3],
int& numroots)
1894 if( rawcoeffs[0] == 0 ) {
1896 polyroots2(&rawcoeffs[1], &rawroots[0], numroots);
1900 const IkReal tol = 128.0*std::numeric_limits<IkReal>::epsilon();
1901 const IkReal tolsqrt =
sqrt(std::numeric_limits<IkReal>::epsilon());
1902 complex<IkReal> coeffs[3];
1903 const int maxsteps = 110;
1904 for(
int i = 0; i < 3; ++i) {
1905 coeffs[i] = complex<IkReal>(rawcoeffs[i+1]/rawcoeffs[0]);
1907 complex<IkReal> roots[3];
1909 roots[0] = complex<IkReal>(1,0);
1910 roots[1] = complex<IkReal>(0.4,0.9);
1913 for(
int i = 2; i < 3; ++i) {
1914 roots[i] = roots[i-1]*roots[1];
1918 bool changed =
false;
1919 for(
int i = 0; i < 3; ++i) {
1920 if ( err[i] >= tol ) {
1923 complex<IkReal>
x = roots[i] + coeffs[0];
1924 for(
int j = 1; j < 3; ++j) {
1925 x = roots[i] * x + coeffs[j];
1927 for(
int j = 0; j < 3; ++j) {
1929 if( roots[i] != roots[j] ) {
1930 x /= (roots[i] - roots[j]);
1944 bool visited[3] = {
false};
1945 for(
int i = 0; i < 3; ++i) {
1949 complex<IkReal> newroot=roots[i];
1951 for(
int j = i+1; j < 3; ++j) {
1953 if(
abs(real(roots[i])-real(roots[j])) < tolsqrt &&
abs(imag(roots[i])-imag(roots[j])) < 0.002 ) {
1954 newroot += roots[j];
1963 if(
IKabs(imag(newroot)) < tolsqrt ) {
1964 rawroots[numroots++] = real(newroot);
1969 static inline void polyroots2(IkReal rawcoeffs[2+1], IkReal rawroots[2],
int& numroots) {
1970 IkReal det = rawcoeffs[1]*rawcoeffs[1]-4*rawcoeffs[0]*rawcoeffs[2];
1974 else if( det == 0 ) {
1975 rawroots[0] = -0.5*rawcoeffs[1]/rawcoeffs[0];
1980 rawroots[0] = (-rawcoeffs[1]+det)/(2*rawcoeffs[0]);
1981 rawroots[1] = (-rawcoeffs[1]-det)/(2*rawcoeffs[0]);
1985 static inline void polyroots4(IkReal rawcoeffs[4+1], IkReal rawroots[4],
int& numroots)
1988 if( rawcoeffs[0] == 0 ) {
1990 polyroots3(&rawcoeffs[1], &rawroots[0], numroots);
1994 const IkReal tol = 128.0*std::numeric_limits<IkReal>::epsilon();
1995 const IkReal tolsqrt =
sqrt(std::numeric_limits<IkReal>::epsilon());
1996 complex<IkReal> coeffs[4];
1997 const int maxsteps = 110;
1998 for(
int i = 0; i < 4; ++i) {
1999 coeffs[i] = complex<IkReal>(rawcoeffs[i+1]/rawcoeffs[0]);
2001 complex<IkReal> roots[4];
2003 roots[0] = complex<IkReal>(1,0);
2004 roots[1] = complex<IkReal>(0.4,0.9);
2007 for(
int i = 2; i < 4; ++i) {
2008 roots[i] = roots[i-1]*roots[1];
2012 bool changed =
false;
2013 for(
int i = 0; i < 4; ++i) {
2014 if ( err[i] >= tol ) {
2017 complex<IkReal>
x = roots[i] + coeffs[0];
2018 for(
int j = 1; j < 4; ++j) {
2019 x = roots[i] * x + coeffs[j];
2021 for(
int j = 0; j < 4; ++j) {
2023 if( roots[i] != roots[j] ) {
2024 x /= (roots[i] - roots[j]);
2038 bool visited[4] = {
false};
2039 for(
int i = 0; i < 4; ++i) {
2043 complex<IkReal> newroot=roots[i];
2045 for(
int j = i+1; j < 4; ++j) {
2047 if(
abs(real(roots[i])-real(roots[j])) < tolsqrt &&
abs(imag(roots[i])-imag(roots[j])) < 0.002 ) {
2048 newroot += roots[j];
2057 if(
IKabs(imag(newroot)) < tolsqrt ) {
2058 rawroots[numroots++] = real(newroot);
2070 return solver.
ComputeIk(eetrans,eerot,pfree,solutions);
2075 return solver.
ComputeIk(eetrans,eerot,pfree,solutions);
2078 IKFAST_API
const char*
GetKinematicsHash() {
return "<robot:GenericRobot - turtlebot_arm (3560475dd424b0fa84bb2c480a84c0dc)>"; }
2082 #ifdef IKFAST_NAMESPACE 2086 #ifndef IKFAST_NO_MAIN 2089 #ifdef IKFAST_NAMESPACE 2090 using namespace IKFAST_NAMESPACE;
2095 printf(
"\nUsage: ./ik r00 r01 r02 t0 r10 r11 r12 t1 r20 r21 r22 t2 free0 ...\n\n" 2096 "Returns the ik solutions given the transformation of the end effector specified by\n" 2097 "a 3x3 rotation R (rXX), and a 3x1 translation (tX).\n" 2104 IkReal eerot[9],eetrans[3];
2105 eerot[0] = atof(argv[1]); eerot[1] = atof(argv[2]); eerot[2] = atof(argv[3]); eetrans[0] = atof(argv[4]);
2106 eerot[3] = atof(argv[5]); eerot[4] = atof(argv[6]); eerot[5] = atof(argv[7]); eetrans[1] = atof(argv[8]);
2107 eerot[6] = atof(argv[9]); eerot[7] = atof(argv[10]); eerot[8] = atof(argv[11]); eetrans[2] = atof(argv[12]);
2108 for(std::size_t i = 0; i < vfree.size(); ++i)
2109 vfree[i] = atof(argv[13+i]);
2110 bool bSuccess =
ComputeIk(eetrans, eerot, vfree.size() > 0 ? &vfree[0] : NULL, solutions);
2113 fprintf(stderr,
"Failed to get ik solution\n");
2121 printf(
"sol%d (free=%d): ", (
int)i, (
int)sol.
GetFree().size());
2122 std::vector<IkReal> vsolfree(sol.
GetFree().size());
2123 sol.
GetSolution(&solvalues[0],vsolfree.size()>0?&vsolfree[0]:NULL);
2124 for( std::size_t j = 0; j < solvalues.size(); ++j)
2125 printf(
"%.15f, ", solvalues[j]);
virtual const IkSolutionBase< T > & GetSolution(size_t index) const
returns the solution pointer
IKFAST_API bool ComputeIk2(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions, void *pOpenRAVEManip)
float IKfmod(float x, float y)
#define IKFAST_ATAN2_MAGTHRESH
IKFAST_API void ComputeFk(const IkReal *j, IkReal *eetrans, IkReal *eerot)
CheckValue< T > IKPowWithIntegerCheck(T f, int n)
IKFAST_API bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
#define IKFAST_SINCOS_THRESH
INLINE Rall1d< T, V, S > log(const Rall1d< T, V, S > &arg)
virtual size_t GetNumSolutions() const
returns the number of solutions stored
void dgetrf_(const int *m, const int *n, double *a, const int *lda, int *ipiv, int *info)
#define IKFAST_EVALCOND_THRESH
The discrete solutions are returned in this structure.
IKFAST_API int * GetFreeParameters()
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...
IKFAST_API int GetNumJoints()
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
void dgetri_(const int *n, const double *a, const int *lda, int *ipiv, double *work, const int *lwork, int *info)
CheckValue< T > IKatan2WithCheck(T fy, T fx, T epsilon)
INLINE Rall1d< T, V, S > atan(const Rall1d< T, V, S > &x)
static void polyroots3(IkReal rawcoeffs[3+1], IkReal rawroots[3], int &numroots)
INLINE Rall1d< T, V, S > asin(const Rall1d< T, V, S > &x)
IKFAST_API const char * GetKinematicsHash()
#define IKFAST_COMPILE_ASSERT(x)
virtual void Clear()=0
clears all current solutions, note that any memory addresses returned from GetSolution will be invali...
IKFAST_API int GetIkType()
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)
#define IKFAST_SOLUTION_THRESH
INLINE Rall1d< T, V, S > sqrt(const Rall1d< T, V, S > &arg)
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)
static void polyroots4(IkReal rawcoeffs[4+1], IkReal rawroots[4], int &numroots)
IKFAST_API int GetNumFreeParameters()
IKFAST_API int GetIkRealSize()
INLINE Rall1d< T, V, S > acos(const Rall1d< T, V, S > &x)
INLINE Rall1d< T, V, S > abs(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)
void zgetrf_(const int *m, const int *n, std::complex< double > *a, const int *lda, int *ipiv, int *info)
#define IKFAST_VERSION
Header file for all ikfast c++ files/shared objects.
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > tan(const Rall1d< T, V, S > &arg)
static void polyroots2(IkReal rawcoeffs[2+1], IkReal rawroots[2], int &numroots)
IKFAST_API const char * GetIkFastVersion()
float IKatan2(float fy, float fx)
manages all the solutions
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
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)
virtual size_t GetNumSolutions() const =0
returns the number of solutions stored
int main(int argc, char **argv)
float IKatan2Simple(float fy, float fx)
void dgesv_(const int *n, const int *nrhs, double *a, const int *lda, int *ipiv, double *b, const int *ldb, int *info)