Mercurial > Kubik
changeset 112:aef5b9624f2e
creep
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 02 Jul 2014 21:16:46 +0000 |
| parents | 8a8aadd7fdad |
| children | 5e4bc2c8fc59 |
| files | creep.py kubik.py |
| diffstat | 2 files changed, 60 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creep.py Wed Jul 02 21:16:46 2014 +0000 @@ -0,0 +1,43 @@ +import pygame +import kubik + + +def creep(leg, side, delay, robot): + for i in range(delay): + yield + while True: + for l1, l2 in zip(robot.legs[:2], robot.legs[2:]): + l1.move_to((30 + side * 15, None, None)) + l2.move_to((30 - side * 15, None, None)) + for i in range(4): + yield + leg.move_to((None, None, 10)) + for i in range(4): + yield + leg.move_to((None, 40, None)) + for i in range(4): + yield + leg.move_to((None, None, -30)) + for y in range(40, -40, -2): + leg.move_to((None, y, None)) + yield + + +if __name__ == '__main__': + pygame.mixer.init() + clock = pygame.time.Clock() + robot = kubik.Robot() + animations = [ + creep(robot.legs[0], 1, 0, robot), + creep(robot.legs[1], 1, 13, robot), + creep(robot.legs[2], -1, 39, robot), + creep(robot.legs[3], -1, 26, robot), + ] + robot.home() + try: + while True: + for animation in animations: + next(animation, None) + clock.tick(24) + finally: + robot.home()
--- a/kubik.py Wed Jul 02 19:14:27 2014 +0000 +++ b/kubik.py Wed Jul 02 21:16:46 2014 +0000 @@ -76,9 +76,20 @@ return hip, knee, ankle def move_to(self, position): - """Move the foot to the specified point.""" + """Move the foot to the specified point. + + If any of the coordinates is None, no movement will be done in that + coordinate. + """ + position = list(position) + for i, coord in enumerate(position): + if coord is None: + position[i] = self.position[i] self.position = position - hip, knee, ankle = self._inverse_kinematics(position) + self.update() + + def update(self): + hip, knee, ankle = self._inverse_kinematics(self.position) self.hip.move_degrees(hip) self.knee.move_degrees(knee) self.ankle.move_degrees(ankle) @@ -111,5 +122,7 @@ def home(self): """Move all legs to their initial position.""" - for leg in self.legs: - leg.move_to((30, 30, -35)) + self.legs[0].move_to((30, -30, -35)) + self.legs[1].move_to((30, 30, -35)) + self.legs[2].move_to((30, 30, -35)) + self.legs[3].move_to((30, -30, -35))
