changeset 2:2f1609829f66 draft

Update gait
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 15 May 2017 20:01:55 +0200
parents 85538a203c89
children 8ed8f30b0568
files crab/gait.py crab/hardware.mpy crab/hardware.py crab/ik.mpy crab/main.py crab/robot.mpy crab/robot.py
diffstat 7 files changed, 60 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/crab/gait.py	Mon May 15 18:37:15 2017 +0200
+++ b/crab/gait.py	Mon May 15 20:01:55 2017 +0200
@@ -1,9 +1,10 @@
 import time
+import ik
 
 
 class Creep:
-    speed = 0.25
-    stride = 10
+    speed = 0.5
+    stride = 15
     shift = 8
     shift_steps = 2
     raise_leg = 10
@@ -25,52 +26,63 @@
         self.dx = 1
         self.dy = 0
         self.rotation = 0
-        self.spread = 0
-        self.height = 0
+        self.spread = -10
+        self.height = 5
         self.last_leg = 0
 
     def move(self):
-        print("Moving legs backwards")
         for leg in self.on_ground:
             dx = self.dx * leg.x_dir * self.speed
             dy = self.dy * leg.y_dir * self.speed
             leg.move_to(leg.x - dx, leg.y - dy, self.height)
-            #leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
-        time.sleep(0.01)
+            leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir * self.speed)
+        time.sleep(0.001)
 
     def step(self, leg):
         dx = (leg.x_dir * self.shift - self.shift_x) / self.shift_steps
         dy = (leg.y_dir * self.shift - self.shift_y) / self.shift_steps
-        print("Shifting body by (%d, %d) %d times" % (dx, dy, self.shift_steps))
         for step in range(self.shift_steps):
             self.robot.move_by(dx, dy, 0)
             self.shift_x += dx
             self.shift_y += dy
             self.move()
         self.on_ground.remove(leg)
-        print("Raising leg by %d %d times" % (self.raise_leg, self.raise_steps))
         for step in range(self.raise_steps):
-            leg.move_by(0, 0, self.raise_leg)
+            #leg.move_by(0, 0, self.raise_leg)
+            leg.hardware.servo(leg.joints[1],
+                               ik.PI2 - ik.PI4 * leg.x_dir * leg.y_dir)
             self.move()
-        print("Moving leg forward")
         leg.move_to(
             (self.shift_x + self.dx * self.stride) * leg.x_dir + self.spread,
             (self.shift_y + self.dy * self.stride) * leg.y_dir + self.spread,
             self.raise_leg * self.raise_steps + self.height
         )
+        leg.rotate_by(self.rotation * leg.x_dir * leg.y_dir * self.stride / 10)
         self.move()
         self.move()
-        print("Lowering leg")
         for step in range(self.raise_steps - 1):
             leg.move_by(0, 0, -self.raise_leg)
             self.move()
         self.on_ground.append(leg)
         self.move()
-        print("Leg done")
 
-    def run(self, steps):
+    def run(self, steps=1000):
+        if self.dx > 0:
+            direction = 0
+        elif self.dx < 0:
+            direction = 1
+        elif self.rotation < 0:
+            direction = 2
+        elif self.rotation > 0:
+            direction = 3
+        elif self.dy > 0:
+            direction = 4
+        elif self.dy < 0:
+            direction = 5
+        else:
+            return
+
         for step in range(steps):
-            print("Moving leg %d" % self.last_leg)
             leg = self.robot.legs[self.last_leg]
             self.step(leg)
-            self.last_leg = self.next_leg[0][self.last_leg]
+            self.last_leg = self.next_leg[direction][self.last_leg]
Binary file crab/hardware.mpy has changed
--- a/crab/hardware.py	Mon May 15 18:37:15 2017 +0200
+++ b/crab/hardware.py	Mon May 15 20:01:55 2017 +0200
@@ -13,7 +13,7 @@
         self._i2c_buffer = bytearray(2)
         self._init_servo()
         self._init_eyes()
-        self._init_voice()
+        #self._init_voice()
 
     def _i2c_reg(self, address, register, value=None):
         self.i2c.try_lock()
Binary file crab/ik.mpy has changed
--- a/crab/main.py	Mon May 15 18:37:15 2017 +0200
+++ b/crab/main.py	Mon May 15 20:01:55 2017 +0200
@@ -2,3 +2,4 @@
 from robot import Robot
 
 robot = Robot(Hardware())
+robot.unfold()
Binary file crab/robot.mpy has changed
--- a/crab/robot.py	Mon May 15 18:37:15 2017 +0200
+++ b/crab/robot.py	Mon May 15 20:01:55 2017 +0200
@@ -1,5 +1,6 @@
 import math
 import ik
+import time
 
 
 class Leg:
@@ -52,3 +53,32 @@
     def home(self):
         for leg in self.legs:
             leg.move_to(0, 0, 0)
+
+    def unfold(self):
+        for servo in (2, 5, 10, 13, 0, 7, 8, 15, 1, 6, 9, 14):
+            self.hardware.servo(servo, ik.PI2)
+            time.sleep(0.25)
+
+    def fold(self):
+        for servo, angle in (
+            (2, 3 * ik.PI4),
+            (5, ik.PI4),
+            (10, 3 * ik.PI4),
+            (13, ik.PI4),
+
+            (1, 3 * ik.PI4),
+            (6, ik.PI4),
+            (9, 3 * ik.PI4),
+            (14, ik.PI4),
+
+            (7, 3 * ik.PI4),
+            (0, ik.PI4),
+            (8, ik.PI4),
+            (15, 3 * ik.PI4),
+
+        ):
+            self.hardware.servo(servo, angle)
+            time.sleep(0.25)
+            self.hardware.servo(servo, None)
+
+