Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <kdl/jacobianframe.hpp>
00029
00030 namespace KDL {
00031
00032
00033 #if 0
00034
00042 int GetEulerZYX(const Jacobian<Rotation>& JR,
00043 Jacobian<double>& gamma,
00044 Jacobian<double>& beta,
00045 Jacobian<double>& alpha,
00046 double eps) {
00047
00048 JR.value().GetEulerZYX(alpha.value(),beta.value(),gamma.value());
00049 double ca = ::cos(alpha.value());
00050 double sa = ::sin(alpha.value());
00051 double cb = ::cos(beta.value());
00052 double sb = ::sin(beta.value());
00053
00054 assert(gamma.nrOfDeriv()==JR.nrOfDeriv());
00055 assert(beta.nrOfDeriv()==JR.nrOfDeriv());
00056 assert(alpha.nrOfDeriv()==JR.nrOfDeriv());
00057 for (int i=0;i<JR.nrOfDeriv();++i) {
00058 if (JR.hasDeriv(i) ) {
00059 Vector w = JR.deriv(i);
00060 double dgamma = (ca*w[0]+sa*w[1]);
00061 if (fabs(cb) < eps) {
00062 if (fabs(dgamma)< eps) {
00063 dgamma = 0.0;
00064 } else {
00065 return 1;
00066 }
00067 } else {
00068 dgamma /= cb;
00069 }
00070 double dalpha = w[2] + sb*dgamma;
00071 double dbeta = -sa*w[0]+ca*w[1];
00072 gamma.deriv(i)=dgamma;
00073 alpha.deriv(i)=dalpha;
00074 beta.deriv(i) =dbeta;
00075 } else {
00076 gamma.setDeriv(i,false);
00077 beta.setDeriv(i,false);
00078 alpha.setDeriv(i,false);
00079 }
00080 }
00081 return 0;
00082 }
00090 void SetEulerZYX(const Jacobian<double>& gamma,
00091 const Jacobian<double>& beta,
00092 const Jacobian<double>& alpha,
00093 Jacobian<Rotation>& JR) {
00094
00095 JR.value() = Rotation::EulerZYX(alpha.value(),beta.value(),gamma.value());
00096 double ca = ::cos(alpha.value());
00097 double sa = ::sin(alpha.value());
00098 double cb = ::cos(beta.value());
00099 double sb = ::sin(beta.value());
00100
00101 assert(gamma.nrOfDeriv()==JR.nrOfDeriv());
00102 assert(beta.nrOfDeriv()==JR.nrOfDeriv());
00103 assert(alpha.nrOfDeriv()==JR.nrOfDeriv());
00104 for (int i=0;i<gamma.nrOfDeriv();++i) {
00105 if (gamma.hasDeriv(i) || beta.hasDeriv(i) || alpha.hasDeriv(i) ) {
00106 Vector w;
00107 double dalpha = alpha.deriv(i);
00108 double dbeta = beta.deriv(i);
00109 double dgamma = gamma.deriv(i);
00110 w[0] = -sa*dbeta + ca*cb*dgamma;
00111 w[1] = ca*dbeta + sa*cb*dgamma;
00112 w[2] = dalpha - sb*dgamma;
00113 JR.deriv(i) = w;
00114 } else {
00115 JR.setDeriv(i,false);
00116 }
00117 }
00118 }
00119
00120 #endif
00121 }