Collision Recovery program

  • Hello,


    I would like to ask if it possible to create my own program to let the robot do some movement to skip collision situation without buying [ auto Collision Recovery ].


    is it possible ?


    what I want to do is when the collision been detected so I would like to reset the the robot automatically and start running another program then do some movements .


    I don't have the [ auto Collision Recovery option ] so I would like to create my own program.



    Thanks,

    Moelsayed

  • First of all, I will never "reset the the robot automatically" on a collision.

    Personally if I see a collision I would like to investigate the reason why and not just send the robot home and start again,

    Having said that, I can tell you the following:


    We have a robot that pick parts (like 99% of the people)

    On the program, we go to the approach point and from there on with the help on system variables we check the torque, the we move toward the pick in 2 mm increments and repeat the check until we get to the pick point.

    Obviously, we still going to crash, you can not avoid that, but it's going to be minor. If crashes, the robot will send a fault and that we can reset it with the PLC sending the robot home. We do this acknowledging the fault from a button on the HMI

    Retired but still helping

  • Hi

    I modified the programs a little bit . I deleted lines that they are not important to this example

    First you need a background program


    /MN

    Controls from PLC if you want the check sensitivity. Some of my parts did not need that

    1: IF (DI[67:Collision detect ON]=ON) THEN ;

    2: R[13:SenseOn]=1 ;

    3: ELSE ;

    4: R[13:SenseOn]=0 ;

    5: ENDIF ;

    Go to the variables and monitor the number manually. You can actually see numbers changing if you try to move the robot with your hands. Once you do that, yo have to put that value on R[14]. That will be your "I'm crashing" value

    Compare the variable and "I'm crashing" value

    6: IF ($SV_INFO[1].$Q_CURRENT[3]>R[14:CurrentLimitSet]) THEN ;

    7: R[15:ExceedCurrentLit]=1 ;

    8: ELSE ;

    9: R[15:ExceedCurrentLit]=0 ;

    10: ENDIF ;

    /POS

    /END


    Then you have the pick program


    Approach

    19:L PR[R[9]] 2000mm/sec CNT5 VOFFSET,VR[1] Tool_Offset,PR[3:Body pick app ] ;

    20: !Collision_Sense_for_Pick ;

    If collision check is not necessary, jump to label 15,

    21: IF R[13:SenseOn]=0,JMP LBL[15] ;

    Move to a location above part where it's impossible to have a collision

    22: PR[7,3:BodyPickSenseApp]=R[11:Collision height] ;

    23: ;

    24:L PR[R[9]] 1000mm/sec CNT2 VOFFSET,VR[1] Tool_Offset,PR[7:BodyPickSenseAp] ;

    Start coming down on 1.5 mm increments

    25: FOR R[60:ForLoopValue]=1 TO 5 ;

    26: PR[7,3:BodyPickSenseApp]=PR[7,3:BodyPickSenseApp]+1.5 ;

    27:L PR[R[9]] 1000mm/sec CNT0 VOFFSET,VR[1] Tool_Offset,PR[7:BodyPickSenseAp] ;

    Check condition from background program

    28: IF (R[15:ExceedCurrentLit]=1) THEN ;

    29: DO[147:ToolOnGripper]=OFF ;

    30: R[41:PartFound A]=0 ;

    31: R[46:IndexA]=1 ;

    32: PR[7,3:BodyPickSenseApp]=R[11:Collision height] ;

    33: ENDIF ;

    34: IF (R[15:ExceedCurrentLit]=1),JMP LBL[20] ;

    If "crashed" but not really bad the robot should not send a fault and the logic jumps to label 20

    If "crashed" was bad, robot send a fault and stop. Initiate recovery from PLC

    35: ENDFOR ;

    36: PR[7,3:BodyPickSenseApp]=R[11:Collision height] ;

    37: LBL[15] ;

    38: !Pick point ;

    39:L PR[R[9]] 500mm/sec CNT0 VOFFSET,VR[1] ;

    40: CALL EOAT_PICK ;

    41:R[15:ExceedCurrentLit]=0


    44: LBL[20] ;

    45: !Pick dep ;

    46: R[30:Actual col guard]=R[32:Col guard 100] ;

    47: COL GUARD ADJUST R[32] ;

    48:L PR[R[9]] 1000mm/sec CNT100 VOFFSET,VR[1] Tool_Offset,PR[4:Body pick dep ] ;

    49: R[43:Temp PartFound A]=0 ;

    Retired but still helping

  • Hi


    SCARA

    Basically it's a pick and place


    This is the deal

    i told the customer that IF (big IF) nobody touches the robot manually, the robot can recover from all the positions that moves during automatic cycle

    The customer did not agree, they don't watch to touch the pendant.

    Here is the problem, the operators twice or three times a day they go inside the cell to clean it and they manually push the robots away.

    That's why I did this programs, I move axis 3 up all the way and hopefully does not reap anything apart.


    I just posted this as an example, it's up to the robot programmer and the application to incorporated on their logic


    As far as the speed I was doing it a 200 mm/s but they test with me there and agree to 1000mm (which is ridiculous)


    "Customer is always right"

    Retired but still helping

Advertising from our partners