Moving Forwards

Our robot is alive and moving. At the heart of the Team Seaford robot control is the ServiceIo class. The ServiceIo class is responsible for controlling the four drive motors. Each motor is connected to a H bridge motor controller. The H bridge controllers require two inputs per motor. The inputs control the direction of travel.
import RPi.GPIO as GPIO
import time
class ServiceIo:
MotorOnTime = 0.01
# GPIO Pin Numbers
PinDriveFrontLeftForward = 5 # flf
PinDriveFrontLeftBackward = 13 # flb
PinDriveFrontRightForward = 11 # frf
PinDriveFrontRightBackward = 12 # frb
PinDriveBackLeftForward = 9 # blf
PinDriveBackLeftBackward = 10 # blb
PinDriveBackRightForward = 7 # brf
PinDriveBackRightBackward = 8 # brb
## Constructor
# @param self Class pointer
def __init__(self):
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
self.SetPinToOutput(self.PinDriveFrontLeftForward)
self.SetPinToOutput(self.PinDriveFrontLeftBackward)
self.SetPinToOutput(self.PinDriveFrontRightForward)
self.SetPinToOutput(self.PinDriveFrontRightBackward)
self.SetPinToOutput(self.PinDriveBackLeftForward)
self.SetPinToOutput(self.PinDriveBackLeftBackward)
self.SetPinToOutput(self.PinDriveBackRightForward)
self.SetPinToOutput(self.PinDriveBackRightBackward)
pass
## Change pin type to output
# @param self Class pointer
# @param pin Pin Number
def SetPinToOutput(self, pin):
GPIO.setup(pin,GPIO.OUT)
self.Off(pin)
pass
## Turn output pin On
# @param self Class pointer
# @param pin Pin Number
def On(self, pin):
print "On="+str(pin)
GPIO.output(pin,1)
pass
## Turn output pin off
# @param self Class pointer
# @param pin Pin Number
def Off(self, pin):
GPIO.output(pin, 0)
pass
## Stop all drive motors
# @param self Class pointer
def DriveStop(self):
self.Off(self.PinDriveFrontLeftForward)
self.Off(self.PinDriveFrontLeftBackward)
self.Off(self.PinDriveFrontRightForward)
self.Off(self.PinDriveFrontRightBackward)
self.Off(self.PinDriveBackLeftForward)
self.Off(self.PinDriveBackLeftBackward)
self.Off(self.PinDriveBackRightForward)
self.Off(self.PinDriveBackRightBackward)
pass
## Drive Forward
# @param self Class pointer
def DriveForward(self):
self.On(self.PinDriveFrontLeftForward)
self.On(self.PinDriveFrontRightForward)
self.On(self.PinDriveBackLeftForward)
self.On(self.PinDriveBackRightForward)
self.Off(self.PinDriveFrontLeftBackward)
self.Off(self.PinDriveFrontRightBackward)
self.Off(self.PinDriveBackLeftBackward)
self.Off(self.PinDriveBackRightBackward)
time.sleep(self.MotorOnTime)
pass
## Drive Backward
# @param self Class pointer
def DriveBackward(self):
self.On(self.PinDriveFrontLeftBackward)
self.On(self.PinDriveFrontRightBackward)
self.On(self.PinDriveBackLeftBackward)
self.On(self.PinDriveBackRightBackward)
self.Off(self.PinDriveFrontLeftForward)
self.Off(self.PinDriveFrontRightForward)
self.Off(self.PinDriveBackLeftForward)
self.Off(self.PinDriveBackRightForward)
time.sleep(self.MotorOnTime)
pass
## Drive Left
# @param self Class pointer
def DriveLeft(self):
self.On(self.PinDriveFrontLeftForward)
self.Off(self.PinDriveFrontLeftBackward)
self.On(self.PinDriveBackLeftForward)
self.Off(self.PinDriveBackLeftBackward)
self.On(self.PinDriveFrontRightBackward)
self.Off(self.PinDriveFrontRightForward)
self.On(self.PinDriveBackRightBackward)
self.Off(self.PinDriveBackRightForward)
time.sleep(self.MotorOnTime)
pass
## Drive Right
# @param self Class pointer
def DriveRight(self):
self.On(self.PinDriveFrontRightForward)
self.Off(self.PinDriveFrontRightBackward)
self.On(self.PinDriveBackRightForward)
self.Off(self.PinDriveBackRightBackward)
self.On(self.PinDriveFrontLeftBackward)
self.Off(self.PinDriveFrontLeftForward)
self.On(self.PinDriveBackLeftBackward)
self.Off(self.PinDriveBackLeftForward)
time.sleep(self.MotorOnTime)
pass
The following code show how to use the ServiceIo within a simple program, which responds to user input from the keyboard.
import ServiceIo
import time
io = ServiceIo.ServiceIo()
io.DriveStop()
while True:
mode = raw_input('Direction (f,b,l,r:')
if (mode == 'f'):
io.DriveForward()
if(mode == 'b'):
io.DriveBackward()
if(mode=='l'):
io.DriveLeft()
if(mode=='r'):
io.DriveRight()
time.sleep(2)
print("off")
io.DriveStop()
