import RPi.GPIO as gpio import time import sys import Tkinter as tk from sensor import distance import random def init(): gpio.setmode(gpio.BOARD) gpio.setup(7, gpio.OUT) gpio.setup(11, gpio.OUT) gpio.setup(13, gpio.OUT) gpio.setup(15, gpio.OUT) def forward(tf): gpio.output(7, False) gpio.output(11, True) gpio.output(13, True) gpio.output(15, False) time.sleep(tf) gpio.cleanup() def reverse(tf): gpio.output(7, True) gpio.output(11, False) gpio.output(13, False) gpio.output(15, True) time.sleep(tf) gpio.cleanup() def turn_left(tf): gpio.output(7, True) gpio.output(11, True) gpio.output(13, True) gpio.output(15, False) time.sleep(tf) gpio.cleanup() def turn_right(tf): gpio.output(7, False) gpio.output(11, True) gpio.output(13, False) gpio.output(15, False) time.sleep(tf) gpio.cleanup() def pivot_left(tf): gpio.output(7, True) gpio.output(11, False) gpio.output(13, True) gpio.output(15, False) time.sleep(tf) gpio.cleanup() def pivot_right(tf): gpio.output(7, False) gpio.output(11, True) gpio.output(13, False) gpio.output(15, True) time.sleep(tf) gpio.cleanup() ''' def key_input(event): init() print 'Key:', event.char key_press = event.char sleep_time = 0.030 if key_press.lower() == 'w': forward(sleep_time) elif key_press.lower() == 's': reverse(sleep_time) elif key_press.lower() == 'a': turn_left(sleep_time) elif key_press.lower() == 'd': turn_right(sleep_time) elif key_press.lower() == 'q': pivot_left(sleep_time) elif key_press.lower() == 'e': pivot_right(sleep_time) else: pass curDis = distance('cm') print('curdis is',curDis) if curDis < 20: init() reverse(2) command = tk.Tk() command.bind('<KeyPress>', key_input) command.mainloop() ''' def check_front(): init() dist = distance() if dist < 25: print('Too close,',dist) init() reverse(2) dist = distance() if dist < 25: print('Too close,',dist) init() pivot_left(3) init() reverse(2) dist = distance() if dist < 25: print('Too close, giving up',dist) sys.exit() def autonomy(): tf = 0.030 x = random.randrange(0,4) if x == 0: for y in range(30): check_front() init() forward(tf) elif x == 1: for y in range(30): check_front() init() pivot_left(tf) elif x == 2: for y in range(30): check_front() init() turn_right(tf) elif x == 3: for y in range(30): check_front() init() turn_left(tf) for z in range(10): autonomy()
Making the step from auto-pilot / auto-correct to full autonomy isn't too hard.
The harder step is making the autonomy make sense, which we wont be doing here. What we're going to do instead is just have the car move forward until it detects an object. From there, we want the object to be avoided.
The avoidance maneuvers may or may not work, so, after "avoiding," we will make another check to see if it was successful. If not, we will try a few more times, otherwise we're going to just shut down and wait for assistance.