-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathrobot.py
75 lines (57 loc) · 2.23 KB
/
robot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from Raspi_MotorHAT import Raspi_MotorHAT
from gpiozero import LineSensor
import atexit
#import leds_led_shim
import leds_8_apa102c
from servos import Servos
class Robot(object):
def __init__(self, motorhat_addr=0x6f):
# Setup the motorhat with the passed in address
self._mh = Raspi_MotorHAT(addr=motorhat_addr)
# get local variable for each motor
self.left_motor = self._mh.getMotor(1)
self.right_motor = self._mh.getMotor(2)
# ensure the motors get stopped when the code exits
atexit.register(self.stop_all)
# Setup the line sensors
self.left_line_sensor = LineSensor(23, queue_len=3, pull_up=True)
self.right_line_sensor = LineSensor(16, queue_len=3, pull_up=True)
# Setup the Leds
self.leds = leds_8_apa102c.Leds()
# Set up servo motors for pan and tilt.
self.servos = Servos(addr=motorhat_addr)
def stop_all(self):
self.stop_motors()
# Clear any sensor handlers
self.left_line_sensor.when_line = None
self.left_line_sensor.when_no_line = None
self.right_line_sensor.when_line = None
self.right_line_sensor.when_no_line = None
# Clear the display
self.leds.clear()
self.leds.show()
# Reset the servos
self.servos.stop_all()
def convert_speed(self, speed):
mode = Raspi_MotorHAT.RELEASE
if speed > 0:
mode = Raspi_MotorHAT.FORWARD
elif speed < 0:
mode = Raspi_MotorHAT.BACKWARD
output_speed = (abs(speed) * 255) / 100
return mode, int(output_speed)
def set_left(self, speed):
mode, output_speed = self.convert_speed(speed)
self.left_motor.setSpeed(output_speed)
self.left_motor.run(mode)
def set_right(self, speed):
mode, output_speed = self.convert_speed(speed)
self.right_motor.setSpeed(output_speed)
self.right_motor.run(mode)
def stop_motors(self):
self.left_motor.run(Raspi_MotorHAT.RELEASE)
self.right_motor.run(Raspi_MotorHAT.RELEASE)
def set_pan(self, angle):
self.servos.set_servo_angle(1, angle)
def set_tilt(self, angle):
self.servos.set_servo_angle(0, angle)