diff --git a/include/grasp_util.h b/include/grasp_util.h index 1403f64d74fe93f9fcc654c2b81814167aec4b14..9f714b36997fa96f6174f807c2c79439b331cb72 100644 --- a/include/grasp_util.h +++ b/include/grasp_util.h @@ -72,7 +72,7 @@ public: * @return */ geometry_msgs::Pose - getPickFromBack(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); + getPickFromBack(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); /** * @@ -83,7 +83,7 @@ public: * @return */ geometry_msgs::Pose - getPickFromFront(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); + getPickFromFront(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); /** * * @param object_pose_msg @@ -93,7 +93,7 @@ public: * @return */ geometry_msgs::Pose - getPickFromLeft(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); + getPickFromLeft(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); /** * @@ -104,7 +104,7 @@ public: * @return */ geometry_msgs::Pose - getPickFromRight(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); + getPickFromRight(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); /** * Util method to pick an object from above. @@ -182,7 +182,7 @@ private: * @return */ geometry_msgs::Pose - getPickFromSidePose(geometry_msgs::Pose &object_to_pick_pose, geometry_msgs::Quaternion gripper_orientation, + getPickFromSidePose(geometry_msgs::Pose &object_to_pick_pose, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation, tf2::Quaternion approach_orientation, float y_distance_diff, float x_distance_diff, double reach = FRANKA_GRIPPER_FINGERTIP_SIZE / 2); }; diff --git a/src/grasping/grasp_util.cpp b/src/grasping/grasp_util.cpp index 4698c3dc0902cc0680f1890f57e0987cb2f905f4..1d03c2f39b64a6714f345555259b7b8e1a16286f 100644 --- a/src/grasping/grasp_util.cpp +++ b/src/grasping/grasp_util.cpp @@ -31,7 +31,7 @@ void GraspUtil::setupClosedGripper(trajectory_msgs::JointTrajectory &posture, do } geometry_msgs::Pose -GraspUtil::getPickFromBack(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ +GraspUtil::getPickFromBack(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ double approach_roll, approach_pitch, approach_yaw; approach_roll = -M_PI_2; @@ -40,12 +40,12 @@ GraspUtil::getPickFromBack(geometry_msgs::Pose &object_pose_msg, geometry_msgs:: tf2::Quaternion approach_orientation; approach_orientation.setRPY(approach_roll, approach_pitch, approach_yaw); - return getPickFromSidePose(object_pose_msg, gripper_orientation_msg, + return getPickFromSidePose(object_pose_msg, dimensions, gripper_orientation_msg, approach_orientation, 0, -0.1, reach); } geometry_msgs::Pose -GraspUtil::getPickFromFront(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ +GraspUtil::getPickFromFront(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ double approach_roll, approach_pitch, approach_yaw; approach_roll = M_PI_2; @@ -54,12 +54,12 @@ GraspUtil::getPickFromFront(geometry_msgs::Pose &object_pose_msg, geometry_msgs: tf2::Quaternion approach_orientation; approach_orientation.setRPY(approach_roll, approach_pitch, approach_yaw); - return getPickFromSidePose(object_pose_msg, gripper_orientation_msg, + return getPickFromSidePose(object_pose_msg, dimensions, gripper_orientation_msg, approach_orientation, 0, 0.1, reach); } geometry_msgs::Pose -GraspUtil::getPickFromLeft(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ +GraspUtil::getPickFromLeft(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ double approach_roll, approach_pitch, approach_yaw; approach_roll = M_PI_2; @@ -68,12 +68,12 @@ GraspUtil::getPickFromLeft(geometry_msgs::Pose &object_pose_msg, geometry_msgs:: tf2::Quaternion approach_orientation; approach_orientation.setRPY(approach_roll, approach_pitch, approach_yaw); - return getPickFromSidePose(object_pose_msg, gripper_orientation_msg, + return getPickFromSidePose(object_pose_msg, dimensions, gripper_orientation_msg, approach_orientation, -0.1, 0, reach); } geometry_msgs::Pose -GraspUtil::getPickFromRight(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ +GraspUtil::getPickFromRight(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, double reach){ double approach_roll, approach_pitch, approach_yaw; approach_roll = -M_PI_2; @@ -82,12 +82,12 @@ GraspUtil::getPickFromRight(geometry_msgs::Pose &object_pose_msg, geometry_msgs: tf2::Quaternion approach_orientation; approach_orientation.setRPY(approach_roll, approach_pitch, approach_yaw); - return getPickFromSidePose(object_pose_msg, gripper_orientation_msg, + return getPickFromSidePose(object_pose_msg, dimensions, gripper_orientation_msg, approach_orientation, 0.1, 0, reach); } geometry_msgs::Pose -GraspUtil::getPickFromSidePose(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Quaternion gripper_orientation_msg, +GraspUtil::getPickFromSidePose(geometry_msgs::Pose &object_pose_msg, geometry_msgs::Vector3 dimensions, geometry_msgs::Quaternion gripper_orientation_msg, tf2::Quaternion approach_orientation, float y_distance_diff, float x_distance_diff, double reach){ // object orientation @@ -103,6 +103,23 @@ GraspUtil::getPickFromSidePose(geometry_msgs::Pose &object_pose_msg, geometry_ms target_pose.orientation = tf2::toMsg(orientation); target_pose.position.x = object_pose_msg.position.x + x_distance_diff; target_pose.position.y = object_pose_msg.position.y + y_distance_diff; + + if(x_distance_diff > 0){ + target_pose.position.x = object_pose_msg.position.x + (0.5 * dimensions.x) + FRANKA_GRIPPER_DISTANCE - reach; + } + + if(x_distance_diff < 0){ + target_pose.position.x = object_pose_msg.position.x - (0.5 * dimensions.x) - FRANKA_GRIPPER_DISTANCE + reach; + } + + if(y_distance_diff > 0){ + target_pose.position.y = object_pose_msg.position.y + (0.5 * dimensions.y) + FRANKA_GRIPPER_DISTANCE - reach; + } + + if(y_distance_diff < 0){ + target_pose.position.y = object_pose_msg.position.y - (0.5 * dimensions.y) - FRANKA_GRIPPER_DISTANCE + reach; + } + target_pose.position.z = object_pose_msg.position.z; return target_pose; diff --git a/test/grasp_from_side_test.cpp b/test/grasp_from_side_test.cpp index be86834da795ed0893341a99d0dfc54dd7d97d84..aff90ba38fdc76900ae8de0bf645183daa8b3794 100644 --- a/test/grasp_from_side_test.cpp +++ b/test/grasp_from_side_test.cpp @@ -27,6 +27,8 @@ protected: tf2::Quaternion gripper_orientation; tf2::Quaternion place_orientation; + geometry_msgs::Vector3 dimensions; + void SetUp() override { ros::NodeHandle n("panda_grasping"); @@ -34,6 +36,9 @@ protected: gripper_orientation.setRPY(0, 0, -M_PI_4); place_pose.position.z = 0.4 + 0.05; // table height + object height / 2 + buffer place_orientation.setRPY(0, 0, M_PI / 2); + dimensions.x = 0.05; + dimensions.y = 0.05; + dimensions.z = 0.1; CleanupScene(); } @@ -90,9 +95,9 @@ protected: collision_objects[2].primitives.resize(1); collision_objects[2].primitives[0].type = collision_objects[1].primitives[0].BOX; collision_objects[2].primitives[0].dimensions.resize(3); - collision_objects[2].primitives[0].dimensions[0] = 0.05; - collision_objects[2].primitives[0].dimensions[1] = 0.05; - collision_objects[2].primitives[0].dimensions[2] = 0.1; + collision_objects[2].primitives[0].dimensions[0] = dimensions.x; + collision_objects[2].primitives[0].dimensions[1] = dimensions.y; + collision_objects[2].primitives[0].dimensions[2] = dimensions.z; collision_objects[2].primitive_poses.resize(1); collision_objects[2].primitive_poses[0] = obj_pose; collision_objects[2].operation = collision_objects[2].ADD; @@ -108,8 +113,8 @@ protected: shape_msgs::SolidPrimitive object; object.type = shape_msgs::SolidPrimitive::CYLINDER; object.dimensions.resize(2); - object.dimensions[0] = 0.2; - object.dimensions[1] = 0.008; + object.dimensions[0] = dimensions.x; + object.dimensions[1] = dimensions.y; GraspUtil grasp_util; @@ -152,7 +157,7 @@ TEST_F(Grasping, SIDE_GRASPING_1) { geometry_msgs::Vector3 approach_direction; approach_direction.x = 1; - geometry_msgs::Pose pick_pose = grasp_util.getPickFromBack(obj_pose, tf2::toMsg(gripper_orientation)); + geometry_msgs::Pose pick_pose = grasp_util.getPickFromBack(obj_pose, dimensions, tf2::toMsg(gripper_orientation)); doTest(pick_pose, pick_table_pose, place_table_pose, obj_pose, place_pose, approach_direction); } @@ -183,7 +188,7 @@ TEST_F(Grasping, SIDE_GRASPING_2) { geometry_msgs::Vector3 approach_direction; approach_direction.x = -1; - geometry_msgs::Pose pick_pose = grasp_util.getPickFromFront(obj_pose, tf2::toMsg(gripper_orientation)); + geometry_msgs::Pose pick_pose = grasp_util.getPickFromFront(obj_pose, dimensions, tf2::toMsg(gripper_orientation)); doTest(pick_pose, pick_table_pose, place_table_pose, obj_pose, place_pose, approach_direction); } @@ -214,7 +219,7 @@ TEST_F(Grasping, SIDE_GRASPING_3) { geometry_msgs::Vector3 approach_direction; approach_direction.y = +1; - geometry_msgs::Pose pick_pose = grasp_util.getPickFromLeft(obj_pose, tf2::toMsg(gripper_orientation)); + geometry_msgs::Pose pick_pose = grasp_util.getPickFromLeft(obj_pose, dimensions, tf2::toMsg(gripper_orientation)); doTest(pick_pose, pick_table_pose, place_table_pose, obj_pose, place_pose, approach_direction); } @@ -245,7 +250,7 @@ TEST_F(Grasping, SIDE_GRASPING_4) { geometry_msgs::Vector3 approach_direction; approach_direction.y = -1; - geometry_msgs::Pose pick_pose = grasp_util.getPickFromRight(obj_pose, tf2::toMsg(gripper_orientation)); + geometry_msgs::Pose pick_pose = grasp_util.getPickFromRight(obj_pose, dimensions, tf2::toMsg(gripper_orientation)); doTest(pick_pose, pick_table_pose, place_table_pose, obj_pose, place_pose, approach_direction); }