ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

The pose of the grasps in the database should be saved in the reference frame of the object - that is, relative to the origin of the 3D model (the mesh) of the object.

At run-time however, the manipulation pipeline does not know if the reference frame of the object is actually available in TF. It seems like it is in your system, but htat is not generally the case. Therefore, when you query the objects database node and ask for grasps for the object, it will also look where the object is in relation to a TF frame (this information is contained in the GraspableObject you are passing to the GetGrasps callback). It will then give you back the grasps transformed to the same reference frame that the object is in.

For example: let's say that object recognition gives you the object at location T1 w.r.t. the "base_link" frame. Let's say that in the database you have a grasp stored at location G1 relative to the object. When you get the grasps from the database, the objects_database_node will give you back a grasp expressed in the "base_link" frame, and its pose will be T1 * G1.

There are a few ways in which you can get the desired behavior. Since there seems to be some node in your system publishing an "object_frame" to TF, you could simply ask for grasps for a GraspableObject with a DatabaseModel with an identity pose relative to the "object_frame".