Mercurial > Kubik
changeset 123:241c09fc1364
Make home animation more elaborate. Add Leg.move_by.
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Tue, 08 Jul 2014 23:37:23 +0200 |
| parents | 7261169ff322 |
| children | 4aa7616a630e |
| files | creep.py kubik.py rotate.py squats.py wave.py |
| diffstat | 5 files changed, 67 insertions(+), 59 deletions(-) [+] |
line wrap: on
line diff
--- a/creep.py Tue Jul 08 20:52:32 2014 +0000 +++ b/creep.py Tue Jul 08 23:37:23 2014 +0200 @@ -48,6 +48,7 @@ if __name__ == '__main__': robot = kubik.Robot() + robot.home() delay = (2 * STRIDE / SPEED + 6) / 4 animations = [ swing(robot), @@ -56,5 +57,4 @@ creep(robot.legs[3], -1, delay * 2 + OVERLAP, robot), creep(robot.legs[2], -1, delay * 3 - OVERLAP, robot), ] - robot.home() robot.run_animations(animations, FPS)
--- a/kubik.py Tue Jul 08 20:52:32 2014 +0000 +++ b/kubik.py Tue Jul 08 23:37:23 2014 +0200 @@ -94,7 +94,7 @@ """Move the foot to the specified point. If any of the coordinates is None, no movement will be done in that - coordinate. + axis. """ position = list(position) for i, coord in enumerate(position): @@ -102,6 +102,12 @@ position[i] = self.position[i] self.position = position + def move_by(self, delta): + """Move the foot by the specified amount.""" + x, y, z = self.position + dx, dy, dz = delta + self.position = x + dx, y + dy, z + dz + def rotate(self, degrees): """Rotate the leg around the center of the body horizontally.""" radians = math.radians(degrees) @@ -149,26 +155,42 @@ False), ] - def home(self): + def _home(self): """Move all legs to their initial position.""" for leg in self.legs: - leg.move_to((30, -30 * leg.y_direction, -35)) + leg.move_to((None, None, 5)) + for i in range(4): + yield + leg.move_to((30, -30 * leg.y_direction, None)) + for i in range(4): + yield + leg.move_to((None, None, -34)) + for i in range(4): + yield + leg.move_to((None, None, -35)) + + def home(self): + self._run_animations([self._home()], 12) def update(self): for leg in self.legs: leg.update() + def _run_animations(self, animations, fps=12): + clock = pygame.time.Clock() + while animations: + for animation in list(animations): + try: + new = next(animation) + if new: + animations.extend(new) + except StopIteration: + animations.remove(animation) + self.update() + clock.tick(fps) + def run_animations(self, animations, fps=12): - clock = pygame.time.Clock() try: - while animations: - for animation in list(animations): - try: - next(animation) - except StopIteration: - animations.remove(animation) - self.update() - clock.tick(fps) + self._run_animations(animations, fps) finally: self.home() - self.update()
--- a/rotate.py Tue Jul 08 20:52:32 2014 +0000 +++ b/rotate.py Tue Jul 08 23:37:23 2014 +0200 @@ -1,5 +1,6 @@ import kubik + FPS = 12 @@ -12,14 +13,13 @@ yield - if __name__ == '__main__': robot = kubik.Robot() + robot.home() animations = [ rotate(robot.legs[0], 1), rotate(robot.legs[1], -1), rotate(robot.legs[2], 1), rotate(robot.legs[3], -1), ] - robot.home() robot.run_animations(animations, FPS)
--- a/squats.py Tue Jul 08 20:52:32 2014 +0000 +++ b/squats.py Tue Jul 08 23:37:23 2014 +0200 @@ -5,56 +5,42 @@ kinematics. """ -import time - import kubik -robot = kubik.Robot() -try: +def squats(robot): while True: for i in range(-35, -25): - time.sleep(0.0125) - robot.legs[0].move_to((20, 0, i)) - robot.legs[1].move_to((20, 0, i)) - robot.legs[2].move_to((20, 0, i)) - robot.legs[3].move_to((20, 0, i)) - robot.update() + for leg in robot.legs: + leg.move_to((20, 0, i)) + yield for i in range(-25, -35, -1): - time.sleep(0.0125) - robot.legs[0].move_to((20, 0, i)) - robot.legs[1].move_to((20, 0, i)) - robot.legs[2].move_to((20, 0, i)) - robot.legs[3].move_to((20, 0, i)) - robot.update() + for leg in robot.legs: + leg[0].move_to((20, 0, i)) + yield for i in range(0, 20): - time.sleep(0.0125) - 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)) - robot.update() + 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): - time.sleep(0.0125) - 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)) - robot.update() + 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): - time.sleep(0.0125) - robot.legs[0].move_to((20, i, -35)) - robot.legs[1].move_to((20, i, -35)) - robot.legs[2].move_to((20, i, -35)) - robot.legs[3].move_to((20, i, -35)) - robot.update() + for leg in robot.legs: + leg.move_to((20, i, -35)) + yield for i in range(20, 0, -1): - time.sleep(0.0125) - robot.legs[0].move_to((20, i, -35)) - robot.legs[1].move_to((20, i, -35)) - robot.legs[2].move_to((20, i, -35)) - robot.legs[3].move_to((20, i, -35)) - robot.update() -finally: + for leg in robot.legs: + leg.move_to((20, i, -35)) + yield + + +if __name__ == '__main__': + robot = kubik.Robot() robot.home() - + robot.run_animations([squats(robot)])
