From: Erik Andresen <erik@vontaene.de>
Date: Tue, 27 Oct 2015 21:20:09 +0000 (+0100)
Subject: added grippercommandaction
X-Git-Url: https://defiant.homedns.org/gitweb/?a=commitdiff_plain;h=8cc083dee1a27ec7e223d60380067b39411bfc8c;p=arm_ros_conn.git

added grippercommandaction
---

diff --git a/scripts/arm_ros_conn.py b/scripts/arm_ros_conn.py
index c6e3895..4011356 100755
--- a/scripts/arm_ros_conn.py
+++ b/scripts/arm_ros_conn.py
@@ -8,7 +8,7 @@ import actionlib
 import numpy as np
 from sensor_msgs.msg import JointState
 from control_msgs.msg import FollowJointTrajectoryAction, FollowJointTrajectoryActionResult, FollowJointTrajectoryActionFeedback, FollowJointTrajectoryResult
-from control_msgs.msg import GripperCommandAction
+from control_msgs.msg import GripperCommandAction, GripperCommandActionResult, GripperCommandFeedback
 from actionlib_msgs.msg import GoalStatus
 from time import sleep
 from math import *
@@ -19,6 +19,8 @@ lJointNames = ["arm_base_to_link1", "link_1_2_joint", "link_2_3_joint", "link_3_
 class ARMRosConn():
 	_feedback = FollowJointTrajectoryActionFeedback()
 	_result = FollowJointTrajectoryActionResult()
+	_gripper_feedback = GripperCommandFeedback()
+	_gripper_result = GripperCommandActionResult()
 
 	def __init__(self):
 		rospy.init_node('arm')
@@ -49,8 +51,8 @@ class ARMRosConn():
 		joint_state = JointState()
 		joint_state.header.stamp = rospy.Time.now()
 		joint_state.name = lJointNames
-		self.lAngles = [-arm.get_angle(0), arm.get_angle(1), -arm.get_angle(2), -arm.get_angle(3), arm.get_angle(4), arm.get_angle(5)]
-		joint_state.position = self.lAngles[:-1] + [0.175-self.lAngles[-1]/2, 0.175-self.lAngles[-1]/2]
+		self.lAngles = [-arm.get_angle(0), arm.get_angle(1), -arm.get_angle(2), -arm.get_angle(3), arm.get_angle(4), 0.35-arm.get_angle(5)]
+		joint_state.position = self.lAngles[:-1] + [self.lAngles[-1], self.lAngles[-1]]
 		self.pub_joint_states.publish(joint_state)
 
 	def execute_joint_trajectory(self, goal):
@@ -82,7 +84,8 @@ class ARMRosConn():
 			while True:
 				error = np.array(lGoalPosOrdered) - np.array(self.lAngles[:-1])
 				print "Error", error
-				if all(f < 0.02 for f in error):
+				if all(abs(f) < 0.02 for f in error):
+					print "Position reached"
 					break
 
 				if self._as_arm.is_preempt_requested():
@@ -100,7 +103,25 @@ class ARMRosConn():
 
 
 	def execute_gripper_action(self, goal):
-		print goal
+		arm.to_angle(5, self.speed, 0.35-goal.command.position)
+		while True:
+			error = goal.command.position - self.lAngles[-1]
+			if abs(error) < 0.02:
+				break
+
+			self._gripper_feedback.position = self.lAngles[-1]
+			self._gripper_feedback.stalled = False
+			self._gripper_feedback.reached_goal = False
+
+			if self._as_gripper.is_preempt_requested():
+				self._as_gripper.set_preempted()
+				break
+			sleep(0.001)
+		self._gripper_result.status = GoalStatus.SUCCEEDED
+		self._gripper_result.result.position = goal.command.position
+		self._gripper_result.result.stalled = False
+		self._gripper_result.result.reached_goal = True
+		self._as_gripper.set_succeeded(self._gripper_result.result)
 
 if __name__ == '__main__':
 	ARMRosConn()