Jmeyer1292 / opw_kinematics

Closed form IK for parallel base, spherical wrist industrial manipulators
Apache License 2.0
69 stars 26 forks source link

IK solve for point-orientation pose (5-axis) #71

Closed yvanblanchard closed 1 year ago

yvanblanchard commented 2 years ago

Hello,

Is it possible with the current algorithm to set a 5-axis target/pose (point + orientation vector), instead of 6-axis ? I know it's possible with openRave IK-Fast, but it would be great to have it with OPW.

Thank you

Levi-Armstrong commented 2 years ago

How is this possible with opeRave IK-Fast?

gavanderhoorn commented 2 years ago

By generating a solver specifically for 5 dof. Depending on the configuration, it ignores one of the dimensions in the IK request.

See this for an enumeration of the variants IKFast supports.

Levi-Armstrong commented 2 years ago

By generating a solver specifically for 5 dof. Depending on the configuration, it ignores one of the dimensions in the IK request.

See this for an enumeration of the variants IKFast supports.

More interested in how it does this under the hood. I has to be making some assumption because infinite solution exists depending on how finely you samples around the z-axis.

yvanblanchard commented 1 year ago

would it be possible for this request to change a bit the equations in order to not consider the last sixth axis/DOF (or considering constant null value) ? Thank you

Levi-Armstrong commented 1 year ago

I think I may have misunderstood the original post. Is this for a 5DOF robot or 6DOF robot and you would like to just provide point and normal vector?

yvanblanchard commented 1 year ago

It is for a six axis robot (spherical wrist), but don’t care about robot pose (transverse tool vector) ; the target has only tcp origin and tool/normal direction vector, yes.

Levi-Armstrong commented 1 year ago

Then why not not compute the the rotation matrix using the normal Eigen::AngleAxisd(0, normal) and provide the full matrix to opw. Then zero out the sixth joint value?

yvanblanchard commented 1 year ago

Then why not not compute the the rotation matrix using the normal Eigen::AngleAxisd(0, normal) and provide the full matrix to opw. Then zero out the sixth joint value?

I’m not sure to understand. Do you think there is no need to modify the actual code of opw solver for this ?

Levi-Armstrong commented 1 year ago

I don't think so. If you do not care about the sixth joints rotation. Then you can use the information you have to create an Eigen::Isometry3d pose using the point normal. Then feed this to OPW kinematics solver and get the joint solution and ignore the sixth joints value.