posegraph3d_gradient.h
Go to the documentation of this file.
00001 // HOG-Man - Hierarchical Optimization for Pose Graphs on Manifolds
00002 // Copyright (C) 2010 G. Grisetti, R. Kümmerle, C. Stachniss
00003 // 
00004 // HOG-Man is free software: you can redistribute it and/or modify
00005 // it under the terms of the GNU Lesser General Public License as published
00006 // by the Free Software Foundation, either version 3 of the License, or
00007 // (at your option) any later version.
00008 // 
00009 // HOG-Man is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU Lesser General Public License for more details.
00013 // 
00014 // You should have received a copy of the GNU Lesser General Public License
00015 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016 
00017 #ifndef POSE_GRAPH_3D_GRADIENT_H
00018 #define POSE_GRAPH_3D_GRADIENT_H
00019 
00020 #include "hogman_minimal/math/transformation.h"
00021 #include <cmath>
00022 
00023 namespace AISNavigation {
00024 
00025 inline void manifoldGradientXi(Matrix6& mat, const Vector6& e, const Vector6& xi, const Vector6& xj)
00026 {
00027   //const double& ex  = e[0];
00028   //const double& ey  = e[1];
00029   //const double& ez  = e[2];
00030   const double& er  = e[3];
00031   const double& ep  = e[4];
00032   const double& eya = e[5];
00033 
00034   const double& x1 = xi[0];
00035   const double& y1 = xi[1];
00036   const double& z1 = xi[2];
00037   const double& a1 = xi[3];
00038   const double& b1 = xi[4];
00039   const double& c1 = xi[5];
00040 
00041   const double& x2 = xj[0];
00042   const double& y2 = xj[1];
00043   const double& z2 = xj[2];
00044   const double& a2 = xj[3];
00045   const double& b2 = xj[4];
00046   const double& c2 = xj[5];
00047 
00048   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 ,
00049          aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 , aux_24 ,
00050          aux_25 , aux_26 , aux_27 , aux_28 , aux_29 , aux_30 , aux_31 , aux_32 , aux_33 , aux_34 , aux_35 , aux_36 ,
00051          aux_37 , aux_38 , aux_39 , aux_40 , aux_41 , aux_42 , aux_43 , aux_44 , aux_45 , aux_46 , aux_47 , aux_48 ,
00052          aux_49 , aux_50 , aux_51 , aux_52 , aux_53 , aux_54 , aux_55 , aux_56 , aux_57 , aux_58 , aux_59 , aux_60 ,
00053          aux_61 , aux_62 , aux_63 , aux_64 ;
00054   aux_1 = cos(a1) ;
00055   aux_2 = sin(b1) ;
00056   aux_3 = cos(c1) ;
00057   aux_4 = sin(a1) ;
00058   aux_5 = sin(c1) ;
00059   aux_6 = -14745600*aux_4*aux_5-14745600*aux_1*aux_2*aux_3 ;
00060   aux_7 = sin(ep) ;
00061   aux_8 = cos(b1) ;
00062   aux_9 = cos(ep) ;
00063   aux_10 = cos(eya) ;
00064   aux_11 = 14745600*aux_4*aux_2*aux_3-14745600*aux_1*aux_5 ;
00065   aux_12 = sin(eya) ;
00066   aux_13 = -14745600*aux_4*aux_2*aux_5-14745600*aux_1*aux_3 ;
00067   aux_14 = -aux_4*aux_5-aux_1*aux_2*aux_3 ;
00068   aux_15 = aux_4*aux_5+aux_1*aux_2*aux_3 ;
00069   aux_16 = aux_1*aux_2*aux_5-aux_4*aux_3 ;
00070   aux_17 = aux_1*aux_8*z2-aux_1*aux_8*z1+aux_16*y2-aux_16*y1+aux_15*x2+aux_14*x1 ;
00071   aux_18 = aux_4*aux_2*aux_3-aux_1*aux_5 ;
00072   aux_19 = aux_1*aux_5-aux_4*aux_2*aux_3 ;
00073   aux_20 = -aux_4*aux_2*aux_5-aux_1*aux_3 ;
00074   aux_21 = -aux_4*aux_8*z2+aux_4*aux_8*z1+aux_20*y2-aux_20*y1+aux_19*x2+aux_18*x1 ;
00075   aux_22 = aux_4*aux_3-aux_1*aux_2*aux_5 ;
00076   aux_23 = -aux_1*aux_8*z2+aux_1*aux_8*z1+aux_22*y2-aux_22*y1+aux_14*x2+aux_15*x1 ;
00077   aux_24 = -aux_2*z2+aux_2*z1+aux_8*aux_5*y2-aux_8*aux_5*y1+aux_8*aux_3*x2-aux_8*aux_3*x1 ;
00078   aux_25 = aux_4*aux_2*aux_5+aux_1*aux_3 ;
00079   aux_26 = aux_4*aux_8*z2-aux_4*aux_8*z1+aux_25*y2-aux_25*y1+aux_18*x2+aux_19*x1 ;
00080   aux_27 = aux_2*z2-aux_2*z1-aux_8*aux_5*y2+aux_8*aux_5*y1-aux_8*aux_3*x2+aux_8*aux_3*x1 ;
00081   aux_28 = sin(er) ;
00082   aux_29 = cos(er) ;
00083   aux_30 = 14745600*aux_4*aux_3-14745600*aux_1*aux_2*aux_5 ;
00084   aux_31 = aux_7*aux_28*aux_12+aux_29*aux_10 ;
00085   aux_32 = aux_7*aux_28*aux_10-aux_29*aux_12 ;
00086   aux_33 = aux_7*aux_29*aux_12-aux_28*aux_10 ;
00087   aux_34 = aux_28*aux_12+aux_7*aux_29*aux_10 ;
00088   aux_35 = 0 ;
00089   aux_36 = sin(a2) ;
00090   aux_37 = cos(b2) ;
00091   aux_38 = sin(b2) ;
00092   aux_39 = cos(c2) ;
00093   aux_40 = cos(a2) ;
00094   aux_41 = sin(c2) ;
00095   aux_42 = aux_36*aux_38*aux_39-aux_40*aux_41 ;
00096   aux_43 = aux_36*aux_38*aux_41+aux_40*aux_39 ;
00097   aux_44 = aux_16*aux_43+aux_15*aux_42+aux_1*aux_36*aux_8*aux_37 ;
00098   aux_45 = aux_36*aux_41+aux_40*aux_38*aux_39 ;
00099   aux_46 = aux_40*aux_38*aux_41-aux_36*aux_39 ;
00100   aux_47 = aux_16*aux_46+aux_15*aux_45+aux_1*aux_40*aux_8*aux_37 ;
00101   aux_48 = aux_25*aux_46+aux_18*aux_45+aux_4*aux_40*aux_8*aux_37 ;
00102   aux_49 = aux_8*aux_5*aux_46+aux_8*aux_3*aux_45-aux_40*aux_2*aux_37 ;
00103   aux_50 = aux_49*aux_34+aux_48*aux_33+aux_47*aux_9*aux_29 ;
00104   aux_51 = aux_25*aux_43+aux_18*aux_42+aux_4*aux_36*aux_8*aux_37 ;
00105   aux_52 = aux_8*aux_5*aux_43+aux_8*aux_3*aux_42-aux_36*aux_2*aux_37 ;
00106   aux_53 = aux_52*aux_34+aux_51*aux_33+aux_44*aux_9*aux_29 ;
00107   aux_54 = 1/(pow(aux_53,2)+pow(aux_50,2)) ;
00108   aux_55 = aux_37*aux_20*aux_41+aux_37*aux_19*aux_39+aux_4*aux_8*aux_38 ;
00109   aux_56 = aux_37*aux_16*aux_41+aux_37*aux_15*aux_39-aux_1*aux_8*aux_38 ;
00110   aux_57 = aux_37*aux_25*aux_41+aux_37*aux_18*aux_39-aux_4*aux_8*aux_38 ;
00111   aux_58 = aux_8*aux_37*aux_5*aux_41+aux_8*aux_37*aux_3*aux_39+aux_2*aux_38 ;
00112   aux_59 = 1/sqrt(1-pow(aux_58*aux_34+aux_57*aux_33+aux_56*aux_9*aux_29,2)) ;
00113   aux_60 = aux_37*aux_22*aux_41+aux_37*aux_14*aux_39+aux_1*aux_8*aux_38 ;
00114   aux_61 = -aux_8*aux_37*aux_5*aux_41-aux_8*aux_37*aux_3*aux_39-aux_2*aux_38 ;
00115   aux_62 = aux_57*aux_9*aux_12+aux_58*aux_9*aux_10-aux_56*aux_7 ;
00116   aux_63 = aux_57*aux_31+aux_58*aux_32+aux_56*aux_9*aux_28 ;
00117   aux_64 = 1/(pow(aux_63,2)+pow(aux_62,2)) ;
00118 
00119 
00120   mat[0][0] = -(aux_11*aux_9*aux_12+14745600*aux_8*aux_3*aux_9*aux_10+aux_6*aux_7)/14745600;
00121   mat[0][1] = (aux_13*aux_9*aux_12-14745600*aux_8*aux_5*aux_9*aux_10+(14745600*aux_1*aux_2*aux_5-14745600*aux_4*aux_3)*aux_7)/14745600;
00122   mat[0][2] = (-14745600*aux_4*aux_8*aux_9*aux_12+14745600*aux_2*aux_9*aux_10+14745600*aux_1*aux_8*aux_7)/14745600;
00123   mat[0][3] = aux_9*aux_12*aux_17-aux_7*aux_21;
00124   mat[0][4] = aux_9*aux_10*aux_23-aux_7*aux_24;
00125   mat[0][5] = aux_9*aux_12*aux_27+aux_9*aux_10*aux_26;
00126   mat[1][0] = -((aux_11*aux_7*aux_28-14745600*aux_8*aux_3*aux_29)*aux_12+(14745600*aux_8*aux_3*aux_7*aux_28+aux_11*aux_29)*aux_10+(14745600*aux_4*aux_5+14745600*aux_1*aux_2*aux_3)*aux_9*aux_28)/14745600;
00127   mat[1][1] = ((aux_13*aux_7*aux_28+14745600*aux_8*aux_5*aux_29)*aux_12+(aux_13*aux_29-14745600*aux_8*aux_5*aux_7*aux_28)*aux_10+aux_30*aux_9*aux_28)/14745600;
00128   mat[1][2] = ((-14745600*aux_4*aux_8*aux_7*aux_28-14745600*aux_2*aux_29)*aux_12+(14745600*aux_2*aux_7*aux_28-14745600*aux_4*aux_8*aux_29)*aux_10-14745600*aux_1*aux_8*aux_9*aux_28)/14745600;
00129   mat[1][3] = aux_9*aux_28*aux_21+aux_31*aux_17;
00130   mat[1][4] = aux_9*aux_28*aux_24+aux_32*aux_23;
00131   mat[1][5] = aux_31*aux_27+aux_32*aux_26;
00132   mat[2][0] = (((14745600*aux_1*aux_5-14745600*aux_4*aux_2*aux_3)*aux_7*aux_29-14745600*aux_8*aux_3*aux_28)*aux_12+(aux_11*aux_28-14745600*aux_8*aux_3*aux_7*aux_29)*aux_10+aux_6*aux_9*aux_29)/14745600;
00133   mat[2][1] = ((aux_13*aux_7*aux_29-14745600*aux_8*aux_5*aux_28)*aux_12+((14745600*aux_4*aux_2*aux_5+14745600*aux_1*aux_3)*aux_28-14745600*aux_8*aux_5*aux_7*aux_29)*aux_10+aux_30*aux_9*aux_29)/14745600;
00134   mat[2][2] = -((14745600*aux_4*aux_8*aux_7*aux_29-14745600*aux_2*aux_28)*aux_12+(-14745600*aux_4*aux_8*aux_28-14745600*aux_2*aux_7*aux_29)*aux_10+14745600*aux_1*aux_8*aux_9*aux_29)/14745600;
00135   mat[2][3] = aux_9*aux_29*aux_21+aux_33*aux_17;
00136   mat[2][4] = aux_9*aux_29*aux_24+aux_34*aux_23;
00137   mat[2][5] = aux_33*aux_27+aux_34*aux_26;
00138   mat[3][0] = aux_35;
00139   mat[3][1] = aux_35;
00140   mat[3][2] = aux_35;
00141   mat[3][3] = (aux_44*aux_33+(aux_20*aux_43+aux_19*aux_42-aux_4*aux_36*aux_8*aux_37)*aux_9*aux_29)*aux_50*aux_54-(aux_47*aux_33+(aux_20*aux_46+aux_19*aux_45-aux_4*aux_40*aux_8*aux_37)*aux_9*aux_29)*aux_53*aux_54;
00142   mat[3][4] = aux_50*((aux_22*aux_43+aux_14*aux_42-aux_1*aux_36*aux_8*aux_37)*aux_34+aux_52*aux_9*aux_29)*aux_54-((aux_22*aux_46+aux_14*aux_45-aux_1*aux_40*aux_8*aux_37)*aux_34+aux_49*aux_9*aux_29)*aux_53*aux_54;
00143   mat[3][5] = aux_50*(aux_51*aux_34+(-aux_8*aux_5*aux_43-aux_8*aux_3*aux_42+aux_36*aux_2*aux_37)*aux_33)*aux_54-(aux_48*aux_34+(-aux_8*aux_5*aux_46-aux_8*aux_3*aux_45+aux_40*aux_2*aux_37)*aux_33)*aux_53*aux_54;
00144   mat[4][0] = aux_35;
00145   mat[4][1] = aux_35;
00146   mat[4][2] = aux_35;
00147   mat[4][3] = -(aux_56*aux_33+aux_55*aux_9*aux_29)*aux_59;
00148   mat[4][4] = -(aux_60*aux_34+aux_58*aux_9*aux_29)*aux_59;
00149   mat[4][5] = -(aux_57*aux_34+aux_61*aux_33)*aux_59;
00150   mat[5][0] = aux_35;
00151   mat[5][1] = aux_35;
00152   mat[5][2] = aux_35;
00153   mat[5][3] = aux_62*(aux_56*aux_31+aux_55*aux_9*aux_28)*aux_64-(aux_56*aux_9*aux_12-aux_55*aux_7)*aux_63*aux_64;
00154   mat[5][4] = aux_62*(aux_60*aux_32+aux_58*aux_9*aux_28)*aux_64-(aux_60*aux_9*aux_10-aux_58*aux_7)*aux_63*aux_64;
00155   mat[5][5] = aux_62*(aux_61*aux_31+aux_57*aux_32)*aux_64-(aux_61*aux_9*aux_12+aux_57*aux_9*aux_10)*aux_63*aux_64;
00156 }  
00157 
00158 inline void manifoldGradientXj(Matrix6& mat, const Vector6& e, const Vector6& xi, const Vector6& xj)
00159 {
00160   //const double& ex  = e[0];
00161   //const double& ey  = e[1];
00162   //const double& ez  = e[2];
00163   const double& er  = e[3];
00164   const double& ep  = e[4];
00165   const double& eya = e[5];
00166 
00167   //const double& x1 = xi[0];
00168   //const double& y1 = xi[1];
00169   //const double& z1 = xi[2];
00170   const double& a1 = xi[3];
00171   const double& b1 = xi[4];
00172   const double& c1 = xi[5];
00173 
00174   //const double& x2 = xj[0];
00175   //const double& y2 = xj[1];
00176   //const double& z2 = xj[2];
00177   const double& a2 = xj[3];
00178   const double& b2 = xj[4];
00179   const double& c2 = xj[5];
00180 
00181   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 , aux_13 ,
00182          aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 , aux_24 , aux_25 ,
00183          aux_26 , aux_27 , aux_28 , aux_29 , aux_30 , aux_31 , aux_32 , aux_33 , aux_34 , aux_35 , aux_36 , aux_37 ,
00184          aux_38 , aux_39 , aux_40 , aux_41 , aux_42 , aux_43 , aux_44 , aux_45 , aux_46 , aux_47 , aux_48 , aux_49 ,
00185          aux_50 , aux_51 , aux_52 , aux_53 ;
00186   aux_1 = cos(a1) ;
00187   aux_2 = sin(b1) ;
00188   aux_3 = cos(c1) ;
00189   aux_4 = sin(a1) ;
00190   aux_5 = sin(c1) ;
00191   aux_6 = sin(ep) ;
00192   aux_7 = cos(b1) ;
00193   aux_8 = cos(ep) ;
00194   aux_9 = cos(eya) ;
00195   aux_10 = aux_4*aux_2*aux_3-aux_1*aux_5 ;
00196   aux_11 = sin(eya) ;
00197   aux_12 = aux_4*aux_2*aux_5+aux_1*aux_3 ;
00198   aux_13 = 0 ;
00199   aux_14 = aux_4*aux_5+aux_1*aux_2*aux_3 ;
00200   aux_15 = sin(er) ;
00201   aux_16 = cos(er) ;
00202   aux_17 = aux_1*aux_2*aux_5-aux_4*aux_3 ;
00203   aux_18 = cos(a2) ;
00204   aux_19 = cos(b2) ;
00205   aux_20 = sin(b2) ;
00206   aux_21 = cos(c2) ;
00207   aux_22 = sin(a2) ;
00208   aux_23 = sin(c2) ;
00209   aux_24 = aux_22*aux_23+aux_18*aux_20*aux_21 ;
00210   aux_25 = aux_18*aux_20*aux_23-aux_22*aux_21 ;
00211   aux_26 = aux_6*aux_16*aux_11-aux_15*aux_9 ;
00212   aux_27 = aux_15*aux_11+aux_6*aux_16*aux_9 ;
00213   aux_28 = (aux_7*aux_5*aux_25+aux_7*aux_3*aux_24-aux_18*aux_2*aux_19)*aux_27+(aux_12*aux_25+aux_10*aux_24+aux_4*aux_18*aux_7*aux_19)*aux_26+(aux_17*aux_25+aux_14*aux_24+aux_1*aux_18*aux_7*aux_19)*aux_8*aux_16 ;
00214   aux_29 = pow(aux_28,2) ;
00215   aux_30 = aux_22*aux_20*aux_21-aux_18*aux_23 ;
00216   aux_31 = aux_22*aux_20*aux_23+aux_18*aux_21 ;
00217   aux_32 = aux_17*aux_31+aux_14*aux_30+aux_1*aux_22*aux_7*aux_19 ;
00218   aux_33 = aux_12*aux_31+aux_10*aux_30+aux_4*aux_22*aux_7*aux_19 ;
00219   aux_34 = aux_7*aux_5*aux_31+aux_7*aux_3*aux_30-aux_22*aux_2*aux_19 ;
00220   aux_35 = aux_34*aux_27+aux_33*aux_26+aux_32*aux_8*aux_16 ;
00221   aux_36 = 1/(pow(aux_35,2)+aux_29) ;
00222   aux_37 = aux_18*aux_23-aux_22*aux_20*aux_21 ;
00223   aux_38 = -aux_22*aux_20*aux_23-aux_18*aux_21 ;
00224   aux_39 = aux_19*aux_17*aux_23+aux_19*aux_14*aux_21-aux_1*aux_7*aux_20 ;
00225   aux_40 = aux_19*aux_12*aux_23+aux_19*aux_10*aux_21-aux_4*aux_7*aux_20 ;
00226   aux_41 = aux_7*aux_19*aux_5*aux_23+aux_7*aux_19*aux_3*aux_21+aux_2*aux_20 ;
00227   aux_42 = aux_41*aux_27+aux_40*aux_26+aux_39*aux_8*aux_16 ;
00228   aux_43 = -aux_22*aux_23-aux_18*aux_20*aux_21 ;
00229   aux_44 = aux_22*aux_21-aux_18*aux_20*aux_23 ;
00230   aux_45 = aux_17*aux_44+aux_14*aux_43-aux_1*aux_18*aux_7*aux_19 ;
00231   aux_46 = aux_12*aux_44+aux_10*aux_43-aux_4*aux_18*aux_7*aux_19 ;
00232   aux_47 = aux_7*aux_5*aux_44+aux_7*aux_3*aux_43+aux_18*aux_2*aux_19 ;
00233   aux_48 = 1/sqrt(1-pow(aux_42,2)) ;
00234   aux_49 = aux_6*aux_15*aux_9-aux_16*aux_11 ;
00235   aux_50 = aux_6*aux_15*aux_11+aux_16*aux_9 ;
00236   aux_51 = aux_40*aux_50+aux_41*aux_49+aux_39*aux_8*aux_15 ;
00237   aux_52 = aux_40*aux_8*aux_11+aux_41*aux_8*aux_9-aux_39*aux_6 ;
00238   aux_53 = 1/(pow(aux_52,2)+pow(aux_51,2)) ;
00239 
00240   mat[0][0] = aux_10*aux_8*aux_11+aux_7*aux_3*aux_8*aux_9+(-aux_4*aux_5-aux_1*aux_2*aux_3)*aux_6;
00241   mat[0][1] = aux_12*aux_8*aux_11+aux_7*aux_5*aux_8*aux_9+(aux_4*aux_3-aux_1*aux_2*aux_5)*aux_6;
00242   mat[0][2] = aux_4*aux_7*aux_8*aux_11-aux_2*aux_8*aux_9-aux_1*aux_7*aux_6;
00243   mat[0][3] = aux_13;
00244   mat[0][4] = aux_13;
00245   mat[0][5] = aux_13;
00246   mat[1][0] = (aux_10*aux_6*aux_15-aux_7*aux_3*aux_16)*aux_11+(aux_7*aux_3*aux_6*aux_15+aux_10*aux_16)*aux_9+aux_14*aux_8*aux_15;
00247   mat[1][1] = (aux_12*aux_6*aux_15-aux_7*aux_5*aux_16)*aux_11+(aux_7*aux_5*aux_6*aux_15+aux_12*aux_16)*aux_9+aux_17*aux_8*aux_15;
00248   mat[1][2] = (aux_4*aux_7*aux_6*aux_15+aux_2*aux_16)*aux_11+(aux_4*aux_7*aux_16-aux_2*aux_6*aux_15)*aux_9+aux_1*aux_7*aux_8*aux_15;
00249   mat[1][3] = aux_13;
00250   mat[1][4] = aux_13;
00251   mat[1][5] = aux_13;
00252   mat[2][0] = (aux_7*aux_3*aux_15+aux_10*aux_6*aux_16)*aux_11+((aux_1*aux_5-aux_4*aux_2*aux_3)*aux_15+aux_7*aux_3*aux_6*aux_16)*aux_9+aux_14*aux_8*aux_16;
00253   mat[2][1] = (aux_7*aux_5*aux_15+aux_12*aux_6*aux_16)*aux_11+((-aux_4*aux_2*aux_5-aux_1*aux_3)*aux_15+aux_7*aux_5*aux_6*aux_16)*aux_9+aux_17*aux_8*aux_16;
00254   mat[2][2] = (aux_4*aux_7*aux_6*aux_16-aux_2*aux_15)*aux_11+(-aux_4*aux_7*aux_15-aux_2*aux_6*aux_16)*aux_9+aux_1*aux_7*aux_8*aux_16;
00255   mat[2][3] = aux_13;
00256   mat[2][4] = aux_13;
00257   mat[2][5] = aux_13;
00258   mat[3][0] = aux_13;
00259   mat[3][1] = aux_13;
00260   mat[3][2] = aux_13;
00261   mat[3][3] = aux_29*aux_36-((aux_7*aux_5*aux_38+aux_7*aux_3*aux_37+aux_22*aux_2*aux_19)*aux_27+(aux_12*aux_38+aux_10*aux_37-aux_4*aux_22*aux_7*aux_19)*aux_26+(aux_17*aux_38+aux_14*aux_37-aux_1*aux_22*aux_7*aux_19)*aux_8*aux_16)*aux_35*aux_36;
00262   mat[3][4] = -aux_42*aux_35*aux_36;
00263   mat[3][5] = ((-aux_7*aux_19*aux_5*aux_23-aux_7*aux_19*aux_3*aux_21-aux_2*aux_20)*aux_27+(-aux_19*aux_12*aux_23-aux_19*aux_10*aux_21+aux_4*aux_7*aux_20)*aux_26+(-aux_19*aux_17*aux_23-aux_19*aux_14*aux_21+aux_1*aux_7*aux_20)*aux_8*aux_16)*aux_28*aux_36;
00264   mat[4][0] = aux_13;
00265   mat[4][1] = aux_13;
00266   mat[4][2] = aux_13;
00267   mat[4][3] = aux_13;
00268   mat[4][4] = -(aux_47*aux_27+aux_46*aux_26+aux_45*aux_8*aux_16)*aux_48;
00269   mat[4][5] = -aux_35*aux_48;
00270   mat[5][0] = aux_13;
00271   mat[5][1] = aux_13;
00272   mat[5][2] = aux_13;
00273   mat[5][3] = aux_13;
00274   mat[5][4] = aux_52*(aux_46*aux_50+aux_47*aux_49+aux_45*aux_8*aux_15)*aux_53-(aux_46*aux_8*aux_11+aux_47*aux_8*aux_9-aux_45*aux_6)*aux_51*aux_53;
00275   mat[5][5] = aux_52*(aux_33*aux_50+aux_34*aux_49+aux_32*aux_8*aux_15)*aux_53-(aux_33*aux_8*aux_11+aux_34*aux_8*aux_9-aux_32*aux_6)*aux_51*aux_53;
00276 }  
00277 
00278 inline void manifold2euler(Matrix6& mat, double manifold[6])
00279 {
00280   //const double& mx = manifold[0];
00281   //const double& my = manifold[1];
00282   //const double& mz = manifold[2];
00283   const double& ma = manifold[3];
00284   const double& mb = manifold[4];
00285   const double& mc = manifold[5];
00286 
00287   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 ,
00288          aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 ,
00289          aux_24 , aux_25 , aux_26 , aux_27 , aux_28 , aux_29 , aux_30 , aux_31 , aux_32 , aux_33 , aux_34 ,
00290          aux_35 , aux_36 , aux_37 , aux_38 , aux_39 , aux_40 , aux_41 , aux_42 , aux_43 , aux_44 , aux_45 ,
00291          aux_46 , aux_47 , aux_48 , aux_49 , aux_50 , aux_51 , aux_52 , aux_53 , aux_54 ;
00292   aux_1 = 1 ;
00293   aux_2 = 0 ;
00294   aux_3 = std::pow(ma,3) ;
00295   aux_4 = std::pow(ma,2) ;
00296   aux_5 = std::pow(mb,2) ;
00297   aux_6 = std::pow(mc,2) ;
00298   aux_7 = aux_6+aux_5+aux_4 ;
00299   aux_8 = sqrt(aux_7) ;
00300   aux_9 = 1/std::pow(aux_8,3) ;
00301   aux_10 = aux_8/2 ;
00302   aux_11 = cos(aux_10) ;
00303   aux_12 = sin(aux_10) ;
00304   aux_13 = -ma*aux_5*aux_9*aux_11*aux_12 ;
00305   aux_14 = ma*aux_6*aux_9*aux_11*aux_12 ;
00306   aux_15 = 1/aux_8 ;
00307   aux_16 = -ma*aux_15*aux_11*aux_12 ;
00308   aux_17 = 1/std::pow(aux_7,2) ;
00309   aux_18 = std::pow(aux_12,2) ;
00310   aux_19 = 2*ma*aux_5*aux_17*aux_18 ;
00311   aux_20 = -2*ma*aux_6*aux_17*aux_18 ;
00312   aux_21 = 1/aux_7 ;
00313   aux_22 = mb*mc*aux_21*aux_18+ma*aux_15*aux_11*aux_12 ;
00314   aux_23 = std::pow(aux_11,2) ;
00315   aux_24 = -aux_5*aux_21*aux_18 ;
00316   aux_25 = aux_6*aux_21*aux_18+aux_24-aux_4*aux_21*aux_18+aux_23 ;
00317   aux_26 = 1/(std::pow(aux_25,2)+4*std::pow(aux_22,2)) ;
00318   aux_27 = ma*mb*mc*aux_9*aux_11*aux_12 ;
00319   aux_28 = aux_15*aux_11*aux_12 ;
00320   aux_29 = -2*ma*mb*mc*aux_17*aux_18 ;
00321   aux_30 = std::pow(mb,3) ;
00322   aux_31 = -aux_30*aux_9*aux_11*aux_12 ;
00323   aux_32 = mb*aux_6*aux_9*aux_11*aux_12 ;
00324   aux_33 = -mb*aux_15*aux_11*aux_12 ;
00325   aux_34 = 2*aux_30*aux_17*aux_18 ;
00326   aux_35 = -2*mb*aux_6*aux_17*aux_18 ;
00327   aux_36 = -2*mb*aux_21*aux_18 ;
00328   aux_37 = mc*aux_21*aux_18 ;
00329   aux_38 = -aux_5*mc*aux_9*aux_11*aux_12 ;
00330   aux_39 = std::pow(mc,3) ;
00331   aux_40 = -mc*aux_15*aux_11*aux_12 ;
00332   aux_41 = 2*aux_5*mc*aux_17*aux_18 ;
00333   aux_42 = ma*mc*aux_21*aux_23/2 ;
00334   aux_43 = -ma*mc*aux_9*aux_11*aux_12 ;
00335   aux_44 = mb*aux_21*aux_18 ;
00336   aux_45 = -ma*mc*aux_21*aux_18/2 ;
00337   aux_46 = aux_4*mc*aux_9*aux_11*aux_12 ;
00338   aux_47 = -2*aux_4*mc*aux_17*aux_18 ;
00339   aux_48 = 1/sqrt(1-4*std::pow(ma*mc*aux_21*aux_18+aux_33,2)) ;
00340   aux_49 = ma*aux_21*aux_18 ;
00341   aux_50 = ma*mb*aux_21*aux_18+mc*aux_15*aux_11*aux_12 ;
00342   aux_51 = -aux_6*aux_21*aux_18+aux_24+aux_4*aux_21*aux_18+aux_23 ;
00343   aux_52 = 1/(std::pow(aux_51,2)+4*std::pow(aux_50,2)) ;
00344   aux_53 = aux_4*mb*aux_9*aux_11*aux_12 ;
00345   aux_54 = -2*aux_4*mb*aux_17*aux_18 ;
00346 
00347   mat[0][0] = aux_1;
00348   mat[0][1] = aux_2;
00349   mat[0][2] = aux_2;
00350   mat[0][3] = aux_2;
00351   mat[0][4] = aux_2;
00352   mat[0][5] = aux_2;
00353   mat[1][0] = aux_2;
00354   mat[1][1] = aux_1;
00355   mat[1][2] = aux_2;
00356   mat[1][3] = aux_2;
00357   mat[1][4] = aux_2;
00358   mat[1][5] = aux_2;
00359   mat[2][0] = aux_2;
00360   mat[2][1] = aux_2;
00361   mat[2][2] = aux_1;
00362   mat[2][3] = aux_2;
00363   mat[2][4] = aux_2;
00364   mat[2][5] = aux_2;
00365   mat[3][0] = aux_2;
00366   mat[3][1] = aux_2;
00367   mat[3][2] = aux_2;
00368   mat[3][3] = 2*(-aux_4*aux_21*aux_18/2+aux_29+aux_28+aux_27-aux_4*aux_9*aux_11*aux_12+aux_4*aux_21*aux_23/2)*aux_25*aux_26-2*(-2*ma*aux_21*aux_18+aux_20+aux_19+2*aux_3*aux_17*aux_18+aux_16+aux_14+aux_13-aux_3*aux_9*aux_11*aux_12)*aux_22*aux_26;
00369   mat[3][4] = 2*(aux_37-ma*mb*aux_21*aux_18/2-2*aux_5*mc*aux_17*aux_18+aux_5*mc*aux_9*aux_11*aux_12-ma*mb*aux_9*aux_11*aux_12+ma*mb*aux_21*aux_23/2)*aux_25*aux_26-2*(aux_36+aux_35+aux_34+2*aux_4*mb*aux_17*aux_18+aux_33+aux_32+aux_31-aux_4*mb*aux_9*aux_11*aux_12)*aux_22*aux_26;
00370   mat[3][5] = 2*(aux_45+aux_44+aux_35+aux_32+aux_43+aux_42)*aux_25*aux_26-2*(2*mc*aux_21*aux_18-2*aux_39*aux_17*aux_18+aux_41+2*aux_4*mc*aux_17*aux_18+aux_40+aux_39*aux_9*aux_11*aux_12+aux_38-aux_4*mc*aux_9*aux_11*aux_12)*aux_22*aux_26;
00371   mat[4][0] = aux_2;
00372   mat[4][1] = aux_2;
00373   mat[4][2] = aux_2;
00374   mat[4][3] = -2*(aux_37+ma*mb*aux_21*aux_18/2+aux_47+aux_46+ma*mb*aux_9*aux_11*aux_12-ma*mb*aux_21*aux_23/2)*aux_48;
00375   mat[4][4] = -2*(aux_5*aux_21*aux_18/2+aux_29-aux_15*aux_11*aux_12+aux_27+aux_5*aux_9*aux_11*aux_12-aux_5*aux_21*aux_23/2)*aux_48;
00376   mat[4][5] = -2*(mb*mc*aux_21*aux_18/2+aux_49+aux_20+aux_14+mb*mc*aux_9*aux_11*aux_12-mb*mc*aux_21*aux_23/2)*aux_48;
00377   mat[5][0] = aux_2;
00378   mat[5][1] = aux_2;
00379   mat[5][2] = aux_2;
00380   mat[5][3] = 2*(aux_45+aux_44+aux_54+aux_43+aux_53+aux_42)*aux_51*aux_52-2*(2*ma*aux_21*aux_18+2*ma*aux_6*aux_17*aux_18+aux_19-2*aux_3*aux_17*aux_18+aux_16-ma*aux_6*aux_9*aux_11*aux_12+aux_13+aux_3*aux_9*aux_11*aux_12)*aux_50*aux_52;
00381   mat[5][4] = 2*(-mb*mc*aux_21*aux_18/2+aux_49-2*ma*aux_5*aux_17*aux_18-mb*mc*aux_9*aux_11*aux_12+ma*aux_5*aux_9*aux_11*aux_12+mb*mc*aux_21*aux_23/2)*aux_51*aux_52-2*(aux_36+2*mb*aux_6*aux_17*aux_18+aux_34+aux_54+aux_33-mb*aux_6*aux_9*aux_11*aux_12+aux_31+aux_53)*aux_50*aux_52;
00382   mat[5][5] = 2*aux_51*(-aux_6*aux_21*aux_18/2+aux_29+aux_28-aux_6*aux_9*aux_11*aux_12+aux_27+aux_6*aux_21*aux_23/2)*aux_52-2*aux_50*(-2*mc*aux_21*aux_18+2*aux_39*aux_17*aux_18+aux_41+aux_47+aux_40-aux_39*aux_9*aux_11*aux_12+aux_38+aux_46)*aux_52;
00383 }
00384 
00385 inline void manifoldZero2euler(Matrix6& mat, double manifold[6])
00386 {
00387   //const double& mx = manifold[0];
00388   //const double& my = manifold[1];
00389   //const double& mz = manifold[2];
00390   const double& ma = manifold[3];
00391   const double& mb = manifold[4];
00392   const double& mc = manifold[5];
00393 
00394   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 ;
00395   aux_1 = 1 ;
00396   aux_2 = 0 ;
00397   aux_3 = mb*mc/4+ma/2 ;
00398   aux_4 = std::pow(ma,2) ;
00399   aux_5 = -std::pow(mb,2)/4 ;
00400   aux_6 = std::pow(mc,2) ;
00401   aux_7 = aux_6/4+aux_5-aux_4/4+1 ;
00402   aux_8 = 1/(std::pow(aux_7,2)+4*std::pow(aux_3,2)) ;
00403   aux_9 = 1/sqrt(1-4*std::pow(ma*mc/4-mb/2,2)) ;
00404   aux_10 = mc/2+ma*mb/4 ;
00405   aux_11 = -aux_6/4+aux_5+aux_4/4+1 ;
00406   aux_12 = 1/(std::pow(aux_11,2)+4*std::pow(aux_10,2)) ;
00407 
00408   mat[0][0] = aux_1;
00409   mat[0][1] = aux_2;
00410   mat[0][2] = aux_2;
00411   mat[0][3] = aux_2;
00412   mat[0][4] = aux_2;
00413   mat[0][5] = aux_2;
00414   mat[1][0] = aux_2;
00415   mat[1][1] = aux_1;
00416   mat[1][2] = aux_2;
00417   mat[1][3] = aux_2;
00418   mat[1][4] = aux_2;
00419   mat[1][5] = aux_2;
00420   mat[2][0] = aux_2;
00421   mat[2][1] = aux_2;
00422   mat[2][2] = aux_1;
00423   mat[2][3] = aux_2;
00424   mat[2][4] = aux_2;
00425   mat[2][5] = aux_2;
00426   mat[3][0] = aux_2;
00427   mat[3][1] = aux_2;
00428   mat[3][2] = aux_2;
00429   mat[3][3] = aux_7*aux_8+ma*aux_3*aux_8;
00430   mat[3][4] = mc*aux_7*aux_8/2+mb*aux_3*aux_8;
00431   mat[3][5] = mb*aux_7*aux_8/2-mc*aux_3*aux_8;
00432   mat[4][0] = aux_2;
00433   mat[4][1] = aux_2;
00434   mat[4][2] = aux_2;
00435   mat[4][3] = -mc*aux_9/2;
00436   mat[4][4] = aux_9;
00437   mat[4][5] = -ma*aux_9/2;
00438   mat[5][0] = aux_2;
00439   mat[5][1] = aux_2;
00440   mat[5][2] = aux_2;
00441   mat[5][3] = mb*aux_11*aux_12/2-ma*aux_10*aux_12;
00442   mat[5][4] = ma*aux_11*aux_12/2+mb*aux_10*aux_12;
00443   mat[5][5] = aux_11*aux_12+aux_10*mc*aux_12;
00444 }
00445 
00446 inline void eulerGradientXi(Matrix6& mat, const Vector6& e, const Vector6& xi, const Vector6& xj)
00447 {
00448   //const double& ex  = e[0];
00449   //const double& ey  = e[1];
00450   //const double& ez  = e[2];
00451   const double& er  = e[3];
00452   const double& ep  = e[4];
00453   const double& eya = e[5];
00454 
00455   const double& x1 = xi[0];
00456   const double& y1 = xi[1];
00457   const double& z1 = xi[2];
00458   const double& a1 = xi[3];
00459   const double& b1 = xi[4];
00460   const double& c1 = xi[5];
00461 
00462   const double& x2 = xj[0];
00463   const double& y2 = xj[1];
00464   const double& z2 = xj[2];
00465   const double& a2 = xj[3];
00466   const double& b2 = xj[4];
00467   const double& c2 = xj[5];
00468 
00469   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 ,
00470          aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 ,
00471          aux_24 , aux_25 , aux_26 , aux_27 , aux_28 , aux_29 , aux_30 , aux_31 , aux_32 , aux_33 , aux_34 ,
00472          aux_35 , aux_36 , aux_37 , aux_38 , aux_39 , aux_40 , aux_41 , aux_42 , aux_43 , aux_44 , aux_45 ,
00473          aux_46 , aux_47 , aux_48 , aux_49 , aux_50 , aux_51 , aux_52 , aux_53 , aux_54 , aux_55 , aux_56 ,
00474          aux_57 , aux_58 , aux_59 , aux_60 , aux_61 , aux_62 , aux_63 , aux_64 , aux_65 , aux_66 , aux_67 ,
00475          aux_68 , aux_69 ;
00476   aux_1 = sin(c1) ;
00477   aux_2 = sin(a1) ;
00478   aux_3 = sin(ep) ;
00479   aux_4 = cos(a1) ;
00480   aux_5 = cos(ep) ;
00481   aux_6 = sin(eya) ;
00482   aux_7 = cos(c1) ;
00483   aux_8 = cos(b1) ;
00484   aux_9 = cos(eya) ;
00485   aux_10 = sin(b1) ;
00486   aux_11 = aux_4*aux_3-aux_2*aux_5*aux_6 ;
00487   aux_12 = aux_10*aux_11-aux_8*aux_5*aux_9 ;
00488   aux_13 = aux_2*aux_1+aux_4*aux_10*aux_7 ;
00489   aux_14 = aux_4*aux_10*aux_1-aux_2*aux_7 ;
00490   aux_15 = aux_4*aux_8*z2-aux_4*aux_8*z1+aux_14*y2-aux_14*y1+aux_13*x2+(-aux_2*aux_1-aux_4*aux_10*aux_7)*x1 ;
00491   aux_16 = aux_2*aux_10*aux_7-aux_4*aux_1 ;
00492   aux_17 = aux_4*aux_1-aux_2*aux_10*aux_7 ;
00493   aux_18 = -aux_2*aux_10*aux_1-aux_4*aux_7 ;
00494   aux_19 = -aux_2*aux_8*z2+aux_2*aux_8*z1+aux_18*y2-aux_18*y1+aux_17*x2+aux_16*x1 ;
00495   aux_20 = -aux_8*z2+aux_8*z1-aux_10*aux_1*y2+aux_10*aux_1*y1-aux_10*aux_7*x2+aux_10*aux_7*x1 ;
00496   aux_21 = -aux_4*aux_10*z2+aux_4*aux_10*z1+aux_4*aux_8*aux_1*y2-aux_4*aux_8*aux_1*y1+aux_4*aux_8*aux_7*x2-aux_4*aux_8*aux_7*x1 ;
00497   aux_22 = -aux_2*aux_10*z2+aux_2*aux_10*z1+aux_2*aux_8*aux_1*y2-aux_2*aux_8*aux_1*y1+aux_2*aux_8*aux_7*x2-aux_2*aux_8*aux_7*x1 ;
00498   aux_23 = aux_8*aux_7*y2-aux_8*aux_7*y1-aux_8*aux_1*x2+aux_8*aux_1*x1 ;
00499   aux_24 = aux_2*aux_10*aux_1+aux_4*aux_7 ;
00500   aux_25 = aux_16*y2-aux_16*y1+aux_18*x2+aux_24*x1 ;
00501   aux_26 = aux_2*aux_7-aux_4*aux_10*aux_1 ;
00502   aux_27 = aux_13*y2-aux_13*y1+aux_26*x2+aux_14*x1 ;
00503   aux_28 = sin(er) ;
00504   aux_29 = cos(er) ;
00505   aux_30 = aux_3*aux_28*aux_6+aux_29*aux_9 ;
00506   aux_31 = -aux_3*aux_28*aux_6-aux_29*aux_9 ;
00507   aux_32 = aux_2*aux_31-aux_4*aux_5*aux_28 ;
00508   aux_33 = aux_10*aux_32+aux_8*(aux_29*aux_6-aux_3*aux_28*aux_9) ;
00509   aux_34 = aux_3*aux_28*aux_9-aux_29*aux_6 ;
00510   aux_35 = aux_3*aux_29*aux_6-aux_28*aux_9 ;
00511   aux_36 = aux_28*aux_9-aux_3*aux_29*aux_6 ;
00512   aux_37 = aux_2*aux_36-aux_4*aux_5*aux_29 ;
00513   aux_38 = aux_10*aux_37+aux_8*(-aux_28*aux_6-aux_3*aux_29*aux_9) ;
00514   aux_39 = aux_28*aux_6+aux_3*aux_29*aux_9 ;
00515   aux_40 = 0 ;
00516   aux_41 = sin(a2) ;
00517   aux_42 = cos(b2) ;
00518   aux_43 = sin(b2) ;
00519   aux_44 = cos(c2) ;
00520   aux_45 = cos(a2) ;
00521   aux_46 = sin(c2) ;
00522   aux_47 = aux_41*aux_43*aux_44-aux_45*aux_46 ;
00523   aux_48 = aux_41*aux_43*aux_46+aux_45*aux_44 ;
00524   aux_49 = aux_14*aux_48+aux_13*aux_47+aux_4*aux_41*aux_8*aux_42 ;
00525   aux_50 = aux_41*aux_46+aux_45*aux_43*aux_44 ;
00526   aux_51 = aux_45*aux_43*aux_46-aux_41*aux_44 ;
00527   aux_52 = aux_14*aux_51+aux_13*aux_50+aux_4*aux_45*aux_8*aux_42 ;
00528   aux_53 = (aux_8*aux_1*aux_51+aux_8*aux_7*aux_50-aux_45*aux_10*aux_42)*aux_39+(aux_24*aux_51+aux_16*aux_50+aux_2*aux_45*aux_8*aux_42)*aux_35+aux_52*aux_5*aux_29 ;
00529   aux_54 = (aux_8*aux_1*aux_48+aux_8*aux_7*aux_47-aux_41*aux_10*aux_42)*aux_39+(aux_24*aux_48+aux_16*aux_47+aux_2*aux_41*aux_8*aux_42)*aux_35+aux_49*aux_5*aux_29 ;
00530   aux_55 = 1/(pow(aux_54,2)+pow(aux_53,2)) ;
00531   aux_56 = aux_42*aux_18*aux_46+aux_42*aux_17*aux_44+aux_2*aux_8*aux_43 ;
00532   aux_57 = aux_42*aux_14*aux_46+aux_42*aux_13*aux_44-aux_4*aux_8*aux_43 ;
00533   aux_58 = aux_42*aux_24*aux_46+aux_42*aux_16*aux_44-aux_2*aux_8*aux_43 ;
00534   aux_59 = aux_8*aux_42*aux_1*aux_46+aux_8*aux_42*aux_7*aux_44+aux_10*aux_43 ;
00535   aux_60 = 1/sqrt(1-pow(aux_59*aux_39+aux_58*aux_35+aux_57*aux_5*aux_29,2)) ;
00536   aux_61 = aux_4*aux_8*aux_42*aux_1*aux_46+aux_4*aux_8*aux_42*aux_7*aux_44+aux_4*aux_10*aux_43 ;
00537   aux_62 = aux_2*aux_8*aux_42*aux_1*aux_46+aux_2*aux_8*aux_42*aux_7*aux_44+aux_2*aux_10*aux_43 ;
00538   aux_63 = -aux_10*aux_42*aux_1*aux_46-aux_10*aux_42*aux_7*aux_44+aux_8*aux_43 ;
00539   aux_64 = aux_42*aux_13*aux_46+aux_42*aux_26*aux_44 ;
00540   aux_65 = aux_42*aux_16*aux_46+aux_42*aux_18*aux_44 ;
00541   aux_66 = aux_8*aux_42*aux_7*aux_46-aux_8*aux_42*aux_1*aux_44 ;
00542   aux_67 = aux_58*aux_5*aux_6+aux_59*aux_5*aux_9-aux_57*aux_3 ;
00543   aux_68 = aux_58*aux_30+aux_59*aux_34+aux_57*aux_5*aux_28 ;
00544   aux_69 = 1/(pow(aux_68,2)+pow(aux_67,2)) ;
00545 
00546   mat[0][0] =  aux_7*aux_12+aux_1*(aux_4*aux_5*aux_6+aux_2*aux_3);
00547   mat[0][1] = aux_1*aux_12+aux_7*(-aux_4*aux_5*aux_6-aux_2*aux_3);
00548   mat[0][2] = aux_8*aux_11+aux_10*aux_5*aux_9;
00549   mat[0][3] = aux_5*aux_6*aux_15-aux_3*aux_19;
00550   mat[0][4] = aux_5*aux_6*aux_22-aux_3*aux_21+aux_5*aux_9*aux_20;
00551   mat[0][5] = -aux_3*aux_27+aux_5*aux_6*aux_25+aux_5*aux_9*aux_23;
00552   mat[1][0] = aux_7*aux_33+aux_1*(aux_4*aux_30-aux_2*aux_5*aux_28);
00553   mat[1][1] = aux_1*aux_33+aux_7*(aux_4*aux_31+aux_2*aux_5*aux_28);
00554   mat[1][2] = aux_8*aux_32+aux_10*aux_34;
00555   mat[1][3] = aux_5*aux_28*aux_19+aux_30*aux_15;
00556   mat[1][4] = aux_30*aux_22+aux_5*aux_28*aux_21+aux_34*aux_20;
00557   mat[1][5] = aux_5*aux_28*aux_27+aux_30*aux_25+aux_34*aux_23;
00558   mat[2][0] = aux_7*aux_38+aux_1*(aux_4*aux_35-aux_2*aux_5*aux_29);
00559   mat[2][1] = aux_1*aux_38+aux_7*(aux_4*aux_36+aux_2*aux_5*aux_29);
00560   mat[2][2] = aux_8*aux_37+aux_10*aux_39;
00561   mat[2][3] = aux_5*aux_29*aux_19+aux_35*aux_15;
00562   mat[2][4] = aux_35*aux_22+aux_5*aux_29*aux_21+aux_39*aux_20;
00563   mat[2][5] = aux_5*aux_29*aux_27+aux_35*aux_25+aux_39*aux_23;
00564   mat[3][0] = aux_40;
00565   mat[3][1] = aux_40;
00566   mat[3][2] = aux_40;
00567   mat[3][3] = (aux_49*aux_35+(aux_18*aux_48+aux_17*aux_47-aux_2*aux_41*aux_8*aux_42)*aux_5*aux_29)*aux_53*aux_55-(aux_52*aux_35+(aux_18*aux_51+aux_17*aux_50-aux_2*aux_45*aux_8*aux_42)*aux_5*aux_29)*aux_54*aux_55;
00568   mat[3][4] = aux_53*((-aux_10*aux_1*aux_48-aux_10*aux_7*aux_47-aux_41*aux_8*aux_42)*aux_39+(aux_2*aux_8*aux_1*aux_48+aux_2*aux_8*aux_7*aux_47-aux_2*aux_41*aux_10*aux_42)*aux_35+(aux_4*aux_8*aux_1*aux_48+aux_4*aux_8*aux_7*aux_47-aux_4*aux_41*aux_10*aux_42)*aux_5*aux_29)*aux_55-((-aux_10*aux_1*aux_51-aux_10*aux_7*aux_50-aux_45*aux_8*aux_42)*aux_39+(aux_2*aux_8*aux_1*aux_51+aux_2*aux_8*aux_7*aux_50-aux_2*aux_45*aux_10*aux_42)*aux_35+(aux_4*aux_8*aux_1*aux_51+aux_4*aux_8*aux_7*aux_50-aux_4*aux_45*aux_10*aux_42)*aux_5*aux_29)*aux_54*aux_55;
00569   mat[3][5] = aux_53*((aux_8*aux_7*aux_48-aux_8*aux_1*aux_47)*aux_39+(aux_16*aux_48+aux_18*aux_47)*aux_35+(aux_13*aux_48+aux_26*aux_47)*aux_5*aux_29)*aux_55-((aux_8*aux_7*aux_51-aux_8*aux_1*aux_50)*aux_39+(aux_16*aux_51+aux_18*aux_50)*aux_35+(aux_13*aux_51+aux_26*aux_50)*aux_5*aux_29)*aux_54*aux_55;
00570   mat[4][0] = aux_40;
00571   mat[4][1] = aux_40;
00572   mat[4][2] = aux_40;
00573   mat[4][3] = -(aux_57*aux_35+aux_56*aux_5*aux_29)*aux_60;
00574   mat[4][4] = -(aux_63*aux_39+aux_62*aux_35+aux_61*aux_5*aux_29)*aux_60;
00575   mat[4][5] = -(aux_66*aux_39+aux_65*aux_35+aux_64*aux_5*aux_29)*aux_60;
00576   mat[5][0] = aux_40;
00577   mat[5][1] = aux_40;
00578   mat[5][2] = aux_40;
00579   mat[5][3] = aux_67*(aux_57*aux_30+aux_56*aux_5*aux_28)*aux_69-(aux_57*aux_5*aux_6-aux_56*aux_3)*aux_68*aux_69;
00580   mat[5][4] = aux_67*(aux_62*aux_30+aux_63*aux_34+aux_61*aux_5*aux_28)*aux_69-(aux_62*aux_5*aux_6+aux_63*aux_5*aux_9-aux_61*aux_3)*aux_68*aux_69;
00581   mat[5][5] = aux_67*(aux_65*aux_30+aux_66*aux_34+aux_64*aux_5*aux_28)*aux_69-(aux_65*aux_5*aux_6+aux_66*aux_5*aux_9-aux_64*aux_3)*aux_68*aux_69;
00582 }
00583 
00584 inline void eulerGradientXj(Matrix6& mat, const Vector6& e, const Vector6& xi, const Vector6& xj)
00585 {
00586   //const double& ex  = e[0];
00587   //const double& ey  = e[1];
00588   //const double& ez  = e[2];
00589   const double& er  = e[3];
00590   const double& ep  = e[4];
00591   const double& eya = e[5];
00592 
00593   //const double& x1 = xi[0];
00594   //const double& y1 = xi[1];
00595   //const double& z1 = xi[2];
00596   const double& a1 = xi[3];
00597   const double& b1 = xi[4];
00598   const double& c1 = xi[5];
00599 
00600   //const double& x2 = xj[0];
00601   //const double& y2 = xj[1];
00602   //const double& z2 = xj[2];
00603   const double& a2 = xj[3];
00604   const double& b2 = xj[4];
00605   const double& c2 = xj[5];
00606 
00607 
00608   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 ,
00609          aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 ,
00610          aux_24 , aux_25 , aux_26 , aux_27 , aux_28 , aux_29 , aux_30 , aux_31 , aux_32 , aux_33 , aux_34 ,
00611          aux_35 , aux_36 , aux_37 , aux_38 , aux_39 , aux_40 , aux_41 , aux_42 , aux_43 , aux_44 , aux_45 ,
00612          aux_46 , aux_47 , aux_48 , aux_49 , aux_50 , aux_51 ;
00613   aux_1 = cos(a1) ;
00614   aux_2 = sin(b1) ;
00615   aux_3 = cos(c1) ;
00616   aux_4 = sin(a1) ;
00617   aux_5 = sin(c1) ;
00618   aux_6 = sin(ep) ;
00619   aux_7 = cos(b1) ;
00620   aux_8 = cos(ep) ;
00621   aux_9 = cos(eya) ;
00622   aux_10 = aux_4*aux_2*aux_3-aux_1*aux_5 ;
00623   aux_11 = sin(eya) ;
00624   aux_12 = aux_4*aux_2*aux_5+aux_1*aux_3 ;
00625   aux_13 = 0 ;
00626   aux_14 = aux_4*aux_5+aux_1*aux_2*aux_3 ;
00627   aux_15 = sin(er) ;
00628   aux_16 = cos(er) ;
00629   aux_17 = aux_1*aux_2*aux_5-aux_4*aux_3 ;
00630   aux_18 = cos(a2) ;
00631   aux_19 = cos(b2) ;
00632   aux_20 = sin(b2) ;
00633   aux_21 = cos(c2) ;
00634   aux_22 = sin(a2) ;
00635   aux_23 = sin(c2) ;
00636   aux_24 = aux_22*aux_23+aux_18*aux_20*aux_21 ;
00637   aux_25 = aux_18*aux_20*aux_23-aux_22*aux_21 ;
00638   aux_26 = aux_6*aux_16*aux_11-aux_15*aux_9 ;
00639   aux_27 = aux_15*aux_11+aux_6*aux_16*aux_9 ;
00640   aux_28 = (aux_7*aux_5*aux_25+aux_7*aux_3*aux_24-aux_18*aux_2*aux_19)*aux_27+(aux_12*aux_25+aux_10*aux_24+aux_4*aux_18*aux_7*aux_19)*aux_26+(aux_17*aux_25+aux_14*aux_24+aux_1*aux_18*aux_7*aux_19)*aux_8*aux_16 ;
00641   aux_29 = pow(aux_28,2) ;
00642   aux_30 = aux_22*aux_20*aux_21-aux_18*aux_23 ;
00643   aux_31 = aux_22*aux_20*aux_23+aux_18*aux_21 ;
00644   aux_32 = (aux_7*aux_5*aux_31+aux_7*aux_3*aux_30-aux_22*aux_2*aux_19)*aux_27+(aux_12*aux_31+aux_10*aux_30+aux_4*aux_22*aux_7*aux_19)*aux_26+(aux_17*aux_31+aux_14*aux_30+aux_1*aux_22*aux_7*aux_19)*aux_8*aux_16 ;
00645   aux_33 = 1/(pow(aux_32,2)+aux_29) ;
00646   aux_34 = aux_18*aux_23-aux_22*aux_20*aux_21 ;
00647   aux_35 = -aux_22*aux_20*aux_23-aux_18*aux_21 ;
00648   aux_36 = aux_22*aux_21-aux_18*aux_20*aux_23 ;
00649   aux_37 = -aux_20*aux_17*aux_23-aux_20*aux_14*aux_21-aux_1*aux_7*aux_19 ;
00650   aux_38 = -aux_20*aux_12*aux_23-aux_20*aux_10*aux_21-aux_4*aux_7*aux_19 ;
00651   aux_39 = -aux_7*aux_20*aux_5*aux_23-aux_7*aux_20*aux_3*aux_21+aux_2*aux_19 ;
00652   aux_40 = aux_19*aux_17*aux_23+aux_19*aux_14*aux_21-aux_1*aux_7*aux_20 ;
00653   aux_41 = aux_19*aux_12*aux_23+aux_19*aux_10*aux_21-aux_4*aux_7*aux_20 ;
00654   aux_42 = aux_7*aux_19*aux_5*aux_23+aux_7*aux_19*aux_3*aux_21+aux_2*aux_20 ;
00655   aux_43 = 1/sqrt(1-pow(aux_42*aux_27+aux_41*aux_26+aux_40*aux_8*aux_16,2)) ;
00656   aux_44 = aux_19*aux_17*aux_21-aux_19*aux_14*aux_23 ;
00657   aux_45 = aux_19*aux_12*aux_21-aux_19*aux_10*aux_23 ;
00658   aux_46 = aux_7*aux_19*aux_5*aux_21-aux_7*aux_19*aux_3*aux_23 ;
00659   aux_47 = aux_6*aux_15*aux_9-aux_16*aux_11 ;
00660   aux_48 = aux_6*aux_15*aux_11+aux_16*aux_9 ;
00661   aux_49 = aux_41*aux_48+aux_42*aux_47+aux_40*aux_8*aux_15 ;
00662   aux_50 = aux_41*aux_8*aux_11+aux_42*aux_8*aux_9-aux_40*aux_6 ;
00663   aux_51 = 1/(pow(aux_50,2)+pow(aux_49,2)) ;
00664 
00665   mat[0][0] =  aux_10*aux_8*aux_11+aux_7*aux_3*aux_8*aux_9+(-aux_4*aux_5-aux_1*aux_2*aux_3)*aux_6;
00666   mat[0][1] = aux_12*aux_8*aux_11+aux_7*aux_5*aux_8*aux_9+(aux_4*aux_3-aux_1*aux_2*aux_5)*aux_6;
00667   mat[0][2] = aux_4*aux_7*aux_8*aux_11-aux_2*aux_8*aux_9-aux_1*aux_7*aux_6;
00668   mat[0][3] = aux_13;
00669   mat[0][4] = aux_13;
00670   mat[0][5] = aux_13;
00671   mat[1][0] = (aux_10*aux_6*aux_15-aux_7*aux_3*aux_16)*aux_11+(aux_7*aux_3*aux_6*aux_15+aux_10*aux_16)*aux_9+aux_14*aux_8*aux_15;
00672   mat[1][1] = (aux_12*aux_6*aux_15-aux_7*aux_5*aux_16)*aux_11+(aux_7*aux_5*aux_6*aux_15+aux_12*aux_16)*aux_9+aux_17*aux_8*aux_15;
00673   mat[1][2] = (aux_4*aux_7*aux_6*aux_15+aux_2*aux_16)*aux_11+(aux_4*aux_7*aux_16-aux_2*aux_6*aux_15)*aux_9+aux_1*aux_7*aux_8*aux_15;
00674   mat[1][3] = aux_13;
00675   mat[1][4] = aux_13;
00676   mat[1][5] = aux_13;
00677   mat[2][0] = (aux_7*aux_3*aux_15+aux_10*aux_6*aux_16)*aux_11+((aux_1*aux_5-aux_4*aux_2*aux_3)*aux_15+aux_7*aux_3*aux_6*aux_16)*aux_9+aux_14*aux_8*aux_16;
00678   mat[2][1] = (aux_7*aux_5*aux_15+aux_12*aux_6*aux_16)*aux_11+((-aux_4*aux_2*aux_5-aux_1*aux_3)*aux_15+aux_7*aux_5*aux_6*aux_16)*aux_9+aux_17*aux_8*aux_16;
00679   mat[2][2] = (aux_4*aux_7*aux_6*aux_16-aux_2*aux_15)*aux_11+(-aux_4*aux_7*aux_15-aux_2*aux_6*aux_16)*aux_9+aux_1*aux_7*aux_8*aux_16;
00680   mat[2][3] = aux_13;
00681   mat[2][4] = aux_13;
00682   mat[2][5] = aux_13;
00683   mat[3][0] = aux_13;
00684   mat[3][1] = aux_13;
00685   mat[3][2] = aux_13;
00686   mat[3][3] = aux_29*aux_33-((aux_7*aux_5*aux_35+aux_7*aux_3*aux_34+aux_22*aux_2*aux_19)*aux_27+(aux_12*aux_35+aux_10*aux_34-aux_4*aux_22*aux_7*aux_19)*aux_26+(aux_17*aux_35+aux_14*aux_34-aux_1*aux_22*aux_7*aux_19)*aux_8*aux_16)*aux_32*aux_33;
00687   mat[3][4] = ((aux_22*aux_7*aux_19*aux_5*aux_23+aux_22*aux_7*aux_19*aux_3*aux_21+aux_22*aux_2*aux_20)*aux_27+(aux_22*aux_19*aux_12*aux_23+aux_22*aux_19*aux_10*aux_21-aux_4*aux_22*aux_7*aux_20)*aux_26+(aux_22*aux_19*aux_17*aux_23+aux_22*aux_19*aux_14*aux_21-aux_1*aux_22*aux_7*aux_20)*aux_8*aux_16)*aux_28*aux_33-((aux_18*aux_7*aux_19*aux_5*aux_23+aux_18*aux_7*aux_19*aux_3*aux_21+aux_18*aux_2*aux_20)*aux_27+(aux_18*aux_19*aux_12*aux_23+aux_18*aux_19*aux_10*aux_21-aux_4*aux_18*aux_7*aux_20)*aux_26+(aux_18*aux_19*aux_17*aux_23+aux_18*aux_19*aux_14*aux_21-aux_1*aux_18*aux_7*aux_20)*aux_8*aux_16)*aux_32*aux_33;
00688   mat[3][5] = aux_28*((aux_7*aux_3*aux_35+aux_7*aux_5*aux_30)*aux_27+(aux_10*aux_35+aux_12*aux_30)*aux_26+(aux_14*aux_35+aux_17*aux_30)*aux_8*aux_16)*aux_33-((aux_7*aux_3*aux_36+aux_7*aux_5*aux_24)*aux_27+(aux_10*aux_36+aux_12*aux_24)*aux_26+(aux_14*aux_36+aux_17*aux_24)*aux_8*aux_16)*aux_32*aux_33;
00689   mat[4][0] = aux_13;
00690   mat[4][1] = aux_13;
00691   mat[4][2] = aux_13;
00692   mat[4][3] = aux_13;
00693   mat[4][4] = -(aux_39*aux_27+aux_38*aux_26+aux_37*aux_8*aux_16)*aux_43;
00694   mat[4][5] = -(aux_46*aux_27+aux_45*aux_26+aux_44*aux_8*aux_16)*aux_43;
00695   mat[5][0] = aux_13;
00696   mat[5][1] = aux_13;
00697   mat[5][2] = aux_13;
00698   mat[5][3] = aux_13;
00699   mat[5][4] = aux_50*(aux_38*aux_48+aux_39*aux_47+aux_37*aux_8*aux_15)*aux_51-(aux_38*aux_8*aux_11+aux_39*aux_8*aux_9-aux_37*aux_6)*aux_49*aux_51;
00700   mat[5][5] = aux_50*(aux_45*aux_48+aux_46*aux_47+aux_44*aux_8*aux_15)*aux_51-(aux_45*aux_8*aux_11+aux_46*aux_8*aux_9-aux_44*aux_6)*aux_49*aux_51;
00701 }
00702 
00703 inline void propagateJacobianManifold(Matrix6& mat, const Vector6& xi, const Vector6& xj)
00704 {
00705   //const double& x1 = xi[0];
00706   //const double& y1 = xi[1];
00707   //const double& z1 = xi[2];
00708   const double& a1 = xi[3];
00709   const double& b1 = xi[4];
00710   const double& c1 = xi[5];
00711 
00712   //const double& x2 = xj[0];
00713   //const double& y2 = xj[1];
00714   //const double& z2 = xj[2];
00715   const double& a2 = xj[3];
00716   const double& b2 = xj[4];
00717   const double& c2 = xj[5];
00718 
00719   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 , aux_12 , aux_13 ,
00720          aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 , aux_22 , aux_23 , aux_24 , aux_25 ,
00721          aux_26 , aux_27 , aux_28 , aux_29 , aux_30 ;
00722   aux_1 = cos(b1) ;
00723   aux_2 = cos(c1) ;
00724   aux_3 = sin(c1) ;
00725   aux_4 = sin(b1) ;
00726   aux_5 = 0 ;
00727   aux_6 = sin(a1) ;
00728   aux_7 = cos(a1) ;
00729   aux_8 = aux_6*aux_4*aux_2-aux_7*aux_3 ;
00730   aux_9 = aux_6*aux_4*aux_3+aux_7*aux_2 ;
00731   aux_10 = aux_6*aux_3+aux_7*aux_4*aux_2 ;
00732   aux_11 = aux_7*aux_4*aux_3-aux_6*aux_2 ;
00733   aux_12 = cos(a2) ;
00734   aux_13 = cos(b2) ;
00735   aux_14 = sin(b2) ;
00736   aux_15 = cos(c2) ;
00737   aux_16 = sin(a2) ;
00738   aux_17 = sin(c2) ;
00739   aux_18 = aux_11*(aux_12*aux_14*aux_17-aux_16*aux_15)+aux_10*(aux_16*aux_17+aux_12*aux_14*aux_15)+aux_7*aux_12*aux_1*aux_13 ;
00740   aux_19 = std::pow(aux_18,2) ;
00741   aux_20 = aux_16*aux_14*aux_15-aux_12*aux_17 ;
00742   aux_21 = aux_16*aux_14*aux_17+aux_12*aux_15 ;
00743   aux_22 = aux_11*aux_21+aux_10*aux_20+aux_7*aux_16*aux_1*aux_13 ;
00744   aux_23 = 1/(std::pow(aux_22,2)+aux_19) ;
00745   aux_24 = aux_13*aux_11*aux_17+aux_13*aux_10*aux_15-aux_7*aux_1*aux_14 ;
00746   aux_25 = -aux_16*aux_17-aux_12*aux_14*aux_15 ;
00747   aux_26 = aux_16*aux_15-aux_12*aux_14*aux_17 ;
00748   aux_27 = 1/sqrt(1-std::pow(aux_24,2)) ;
00749   aux_28 = aux_13*aux_9*aux_17+aux_13*aux_8*aux_15-aux_6*aux_1*aux_14 ;
00750   aux_29 = aux_1*aux_13*aux_3*aux_17+aux_1*aux_13*aux_2*aux_15+aux_4*aux_14 ;
00751   aux_30 = 1/(std::pow(aux_29,2)+std::pow(aux_28,2)) ;
00752 
00753   mat[0][0] = aux_1*aux_2;
00754   mat[0][1] = aux_1*aux_3;
00755   mat[0][2] = -aux_4;
00756   mat[0][3] = aux_5;
00757   mat[0][4] = aux_5;
00758   mat[0][5] = aux_5;
00759   mat[1][0] = aux_8;
00760   mat[1][1] = aux_9;
00761   mat[1][2] = aux_6*aux_1;
00762   mat[1][3] = aux_5;
00763   mat[1][4] = aux_5;
00764   mat[1][5] = aux_5;
00765   mat[2][0] = aux_10;
00766   mat[2][1] = aux_11;
00767   mat[2][2] = aux_7*aux_1;
00768   mat[2][3] = aux_5;
00769   mat[2][4] = aux_5;
00770   mat[2][5] = aux_5;
00771   mat[3][0] = aux_5;
00772   mat[3][1] = aux_5;
00773   mat[3][2] = aux_5;
00774   mat[3][3] = aux_19*aux_23-(aux_11*(-aux_16*aux_14*aux_17-aux_12*aux_15)+aux_10*(aux_12*aux_17-aux_16*aux_14*aux_15)-aux_7*aux_16*aux_1*aux_13)*aux_22*aux_23;
00775   mat[3][4] = -aux_24*aux_22*aux_23;
00776   mat[3][5] = (-aux_13*aux_11*aux_17-aux_13*aux_10*aux_15+aux_7*aux_1*aux_14)*aux_18*aux_23;
00777   mat[4][0] = aux_5;
00778   mat[4][1] = aux_5;
00779   mat[4][2] = aux_5;
00780   mat[4][3] = aux_5;
00781   mat[4][4] = -(aux_11*aux_26+aux_10*aux_25-aux_7*aux_12*aux_1*aux_13)*aux_27;
00782   mat[4][5] = -aux_22*aux_27;
00783   mat[5][0] = aux_5;
00784   mat[5][1] = aux_5;
00785   mat[5][2] = aux_5;
00786   mat[5][3] = aux_5;
00787   mat[5][4] = aux_29*(aux_9*aux_26+aux_8*aux_25-aux_6*aux_12*aux_1*aux_13)*aux_30-aux_28*(aux_1*aux_3*aux_26+aux_1*aux_2*aux_25+aux_12*aux_4*aux_13)*aux_30;
00788   mat[5][5] = aux_29*(aux_9*aux_21+aux_8*aux_20+aux_6*aux_16*aux_1*aux_13)*aux_30-aux_28*(aux_1*aux_3*aux_21+aux_1*aux_2*aux_20-aux_16*aux_4*aux_13)*aux_30;
00789 }
00790 
00791 inline void motionJacobianState(Matrix6& mat, const Vector6& xi, const Vector6& e)
00792 {
00793   const double& ex  = e[0];
00794   const double& ey  = e[1];
00795   const double& ez  = e[2];
00796   //const double& er  = e[3];
00797   const double& ep  = e[4];
00798   const double& eya = e[5];
00799 
00800   //const double& x1 = xi[0];
00801   //const double& y1 = xi[1];
00802   //const double& z1 = xi[2];
00803   const double& a1 = xi[3];
00804   const double& b1 = xi[4];
00805   const double& c1 = xi[5];
00806 
00807   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 ,
00808          aux_12 , aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 , aux_21 ,
00809          aux_22 , aux_23 , aux_24 , aux_25 , aux_26;
00810 
00811   aux_1 = 1 ;
00812   aux_2 = 0 ;
00813   aux_3 = cos(a1) ;
00814   aux_4 = sin(b1) ;
00815   aux_5 = cos(c1) ;
00816   aux_6 = sin(a1) ;
00817   aux_7 = sin(c1) ;
00818   aux_8 = aux_6*aux_7+aux_3*aux_4*aux_5 ;
00819   aux_9 = cos(b1) ;
00820   aux_10 = -aux_6*aux_4*aux_7-aux_3*aux_5 ;
00821   aux_11 = sin(ep) ;
00822   aux_12 = std::pow(aux_9,2) ;
00823   aux_13 = cos(ep) ;
00824   aux_14 = cos(eya) ;
00825   aux_15 = sin(eya) ;
00826   aux_16 = std::pow(aux_6,2) ;
00827   aux_17 = std::pow(aux_13,2) ;
00828   aux_18 = -2*aux_3*aux_9*aux_4*aux_13*aux_11*aux_14 ;
00829   aux_19 = std::pow(aux_14,2) ;
00830   aux_20 = (2*aux_6*aux_9*aux_4*aux_17*aux_14+2*aux_3*aux_6*aux_12*aux_13*aux_11)*aux_15 ;
00831   aux_21 = aux_20+((aux_16+1)*aux_12-1)*aux_17*aux_19+aux_18+(1-2*aux_16)*aux_12*aux_17+(aux_16-1)*aux_12+1 ;
00832   aux_22 = 1/aux_21 ;
00833   aux_23 = std::pow(aux_3,2) ;
00834   aux_24 = std::pow(aux_15,2) ;
00835   aux_25 = ((aux_23-2)*aux_12+1)*aux_17*aux_24+aux_20+aux_18+((aux_23+1)*aux_12-1)*aux_17-aux_23*aux_12+1 ;
00836   aux_26 = 1/aux_25 ;
00837 
00838   mat[0][0] = aux_1;
00839   mat[0][1] = aux_2;
00840   mat[0][2] = aux_2;
00841   mat[0][3] = (aux_3*aux_7-aux_6*aux_4*aux_5)*ez+aux_8*ey;
00842   mat[0][4] = aux_3*aux_9*aux_5*ez+aux_6*aux_9*aux_5*ey-aux_4*aux_5*ex;
00843   mat[0][5] = (aux_6*aux_5-aux_3*aux_4*aux_7)*ez+aux_10*ey-aux_9*aux_7*ex;
00844   mat[1][0] = aux_2;
00845   mat[1][1] = aux_1;
00846   mat[1][2] = aux_2;
00847   mat[1][3] = aux_10*ez+(aux_3*aux_4*aux_7-aux_6*aux_5)*ey;
00848   mat[1][4] = aux_3*aux_9*aux_7*ez+aux_6*aux_9*aux_7*ey-aux_4*aux_7*ex;
00849   mat[1][5] = aux_8*ez+(aux_6*aux_4*aux_5-aux_3*aux_7)*ey+aux_9*aux_5*ex;
00850   mat[2][0] = aux_2;
00851   mat[2][1] = aux_2;
00852   mat[2][2] = aux_1;
00853   mat[2][3] = aux_3*aux_9*ey-aux_6*aux_9*ez;
00854   mat[2][4] = -aux_3*aux_4*ez-aux_6*aux_4*ey-aux_9*ex;
00855   mat[2][5] = aux_2;
00856   mat[3][0] = aux_2;
00857   mat[3][1] = aux_2;
00858   mat[3][2] = aux_2;
00859   mat[3][3] = (aux_6*aux_9*aux_4*aux_13*aux_15+aux_12*aux_13*aux_14-aux_3*aux_9*aux_4*aux_11)*aux_22;
00860   mat[3][4] = (aux_3*aux_13*aux_15+aux_6*aux_11)*aux_26;
00861   mat[3][5] = aux_2;
00862   mat[4][0] = aux_2;
00863   mat[4][1] = aux_2;
00864   mat[4][2] = aux_2;
00865   mat[4][3] = -(aux_3*aux_9*aux_13*aux_15+aux_6*aux_9*aux_11)/sqrt(aux_21);
00866   mat[4][4] = (aux_6*aux_4*aux_13*aux_15+aux_9*aux_13*aux_14-aux_3*aux_4*aux_11)/sqrt(aux_25);
00867   mat[4][5] = aux_2;
00868   mat[5][0] = aux_2;
00869   mat[5][1] = aux_2;
00870   mat[5][2] = aux_2;
00871   mat[5][3] = -(aux_6*aux_9*aux_17*aux_14*aux_15-aux_4*aux_17*aux_19-aux_3*aux_9*aux_13*aux_11*aux_14+aux_4)*aux_22;
00872   mat[5][4] = -(aux_3*aux_6*aux_9*aux_17*aux_24+((1-2*aux_23)*aux_9*aux_13*aux_11-aux_3*aux_4*aux_17*aux_14)*aux_15-aux_6*aux_4*aux_13*aux_11*aux_14+aux_3*aux_6*aux_9*aux_17-aux_3*aux_6*aux_9)*aux_26;
00873   mat[5][5] = aux_1;
00874 }
00875 
00876 inline void motionJacobianMeasurement(Matrix6& mat, const Vector6& xi, const Vector6& e)
00877 {
00878   //const double& ex  = e[0];
00879   //const double& ey  = e[1];
00880   //const double& ez  = e[2];
00881   //const double& er  = e[3];
00882   const double& ep  = e[4];
00883   const double& eya = e[5];
00884 
00885   //const double& x1 = xi[0];
00886   //const double& y1 = xi[1];
00887   //const double& z1 = xi[2];
00888   const double& a1 = xi[3];
00889   const double& b1 = xi[4];
00890   const double& c1 = xi[5];
00891 
00892   double aux_1 , aux_2 , aux_3 , aux_4 , aux_5 , aux_6 , aux_7 , aux_8 , aux_9 , aux_10 , aux_11 ,
00893          aux_12 , aux_13 , aux_14 , aux_15 , aux_16 , aux_17 , aux_18 , aux_19 , aux_20 ;
00894 
00895   aux_1 = cos(b1) ;
00896   aux_2 = cos(c1) ;
00897   aux_3 = sin(a1) ;
00898   aux_4 = sin(b1) ;
00899   aux_5 = cos(a1) ;
00900   aux_6 = sin(c1) ;
00901   aux_7 = 0 ;
00902   aux_8 = cos(ep) ;
00903   aux_9 = std::pow(aux_1,2) ;
00904   aux_10 = sin(ep) ;
00905   aux_11 = cos(eya) ;
00906   aux_12 = std::pow(aux_11,2) ;
00907   aux_13 = std::pow(aux_3,2) ;
00908   aux_14 = (aux_13+1)*aux_9-1 ;
00909   aux_15 = sin(eya) ;
00910   aux_16 = (aux_13-1)*aux_9 ;
00911   aux_17 = std::pow(aux_8,2) ;
00912   aux_18 = (2*aux_3*aux_1*aux_4*aux_17*aux_11+2*aux_5*aux_3*aux_9*aux_8*aux_10)*aux_15+aux_14*aux_17*aux_12-2*aux_5*aux_1*aux_4*aux_8*aux_10*aux_11+(1-2*aux_13)*aux_9*aux_17+aux_16+1 ;
00913   aux_19 = 1/aux_18 ;
00914   aux_20 = 1/sqrt(aux_18) ;
00915 
00916   mat[0][0] = aux_1*aux_2;
00917   mat[0][1] = aux_3*aux_4*aux_2-aux_5*aux_6;
00918   mat[0][2] = aux_3*aux_6+aux_5*aux_4*aux_2;
00919   mat[0][3] = aux_7;
00920   mat[0][4] = aux_7;
00921   mat[0][5] = aux_7;
00922   mat[1][0] = aux_1*aux_6;
00923   mat[1][1] = aux_3*aux_4*aux_6+aux_5*aux_2;
00924   mat[1][2] = aux_5*aux_4*aux_6-aux_3*aux_2;
00925   mat[1][3] = aux_7;
00926   mat[1][4] = aux_7;
00927   mat[1][5] = aux_7;
00928   mat[2][0] = -aux_4;
00929   mat[2][1] = aux_3*aux_1;
00930   mat[2][2] = aux_5*aux_1;
00931   mat[2][3] = aux_7;
00932   mat[2][4] = aux_7;
00933   mat[2][5] = aux_7;
00934   mat[3][0] = aux_7;
00935   mat[3][1] = aux_7;
00936   mat[3][2] = aux_7;
00937   mat[3][3] = 1;
00938   mat[3][4] = -((aux_14*aux_8*aux_11-aux_5*aux_1*aux_4*aux_10)*aux_15-2*aux_3*aux_1*aux_4*aux_8*aux_12-aux_5*aux_3*aux_9*aux_10*aux_11+aux_3*aux_1*aux_4*aux_8)*aux_19;
00939   mat[3][5] = -(aux_5*aux_3*aux_9*aux_8*aux_15-aux_5*aux_1*aux_4*aux_8*aux_11+(aux_16+1)*aux_10)*aux_19;
00940   mat[4][0] = aux_7;
00941   mat[4][1] = aux_7;
00942   mat[4][2] = aux_7;
00943   mat[4][3] = aux_7;
00944   mat[4][4] = (aux_3*aux_1*aux_10*aux_15-aux_4*aux_10*aux_11+aux_5*aux_1*aux_8)*aux_20;
00945   mat[4][5] = -(aux_4*aux_8*aux_15+aux_3*aux_1*aux_8*aux_11)*aux_20;
00946   mat[5][0] = aux_7;
00947   mat[5][1] = aux_7;
00948   mat[5][2] = aux_7;
00949   mat[5][3] = aux_7;
00950   mat[5][4] = (aux_4*aux_15+aux_3*aux_1*aux_11)*aux_19;
00951   mat[5][5] = (aux_3*aux_1*aux_8*aux_10*aux_15-aux_4*aux_8*aux_10*aux_11+aux_5*aux_1*aux_17)*aux_19;
00952 }
00953 
00954 } // end namespace
00955 
00956 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines


hogman_minimal
Author(s): Maintained by Juergen Sturm
autogenerated on Wed Dec 26 2012 15:36:49