From af108e4b56c517e342e15c1137603229618f2a06 Mon Sep 17 00:00:00 2001
From: Florian Walch <florian.walch@franka.de>
Date: Wed, 21 Feb 2018 11:55:00 +0100
Subject: [PATCH] Revert "Remove gripper epsilon"

This reverts commit 0635e31d0634a80b68b11b3c3bb468bfb1af99a2.
---
 CHANGELOG.md                                     |  1 +
 franka_gripper/CMakeLists.txt                    |  5 +++++
 franka_gripper/action/Grasp.action               |  1 +
 franka_gripper/config/gripper_node_config.yaml   |  3 +++
 .../include/franka_gripper/franka_gripper.h      |  8 ++++++--
 franka_gripper/msg/GraspEpsilon.msg              |  2 ++
 franka_gripper/src/franka_gripper.cpp            |  7 +++++--
 franka_gripper/src/franka_gripper_node.cpp       | 16 ++++++++++++++--
 8 files changed, 37 insertions(+), 6 deletions(-)
 create mode 100644 franka_gripper/msg/GraspEpsilon.msg

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34cbc30..dc512e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
 Requires `libfranka` >= 0.3.0
 
   * **BREAKING** Changed signatures in `franka_hw::FrankaModelHandle`
+  * **BREAKING** Added epsilon parameters to `franka_gripper/Grasp` action
   * Added missing dependency to `panda_moveit_config`
   * Fixed linker errors when building with `-DFranka_DIR` while an older version of
     `ros-kinetic-libfranka` is installed
diff --git a/franka_gripper/CMakeLists.txt b/franka_gripper/CMakeLists.txt
index bdec200..3055ed4 100644
--- a/franka_gripper/CMakeLists.txt
+++ b/franka_gripper/CMakeLists.txt
@@ -24,6 +24,11 @@ add_action_files(
         Move.action
 )
 
+add_message_files(
+  DIRECTORY msg
+  FILES GraspEpsilon.msg
+)
+
 generate_messages(DEPENDENCIES actionlib_msgs)
 
 catkin_package(
diff --git a/franka_gripper/action/Grasp.action b/franka_gripper/action/Grasp.action
index 97fa832..a02b952 100644
--- a/franka_gripper/action/Grasp.action
+++ b/franka_gripper/action/Grasp.action
@@ -1,4 +1,5 @@
 float64 width    # [m]
+GraspEpsilon epsilon
 float64 speed    # [m/s]
 float64 force  # [N]
 ---
diff --git a/franka_gripper/config/gripper_node_config.yaml b/franka_gripper/config/gripper_node_config.yaml
index f7546fd..8799cbd 100644
--- a/franka_gripper/config/gripper_node_config.yaml
+++ b/franka_gripper/config/gripper_node_config.yaml
@@ -3,3 +3,6 @@ joint_names:
   - panda_finger_joint1
   - panda_finger_joint2
 default_speed: 0.1  # [m/s]
+default_grasp_epsilon:
+  inner: 0.005 # [m]
+  outer: 0.005 # [m]
\ No newline at end of file
diff --git a/franka_gripper/include/franka_gripper/franka_gripper.h b/franka_gripper/include/franka_gripper/franka_gripper.h
index 5b9d0b1..6828577 100644
--- a/franka_gripper/include/franka_gripper/franka_gripper.h
+++ b/franka_gripper/include/franka_gripper/franka_gripper.h
@@ -35,11 +35,13 @@ bool updateGripperState(const franka::Gripper& gripper, franka::GripperState* st
  *
  * @param[in] gripper A pointer to a franka gripper
  * @param[in] default_speed The default speed for a gripper action
+ * @param[in] grasp_epsilon The epsilon window of the grasp.
  * @param[in] action_server A pointer to a gripper action server
  * @param[in] goal A gripper action goal
  */
 void gripperCommandExecuteCallback(
     const franka::Gripper& gripper,
+    const GraspEpsilon& grasp_epsilon,
     double default_speed,
     actionlib::SimpleActionServer<control_msgs::GripperCommandAction>* action_server,
     const control_msgs::GripperCommandGoalConstPtr& goal);
@@ -75,9 +77,11 @@ bool stop(const franka::Gripper& gripper, const StopGoalConstPtr& /*goal*/);
 /**
  * Calls the libfranka grasp service of the gripper
  *
- * @param[in] gripper A gripper instance to execute the command
- * @param[in] goal A grasp goal with target width, velocity and effort
+ * An object is considered grasped if the distance \f$d\f$ between the gripper fingers satisfies
+ * \f$(\text{width} - \text{epsilon_inner}) < d < (\text{width} + \text{epsilon_outer})\f$.
  *
+ * @param[in] gripper A gripper instance to execute the command
+ * @param[in] goal A grasp goal with target width, epsilon_inner, epsilon_outer, velocity and effort
  * @return True if an object has been grasped, false otherwise.
  */
 bool grasp(const franka::Gripper& gripper, const GraspGoalConstPtr& goal);
diff --git a/franka_gripper/msg/GraspEpsilon.msg b/franka_gripper/msg/GraspEpsilon.msg
new file mode 100644
index 0000000..b750cf6
--- /dev/null
+++ b/franka_gripper/msg/GraspEpsilon.msg
@@ -0,0 +1,2 @@
+float64 inner # [m]
+float64 outer # [m]
diff --git a/franka_gripper/src/franka_gripper.cpp b/franka_gripper/src/franka_gripper.cpp
index 5f7ffc6..a58493d 100644
--- a/franka_gripper/src/franka_gripper.cpp
+++ b/franka_gripper/src/franka_gripper.cpp
@@ -29,6 +29,7 @@ bool updateGripperState(const franka::Gripper& gripper, franka::GripperState* st
 
 void gripperCommandExecuteCallback(
     const franka::Gripper& gripper,
+    const GraspEpsilon& grasp_epsilon,
     double default_speed,
     actionlib::SimpleActionServer<control_msgs::GripperCommandAction>* action_server,
     const control_msgs::GripperCommandGoalConstPtr& goal) {
@@ -42,7 +43,8 @@ void gripperCommandExecuteCallback(
     if (goal->command.position >= state.width) {
       return gripper.move(goal->command.position, default_speed);
     }
-    return gripper.grasp(goal->command.position, default_speed, goal->command.max_effort);
+    return gripper.grasp(goal->command.position, default_speed, goal->command.max_effort,
+                         grasp_epsilon.inner, grasp_epsilon.outer);
   };
 
   try {
@@ -77,7 +79,8 @@ bool stop(const franka::Gripper& gripper, const StopGoalConstPtr& /*goal*/) {
 }
 
 bool grasp(const franka::Gripper& gripper, const GraspGoalConstPtr& goal) {
-  return gripper.grasp(goal->width, goal->speed, goal->force);
+  return gripper.grasp(goal->width, goal->speed, goal->force, goal->epsilon.inner,
+                       goal->epsilon.outer);
 }
 
 }  // namespace franka_gripper
diff --git a/franka_gripper/src/franka_gripper_node.cpp b/franka_gripper/src/franka_gripper_node.cpp
index 31ed7c2..8b5b5ea 100644
--- a/franka_gripper/src/franka_gripper_node.cpp
+++ b/franka_gripper/src/franka_gripper_node.cpp
@@ -38,6 +38,7 @@ void handleErrors(actionlib::SimpleActionServer<T_action>* server,
 using actionlib::SimpleActionServer;
 using control_msgs::GripperCommandAction;
 using franka_gripper::GraspAction;
+using franka_gripper::GraspEpsilon;
 using franka_gripper::GraspGoalConstPtr;
 using franka_gripper::GraspResult;
 using franka_gripper::HomingAction;
@@ -70,6 +71,17 @@ int main(int argc, char** argv) {
     ROS_INFO_STREAM("franka_gripper_node: Found default_speed " << default_speed);
   }
 
+  GraspEpsilon default_grasp_epsilon;
+  default_grasp_epsilon.inner = 0.005;
+  default_grasp_epsilon.outer = 0.005;
+  std::map<std::string, double> epsilon_map;
+  if (node_handle.getParam("default_grasp_epsilon", epsilon_map)) {
+    ROS_INFO_STREAM("franka_gripper_node: Found default_grasp_epsilon "
+                    << "inner: " << epsilon_map["inner"] << ", outer: " << epsilon_map["outer"]);
+    default_grasp_epsilon.inner = epsilon_map["inner"];
+    default_grasp_epsilon.outer = epsilon_map["outer"];
+  }
+
   franka::Gripper gripper(robot_ip);
 
   std::function<bool(const HomingGoalConstPtr&)> homing_handler =
@@ -104,8 +116,8 @@ int main(int argc, char** argv) {
 
   SimpleActionServer<GripperCommandAction> gripper_command_action_server(
       node_handle, "gripper_action",
-      std::bind(&gripperCommandExecuteCallback, std::cref(gripper), default_speed,
-                &gripper_command_action_server, std::placeholders::_1),
+      std::bind(&gripperCommandExecuteCallback, std::cref(gripper), default_grasp_epsilon,
+                default_speed, &gripper_command_action_server, std::placeholders::_1),
       false);
 
   homing_action_server_.start();
-- 
GitLab