Mercurial > ukubik
changeset 74:5221e4f69437
Picking detection
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 10 Sep 2014 21:50:01 +0200 |
| parents | d944b23935e4 |
| children | d89650206f92 |
| files | wiggle.py |
| diffstat | 1 files changed, 29 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/wiggle.py Wed Sep 10 21:23:01 2014 +0200 +++ b/wiggle.py Wed Sep 10 21:50:01 2014 +0200 @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import random +import math import serial import kubik @@ -10,32 +10,44 @@ FPS = 6 -def wiggle(robot): - while True: - for leg in robot.legs: - leg.move_to(( - leg.home[0] + random.randint(-30, 10), - leg.home[1] + random.randint(-30, 10), - leg.home[2] + random.randint(-40, 20), - )) - for wait in range(3): - yield; def watch(robot): state = 0 + count = 0 avg_accel, min_accel, max_accel = robot.get_accel() while True: - wiggler = wiggle(robot) avg_accel, min_accel, max_accel = robot.get_accel() - print avg_accel, min_accel, max_accel - print state + total_avg_accel = math.sqrt(sum(a**2 for a in avg_accel)) + if total_avg_accel > 30: + pick = 1 + elif total_avg_accel < 25: + pick = -1 + else: + pick = 0 + print pick, state if state == 0: - if max_accel[2] > 30 and min_accel[2] < 24: + if pick == 1: state = 1 + for leg in robot.legs: + leg.move_to((40, -40 * leg.y_dir, 20)); elif state == 1: - next(wiggler) - if max_accel[2] < 28 and min_accel[2] > 26: + if pick == 0: + count += 1 + else: + count -= 1 + if count > 10: + state = 2 + count = 0 + elif state == 2: + for leg in robot.legs: + leg.move_to(leg.home); + state = 3 + count = 0 + elif state == 3: + count += 1 + if count > 10: state = 0 + count = 0 yield
