I am attempting to calibrate a robot using an existing metrology system already set up near the robot.
- This system provides 6DoF coordinates for the flange with respect to an absolute reference frame.
- The robot controller also shares this reference frame and definition of flange.
- The metrology system does not work with any of RoboDK's metrology system drivers, prohibiting automatic data collection through the usual RoboDK interface. Rather, it will export a CSV that can be imported using the "Import Data" button in the calibration pane.
Because of this, I wish to skip conducting base and tool setup and instead:
1. Manually set the location of "Measurements Reference" and "Tracker Reference" based on the known location of the absolute reference frame that my metrology system reports values in.
2. Manually set the tool to have transform [0,0,0,0,0,0] (just the flange).
3. Take measurements for calibration by importing a CSV in the format: "J1,J2,J3,J4,J5,J6,X (mm),Y(mm),Z (mm),W (rad),P (rad), R (rad), Tool X, Tool Y, Tool Z, Tool W, Tool P, Tool R". In my case, the final 6 entries will all be zeroes. I have already generated a list of joint positions to move to; I do not need to use the "Create measurements 6DOF" script.
4. Calibrate the robot to use accurate kinematics.
In my situation, is there a way to skip the first two steps and jump straight to calibration?
To attempt to work around this, I generated dummy data files for the base setup and tool setup that were designed to put the measurement reference where I want it. (The way I defined it, my absolute reference frame should be coincident with the nominal robot base.)
This method encountered several issues:
1. Since I wanted my measurement reference to be at exactly the nominal robot base, I scheduled several measurements then manually input the measured data based on where the nominal kinematics predicted the robot would be at those locations. The result of this was disappointing: the measurement reference was determined to be quite far from the robot base (below).
2. I hoped to execute a similar procedure for tool setup. Unfortunately, J6 cannot be defined for a target that is exactly coincident with the robot flange. To avoid this, I had to input data for the tool setup as if the tool had transform [0,0.1,0,0,0,0] from the flange. I believe that this workaround was successful, the drawback being that shifting the tool in a way that does not match reality has an undesirable effect on the accuracy of my calibration.
3. Unfortunately, calibration was fully unsuccessful. I imported my data and despite the measurements matching the nominal FK fairly closely (green annotation, below), the measurement error for each point was still in the 3 meter range (red annotation, below). I suspect this is a consequence of the poor base setup results in issue (1).
I have attached what I have in the workstation so far.
Yes, it is possible to import your own table of measurements into the calibration sequence. In this case, you should provide the XYZWPR measurements of the measured TCP with respect to the robot base frame. If the TCP is the same robot flange you can keep the Tool XYZWPR at 0,0,0,0,0,0 like you have.
The following script can help you understand how the pose data is structured:
To troubleshoot, you can also copy/paste an array of Nx3 measured points from your excel table (position, in mm) to see where the measured points are in the 3D view. These points will be added as an object that needs to be added to the robot base.
I previously calculated the calibrated measurements using robomath.Pose_2_KUKA. I have adjusted to use Pose_2_Staubli to get XY'Z'' Euler convention (I also correctly converted from degrees to radians). Unfortunately, this did not resolve the issue (see below).
I believe this is related to the base setup being bad in the first place (item 1 of my previous post). Robot base with respect to measurement system is expected to be [0, 0, 0, 0, 0, 0] but it ends up being a few meters away.
I imported the base setup and tool setup points into the workstation and named them appropriately. The updated workstation is attached.
I was able to run a simple calibration using the Base/Tool setup and removing the orientation data from the tables. I attached the sample project and an image.
There is something strange happening when we account for the pose orientation.
The following points are important to properly load your custom measurements for robot calibration and using the robot base:
You should leave the measurements of the base and tool setup at zero so RoboDK does not account for the base and tool setup. Otherwise it will override the measurements reference and it will try to update the Tool coordinates in your measurements.
You can reset the position of the robot parameters manually so it is set to 0,0,0,0,0,0. It is easy to override this value if you have measurements in any base setup of a calibration project. Even if you don't update it, RoboDK will take the latest calibration attempt as the position for measurements.
I forgot to mention that when you import a CSV file for your measurements you should leave the first row of the CSV file at zero (measurement index 1 in RoboDK starts on row 2 from the CSV file).
I recommend you to remove J7 from your table of measurements.
Using XYZ data only should help you troubleshoot. However, the orientation can be accounted for if you provide it, and it should workd well.
The 3rd robot calibration project of the station attached is the one that works with these edits.