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])