Error recovery for Motion Supervision

Options
Like the concept of Error recovery (Error handler)

Is it possible to recover the error message from the Motion Supervision in case of collision. Therefore, the system can continue operating again without user's interaction (e.g. acknowledgement using by FlexPendant) ??

What I try to do is when the robot hits an object, the robot automatically retracts back along the safe and previous path. Then, it can perform the next operation without stop program executing.

Thank you.

Comments

  • Anders S
    Options


    Hi,
    I did something similar once with a S4 system. In that system I had a semistatic background task that trigged a TRAP on the error MOTION_ERR,TYPE_ALL (IError MOTION_ERR,TYPE_ALL,xxxxxxxx;).
    In the TRAP i reseted the error, turned the motors on and started the program execution. This worked fine in S4, so I'm sure it will work in an IRC5 system also.
    Best regards,
    Anders Spaak
    ABB Robotics
  • j_proulx
    Options
    I did a test using the IError instruction. This interrupts on a collision detection Error. It is a movement up and down. when there was a collision When restarted it  would turn pulse a light and do other movement.
     

      VAR intnum intno1 := 0;
      PERS bool bCollision := FALSE;
      VAR bool bVldPath := FALSE;
      CONST errnum a_errno1 := 2;
      !
      PROC main()
      IF bVldPath THEN
        bCollision := FALSE;
        IDelete intno1;
        CONNECT intno1 WITH tColl;
        IError MOTION_ERRErrorId:=204, TYPE_ALL, intno1;
        !ISignalDI Single,diTool_1_Empty,1,intno1;
        MotionSupOnTuneValue:=35;
        MoveL [[1495.88,-81.48,1091.5],[0.0504659,-0.706454,-0.012259,-0.705852],[-1,1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]],v500,fine,tCutter;
        MoveL [[1495.88,-81.48,680.93],[0.0504638,-0.706455,-0.0122546,-0.705851],[-1,1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]],v500,fine,tCutter;
        WaitTime 2;
      ELSE
        PulseDOHighPLength:=1, doAmberBeacon;
        MoveL [[1495.88,-81.48,1091.5],[0.0504659,-0.706454,-0.012259,-0.705852],[-1,1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]],v500,fine,tCutter;
     MoveL [[1513.59272578952,-280.401165442234,1080.70049611284],[0.0504658649220911,-0.70645350895712,-0.0122589914790037,-0.705851509375559],[-1,1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]],v500,fine,tCutterWObj:=wobj0;
        bVldPath := TRUE;   
      ENDIF
      RETURN;
      ENDPROC


     TRAP tColl
      bCollision := TRUE;
      IDelete intno1;
      StopMove;
      ClearPath;
      StopMoveReset;
      bVldPath:=FALSE;
      ExitCycle;
     ENDTRAP
  • soongv
    Options
    Thank you for the prompt reply but I could't try it until last week because of my own technical problems. 

    The trap works fine as you guys advice but I need to add MotionSupOff before start moving to the opposite direction, and then turn the supervision on afterward. Otherwise, the arm would still get stuck and cannot move.

    TRAP tColl
      bCollision := TRUE;
      IDelete intno1;
      StopMove;
      ClearPath;
      StopMoveReset;
            MotionSup Off;     ! ---  turn off motion supervisor 
            MoveL [..............]  ! --- move backward from the hit direction
            MotionSup On;     ! --- turn on motion supervisor 
      bVldPath:=FALSE;
      ExitCycle;
     ENDTRAP

    However, it seems I still have to acknowledge the error due to the collision. Is there any way that the robot can skip it and proceed automatically?   
  • Henrik Berlin
    Options
    Moved to RobotWare.

    Henrik Berlin
    ABB
  • graemepaulin
    Options
    Hi,
     

    You need to use the system input MotorOn or Motors On and Start (MotOnStart).

     

    One note of caution you risk over heating (and possibly damaging) the motors and drive system if the collision keeps happening and then auto resetting. Add some code to limit the number of resets in a given time peroid.

     

    Regards

    Graeme
  • 3phase
    Options
    Hi,
     

    Sorry I am really a newbie on this, but it is I think similar to my current scenario. How do I continue executing the program if an Estop happens? Do I create an error handler for this or just like the example above, use IError instruction to fetch the error code? Thank you all for your help.
  • Xiaoxing_DONG
    Options
    Recently we are facing the same problem and we solved it with the ERR_COLL_STOP error number which we have in our robot. To use this error handler you need first to change the system parameter Controller/General Rapid/CollisionErrorHandling to YES. This will make the error handler effective in your system. More details can be found in Technical Reference Manual - Rapid Kernel/ Error Recovery/ Motion Error Handling. Hope this will be useful to anyone with the same problem.