Closed hauff closed 4 years ago
Thanks for your suggestion. That filter was written for a specific case and reference frame. I'm happy to change it if desired ...
@hauff @atenpas do you mean this kind of issue, could be resolved with that fix?
@saikishor
If you mean the grasp starting below the table surface ... my answer would be:
Yes, I think the fix should resolve it.
@hauff I think we should make a PR with this fix. I don't know if @atenpas has the time to take a look ober the other PR's
@hauff thanks for the confirmation :+1:
@saikishor, @atenpas as you suggested, I created a (hopefully correct) PR.
Maybe it will help. :-)
In this case, aren't you using the angle parameter? Why? @hauff
@saikishor I didn't use the angle because I did not want to disallow a specific approach direction. (like parallel to table surface)
But if I look at your examples, then I see that I missed something. Maybe it is necessary to check weather the GraspBottom is also below the table.
There is a chance that I might have missed something else ?
I think you have missed something. Because still I have the similar issue.
In the second image it is hard to see. Are there GraspBottom's (or fingertip's) below the table?
@hauff They are grasp bottoms. Sorry for the unclear image.
I guess just replacing i
by j
does the trick. Below are the results.
moreover, i guess the angle should be greater than anglethreshold, else you will have all the grasp directions below it, thereby more collisions.
Do you filter the cloud before using the GPD package? It looks to me as if the table is not present in the cloud you give to GPD.
Yes the table is not present in the cloud I give to the GPD. I only pass the table top cloud.
Ah now I understand. I am pretty sure that is the reason why you get grasps starting below the table with an approach vector pointing upwards.
I did not preprocess the cloud myself, instead I used this method from GPD.
void GraspDetector::preprocessPointCloud(CloudCamera& cloud_cam)
{
candidates_generator_->preprocessPointCloud(cloud_cam);
}
Example:
Eigen::Matrix3Xd view_points(3, 1);
view_points.col(0) = view_point;
CloudCamera cloud_camera(cloud_ptr, 0, view_points);
grasp_detector.preprocessPointCloud(cloud_camera);
grasps = grasp_detector.detectGrasps(cloud_camera);
Should also work, if you launch a tutorial.
@hauff but how does it change a lot. He is also processing the point cloud and removing the layers until the table.
There might be a bug in branch forward.
j
instead ofi
in the inner loop.angle < angle_thresh_
instead ofangle > angle_thresh_
.dist
in the following way?double dist = fabs(hands[j].getGraspTop().z() - table_height_);
Maybe to check if one side of the gripper is under the table helps with detecting side grasps.