@@ -79,7 +79,8 @@ namespace HYUMotionBase {
7979 AdjointRes.setZero ();
8080 AdjointRes.block <3 ,3 >(0 ,0 ) = _SE3.block (0 , 0 , 3 , 3 );
8181 AdjointRes.block <3 ,3 >(3 ,3 ) = _SE3.block (0 , 0 , 3 , 3 );
82- AdjointRes.block <3 ,3 >(3 ,0 ).noalias () += SkewMatrix (_SE3.block (0 , 3 , 3 , 1 ))*_SE3.block (0 , 0 , 3 , 3 );
82+ SkewMatrix (_SE3.block (0 , 3 , 3 , 1 ), Mat3dRes);
83+ AdjointRes.block <3 ,3 >(3 ,0 ).noalias () += Mat3dRes*_SE3.block (0 , 0 , 3 , 3 );
8384 return AdjointRes;
8485 }
8586
@@ -88,7 +89,8 @@ namespace HYUMotionBase {
8889 _TargetAdjoint.setZero ();
8990 _TargetAdjoint.block <3 , 3 >(0 , 0 ) = _SE3.block (0 , 0 , 3 , 3 );
9091 _TargetAdjoint.block <3 , 3 >(3 , 3 ) = _SE3.block (0 , 0 , 3 , 3 );
91- _TargetAdjoint.block <3 , 3 >(3 , 0 ).noalias () += SkewMatrix (_SE3.block (0 , 3 , 3 , 1 ))*_SE3.block (0 , 0 , 3 , 3 );
92+ SkewMatrix (_SE3.block (0 , 3 , 3 , 1 ), Mat3dRes);
93+ _TargetAdjoint.block <3 , 3 >(3 , 0 ).noalias () += Mat3dRes*_SE3.block (0 , 0 , 3 , 3 );
9294
9395 return ;
9496 }
@@ -114,20 +116,22 @@ namespace HYUMotionBase {
114116 adjoint LieOperator::adjointMatrix ( const se3 &_se3 )
115117 {
116118 adjointRes.setZero ();
117-
118- adjointRes.block (0 , 0 , 3 , 3 ) = SkewMatrix (_se3.head (3 ));
119- adjointRes.block (3 , 0 , 3 , 3 ) = SkewMatrix (_se3.tail (3 ));
120- adjointRes.block (3 , 3 , 3 , 3 ) = SkewMatrix (_se3.head (3 ));
119+ SkewMatrix (_se3.head (3 ), Mat3dRes);
120+ adjointRes.block (0 , 0 , 3 , 3 ) = Mat3dRes;
121+ adjointRes.block (3 , 3 , 3 , 3 ) = Mat3dRes;
122+ SkewMatrix (_se3.tail (3 ), Mat3dRes);
123+ adjointRes.block (3 , 0 , 3 , 3 ) = Mat3dRes;
121124 return adjointRes;
122125 }
123126
124127 void LieOperator::adjointMatrix ( const se3 &_se3, adjoint &_Targetadjoint )
125128 {
126129 _Targetadjoint.setZero ();
127-
128- _Targetadjoint.block (0 , 0 , 3 , 3 ) = SkewMatrix (_se3.head (3 ));
129- _Targetadjoint.block (3 , 0 , 3 , 3 ) = SkewMatrix (_se3.tail (3 ));
130- _Targetadjoint.block (3 , 3 , 3 , 3 ) = SkewMatrix (_se3.head (3 ));
130+ SkewMatrix (_se3.head (3 ), Mat3dRes);
131+ _Targetadjoint.block (0 , 0 , 3 , 3 ) = Mat3dRes;
132+ _Targetadjoint.block (3 , 3 , 3 , 3 ) = Mat3dRes;
133+ SkewMatrix (_se3.tail (3 ), Mat3dRes);
134+ _Targetadjoint.block (3 , 0 , 3 , 3 ) = Mat3dRes;
131135 return ;
132136 }
133137
@@ -224,36 +228,46 @@ namespace HYUMotionBase {
224228
225229 SE3 LieOperator::SE3Matrix ( const se3 &_Twist, const double &_q )
226230 {
227- Matrix3d i = Matrix3d::Identity ();
228231 Mat4dRes.setZero ();
229- Mat4dRes.block (0 , 0 , 3 , 3 ) = i;
230- Mat4dRes.block (0 , 0 , 3 , 3 ).noalias () += sin (_q)*SkewMatrix (_Twist.head (3 ));
232+ Mat4dRes.block (0 , 0 , 3 , 3 ).setIdentity ();
233+ SkewMatrix (_Twist.head (3 ), Mat3dRes);
234+ Mat4dRes.block (0 , 0 , 3 , 3 ).noalias () += sin (_q)*Mat3dRes;
231235 double cos_tmp = 1.0 - cos (_q);
232236 double sin_tmp = _q - sin (_q);
233- Mat4dRes. block ( 0 , 0 , 3 , 3 ). noalias () += cos_tmp* SkewMatrixSquare (_Twist. head ( 3 ));
237+
234238 Matrix3d Mat3_tmp = Eigen::Matrix3d::Zero ();
235- Mat3_tmp.noalias () += i*_q;
236- Mat3_tmp.noalias () += cos_tmp*SkewMatrix (_Twist.head (3 ));
237- Mat3_tmp.noalias () += sin_tmp*SkewMatrixSquare (_Twist.head (3 ));
238- Mat4dRes.block (0 , 3 , 3 , 1 ).noalias () += Mat3_tmp*_Twist.tail (3 );
239+ SkewMatrixSquare (_Twist.head (3 ), Mat3_tmp);
240+ Mat4dRes.block (0 , 0 , 3 , 3 ).noalias () += cos_tmp*Mat3_tmp;
241+
242+ Matrix3d Mat3_tmp2 = Eigen::Matrix3d::Identity ();
243+ Mat3_tmp2 *= _q;
244+ Mat3_tmp2.noalias () += cos_tmp*Mat3dRes;
245+ Mat3_tmp2.noalias () += sin_tmp*Mat3_tmp;
246+
247+ Mat4dRes.block (0 , 3 , 3 , 1 ).noalias () += Mat3_tmp2*_Twist.tail (3 );
239248 Mat4dRes.block (3 , 0 , 1 , 4 ) << 0 , 0 , 0 , 1 ;
240249 return Mat4dRes;
241250 }
242251
243252 void LieOperator::SE3Matrix ( const se3 &_Twist, const double &_q, SE3 &_TargetSE3 )
244253 {
245- Matrix3d i = Matrix3d::Identity ();
246254 _TargetSE3.setZero ();
247- _TargetSE3.block (0 , 0 , 3 , 3 ) = i;
248- _TargetSE3.block (0 , 0 , 3 , 3 ).noalias () += sin (_q)*SkewMatrix (_Twist.head (3 ));
255+ _TargetSE3.block (0 , 0 , 3 , 3 ).setIdentity ();
256+ SkewMatrix (_Twist.head (3 ), Mat3dRes);
257+ _TargetSE3.block (0 , 0 , 3 , 3 ).noalias () += sin (_q)*Mat3dRes;
249258 double cos_tmp = 1.0 - cos (_q);
250259 double sin_tmp = _q - sin (_q);
251- _TargetSE3. block ( 0 , 0 , 3 , 3 ). noalias () += cos_tmp* SkewMatrixSquare (_Twist. head ( 3 ));
260+
252261 Matrix3d Mat3_tmp = Eigen::Matrix3d::Zero ();
253- Mat3_tmp.noalias () += i*_q;
254- Mat3_tmp.noalias () += cos_tmp*SkewMatrix (_Twist.head (3 ));
255- Mat3_tmp.noalias () += sin_tmp*SkewMatrixSquare (_Twist.head (3 ));
256- _TargetSE3.block (0 , 3 , 3 , 1 ).noalias () += Mat3_tmp*_Twist.tail (3 );
262+ SkewMatrixSquare (_Twist.head (3 ), Mat3_tmp);
263+ _TargetSE3.block (0 , 0 , 3 , 3 ).noalias () += cos_tmp*Mat3_tmp;
264+
265+ Matrix3d Mat3_tmp2 = Eigen::Matrix3d::Identity ();
266+ Mat3_tmp2 *= _q;
267+ Mat3_tmp2.noalias () += cos_tmp*Mat3dRes;
268+ Mat3_tmp2.noalias () += sin_tmp*Mat3_tmp;
269+
270+ _TargetSE3.block (0 , 3 , 3 , 1 ).noalias () += Mat3_tmp2*_Twist.tail (3 );
257271 _TargetSE3.block (3 , 0 , 1 , 4 ) << 0 , 0 , 0 , 1 ;
258272 }
259273
0 commit comments