33namespace HYUMotionKinematics {
44
55 PoEKinematics::PoEKinematics ():m_NumChain(1 ),m_DoF(6 ),WpInv_epsilon_left(0.001 ), WpInv_epsilon_right(0.001 )
6- {
76 this ->mBodyJacobian .setZero(6 *this ->m_NumChain, this ->m_DoF);
87 this ->mSpaceJacobian .setZero(6 *this ->m_NumChain, this ->m_DoF);
98 this ->mAnalyticJacobian .setZero(6 *this ->m_NumChain, this ->m_DoF);
9+ this ->mIdentity_6N .setIdentity(6 *this ->m_NumChain, 6 *this ->m_NumChain);
10+ this ->msvInv.setZero(this ->m_DoF);
1011 }
1112
1213 PoEKinematics::PoEKinematics ( const MatrixXi &_ChainMat ):WpInv_epsilon_left(0.001 ), WpInv_epsilon_right(0.001 )
@@ -57,6 +58,8 @@ namespace HYUMotionKinematics {
5758 this ->mBodyJacobian .setZero (6 *this ->m_NumChain , this ->m_DoF );
5859 this ->mSpaceJacobian .setZero (6 *this ->m_NumChain , this ->m_DoF );
5960 this ->mAnalyticJacobian .setZero (6 *this ->m_NumChain , this ->m_DoF );
61+ this ->mIdentity_6N .setIdentity (6 *this ->m_NumChain , 6 *this ->m_NumChain );
62+ this ->msvInv .setZero (this ->m_DoF );
6063 }
6164
6265 PoEKinematics::~PoEKinematics ()
@@ -149,7 +152,8 @@ namespace HYUMotionKinematics {
149152 }
150153 else
151154 {
152- mSpaceJacobian .block (6 *i, j, 6 , 1 ).noalias () += AdjointMatrix (SE3_Tmp)*v_se3[j];
155+ AdjointMatrix (SE3_Tmp, adj_tmp);
156+ mSpaceJacobian .block (6 *i, j, 6 , 1 ).noalias () += adj_tmp*v_se3[j];
153157 }
154158 SE3_Tmp*=Exp_S[j];
155159 }
@@ -162,8 +166,10 @@ namespace HYUMotionKinematics {
162166 mBodyJacobian .setZero ();
163167 for (int i=0 ; i < this ->m_NumChain ; i++)
164168 {
169+ inverse_SE3 (T[0 ][JointEndNum[i]], SE3_Tmp2);
170+ AdjointMatrix (SE3_Tmp2, adj_tmp);
165171 mBodyJacobian .block (6 *i,0 ,6 ,this ->m_DoF ).noalias () +=
166- AdjointMatrix ( inverse_SE3 (T[ 0 ][JointEndNum[i]])) *mSpaceJacobian .block (6 *i,0 ,6 ,this ->m_DoF );
172+ adj_tmp *mSpaceJacobian .block (6 *i,0 ,6 ,this ->m_DoF );
167173 }
168174 }
169175
@@ -259,12 +265,12 @@ namespace HYUMotionKinematics {
259265 mpInvSVD.compute (mAnalyticJacobian , Eigen::ComputeThinU | Eigen::ComputeThinV);
260266 double tolerance = 1e-5 ;
261267 auto sv = mpInvSVD.singularValues ();
262- Eigen::VectorXd svInv = sv;
268+ msvInv = sv;
263269 for (int i = 0 ; i < sv.size (); ++i) {
264- if (sv (i) > tolerance) svInv (i) = 1.0 / sv (i);
265- else svInv (i) = 0.0 ;
270+ if (sv (i) > tolerance) msvInv (i) = 1.0 / sv (i);
271+ else msvInv (i) = 0.0 ;
266272 }
267- mpInvJacobin.noalias () = mpInvSVD.matrixV () * svInv .asDiagonal () * mpInvSVD.matrixU ().transpose ();
273+ mpInvJacobin.noalias () = mpInvSVD.matrixV () * msvInv .asDiagonal () * mpInvSVD.matrixU ().transpose ();
268274 }
269275
270276 void PoEKinematics::GetpinvJacobian ( MatrixXd &_pinvJacobian )
@@ -294,10 +300,10 @@ namespace HYUMotionKinematics {
294300 {
295301 Mat_Tmp.setZero (6 *m_NumChain, 6 *m_NumChain);
296302 Mat_Tmp.noalias () += mAnalyticJacobian *mAnalyticJacobian .transpose ();
297- Mat_Tmp.noalias () += sigma*Eigen::MatrixXd::Identity ( 6 *m_NumChain, 6 *m_NumChain) ;
303+ Mat_Tmp.noalias () += sigma*mIdentity_6N ;
298304
299305 mDampedpInvJacobian .setZero ( m_DoF,6 *m_NumChain );
300- mDampedpInvJacobian .noalias () += mAnalyticJacobian .transpose ()*Mat_Tmp.ldlt ().solve (Eigen::MatrixXd::Identity ( 6 *m_NumChain, 6 *m_NumChain) );
306+ mDampedpInvJacobian .noalias () += mAnalyticJacobian .transpose ()*Mat_Tmp.ldlt ().solve (mIdentity_6N );
301307 }
302308
303309 void PoEKinematics::GetDampedpInvJacobian ( MatrixXd &_DampedpInvJacobian )
@@ -311,10 +317,10 @@ namespace HYUMotionKinematics {
311317 size_t r = _TargetMatrix.rows ();
312318 Mat_Tmp.setZero (r, r);
313319 Mat_Tmp.noalias () += _TargetMatrix*_TargetMatrix.transpose ();
314- Mat_Tmp.noalias () += sigma*Eigen::MatrixXd::Identity (r, r);
320+ Mat_Tmp.noalias () += sigma*mIdentity_6N . block ( 0 , 0 ,r, r);
315321
316322 mDampedpInvJacobian .setZero ( m_DoF,6 *m_NumChain );
317- mDampedpInvJacobian .noalias () += _TargetMatrix.transpose ()*Mat_Tmp.ldlt ().solve (Eigen::MatrixXd::Identity (r, r));
323+ mDampedpInvJacobian .noalias () += _TargetMatrix.transpose ()*Mat_Tmp.ldlt ().solve (mIdentity_6N . block ( 0 , 0 ,r, r));
318324 }
319325
320326 void PoEKinematics::GetDampedpInvJacobian (MatrixXd &_TargetMat, MatrixXd &_DampedpInvJacobian)
@@ -325,12 +331,12 @@ namespace HYUMotionKinematics {
325331
326332 void PoEKinematics::BlockpInvJacobian ( Matrix<double , 6 , Dynamic> &_Jacobian1, Matrix<double , 6 , Dynamic> &_Jacobian2 )
327333 {
328- mP1 = MatrixXd::Identity (16 , 16 );
334+ mP1 . setIdentity (16 , 16 );
329335 Mat_Tmp.noalias () = _Jacobian1*_Jacobian1.transpose ();
330- mP1 .noalias () += -_Jacobian1.transpose ()*Mat_Tmp.ldlt ().solve (MatrixXd::Identity ( 6 ,6 ))*_Jacobian1;
331- mP2 = MatrixXd::Identity (16 , 16 );
336+ mP1 .noalias () += -_Jacobian1.transpose ()*Mat_Tmp.ldlt ().solve (mIdentity_6N . block ( 0 , 0 , 6 ,6 ))*_Jacobian1;
337+ mP2 . setIdentity (16 , 16 );
332338 Mat_Tmp.noalias () = _Jacobian2*_Jacobian2.transpose ();
333- mP2 .noalias () += -_Jacobian2.transpose ()*Mat_Tmp.ldlt ().solve (MatrixXd::Identity ( 6 ,6 ))*_Jacobian2;
339+ mP2 .noalias () += -_Jacobian2.transpose ()*Mat_Tmp.ldlt ().solve (mIdentity_6N . block ( 0 , 0 , 6 ,6 ))*_Jacobian2;
334340
335341 mBlockpInvJacobian .setZero (m_DoF, 6 *m_NumChain);
336342 mBlockpInvJacobian .block (0 ,0 ,16 ,6 ) = (_Jacobian1*mP2 ).completeOrthogonalDecomposition ().pseudoInverse ();
@@ -544,7 +550,9 @@ namespace HYUMotionKinematics {
544550 mRelativeJacobian .setZero (6 , m_DoF);
545551 if ( From == 0 && To == 1 )
546552 {
547- RelJacTmp.block (0 , 2 , 6 , 7 ).noalias () += -AdjointMatrix (inverse_SE3 (T[0 ][JointEndNum[To]]))*mSpaceJacobian .block (0 , 2 , 6 , 7 );
553+ inverse_SE3 (T[0 ][JointEndNum[To]], SE3_Tmp2);
554+ AdjointMatrix (SE3_Tmp2, adj_tmp);
555+ RelJacTmp.block (0 , 2 , 6 , 7 ).noalias () += -adj_tmp*mSpaceJacobian .block (0 , 2 , 6 , 7 );
548556 RelJacTmp.block (0 , 9 , 6 , 7 ) = mBodyJacobian .block (6 , 9 , 6 , 7 );
549557 Body2Analyic.block (3 ,3 ,3 ,3 ).noalias () += GetForwardKinematicsSO3 (JointEndNum[From]).transpose ()*GetForwardKinematicsSO3 (JointEndNum[To]);
550558 Body2Analyic.block (0 ,0 ,3 ,3 ) = Body2Analyic.block (3 ,3 ,3 ,3 );
@@ -564,7 +572,8 @@ namespace HYUMotionKinematics {
564572 mRelativeJacobianDot .setZero (6 ,m_DoF);
565573 adjoint adTmp;
566574 Adjoint AdTmp;
567- AdTmp = AdjointMatrix (inverse_SE3 (T[0 ][JointEndNum[1 ]]));
575+ inverse_SE3 (T[0 ][JointEndNum[1 ]], SE3_Tmp2);
576+ AdjointMatrix (SE3_Tmp2, AdTmp);
568577 for (int i=3 ; i<=8 ; i++)
569578 {
570579 adTmp = adjointMatrix (mSpaceJacobian .col (i).segment (0 ,6 ));
0 commit comments