Mercurial > circuitpython-spiderwing
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]
--- 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()
--- 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()
--- 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) + +
