Startdatei für Crawly
Um den Bewegungsablauf für Crawly anders als in der Bibliothek zu machen, können auch hier die entsprechenden Klassen überschrieben werden.
from time import sleep, sleep_ms
from robotlibrary.crawly import Crawly
from robotlibrary.crawly_leg import Leg
from robotlibrary.crawly_joint import Joint
from robotlibrary import config_crawly as conf
from robotlibrary.servo import Servo
################################## Your class definition
class MyCrawly(Crawly):
def __init__(self):
self.legs = {
"front_right" : MyLeg(4, True, True, "front right"),
"rear_right" : MyLeg(6, True, False, "rear right"),
"rear_left" : MyLeg(0, False, False, "rear left"),
"front_left" : MyLeg(2, False, True, "front left")
}
def galumph(self):
for l in self.legs.values():
l.leg_fully_up()
sleep_ms(150)
for l in self.legs.values():
l.leg_fully_forward()
sleep_ms(150)
for l in self.legs.values():
l.leg_fully_down()
sleep_ms(150)
for l in self.legs.values():
l.leg_fully_backward()
sleep_ms(150)
class MyLeg(Leg):
def __init__(self, pin, right, front, name):
if right and front:
self.shoulder = MyJoint(conf.SHOULDER_FRONT, name, False, False, pin)
if right and not front:
self.shoulder = MyJoint(conf.SHOULDER_REAR, name, False, False, pin)
if not right and front:
self.shoulder = MyJoint(conf.SHOULDER_FRONT, name, True, False, pin)
if not right and not front:
self.shoulder = MyJoint(conf.SHOULDER_REAR, name, True, False, pin)
self.knee = MyJoint(conf.KNEE, name, False, True, pin+1)
class MyJoint(Joint):
def __init__(self, j_type, name, left_side, inverted, pin):
self.name = name
self.j_type = j_type
min_duty = conf.SERVO_MIN_DUTY
max_duty = conf.SERVO_MAX_DUTY
self.left_side = left_side
if j_type == conf.SHOULDER_FRONT:
self.__min_angle = conf.SHOULDER_FRONT_MIN_ANGLE
self.__max_angle = conf.SHOULDER_FRONT_MAX_ANGLE
elif j_type == conf.SHOULDER_REAR:
self.__min_angle = conf.SHOULDER_REAR_MIN_ANGLE
self.__max_angle = conf.SHOULDER_REAR_MAX_ANGLE
elif j_type == conf.KNEE:
self.__min_angle = conf.KNEE_MIN_ANGLE
self.__max_angle = conf.KNEE_MAX_ANGLE
# min_duty = conf.SERVO_MIN_DUTY_TYPE2 # Comment out if the duty cycle is different from the shoulder servo's duty cycle.
# max_duty = conf.SERVO_MAX_DUTY_TYPE2 # Comment out if the duty cycle is different from the shoulder servo's duty cycle.
self.servo = Servo(pin, inverted, min_duty, max_duty)
################################# End of class definition
def move_program():
crawly.move_to_start_pos()
for i in range(10):
crawly.galumph()
def main():
move_program()
################################# Initialize the robot and start the program.
crawly = MyCrawly()
if __name__ == "__main__":
# execute only if run as a script
try:
main()
except KeyboardInterrupt:
print("The robot was stopped by the user.")
finally:
crawly.park()
Hier wurden schon alle drei Hauptklassen des Crawly-Roboters überschrieben. Die anderen Methoden in den Klassen können bei Bedarf auch überschrieben werden.