Skip to content
Snippets Groups Projects
Commit a0128e70 authored by jcarpent's avatar jcarpent
Browse files

[Algo] Update the frame algo to use M.isIdentity()

parent fcb402de
No related branches found
No related tags found
No related merge requests found
...@@ -62,7 +62,7 @@ namespace se3 ...@@ -62,7 +62,7 @@ namespace se3
* *
* @warning The function computeJacobians should have been called first * @warning The function computeJacobians should have been called first
*/ */
template<bool localFrame> template<bool local_frame>
inline void getFrameJacobian(const Model & model, inline void getFrameJacobian(const Model & model,
const Data& data, const Data& data,
const Model::FrameIndex frame_id, const Model::FrameIndex frame_id,
...@@ -84,14 +84,10 @@ namespace se3 ...@@ -84,14 +84,10 @@ namespace se3
{ {
const Frame & frame = model.frames[i]; const Frame & frame = model.frames[i];
const Model::JointIndex & parent = frame.parent; const Model::JointIndex & parent = frame.parent;
if (frame.placement == SE3::Identity()) if (frame.placement.isIdentity())
{
data.oMf[i] = data.oMi[parent]; data.oMf[i] = data.oMi[parent];
}
else else
{ data.oMf[i] = data.oMi[parent]*frame.placement;
data.oMf[i] = (data.oMi[parent] * frame.placement);
}
} }
} }
...@@ -112,8 +108,8 @@ namespace se3 ...@@ -112,8 +108,8 @@ namespace se3
const Model::FrameIndex frame_id, const Model::FrameIndex frame_id,
Data::Matrix6x & J) Data::Matrix6x & J)
{ {
assert( J.rows() == data.J.rows() ); assert(J.cols() == model.nv);
assert( J.cols() == data.J.cols() ); assert(data.J.cols() == model.nv);
const Model::JointIndex & parent = model.frames[frame_id].parent; const Model::JointIndex & parent = model.frames[frame_id].parent;
const SE3 & oMframe = data.oMf[frame_id]; const SE3 & oMframe = data.oMf[frame_id];
...@@ -122,19 +118,15 @@ namespace se3 ...@@ -122,19 +118,15 @@ namespace se3
const int colRef = nv(model.joints[parent])+idx_v(model.joints[parent])-1; const int colRef = nv(model.joints[parent])+idx_v(model.joints[parent])-1;
// Lever between the joint center and the frame center expressed in the global frame // Lever between the joint center and the frame center expressed in the global frame
const SE3::Vector3 lever(data.oMi[parent].rotation() * (frame.placement.translation())); const SE3::Vector3 lever(data.oMi[parent].rotation() * frame.placement.translation());
getJacobian<localFrame>(model, data, parent, J); getJacobian<local_frame>(model, data, parent, J);
if (frame.placement == SE3::Identity()) if (!frame.placement.isIdentity())
{
// do nothing
}
else
{ {
for(int j=colRef;j>=0;j=data.parents_fromRow[(size_t) j]) for(int j=colRef;j>=0;j=data.parents_fromRow[(size_t) j])
{ {
if(! localFrame ) if(!local_frame)
J.col(j).topRows<3>() -= lever.cross(J.col(j).bottomRows<3>()); J.col(j).topRows<3>() -= lever.cross(J.col(j).bottomRows<3>());
else else
J.col(j) = oMframe.actInv(Motion(data.J.col(j))).toVector(); J.col(j) = oMframe.actInv(Motion(data.J.col(j))).toVector();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment