Mercurial > Kubik
changeset 131:6617b34e4047
robot.shift
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 09 Jul 2014 21:29:58 +0000 |
| parents | b10c6eaed9e2 |
| children | afaac497dfe7 |
| files | creep.py kubik.py rotate.py squats.py |
| diffstat | 4 files changed, 68 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/creep.py Wed Jul 09 19:10:11 2014 +0000 +++ b/creep.py Wed Jul 09 21:29:58 2014 +0000 @@ -8,25 +8,23 @@ HEIGHT = -35 STEP = -5 OVERLAP = 1 -FPS = 24 +FPS = 6 def swing(robot): + for i in range(delay): + yield pause = STRIDE / SPEED + 3 - SWING * 2 / SWING_SPEED while True: for i in range(pause): yield for i in range(-SWING, SWING, SWING_SPEED): - for l1, l2 in zip(robot.legs[:2], robot.legs[2:]): - l1.move_to((SPREAD - i, None, None)) - l2.move_to((SPREAD + i, None, None)) + robot.shift = [-i, 0, 0] yield for i in range(pause): yield for i in range(SWING, -SWING, -SWING_SPEED): - for l1, l2 in zip(robot.legs[:2], robot.legs[2:]): - l1.move_to((SPREAD - i, None, None)) - l2.move_to((SPREAD + i, None, None)) + robot.shift = [-i, 0, 0] yield
--- a/kubik.py Wed Jul 09 19:10:11 2014 +0000 +++ b/kubik.py Wed Jul 09 21:29:58 2014 +0000 @@ -119,8 +119,10 @@ ry = r * math.cos(a + radians) - self.base[1] self.move_to((rx, ry * self.y_direction, None)) - def update(self): - hip, knee, ankle = self._inverse_kinematics(self.position) + def update(self, shift): + dx, dy, dz = shift + x, y, z = self.position + hip, knee, ankle = self._inverse_kinematics((x + dx, y + dy, z + dz)) self.hip.move_degrees(hip) self.knee.move_degrees(knee) self.ankle.move_degrees(ankle) @@ -150,29 +152,47 @@ AnkleServo2(m, 9, reverse=True, trim=100, center=1500 * 4), False), ] + self.shift = [0.0, 0.0, 0.0] + + def shift_by(self, (dx, dy, dz), reverse=False): + if reverse: + dx, dy, dz = -dx, -dy, -dz + self.shift[0] += dx + self.shift[1] += dy + self.shift[2] += dz def _home(self): """Move all legs to their initial position.""" - for leg in self.legs: + shifts = [ + (2, -2, 0), + (2, 2, 0), + (-2, 2, 0), + (-2, -2, 0), + ] + for leg, shift in zip(self.legs, shifts): x, y, z = leg.position if (x, y) != (30, 30 * leg.y_direction): + self.shift = shift leg.move_to((None, None, 5)) - for i in range(4): + for i in range(2): yield leg.move_to((30, 30 * leg.y_direction, None)) - for i in range(4): + for i in range(2): yield leg.move_to((None, None, -34)) for i in range(4): yield leg.move_to((None, None, -35)) + self.shift = [0, 0, 0] def home(self): - self._run_animations([self._home()], 12) + self._run_animations([self._home()], 40) def update(self): - for leg in self.legs: - leg.update() + x, y, z = self.shift + for leg_left, leg_right in zip(self.legs[:2], self.legs[2:]): + leg_left.update((x, y, z)) + leg_right.update((-x, y, z)) def _run_animations(self, animations, fps=12): clock = pygame.time.Clock()
--- a/rotate.py Wed Jul 09 19:10:11 2014 +0000 +++ b/rotate.py Wed Jul 09 21:29:58 2014 +0000 @@ -1,41 +1,36 @@ import kubik +STRIDE = 10 +SPEED = 1 +SWING = 18 +SWING_SPEED = 3 STEP = -10 -STRIDE = 20 -SWING = 12 -SWING_SPEED = 4 -SPEED = 1 HEIGHT = -35 -OVERLAP = 2 +OVERLAP = 1 FPS = 12 -def swing(robot): +def swing(robot, (dx, dy), delay=0): + for i in range(delay): + yield pause = STRIDE / SPEED + 3 - SWING * 2 / SWING_SPEED first = True while True: - if first: - start = SWING_SPEED; - first = False - for i in range(0, SWING, SWING_SPEED): - yield - else: - start = -SWING for i in range(pause): yield - for i in range(start, SWING, SWING_SPEED): - for l1, l2 in zip(robot.legs[:2], robot.legs[2:]): - l1.move_by((-SWING_SPEED, 0, 0)) - l2.move_by((SWING_SPEED, 0, 0)) + for i in range(-SWING, SWING, SWING_SPEED): + if not first or i >= 0: + robot.shift_by((dx * SWING_SPEED, dy * SWING_SPEED, 0)) yield for i in range(pause): yield for i in range(SWING, -SWING, -SWING_SPEED): - for l1, l2 in zip(robot.legs[:2], robot.legs[2:]): - l1.move_by((SWING_SPEED, 0, 0)) - l2.move_by((-SWING_SPEED, 0, 0)) + robot.shift_by((-dx * SWING_SPEED, -dy * SWING_SPEED, 0)) yield + if first: + first = False + def rotate(leg, side, delay): @@ -65,7 +60,8 @@ robot.home() delay = (2 * STRIDE / SPEED + 6) / 4 animations = [ - swing(robot), + swing(robot, (-1, 0), 0 * delay), +# swing(robot, (0, 1), 1 * delay), rotate(robot.legs[0], 1, 0 * delay + OVERLAP), rotate(robot.legs[1], -1, 1 * delay - OVERLAP), rotate(robot.legs[3], -1, 2 * delay + OVERLAP),
--- a/squats.py Wed Jul 09 19:10:11 2014 +0000 +++ b/squats.py Wed Jul 09 21:29:58 2014 +0000 @@ -9,35 +9,24 @@ def squats(robot): - while True: - for i in range(-35, -25): - for leg in robot.legs: - leg.move_to((20, 0, i)) - yield - for i in range(-25, -35, -1): - for leg in robot.legs: - leg.move_to((20, 0, i)) - yield - for i in range(0, 20): - robot.legs[0].move_to((20 - i, 0, -35)) - robot.legs[1].move_to((20 - i, 0, -35)) - robot.legs[2].move_to((20 + i, 0, -35)) - robot.legs[3].move_to((20 + i, 0, -35)) - yield - for i in range(20, 0, -1): - robot.legs[0].move_to((20 - i, 0, -35)) - robot.legs[1].move_to((20 - i, 0, -35)) - robot.legs[2].move_to((20 + i, 0, -35)) - robot.legs[3].move_to((20 + i, 0, -35)) - yield - for i in range(0, 20): - for leg in robot.legs: - leg.move_to((20, i, -35)) - yield - for i in range(20, 0, -1): - for leg in robot.legs: - leg.move_to((20, i, -35)) - yield + for i in range(0, 10): + robot.shift[2] = i + yield + for i in range(10, 0, -1): + robot.shift[2] = i + yield + for i in range(0, 20): + robot.shift[0] = i + yield + for i in range(20, 0, -1): + robot.shift[0] = i + yield + for i in range(0, 20): + robot.shift[1] = i + yield + for i in range(20, 0, -1): + robot.shift[1] = i + yield if __name__ == '__main__':
