Robot not maintaining Z position during MoveL between points

Hello,

I have noticed that the robot Z co-ordinates (displayed on the teach pendant) vary quite a lot from the programmed position. My program consists of series of TriggL and MoveL statements with same Z co-ordinates but different X-Y co-ordinates (all linear moves are done in the same X-Y plane).

Here is snapshot of my code:

MoveL [[44.043,104.280,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[45.000,104.206,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[45.000,104.206,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[0,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[210.006,104.206,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[210.006,104.206,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[211.207,104.323,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[211.207,104.323,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[212.370,104.670,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,0,3,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[212.370,104.670,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,0,3,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[213.444,105.232,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[213.444,105.232,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

TriggL [[214.386,105.987,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,robvel,z0,R3DP_Tool,\WObj:=BedOrigin;

MoveL [[214.386,105.987,0.200],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z0,R3DP_Tool,\WObj:=BedOrigin;

I am using zone 0 (z0) in all the moves. I don’t want to use fine since robot comes to a complete stop. If the programmed Z height is 1.60 mm from Wobj, I am observing deviations as much as 1.50 to 1.70 mm.

Link to video-1 (Programmed Z Height: 1.60 mm): Z_Error_1 on Vimeo

Link to video-2 (Programmed Z Height: 3.20 mm): https://vimeo.com/user109562193/review/397067739/722d793823

Is this deviation normal for zone 0? Can it be improved?

Is the robot calibrated correctly?
Is the tool and any payload defined correctly?

It appears from your code that the z co-ordinate has been manually entered (as all robtargets have exactly the same z value)?
Robots are repeatable not accurate so you will get deviation when you manually enter potions/robtargets as opposed to teaching them.
There is an option called absolute accuracy that improves the accuracy of the robot.

We upgraded to IRC5 from S4C in 2018 and our robot arm (IRB 140) was also serviced at that time. I believe this was calibrated at the factory before shipping. Is there a way to verify this?

Is the tool and any payload defined correctly?

This is the tool declaration:
! Tool declaration
PERS tooldata R3DP_Tool := [TRUE,[[71.200,43.500,34.111],[0.50000000,0.50000000,0.50000000,0.50000000]],[1.000,[0.000,0.000,20.000],[1.00000000,0.00000000,0.00000000,0.00000000],0.000,0.000,0.005]];

I think i have the weight accurate. I can re-check this by weighing it. How to find the center of gravity of the tool?

It appears from your code that the z co-ordinate has been manually entered (as all robtargets have exactly the same z value)?
Yes. The RAPID code is generated from a g-Code file. There are lot of X/Y moves in the same Z plane. The robtargets are not manually entered. They are obtained from the g-Code file. Usually there are a lot of robtargets with same Z value but different X/Y values.

Robots are repeatable not accurate so you will get deviation when you manually enter potions/robtargets as opposed to teaching them.
The robtargets are programmed points.

There is an option called absolute accuracy that improves the accuracy of the robot.
Is this a hardware option or software?

To check the calibration jog the robot so all axis are exactly at 0°, or use a moveabsj command to send the robot there.
All the calibration marks should line up exactly.

Use the LoadID function to determine the center of Gravity.

Absolute accuracy is a correction table that is built at the factory using a laser measurement system.
Last I heard it could be added in the field but would be expensive as an technician and equipment has to be sent out from the factory.

I ran the LoadID routine and robot did small movements to determine Tool mass and center of gravity. The new values were updated according to a message on the teach pendant. However, When I check the tool definition in RAPID code stored on controller memory, I don’t see any modifications. Does robot controller store these values internally or make changes to an existing tool definition? My original tool definition in RAPID code seems to be unaltered.

Nevermind, values were updated after a controller restart.