Building An Autonomous Vehicle
Now that you have built a robot, experiment with the servo functions so that the robot moves relatively straight. (Fred Martin, the creator of the handyboard wrote an article titled, “Real Robots Don’t Drive Straight”). We now want to give the robot some behaviors that will allow it to "drive autonomously".
Creating a Learning
Agent - Write a program that
implements the back propagation algorithm discussed in class. Modify the given neural net code to implement
a neural network with 2 inputs, 2 hidden nodes, and 2 output nodes. You will need this code to program your
robots. Hand in one program per robot
team. The source code for a two input,
one output neural network can be found at http://www.cs.csi.cuny.edu/~imberman/ai/bpnet.txt
and http://www.cs.csi.cuny.edu/~imberman/ai/mainneuralnet.txt. The source code is downloadable and will
run.
Important
consideration
These are actual
training examples used by a former student for the project when we used the
Handy Board. The Arduino will require
different values but the logic is similar.
The first two arguments to the train function are values from the photosensors. The
last two arguments will be values to run the motors.
// straight
bp.Train(112,107,.025,.025);
bp.Train(120,115,.025,.025);
// off to the right
bp.Train(107,36,.050,.020);
bp.Train(108,36,.050,.020);
// off to the left
bp.Train(54,111,.020,.050);
bp.Train(63,107,.020,.050);
The robot's photosensors are very sensitive to the amount of light
available. This student multiplied by a
scalar of that was half that needed for trained neural network, before he input
them to the motor function. Why did he
do this?? Because he needed to slow the
robot down more and didn't feel like redoing his training examples!!!
You will also need
to write a small program that will output values from the photosensors
so that you can create the training examples.
Given the way you
position the robot on the black tape road, and
the sensor readings from the robot, estimate the parameters needed for the left and right motor inputs to
control the rear wheels. Therefore, each
training example will consist of two inputs (the sensor readings), and two
outputs (the values passed to the right wheel's motor function and the left
wheel's motor function). You may have to
write some small programs and experiment with the robots in order to get a good
set of training examples.
Use these training
examples to train your neural network.
Use the modified neural
network code you created for this project to program your robot with a neural
network. Take the trained neural network function, and modify it for use in
the Arduino IDE. Remember, the code as
given produces decimal output. The
training code (modified code) of the program is executed in the desktop
environment, with the Microsoft Visual Studio C++ compiler. Once you have the weight values for the
neural network equations, incorporate them into the Arduino IDE version neural
network RUN program (only the Run portion of the modifed
code) and try your robot on the road.
You may have to repeat several times before your robot reasonably
follows the road. One important thing to
remember is to make your robot move SLOW
enough so that it has time to take readings from the road and act upon these
readings.
WHAT YOU NEED TO
HAND IN
All Arduino code
including:
1. Modified neural
network code
2. Arduino program
that reads values from photo sensors and displays these on LCD screen or serial
monitor. Instructions on using the LCD
shield can be found here:
http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_%28SKU:_DFR0009%29
3. An Arduino
version of the trained neural network function for the 2 input 2 output neural
network
HAVE YOUR INSTRUCTOR
INITIALIZE YOUR ROBOT
CHECKOFF SHEET