changeset 152:7504bb6ef6cc

joy
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Thu, 07 Aug 2014 17:50:34 +0200
parents af2b8a1fa8f3
children 6d63e4e4542d
files joy.py kubik.py
diffstat 2 files changed, 75 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/joy.py	Wed Aug 06 18:51:39 2014 +0200
+++ b/joy.py	Thu Aug 07 17:50:34 2014 +0200
@@ -1,40 +1,76 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
 import pygame
+import serial
 
 import kubik
-
+import creep
 
-FPS = 12
+FPS = 24
 
 
-pygame.display.init()
-pygame.joystick.init()
-pygame.mixer.init()
-
-clock = pygame.time.Clock()
-hello = pygame.mixer.Sound('~/sound/Turret_turret_active_5.wav')
-robot = kubik.Robot()
-
-for joy in range(pygame.joystick.get_count()):
-    pygame.joystick.Joystick(joy).init()
+class Walk(creep.Creep):
+    def __init__(self, robot):
+        super(Walk, self).__init__(robot)
+        self.speed = [0.0, 0.0]
+        self.rotation = 0.0
+        self.gait = ''
 
-robot.home()
-while True:
-    for event in pygame.event.get():
-        if event.type == pygame.JOYBUTTONDOWN:
-            hello.play()
-            print "Hello!"
-        elif event.type == pygame.JOYAXISMOTION:
-            print event.axis, event.value
-            if event.axis == 0:
-                for leg in robot.legs[:2]:
-                    leg.move_to((30 + 20 * event.value, None, None))
-                for leg in robot.legs[2:]:
-                    leg.move_to((30 - 20 * event.value, None, None))
-            elif event.axis == 1:
-                for leg in robot.legs:
-                    leg.move_to((None, 40 * event.value, None))
-            elif event.axis == 2:
-                for leg in robot.legs:
-                    leg.move_to((None, None, -30 - 30 * event.value))
-    robot.update()
-    clock.tick(FPS)
+    def joy_anim(self):
+        """This animation is for reading user input."""
+        while True:
+            for event in pygame.event.get():
+                if event.type == pygame.QUIT:
+                    raise SystemExit()
+                elif event.type == pygame.JOYBUTTONDOWN:
+                    if event.button == 10:
+                        self.gait = 'forward'
+                    elif event.button == 11:
+                        if self.rotation > 0:
+                            self.gait = 'rotate_left'
+                        else:
+                            self.gait = 'rotate_right'
+                    elif event.button == 0:
+                        serial = self.robot.legs[0].hip.serial
+                        serial.write('0xfd')
+                        sensor = ord(serial.read(1))
+                        print "Sensor value: %d" % sensor
+                    else:
+                        print "Button %d" % event.button
+                elif event.type == pygame.JOYBUTTONUP:
+                    if event.button in (10, 11):
+                        self.gait = ''
+                elif event.type == pygame.JOYAXISMOTION:
+                    if event.axis == 0:
+                        self.speed[0] = event.value
+                        self.rotation = 0.0
+                    elif event.axis == 1:
+                        self.speed[1] = -event.value
+                        self.rotation = 0.0
+                    elif event.axis == 2:
+                        self.robot.shift[2] = event.value * 12
+                    elif event.axis == 3:
+                        self.rotation = event.value
+                        self.speed = [0.0, 0.0]
+            yield
+
+
+
+if __name__ == '__main__':
+    # Initialize PyGame.
+    pygame.display.init()
+    pygame.joystick.init()
+    for joy in range(pygame.joystick.get_count()):
+        pygame.joystick.Joystick(joy).init()
+
+    # Initialize the robot.
+    robot = kubik.Robot(serial.Serial('/dev/rfcomm0', 9600))
+    robot.home()
+    walk = Walk(robot)
+    clock = pygame.time.Clock()
+    robot.run_animations([
+        walk.stomp_anim(),
+        walk.retract_anim(),
+        walk.joy_anim(),
+    ], FPS)
--- a/kubik.py	Wed Aug 06 18:51:39 2014 +0200
+++ b/kubik.py	Thu Aug 07 17:50:34 2014 +0200
@@ -48,19 +48,19 @@
         self.legs = (
             Leg(HipServo(m, 1, reverse=True, trim=250),
                 KneeServo(m, 2, reverse=True, trim=-200),
-                AnkleServo1(m, 0, reverse=True, trim=0, center=1500 * 4),
-                (-1, 1)),
+                AnkleServo1(m, 0, reverse=False, trim=0, center=1500 * 4),
+                (1, -1)),
             Leg(HipServo(m, 4, reverse=True, trim=-100),
                 KneeServo(m, 5, reverse=False, trim=-200),
-                AnkleServo2(m, 3, reverse=False, trim=-240, center=1500 * 4),
+                AnkleServo2(m, 3, reverse=True, trim=-240, center=1500 * 4),
                 (1, 1)),
             Leg(HipServo(m, 7, reverse=False, trim=-150),
                 KneeServo(m, 8, reverse=True, trim=100),
-                AnkleServo1(m, 6, reverse=True, trim=0, center=1500 * 4),
-                (1, -1)),
+                AnkleServo1(m, 6, reverse=False, trim=0, center=1500 * 4),
+                (-1, 1)),
             Leg(HipServo(m, 10, reverse=False, trim=-250),
                 KneeServo(m, 11, reverse=False, trim=-100),
-                AnkleServo2(m, 9, reverse=False, trim=100, center=1500 * 4),
+                AnkleServo2(m, 9, reverse=True, trim=100, center=1500 * 4),
                 (-1, -1)),
         )