You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.7 KiB
Python

#!python
#
# 2021 Zhengyu Peng
# Website: https://zpeng.me
#
# ` `
# -:. -#:
# -//:. -###:
# -////:. -#####:
# -/:.://:. -###++##:
# .. `://:- -###+. :##:
# `:/+####+. :##:
# .::::::::/+###. :##:
# .////-----+##: `:###:
# `-//:. :##: `:###/.
# `-//:. :##:`:###/.
# `-//:+######/.
# `-/+####/.
# `+##+.
# :##:
# :##:
# :##:
# :##:
# :##:
# .+:
import numpy as np
class Leg:
def __init__(self,
id,
junction_servos,
correction=[0, 0, 0],
constraint=[[35, 145], [0, 165], [30, 150]]):
self.id = id
self.junction_servos = junction_servos
self.correction = correction
self.constraint = constraint
def set_angle(self, junction, angle):
set_angle = np.min(
[angle+self.correction[junction], self.constraint[junction][1]+self.correction[junction], 180])
set_angle = np.max(
[set_angle, self.constraint[junction][0]+self.correction[junction], 0])
self.junction_servos[junction].angle = set_angle
def set_raw_angle(self, junction, angle):
self.junction_servos[junction].angle = angle
def move_junctions(self, angles):
self.set_angle(0, angles[0])
self.set_angle(1, angles[1])
self.set_angle(2, angles[2])
def reset(self, calibrated=False):
if calibrated:
self.set_angle(0, 90)
self.set_angle(1, 90)
self.set_angle(2, 90)
else:
self.set_raw_angle(0, 90)
self.set_raw_angle(1, 90)
self.set_raw_angle(2, 90)