-
Notifications
You must be signed in to change notification settings - Fork 407
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
Weird DH parameters reading from ur_calibration #457
Comments
@thachdo Thanks for asking. In the conversion to the yaml file, the 4DoF DH notation are translated to 6DoF in a way so it still represent the correct kinematics but also makes the graphics look right. |
Thanks @urrsk, but how can I convert the |
@thachdo the DH notation is a minimal notation, there are no other way to represent the same model with other values. |
@thachdo No, this is normal. The issue is the way that DH parameters are defined. As @urrsk says:
From this youtube video You can align the joint frame origins anywhere along subsequent parallel axes, but that's for the special case of mathematically perfect parallel axes. In a real robot, parallel axes are never actually parallel, so the frame origin is uniquely defined AND it is possible for the common normal's intersection with the next axis to be very far away. The calibrated DH parameters you have look correct and roughly similar in magnitude to the calibrated parameters for my UR5. Approximately +613 and -608 meters for d2 and d3 on mine. You need to use those numbers, and the elbow joint's frame origin will be nearly 600m away and strangely twisted. DH parameters are an annoying representation for robots with subsequent parallel axes if you are doing anything other than moving the end-effector and you want intermediate reference frames that lie close to the robot's physical joint locations. The representation used by URDF is much more stable in that regard. |
@thachdo See also ros-industrial/universal_robot#414 and related discussion |
Thanks @urrsk and @danzimmerman, sorry for my late reply. |
The driver provides a utility to download the calibration from your controller and generates a See the section in the readme about this. |
This is not about the usage. It's about calibrating. As mentioned above, I need these parameters to update the URDF file for further steps in my work. Reading .yalm using the |
Perhaps we're misunderstanding each other. The There should not be any need to update anything manually. Run the calibration extraction and then always load the appropriate
|
Since I'm using a URDF in here so having the .yaml can't be used in my case. My target is to update the following parameters in that urdf file:
The |
I do not think you can do it this way. I think those parameters could simply be replaced with the corresponding values from the DH parameters, but it would result in a URDF file where your forearm link frame origin was ~600m away from the robot. This will cause issues with the placement of the visual, collision, and inertia models, just like the description shown here: The important thing here is that the picture above is what a DH-based model for the calibrated robot is going to look like (if not worse). So if you managed to convert the x, y, z, r, p, y format back to DH (which I'm not sure can be done strictly algorithmically), you would just get an unusable structure like the picture above. If you don't use the calibrated robot description generated by the calibration tools and driver, you'll have to manually update the placements of all the inertia, visual, and collision models in a separate step. The thread here seems to discuss the modeling approach that results in the calibrated URDF for the ROS driver. I think this comment is also useful:
You need to reproduce all of that work if you want to do this yourself.
I believe you MUST use the The requirement to use the fork is in the instructions for the Universal Robots ROS Driver but I feel like it's easy to miss. If you can't use the fork and its YAML-compatible |
@thachdo can we close this issue or do you have additional questions? |
Hi @thachdo , I really understand what u wanna do, i.e., get the calibrated 4DoF DH notation for further processing. I'm also having this issue, have u solve that? |
Hi @RealMarco, I would require some works to convert, I didn't have time to do those before. Please share if you could do then. |
Hi @thachdo and @RealMarco and other people that are looking into to the DH parameters To support this. The UR ROS and ROS2 driver also include a calibration packet that can calculate the 6DoF version where the output is return as a YAML files. See https://github.com/UniversalRobots/Universal_Robots_ROS_Driver/tree/master/ur_calibration. BTW. The mention branches are not needed any more (and is outdated). As it all has been merged into the respective repo's default branches. |
I'm using UR5 with ROS Kinetic. The result of reading calibrated parameters using ur_calibration is as follows:
which is quite different from standard parameters here. Specifically,
dh_a[1] is too small and dh_d[1:4] are too large. Is this abnormal? How could I resolve that issue?
The result of the .yaml file is:
which is more close to the standard values. My target is to get the calibrated DH parameters. Is there any script to convert the .yaml file to DH parameters? Also, can I read the DH params directly from the teaching pendant interface?
The text was updated successfully, but these errors were encountered: