I want to stop you right now if you think I'll be talking about robots taking over the world. Singularities are robot configurations that are mathematically impossible to realize in a given situation which results in a robot safety stop. Let's find out how robot singularities happen and how you can avoid them.
A singularity is a situation that often happens when you are trying to tell the robot to go to a given point, but since the robot’s configuration is not compatible with this point, the robot stops and shows the error: Joint Limit Violation. This situation is well explained by this example from our friends at Zacobria.
Try to imagine that your arm is reaching for a coin that is half way inbetween your elbow and your wrist. If you are not allowed to change your body position – then it is very difficult to reach and grab the coin. But when you can change your body position then it is very easy to pick up the coin.
Similar situations can occur during the programming of the robot where it will be impossible for the robot to make a linear move from its present position to where it wants to go to reach the coin. The robot will make the attempt; you will see a rapid increase in the robot speed; then the robot will be forced to make a safety stop with joint error messages appearing in order not to break the robot by forcing it to maneuver beyond its mechanical capabilities.
The solution is simple enough, just reposition the robot by giving it new waypoints, thus the robot should be able to reach its target.
A singularity can be summarized as either: the maximum reach for a motor of a robot or an error in the mathematical model of the robot. For example, a division by 0 would create an impossible solution that would create an error. This type of error occurs generally when the robot is moving in linear mode, since the robot is asked to move in a linear path without considering its configuration. There is a fair chance that the robot will enter into singularities if you are requesting it to perform a compact configuration, for example, when grasping an object close to its base.
It is kind of hard to tell you where you are likely to find the most singularities since they are not at a given position, they are relative to the robot configuration. The following examples can give you some ideas as to potential singularities.
Singularities have to be differentiated from working zones. In fact, robots can be programmed to work in a given area and limited with virtual plans. Since the robot cannot go there, it may indicate the same error: Joint Limit Violation or some other error message. This is not a pure singularity, the robot has simply reached its maximum permissible position.
Notice that whatever the orientation of the robot; upside down, upright, horizontal; the singularity area remains the same.
The best way to avoid singularities would be to view your programming from the perscpective of the robot’s joints or at a minimum work around the robot joints when the robot is in a compact configuration. You can also try to avoid the configurations detailed above. Finally to remove your robot from a singularity, first you will need to reset it, then you will need to manually jog or teach it a way around the blockage.
If you need further information on singularities, before you pull your hair out or bash your robot, we have another very descriptive blog post on the subject. Read more here.