The idea is to develop an approach such that a robot can look at an object on a table, decide where to grasp the object, reach there without colliding with itself, the table or the objects on the table, and successfully grasp the object.
First of all, the iCub looks at a table and decides where to grasp the object. If there is more than one object on the table, we restrict the window to one object otherwise it'll simply choose the best point for grasping amongst all the objects.
Then a time of flight camera is used to determine the height, orientation and location of each of the objects on the table. This information is used for determining the 3D location of the point selected by the first module by ray casting and for obstacle avoidance during trajectory planning.
As the iCub with 53 degrees of freedom is an extremely complex robot, we solved the reaching problem for a simulated simpler version of the iCub using techniques very similar to Expectation Propagation and then mapped the trajectory generated on to the real iCub.
Then once it has reached the target, the iCub tries to grasp the object.
The grasp is tested by lifting the object.
This complex project was broken down into six modules. I developed the algorithm for two of these modules.
All in all, I implemented 4 modules, supervised a summer intern for implementing a fifth and was responsible for the overall integration of the project.
Collision Avoidance: The video below is a compilation of two videos. In the first part, one can see that the iCub avoids the table and grasps the object hanging by the string. In the second part, the iCub tilts its left hand a bit to avoid collision with the table.