Mercurial > tote-had
view python/gait.py @ 19:455a46355e72 default tip
Add freq to i2c init
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Thu, 14 Apr 2016 00:05:31 +0200 |
| parents | 3b9ed9cd63ef |
| children |
line wrap: on
line source
from pyb import delay class Creep: speed = 1 stride = 14 shift = 8 shift_steps = 2 raise_leg = 10 raise_steps = 3 def __init__(self, robot): self.robot = robot self.shift_x = 0 self.shift_y = 0 self.on_ground = set(robot.legs) self.dx = 0 self.dy = 1 self.rotation = 0 self.spread = 0 self.height = 0 self.last_leg = 0 def move(self): 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) 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 for step in range(self.shift_steps): self.robot.move_by(dx, dy, 0) self.shift_x += dx self.shift_y += dy yield self.on_ground.remove(leg) for step in range(self.raise_steps): leg.move_by(0, 0, self.raise_leg) yield 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 ) yield yield for step in range(self.raise_steps - 1): leg.move_by(0, 0, -self.raise_leg) yield self.on_ground.add(leg) yield def step_order(self): if abs(self.dy) > abs(self.dx): if self.dy > 0: return (2, 0, 3, 1) # forward else: return (1, 3, 0, 2) # backward elif abs(self.dx) > abs(self.dy): if self.dx < 0: return (2, 3, 1, 0) # left else: return (3, 2, 0, 1) # right elif abs(self.rotation) > 0.001: if self.rotation > 0: return (1, 2, 3, 0) # clockwise else: return (3, 0, 1, 2) # counter-clockwise return (2, 0, 3, 1) # forward def run(self): while True: leg = self.robot.legs[self.last_leg] for frame in self.step(leg): self.move() self.robot.update() delay(40) # 25 FPS yield self.last_leg = self.step_order()[self.last_leg]
