Friction tuning values not populating

  • Hello. I am programming an IRB 4400 6-axis industrial robot with milling router bit EOAT to record friction values for a specific sequence of move instructions. The aim is to set friction values for specific cut paths to eliminate waviness in milled parts. I am using instructions FricIdInit and FricIdEvaluate for this.

    This routine will serve as a tool for determining the friction values for a given sequence of move instructions, and will populate the array R1_Cut_FricLevels with these new friction values. Here is my program:

    MODULE R1_Friction_Tuning

    LOCAL PERS num Friction_Levels_Original{6}:=[0.24,0.51,0.35,0.32,0.69,0.54];

    !This array displays the values found in the .MOC file.

    LOCAL PERS num R1_Cut_FricLevels{6}:=[0,0,0,0,0,0];

    !This array will be populated with new values.

    PROC R1_Friction_Program()

    !Start Friciton Evaluation Initialization


    !Copy and paste cut path below. Must be < 4s.



    MoveL [[271.4178,121.7909,419.1499],[0.74120872,0.486167,-0.43839483,0.14853033],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v180,fine,tR1Current\WObj:=wobj_R1;


    MoveL [[738.3276,115.9078,415.5497],[0.64857728,0.62449349,-0.18881946,0.39204925],[-1,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v180,fine,tR1Current\WObj:=wobj_R1;

    !Evaluate Friction and Repeat Sequence

    FricIdEvaluate R1_F21_V1_C9_FricLevels;



    However, the array is not populated after and all values remain at zero.

    Additionally, the robot continues cycling back and forth through the move instructions indefinitely - is this normal? It writes to the pendant "iteration nr."


    FFW ON is active for all robot joints.

    The move sequence is under 4s.

    The instructions begin and end with FINE movements.

    P.S. What do these friction values represent? Are they percentages? Are they related to servo feedback? Torque?

  • The friction values in the MOC are nm values for motor+gearbox friction. You can think of it as the minimum torque to move the axis.

    In the rapid code the values are stored as a percentage of the values in the moc. So for a spesific move the friction values might look something like this: friction4:=[217.4,95.6,202.5,152.5,61.7,122.9];

    Usually the values for an axis that more or less does not move during tuning can be very high or low and is basically an error but does not matter for the move.

    The movement should repeat 20-30 times normally before the values are stored in your "R1_Cut_FricLevels" levels.

    If you have waves in your cutting lines i recommend lowering the DH filter to around 50%.

    You can change this in your motion process mode or byt adding these lines to the start of your code

            WaitTime\InPos, 0;
            TuneServo ROB_ID,1,50\Type:=Tune_DH;

    This is very safe and wont break your robot.

    Use TuneMaster to auto tune your arm resonance, this helps with vibrations and waves.
    TuneMaster can be downloaded for free from ABB: ""

    If you are running RW6.x i would go into Motion > robot > motion process mode, and switch it to "stiff mode", this helps a lot when milling. You can edit the DH settings for that motion mode to 0.5 instead of using tune servo command.

Advertising from our partners