Reverse on collision to avoid getting trapped/crushed

  • Hello,


    I have set up a listener observer for collision detection using kiiwa's approach from this thread and it works great. When a collision is detected, the robot stops, and when the way is clear it continues it's movement.

    It would be even better though, if the robot would reverse the last few centimeters after the collision, so that the worker can not get trapped between the robot and an obstacle. As the robot is moving in different directions, I can't do that using move(linRel) on collision.


    Did anyone try this before?

    Thanks for your help!

  • Hi,


    I hoped this would be something many users have implemented already. How do you handle collisions between worker and roboter, where the worker could possibly get trapped? Impedance mode would be an option as well I guess?


    Best regards

  • Simply: use safety-rated interlocks to ensure no human can ever come within the robot's reach unless the robot is either de-powered, or is limited to a safe operation mode (either Collaborative mode, or restricted to Teach mode with the deadman enabler required).


    Allowing the robot to automatically move after a collision would violate RIA safety specs, since there's no way to sufficiently ensure that that movement wouldn't make things worse.

  • As SkyFire mentioned, it is not safe which means you shouldn't do so in a real production line.

    But I as far as I understand, you're not talking about Safety functions(yellow) but a similar process within your application(grey).

    It might still not be safe, but anyways, in terms of possibility, yes you can make something similar.

    You can get your last executed motion in your motion listener(or a motion container) after the condition(collision) has fired.

    From there you can get a transformation from your current position to the target position and reversing it will give you the "direction" where you should move toward to retrieve.(Only in case you did not finish your last motion thus not reached to your last target)

  • I usually use a "breakwhen" in my motion instruction, then check if "getFiredBreakConditionInfo()!= null" , to roll back to my previous position in case of an, obstacle, but not to release a trapped person, it's to avoid breaking my work-pieces, when I want to put them on a base and there's already something underneath.

    As @SkyFire said, it's not safe to move automatically after a collision, as we have no way to know if it's not going to worsen the problem, especially with big robots.

Advertising from our partners