blob: 9feba80f6f71fe27ec78dd48243b623033c0b0a6 [file] [log] [blame]
 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import sys import time from touchbotII import Touchbot, Device """ This is a gesture that places one finger in a fixed point on the pad and then taps a number of times around it with a second finger. This gesture only takes a location for the stationary finger and a device description. Arguments: device.p stationary_x stationary_y Example: To tap in the center of the pad python sationary_finger_with_taps_around_it.py link.py 0.5 0.5 """ NUM_TAPS = 50 FINGER_DISTANCE = 20 YAW_SAFETY_BUFFER = 10 try: device = Device(sys.argv[1]) stationary_x, stationary_y = (float(sys.argv[2]), float(sys.argv[3])) except: print ('Usage: python %s device.p stationary_x stationary_y' % __file__) print 'Example: python %s link.p 0.5 0.5' % __file__ sys.exit(-1) bot = Touchbot() bot.SetSpeed(bot.SPEED_MEDIUM) bot.SetFingerStates([0, 0, 0, 0]) if not bot.IsLegalRelativeCoordinate((stationary_x, stationary_y)): print ('Coordinates must fall in the range of %s' % str(Touchbot.RELATIVE_COORDINATE_RANGE)) sys.exit(-1) # Compute the extreme wrist angles that the robot can do at this position start_pos = device.RelativePosToAbsolutePos((stationary_x, stationary_y)) bot.SetCartesian(start_pos, blocking=True) min_yaw, max_yaw = bot.NonBindingYawRange(safety_buffer=YAW_SAFETY_BUFFER) # Nudge the wrist into position to make sure it's on the right side pos = bot.GetCurrentPosition() pos.ax_4 = bot.AX_4_MAX bot.SetAngles(pos, blocking=True) # Calculate the positions, and move to them for i in range(NUM_TAPS): abs_pos = device.RelativePosToAbsolutePos((stationary_x, stationary_y)) abs_pos.yaw = (float(NUM_TAPS - i) / float(NUM_TAPS) * (max_yaw - min_yaw) + min_yaw) abs_pos = bot.CenterIfSingleFinger([1, 0, 0, 0], abs_pos, FINGER_DISTANCE) # Move into position and tap the second finger bot.SetCartesian(abs_pos, FINGER_DISTANCE, blocking=True) bot.SetFingerStates([1, 1, 0, 0]) time.sleep(bot.MINIMUM_FINGER_EXTENSION_TIME) bot.SetFingerStates([1, 0, 0, 0]) #Lift all fingers before finishing bot.SetFingerStates([0, 0, 0, 0])