From ca9caa29233bda12dd2cfa77fe90e93aad47ba09 Mon Sep 17 00:00:00 2001
From: Stuart Glaser <sglaser@willowgarage.com>
Date: Tue, 27 Mar 2012 17:18:33 -0700
Subject: [PATCH] Some attempts at computing a good blend radius

---
 ur5_driver/driver.py    | 27 +++++++++++++++++++++++++--
 ur5_driver/test_move.py |  4 ++--
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/ur5_driver/driver.py b/ur5_driver/driver.py
index d350e93..fcfb88c 100755
--- a/ur5_driver/driver.py
+++ b/ur5_driver/driver.py
@@ -180,6 +180,26 @@ def reorder_traj_joints(traj, joint_names):
     traj.joint_names = joint_names
     traj.points = new_points
 
+MAX_BLEND = 0.1
+# Determines a blend for the given point that doesn't overlap with its neighbors.
+def compute_blend(traj, index):
+    # The first and last points have nothing to blend with.
+    if index == 0 or index == len(traj.points) - 1:
+        return 0.0
+
+    return 0.01
+
+    # The blend can take up to half the distance to the previous or
+    # next point.
+    min_diff = MAX_BLEND
+    q = traj.points[index].positions
+    qbefore = traj.points[index-1].positions
+    qafter = traj.points[index+1].positions
+    for j in range(len(traj.joint_names)):
+        min_diff = min(min_diff, abs(q[j] - qbefore[j]) / 2.0)
+        min_diff = min(min_diff, abs(q[j] - qafter[j]) / 2.0)
+    return min_diff
+
 class UR5TrajectoryFollower(object):
     def __init__(self, robot):
         self.robot = robot
@@ -230,7 +250,8 @@ class UR5TrajectoryFollower(object):
             self.robot.send_movej(self.first_waypoint_id, traj.points[0].positions,
                                   t=get_segment_duration(traj, 0))
             self.robot.send_movej(self.first_waypoint_id + 1, traj.points[1].positions,
-                                  t=get_segment_duration(traj, 1))
+                                  t=get_segment_duration(traj, 1),
+                                  r=compute_blend(traj, 1))
             self.tracking_i = 0
             self.pending_i = 1
 
@@ -277,7 +298,9 @@ class UR5TrajectoryFollower(object):
                 self.pending_i += 1
                 self.robot.send_movej(self.first_waypoint_id + self.pending_i,
                                       traj.points[self.pending_i].positions,
-                                      t=get_segment_duration(traj, self.pending_i))
+                                      t=get_segment_duration(traj, self.pending_i),
+                                      r=compute_blend(traj, self.pending_i))
+                print "New blend radius:", compute_blend(traj, self.pending_i)
 
 
 sock = None
diff --git a/ur5_driver/test_move.py b/ur5_driver/test_move.py
index e0364b7..cc0d582 100755
--- a/ur5_driver/test_move.py
+++ b/ur5_driver/test_move.py
@@ -96,9 +96,9 @@ def main():
         client.wait_for_server()
         print "Connected to server"
         #move1()
-        #move_repeated()
+        move_repeated()
         #move_disordered()
-        move_interrupt()
+        #move_interrupt()
     except KeyboardInterrupt:
         rospy.signal_shutdown("KeyboardInterrupt")
         raise
-- 
GitLab