0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
1 import utime
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
2
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
3
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
4 class Creep:
|
|
3
|
5 speed = 2.3
|
0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
6 stride = 36
|
|
3
|
7 shift = 8
|
|
|
8 shift_steps = 1
|
|
|
9 raise_leg = 30
|
|
|
10 raise_steps = 1
|
0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
11 next_leg = (
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
12 (2, 0, 3, 1), # forward
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
13 (1, 3, 0, 2), # backward
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
14 (1, 2, 3, 0), # clockwise
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
15 (3, 0, 1, 2), # counter-clockwise
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
16 (2, 3, 1, 0), # left
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
17 (3, 2, 0, 1), # right
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
18 )
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
19
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
20 def __init__(self, robot):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
21 self.robot = robot
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
22 self.shift_x = 0
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
23 self.shift_y = 0
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
24 self.on_ground = list(robot.legs)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
25 self.dx = 1
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
26 self.dy = 0
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
27 self.rotation = 0
|
|
3
|
28 self.spread = 0
|
|
|
29 self.raise_spread = 10
|
|
|
30 self.height = 30
|
0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
31 self.last_leg = 0
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
32
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
33 def move(self):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
34 for leg in self.on_ground:
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
35 dx = self.dx * leg.x_dir * self.speed
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
36 dy = self.dy * leg.y_dir * self.speed
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
37 leg.move_to(leg.x - dx, leg.y - dy, self.height)
|
|
3
|
38 leg.rotate_by(-self.rotation * leg.x_dir * leg.y_dir / 2)
|
0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
39 utime.sleep_ms(10)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
40
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
41 def step(self, leg):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
42 dx = (leg.x_dir * self.shift - self.shift_x) / self.shift_steps
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
43 dy = (leg.y_dir * self.shift - self.shift_y) / self.shift_steps
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
44 for step in range(self.shift_steps):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
45 self.robot.move_by(dx, dy, 0)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
46 self.shift_x += dx
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
47 self.shift_y += dy
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
48 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
49 self.on_ground.remove(leg)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
50 for step in range(self.raise_steps):
|
|
3
|
51 leg.move_by(self.raise_spread, self.raise_spread, self.raise_leg)
|
0
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
52 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
53 leg.move_to(
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
54 (self.shift_x + self.dx * self.stride) * leg.x_dir + self.spread,
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
55 (self.shift_y + self.dy * self.stride) * leg.y_dir + self.spread,
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
56 self.raise_leg * self.raise_steps + self.height
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
57 )
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
58 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
59 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
60 for step in range(self.raise_steps - 1):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
61 leg.move_by(0, 0, -self.raise_leg)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
62 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
63 self.on_ground.append(leg)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
64 self.move()
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
65
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
66 def run(self, steps):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
67 for step in range(steps):
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
68 leg = self.robot.legs[self.last_leg]
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
69 self.step(leg)
|
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
70 self.last_leg = self.next_leg[0][self.last_leg]
|