Mercurial > Kubik
changeset 139:03e30dd7c34e
joy
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 19 Jul 2014 12:19:03 +0200 |
| parents | 49d2e68a50b3 |
| children | e7adf29e5d6d |
| files | control.py kubik.py rotate.py |
| diffstat | 3 files changed, 60 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/control.py Fri Jul 18 08:34:27 2014 +0200 +++ b/control.py Sat Jul 19 12:19:03 2014 +0200 @@ -3,7 +3,7 @@ import kubik -FPS = 12 +FPS = 24 class Walk(object): @@ -13,9 +13,11 @@ self.rotation = 0.0 self.stride = 35 self.shift_speed = 3 - self.shift_steps = 4 - self.down = -55 - self.up = -20 + self.shift_steps = 0 + self.down = -35 + self.up = 10 + self.shifted = 0, 0 + self.posture = 20 self.legs = [ (self.robot.legs[0], (1, -1), 1, (55, -55)), (self.robot.legs[1], (1, 1), 1, (55, 55)), @@ -25,6 +27,8 @@ self.on_floor = set((leg, side) for leg, shift, side, home in self.legs) self.blip = pygame.mixer.Sound('sound/blip.wav') + self.blop = pygame.mixer.Sound('sound/blop.wav') + self.boop = pygame.mixer.Sound('sound/boop.wav') def _retract_leg(self, step): dx, dy = self.speed @@ -41,14 +45,22 @@ def _raise_leg(self, leg, side): leg.move_to((None, None, self.up)) self.on_floor.remove((leg, side)) - self.blip.play() + if self.rotation: + self.blop.play() + elif self.speed != [0, 0]: + self.blip.play() + else: + self.boop.play() def _advance_leg(self, leg, side, home): dx, dy = self.speed + posture = ( + (abs(dx) - abs(dy)) * self.posture, + (abs(dy) - abs(dx)) * self.posture * leg.y_direction, + ) leg.move_to(( - home[0] + dx * self.stride * side - (abs(dx) + abs(dy)) * 15, - home[1] + dy * self.stride - ( - abs(dy) + abs(dx)) * 15 * leg.y_direction, + home[0] + dx * self.stride * side - posture[0], + home[1] + dy * self.stride - posture[1], None, )) leg.rotate(-self.rotation * self.stride * side / 3) @@ -61,32 +73,38 @@ self.on_floor.add((leg, side)) def _stomp(self): - shifted = 0, 0 while True: - for leg, shift, side, home in self.legs: - for frame in range(self.shift_steps): - if shift[0] != shifted[0]: - self.robot.shift[0] += shift[0] * self.shift_speed - if shift[1] != shifted[1]: - self.robot.shift[1] += shift[1] * self.shift_speed - yield - self._raise_leg(leg, side) - for frame in range(2): - yield - self._advance_leg(leg, side, home) - for frame in range(2): - yield - self._lower_leg(leg) - for frame in range(2): - yield - self._ground_leg(leg, side) - for frame in range(self.shift_steps): - if shift[0] != shifted[0]: - self.robot.shift[0] -= shift[0] * self.shift_speed - if shift[1] != shifted[1]: - self.robot.shift[1] -= shift[1] * self.shift_speed - yield - shifted = shift + if self.speed != [0, 0] or self.rotation: + for step in self._stomp_once(): + yield step + else: + yield + + def _stomp_once(self): + for leg, shift, side, home in self.legs: + for frame in range(self.shift_steps): + if shift[0] != self.shifted[0]: + self.robot.shift[0] += shift[0] * self.shift_speed + if shift[1] != self.shifted[1]: + self.robot.shift[1] += shift[1] * self.shift_speed + yield + self._raise_leg(leg, side) + for frame in range(4): + yield + self._advance_leg(leg, side, home) + for frame in range(2): + yield + self._lower_leg(leg) + for frame in range(4): + yield + self._ground_leg(leg, side) + for frame in range(self.shift_steps): + if shift[0] != self.shifted[0]: + self.robot.shift[0] -= shift[0] * self.shift_speed + if shift[1] != self.shifted[1]: + self.robot.shift[1] -= shift[1] * self.shift_speed + yield + self.shifted = shift def run(self): clock = pygame.time.Clock() @@ -102,11 +120,11 @@ self.blip.play() elif event.type == pygame.JOYAXISMOTION: if event.axis == 0: - event.speed[1] = event.value + self.speed[0] = event.value elif event.axis == 1: - event.speed[0] = event.value + self.speed[1] = -event.value elif event.axis == 3: - event.rotation = event.value + self.rotation = event.value stomp.next() retract.next() robot.update() @@ -116,7 +134,8 @@ if __name__ == '__main__': - pygame.jostick.init() + pygame.display.init() + pygame.joystick.init() pygame.mixer.init() for joy in range(pygame.joystick.get_count()): pygame.joystick.Joystick(joy).init()
--- a/kubik.py Fri Jul 18 08:34:27 2014 +0200 +++ b/kubik.py Sat Jul 19 12:19:03 2014 +0200 @@ -58,8 +58,8 @@ # Lengths of leg segments, in mm coxa = 40.0 # between the hip and the knee - femur = 30.0 # between the knee and the ankle - tibia = 36.5 # between the ankle and the foot + femur = 32.0 # between the knee and the ankle + tibia = 35.0 # between the ankle and the foot base = 45.0, 45.0 # from the center of body home = 45.0, 45.0, -35.0
--- a/rotate.py Fri Jul 18 08:34:27 2014 +0200 +++ b/rotate.py Sat Jul 19 12:19:03 2014 +0200 @@ -1,7 +1,7 @@ import kubik -STRIDE = -20 +STRIDE = 10 SPEED = -1 SWING = 18 SWING_SPEED = 3 @@ -41,7 +41,7 @@ leg.move_to((None, None, STEP)) for i in range(4): yield - leg.rotate(STRIDE * side) + leg.rotate(STRIDE) if not first: leg.rotate(STRIDE * side) pass
