I understand that the nodes of a surface define its points of self-intersection, and are special cases of more general singularities.

The full set of singularities of a surface can be characterized by finding all points where the partial derivatives are all zero.  However, not all singularities are nodes.  Some are cusps.

Is there a simple way to check which singularities are surface nodes?  Or, more interestingly, is there a way to compute the full set of nodes of a surface directly?