-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathrc_tank_util.py
More file actions
74 lines (59 loc) · 2.7 KB
/
rc_tank_util.py
File metadata and controls
74 lines (59 loc) · 2.7 KB
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
#!/usr/bin/env python3
from ev3dev.ev3 import \
Motor, LargeMotor, OUTPUT_B, OUTPUT_C, \
InfraredSensor, RemoteControl, INPUT_4
class RemoteControlledTank:
"""
This reusable mixin provides the capability of driving a robot
with a Driving Base by the IR beacon
"""
def __init__(
self,
left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C,
polarity: str = Motor.POLARITY_NORMAL,
ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
self.left_motor = LargeMotor(address=left_motor_port)
self.right_motor = LargeMotor(address=right_motor_port)
self.left_motor.polarity = self.right_motor.polarity = polarity
self.ir_sensor = InfraredSensor(address=ir_sensor_port)
self.tank_drive_remote_control = \
RemoteControl(
sensor=self.ir_sensor,
channel=ir_beacon_channel)
def drive_by_ir_beacon(self, speed: float = 1000):
# forward
if self.tank_drive_remote_control.red_up and \
self.tank_drive_remote_control.blue_up:
self.left_motor.run_forever(speed_sp=speed)
self.right_motor.run_forever(speed_sp=speed)
# backward
elif self.tank_drive_remote_control.red_down and \
self.tank_drive_remote_control.blue_down:
self.left_motor.run_forever(speed_sp=-speed)
self.right_motor.run_forever(speed_sp=-speed)
# turn left on the spot
elif self.tank_drive_remote_control.red_up and \
self.tank_drive_remote_control.blue_down:
self.left_motor.run_forever(speed_sp=-speed)
self.right_motor.run_forever(speed_sp=speed)
# turn right on the spot
elif self.tank_drive_remote_control.red_down and \
self.tank_drive_remote_control.blue_up:
self.left_motor.run_forever(speed_sp=speed)
self.right_motor.run_forever(speed_sp=-speed)
# turn left forward
elif self.tank_drive_remote_control.red_up:
self.right_motor.run_forever(speed_sp=speed)
# turn right forward
elif self.tank_drive_remote_control.blue_up:
self.left_motor.run_forever(speed_sp=speed)
# turn left backward
elif self.tank_drive_remote_control.red_down:
self.right_motor.run_forever(speed_sp=-speed)
# turn right backward
elif self.tank_drive_remote_control.blue_down:
self.left_motor.run_forever(speed_sp=-speed)
# otherwise stop
else:
self.left_motor.stop(stop_action=Motor.STOP_ACTION_COAST)
self.right_motor.stop(stop_action=Motor.STOP_ACTION_COAST)