Mercurial > pony
changeset 6:1529d6a90448 default tip
Robot body code
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 10 Sep 2016 14:25:40 +0200 |
| parents | c1b6dd72fb3c |
| children | |
| files | boot.py leg.py machine.py robot.py |
| diffstat | 4 files changed, 63 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/boot.py Sat Sep 10 14:25:40 2016 +0200 @@ -0,0 +1,8 @@ +# This file is executed on every boot (including wake-boot from deepsleep) +import esp +esp.osdebug(None) +import gc +import webrepl +webrepl.start() +gc.collect() +
--- a/leg.py Tue May 10 17:56:10 2016 +0200 +++ b/leg.py Sat Sep 10 14:25:40 2016 +0200 @@ -1,7 +1,7 @@ import math -from machine import Pin + -from servo import Servo +_pi2 = math.pi / 2 def _solve_triangle(a, b, c): @@ -18,17 +18,25 @@ class Leg: femur = 21 # mm tibia = 27 # mm + hip_trim = -_pi2 + knee_trim = _pi2 - def __init__(self, hip_pin, knee_pin): - self.servos = (Servo(Pin(hip_pin)), Servo(Pin(knee_pin))) + def __init__(self, hip_servo, knee_servo): + self.servos = hip_servo, knee_servo def inverse_kinematics(self, x, y): d = _norm(x, y) if d > self.femur + self.tibia: raise ValueError("Out of range.") - hip = math.atan2(y, x) + _solve_triangle(self.femur, d, self.tibia) - knee = _solve_triangle(self.femur, self.tibia, d) - return hip, knee + hip = math.atan2(x, y) + _solve_triangle(self.femur, d, self.tibia) + knee = _solve_triangle(self.femur, self.tibia, d) - math.pi + return hip + self.hip_trim, knee + self.knee_trim + + def move_to(self, x, y): + ik = self.inverse_kinematics(x, y - self.femur - self.tibia) + for servo, angle in zip(self.servos, ik): + print(math.degrees(angle)) + servo.write_angle(radians=angle) class HindLeg(Leg):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/machine.py Sat Sep 10 14:25:40 2016 +0200 @@ -0,0 +1,14 @@ + +class Pin: + def __init__(self, index): + self.index = index + +class PWM: + def __init__(self, pin, freq, duty): + self.pin = pin + self.freq = freq + self._duty = duty + + def duty(self, duty): + self._duty = duty + print("Pin %d duty %d" % (self.pin.index, self._duty))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/robot.py Sat Sep 10 14:25:40 2016 +0200 @@ -0,0 +1,26 @@ +from machine import Pin +import time + +from servo import Servo +from leg import Leg, HindLeg + +""" +import robot +r = robot.Robot() +l = r.legs[0] +l.move_to(0, 0) +""" +class Robot: + def __init__(self): + self.legs = ( + Leg(Servo(Pin(15)), Servo(Pin(2))), # front left + Leg(Servo(Pin(14)), Servo(Pin(0))), # front right + HindLeg(Servo(Pin(13)), Servo(Pin(12))), # hind right + HindLeg(Servo(Pin(4)), Servo(Pin(5))), # hind left + ) + + def home(self): + for leg in self.legs: + for servo in leg.servos: + servo.write_us(1500) + time.sleep_ms(200)
