Mercurial > Kubik
changeset 108:0948869675f8
dance
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 02 Jul 2014 09:23:31 +0000 |
| parents | 408d6f00101e |
| children | 970638b228a4 |
| files | kubik.py |
| diffstat | 1 files changed, 57 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/kubik.py Wed Jul 02 00:18:57 2014 +0200 +++ b/kubik.py Wed Jul 02 09:23:31 2014 +0000 @@ -45,18 +45,16 @@ class Leg(object): # Lengths of leg segments, in mm - coxa = 13 # between the hip and the knee - femur = 30 # between the knee and the ankle - tibia = 36 # between the ankle and the foot + coxa = 12.5 # between the hip and the knee + femur = 30.0 # between the knee and the ankle + tibia = 35.0 # between the ankle and the foot def __init__(self, hip, knee, ankle, hip_offset=0): self.hip = hip self.knee = knee self.ankle = ankle self.hip_offset = hip_offset # angle that points outward - self.target = None - self.time_left = None - self.position = 0, 0, 0 + self.position = 30.0, 30.0, -35.0 def __iter__(self): """Iterate over all joints.""" @@ -82,36 +80,6 @@ self.knee.move_degrees(knee) self.ankle.move_degrees(ankle) - def set_target(self, target, time=0): - """Move to the specified point in specified time.""" - self.target = target - self.time_left = time - - def advance(self, dt): - """Advance the leg so that it will reach its target on time. - - Returns True if the leg is already in the right place. - """ - if not self.target: - return True - if self.time_left == 0: - self.move_to(self.target) - return True - finished = False - x1, y1, z1 = self.position - x2, y2, z2 = self.target - step = float(dt) / self.time_left - x = x1 + (x2 - x1) * step - y = y1 + (y2 - y1) * step - z = z1 + (z2 - z1) * step - self.time_left -= dt - if self.time_left <= 0: - x, y, z = self.target - self.time_left = 0 - finished = True - self.move_to((x, y, z)) - return finished - class Robot(object): def __init__(self): @@ -120,33 +88,68 @@ m.init() self.legs = [ - Leg(HipServo(m, 1), KneeServo(m, 2), - AnkleServo(m, 0), 45), - Leg(HipServo(m, 4), KneeServo(m, 5, reverse=True), - AnkleServo(m, 3, reverse=True), -45), - Leg(HipServo(m, 7, reverse=True), KneeServo(m, 8), - AnkleServo(m, 6), -45), - Leg(HipServo(m, 10, reverse=True), KneeServo(m, 11, reverse=True), - AnkleServo(m, 9, reverse=True), 45), + Leg(HipServo(m, 1, trim=250), + KneeServo(m, 2, trim=-200), + AnkleServo(m, 0, trim=0), + 45), + Leg(HipServo(m, 4, trim=-100), + KneeServo(m, 5, reverse=True, trim=-200), + AnkleServo(m, 3, reverse=True, trim=-400), + -45), + Leg(HipServo(m, 7, reverse=True, trim=150), + KneeServo(m, 8, trim=100), + AnkleServo(m, 6, trim=0), + -45), + Leg(HipServo(m, 10, reverse=True, trim=-250), + KneeServo(m, 11, reverse=True, trim=-100), + AnkleServo(m, 9, reverse=True, trim=100), + 45), ] def home(self): """Move all legs to the initial position.""" for leg in self.legs: - for joint in leg: - joint.set_speed(0) - joint.set_accel(0) - joint.move_degrees(0) + leg.move_to((30, 30, -35)) def run(self): try: - for leg in self.legs: - leg.set_target((30, 0, -20)) while True: - dt = 0.00125 - time.sleep(dt) - for leg in self.legs: - leg.advance(dt) + for i in range(-35, -25): + time.sleep(0.0125) + self.legs[0].move_to((20, 0, i)) + self.legs[1].move_to((20, 0, i)) + self.legs[2].move_to((20, 0, i)) + self.legs[3].move_to((20, 0, i)) + for i in range(-25, -35, -1): + time.sleep(0.0125) + self.legs[0].move_to((20, 0, i)) + self.legs[1].move_to((20, 0, i)) + self.legs[2].move_to((20, 0, i)) + self.legs[3].move_to((20, 0, i)) + for i in range(0, 20): + time.sleep(0.0125) + self.legs[0].move_to((20-i, 0, -35)) + self.legs[1].move_to((20-i, 0, -35)) + self.legs[2].move_to((20+i, 0, -35)) + self.legs[3].move_to((20+i, 0, -35)) + for i in range(20, 0, -1): + time.sleep(0.0125) + self.legs[0].move_to((20-i, 0, -35)) + self.legs[1].move_to((20-i, 0, -35)) + self.legs[2].move_to((20+i, 0, -35)) + self.legs[3].move_to((20+i, 0, -35)) + for i in range(0, 20): + time.sleep(0.0125) + self.legs[0].move_to((20, i, -35)) + self.legs[1].move_to((20, i, -35)) + self.legs[2].move_to((20, i, -35)) + self.legs[3].move_to((20, i, -35)) + for i in range(20, 0, -1): + time.sleep(0.0125) + self.legs[0].move_to((20, i, -35)) + self.legs[1].move_to((20, i, -35)) + self.legs[2].move_to((20, i, -35)) + self.legs[3].move_to((20, i, -35)) finally: self.home()
