I implemented three different grasp metrics for this project. The basis for grasp metrics is that given a net force applied to an object (gravity, someone pulling on it, etc.), the robot can counteract the net force through a set of input forces. We can measure the quality of a grasp by quantifying how well this net force can be resisted.
The grasp metrics I implemented were:
Gravity Resistance
Computes the input forces required to resist gravity. The quality returned is the sum of the input forces where a lower set of input forces means a more secure grasp.
Ferrari-Canny
Quoted from the research paper it's based on, the metric computes "the ratio between the magnitude of the maximum wrench to be resisted (over all the possible directions), and some notion of the magnitude of the applied finger forces," [1]. A wrench is a 6-dimensional vector that encompasses forces and torques for convenience (fx, fy, fz, tx, ty, tz).
Robust Force Closure
Computes some distribution of perturbed grasps around a desired grasp and returns the fraction of which are feasible.
The results are described in much more detail in the paper below. In short, the strange geometry of the objects and grasp locations meant that while there was strong correlation between the metrics and what you would expect to happen in simulation, only Robust Force Closure accounted for noise in the grasps. Because the real life gripper does not execute perfect grasps, Robust Force Closure showed the strongest correlation between the grasp qualities it returned and the ground truth results.
Developed convex optimization programming experience. (cvxpy)