-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ikfast question regarding UR packages #299
Comments
Just making sure: re: DH: each UR has slightly different DH parameters due to kinematic calibration. How 'different' are yours? It could be that CB1 and later URs have differences the plugin doesn't account for. |
Thanks for the quick reply! DH from the github sources (UR5): //Denavit-Hartenberg parameters for the UR5 in [m] DH from the original paper (Analytic Inverse Kinematics for the Universal Robots UR-5/UR-10 Arms by Kelsey P. Hawkins, December 7, 2013): double const d1 = 0.08920f; //Denavit-Hartenberg parameters for the UR5 in [m] The forward() developed in the cited paper works, in the sense it produces the correct translation part in the 4x4 matrix. The rotation part, the upper left 3x3 portion of the 4x4, is a rotation matrix, but I cannot decompose it into euler angles in any way or form. Also, the forwad() in the github gives the wrong translation part and the rotation part also makes no sense. |
re: DH data: if I reorder the constants I get almost the same values. Almost, but as I wrote earlier: each UR robot is different. You might ask: "but why provide a reusable IK/FK implementation then?" and that is a good question. But the choice was made -- by @kphawkins and others -- to select one set of DH params from a UR that was used for development of the plugin and stick with that. You keep referring to "github source", but could you tell us which file you are referring to in particular? I'm guessing that would be |
Yes, I mean ur_kin.cpp. I'm not bothered by the DH differences, it was just a funny difference of no further importance. I just included the remark, since it may trigger someone into remembering a certain version issue. The main problem I have, is that forward() and inverse in ur_kin.cpp are indeed complementary, but the values produced by forward() do not correspond to the actual values as obtained from the UR controller. The implementation of forward is also different from the paper. The one in the paper does give the proper values (meaning the translation part of the 4x4 matrix is correct). So 2 questions, 1) why are there 2 different versions of forward() and 2) does anyone have the inverse() that belongs to the forward() as developped in the paper? |
Ok, I've contacted Kelsey Hawkins via email. He has very kindly explained that the UR tablet uses some extra transformations to obtain the values show in the display. The forward() and inverse() apply only to the kinematic chain without those extra transformations. Implementing the additional matrices give me the proper translation components. I just need to figure out the rotation parts, and I'm off :-) |
Ok. So in the interest of all future readers that might want to do the same thing as you are trying to do: what "additional matrices" are you and @kphawkins referring to? |
You can find them in ur_kin.h, I'll replicate here for convieniance: //These kinematics find the tranfrom from the base link to the end effector. // Transform from base link to 0th link // Transform from 6th link to end effector |
This issue is confusing me. Is the UR5 CB1 robot different from other UR5 robots? Could you give an example where the inverse function does not work for you? I've been using the ur_kin module without any problems on our UR5 robot (I use this directly without moveit though). |
I believe I now understand this comment: the xacros we ship as part of The matrices shown in the comment I quoted seem to deal with this in the IK plugin. |
…el-reverse-ip Add configurable reverse ip address (ros-industrial#299)
I have a UR5 CB1 robot. I'm looking for FK and IK code. I tried the forward() and inverse() from the github ROS package. If I put in a sample set of 6 q's apply forward() then backward() I get the same answer. But, if I put in an actual set of values (q's) from my robot, the answers are all wrong. The Tx and Ty seem inverted and I can make no sense of the rotation part. Also, Hawkins published a paper with a different solution to the forward kinematics then what is used in the package. This solution provides the correct answer to the translation part, although the rotation still baffles me. Funny observation, the DH parameters are different, too. What's going on, and does anyone have a working set of forward() backward() that actually corresponds to the numbers given on the UR touchscreen?
The text was updated successfully, but these errors were encountered: