Transcript rec8b
Projects 3&4:
PyRobot & Picobot
Project 3: PyRobot
Pt A
2d Roomba simulator
Goal: get from Pt A to Pt B
Pt B
Project 3: PyRobot
Pt A
IMPORTANT:
ROBOT CAN START
ANYWHERE!
Pt B
IMPORTANT:
GOAL CAN BE
ANYWHERE
Project 3: PyRobot
while True:
SENSE
Robot control continuously runs three things:
PLAN
ACT
[x,y,thd], bump = self.getData()
if bump[0] == True or bump[1] == True:
print 'BUMP!',
print ' [Left bump sensor:', bump[0], ']
print ' [Right bump sensor:', bump[1], ']
robotTask = STOP
STOP is one of the robot's states. Every
40th of a second, the robot runs through
this loop, sets the robot's state and sets the
velocities accordingly. Don't sleep!
if robotTask == STOP:
self.setVels(0,0)
robotTask = KBD
',
'
Project 3: PyRobot
BASIC ROBOT COMMANDS:
STOP:
self.setVels(0,0)
GO FORWARD:
self.setVels(FV,0)
GO BACKWARD:
self.setVels(-FV,0)
GO CLOCKWISE:
self.setVels(0,RV)
GO COUNTERCLOCKWISE:
self.setVels(0,-RV)
Project 3: PyRobot
To make the robot go forward a set amount use
The max forward velocity: FV
Example...
TIME_ONE_CIRCLE_OVER = RADIUS*2 / FV
if state==GO_LEFT_LITTLE:
#FIGURE OUT HOW TO TRAVEL
pause_stop = time.time() + TIME_ONE_CIRCLE_OVER
State = NOW_GOING_LEFT_LITTLE
if pause_stop > time.time() and state==NOW_GOING_LEFT_LITTLE:
self.setVels(0,0) #STOP!
elif state==NOW_GOING_LEFT_LITTLE:
self.setVels(0,FV) #KEEP GOING!
Project 3: PyRobot
To rotate the robot use the Max Rotational Velocity: RV
Example...
TIME_ROTATE_90_DEGREES = 90.0 / RV
if state==ROTATE_LEFT_DOWN:
#FIGURE OUT HOW LONG TO ROTATE
pause_stop = time.time() + TIME_ROTATE_90_DEGREES
State = NOW_ROTATING_DOWN
if pause_stop > time.time() and state==NOW_ROTATING_DOWN:
self.setVels(0,0) #STOP!
elif state==NOW_ROTATING_DOWN:
self.setVels(0,-RV) #KEEP GOING!
Project 3: PyRobot
One way to traverse the space is
GO DOWN UNTIL BUMP SOMETHING,
GO LEFT A LITTLE
GO UP UNTIL BUMP SOMETHING
GO RIGHT A LITTLE
DO THIS UNTIL HIT CORNER THEN
REVERSE....
Project 3: PyRobot
Required
We may test on any map with rectangular objects
Project 4: Picobot
Your goal is to….
1) Create a maze with
Go and Stop buttons
2) Read in commands that will guide the robot through the maze
0 xxxx -> N 1 10 Nxxx -> S 2 20 xExx -> W 3
Project 4: Picobot
Creating a maze
X = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,1,0,1],
[1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1],
[1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1],
[1,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,1],
[1,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,0,0,1],
[1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1],
[1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,0,1],
[1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1],
[1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0,1],
[1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,0,0,0,0,0,1],
[1,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1],
[1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,1,0,1,0,1],
[1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1],
[1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1],
[1,0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1],
[1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1],
[1,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1],
[1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,0,1],
[1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1],
[1,0,1,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1],
[1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,1,0,0,0,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
Your program should read maze
description from a file. If you mark
blue by 1, and white by 0, then the
maze could be represented as a 2D
list:
Project 4: Picobot
Creating squares….
#square in maze
win = GraphWin("MyWindow",
400, 400)
p1 = Point(0,355)
p2 = Point(400,400)
square5 = Rectangle(p1,p2)
square5.setFill(“blue")
square5.setOutline(“blue")
square5.draw(win)
#Exit button
p1 = Point(122,360)
p2 = Point(198,390)
square1 = Rectangle(p1,p2)
square1.setFill("gray")
square1.draw(win)
p = square1.getCenter()
t = Text(p, "Exit")
t.draw(win)
Project 4: Picobot
Figuring out when user clicks on a “button”
K = win.getMouse()
GoStop = 0
if K.getX() > LEFT_X and K.getX() < RIGHT_X and K.getY() > TOP_Y and K.getY() < BOTTOM_Y:
GoStop = 1
Project 4: Picobot
Remember to have the trail…
Project 4: Picobot
Reading in directions from a text file
0 xxxx -> N 1 10 Nxxx -> S 2 20 xExx -> W 3
Project 4: Picobot
Reading in directions from text file
f = open('map3.txt', 'r')
#read in all commands
text = f.read()
#split all commands
L = text.split()
f.close()
#everytime you get to an arrow grab the state
for i in range(len(L)):
if L[i] == '->':
if L[i-1] == 'xxxx':
Map3.txt…
0 xxxx -> N 1 10 Nxxx -> S 2 20 xExx -> W 3