gramaziokohler / rfl_description

This repository contains the RFL description and moveit package
0 stars 2 forks source link

Measure-in / Calibrate the RFL robots to Gantry offsets #4

Open yck011522 opened 3 years ago

yck011522 commented 3 years ago

I'm aware the RFL URDF model is based on a CAD model. The actual error in the construction of the RFL gantry and robots are either not measured-in or that value is nowhere to be found.

In particularly the following errors is of concern if both robot 11 and 12 are used collaboratively:

I suggest performing a robotic dance with 1 or 2 iGPS sensors to calibrate these joints. In particular, measuring a number of points while the robot moves one of these joint.

The way how the error is interrogated from the data collection is not so straightforward and may have multiple ways. I'll try formulate them with actionable code in the coming days so we can have an idea if the data collection make sense.

I'm hoping to perform the data collection run in May and the subsequent error correction for the URDF later. In order to demonstrate the effect of the correction in terms of absolute accuracy, I plan to create some TCP-stationary but 7-9 joints moving in latent space type of movement to validate the correctness of the IK solution. The error can be objectively measured with a dial gauge probing a stationary object fixed to the RFL ground or can be measured by the same iGPS sensor.

I'm calling for support from @gonzalocasas @matteo-pacher @fleischp.

Future steps

yck011522 commented 3 years ago

This issue warranted a new private repo created to house the measurement and other scripts. I'll post the results here for future reference.

The result of the first measurement conducted on 2102-06-01 around 8pm, included only axis sweep of bridge1_joint_EA_X, robot11_joint_EA_Y and robot11_joint_EA_Z. Yields the following results:

- - - - - - -
Axis Straightness - X
- - - - - - -
Analysis of dataset points_axis_x1, sensor = igps_frame_39, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.5191068154508421 , max = 1.005901597181011
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_x1, sensor = igps_frame_59, len(datapoints) = 20
Average igps quality = 10.85
Line fit error average = 0.6017136168506352 , max = 1.3721206657837353
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_x2, sensor = igps_frame_39, len(datapoints) = 20
Average igps quality = 10.4
Line fit error average = 0.5291454379615171 , max = 1.0395067673305547
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_x2, sensor = igps_frame_59, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.5363181312581637 , max = 1.0654944413737615
- - - - - - -
Axis Straightness - Y
- - - - - - -
Analysis of dataset points_axis_y1, sensor = igps_frame_39, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.3151069387208134 , max = 0.7320896147380721
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_y1, sensor = igps_frame_59, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.3169683572892694 , max = 0.8248343117544645
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_y2, sensor = igps_frame_39, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.35767245497957334 , max = 0.9638672124046539
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_y2, sensor = igps_frame_59, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.33118568275603844 , max = 0.7955880431314706
- - - - - - -
Axis Straightness - Z
- - - - - - -
Analysis of dataset points_axis_z, sensor = igps_frame_39, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.10511640058415803 , max = 0.23563918779084142
- - - - - - -
- - - - - - -
Analysis of dataset points_axis_z, sensor = igps_frame_59, len(datapoints) = 20
Average igps quality = 12.0
Line fit error average = 0.1424025174844114 , max = 0.47678506916346025
- - - - - - -
- - - - - - -
Perpendicularity
- - - - - - -
Angle between x y = 0.0468360056105584 (kiloTangent (angle-pi/2)) , 90.00268350544877 (degrees)
Angle between z and (x cross y) = 1.5010627461875383 (kiloTangent(angle)) , 0.08600449554609686 (degrees)
yck011522 commented 3 years ago

I can see the some general tendency: bridge1_joint_EA_X to have ~ 0.52 mm deviation from line fit. bridge1_joint_EA_Y to have ~ 0.35 mm deviation from line fit. bridge1_joint_EA_Z to have ~ 0.15 mm deviation from line fit.

One interpretation is that the later the axis is in the kinematic chain, the more straight it is.

(Note that kiloTangent unit refer to mm/m deviation) Another note of concern is the perpendicularity of XY is 0.04 mm/m while perpendicularity of Z axis is 1.5 mm/m This is a rather significant amount.