PlayCodeShare RobotLab
Computer Science can help us understand things better, for example it allows us to model a variety of phenomena and conduct many experiments which would be impossible or too expensive in real life.
Today we are going to be programming Braitenburg Vehicles.
Braitenburg Vehicles
Braitenburg vehicles are one of the simplest examples of biologically inspired robotics. They use simple connections between sensors and motors to produce seemingly complex behaviour.
The sensor-motor connections can be set up in two ways as shown in the picture. In both cases increased light on the sensor results in the motor turning faster.
- In the first state (fear) the sensor on the left is connected to the motor on the left and the sensor on the right is connected to the motor on the right. A vehicle set up like this will speed up when exposed to more light and tend to turn away from a light source.
- In the second state (aggression) the sensor-motor connections are crossed. Now if the light source is to one side, the vehicle will turn towards it with increasing speed. This is the most interesting state for interaction as the robot will follow a moving light source.
You will be using a pre-built Lego NXT robot. The robot will have 2 motors connected to the output ports and three sensors (a sonar sensor and two light sensors) connected to the input ports. Communication with the robot is performed over a USB connection, where you can transfer your code to the robot.
The ports are labelled as shown in the image below:
We will be using leJOS, this allows us to program the robots using Java - the same programming language you are using in Processing. Java is very fussy about spelling and case so be careful with that.
Getting Started
Download and unzip RobotLabLight.zip. Open the Atom text editor. Use File > Add Project Folder to add the RobotLabLight Project Folder. Go to RobotLabLight.java.
Programming a Braitenburg Vehicle
To program our own Braitenburg Vehicles we need to:
- Get a reading from the light sensor
- Use that reading to set the speed of our motor
- Get our robot to move
The code in RobotLabLight.java contains the following lines:
import lejos.nxt.*; public class RobotLabLight { public static void main(String[] args) throws Exception { //set up your left and right light sensor LightSensor leftlight = new LightSensor(SensorPort.S2); //set up your left and right motors here NXTRegulatedMotor leftMotor = new NXTRegulatedMotor(MotorPort.B); while (true) { //save the values returned from the left and right light sensor here int leftlightVal = leftlight.getLightValue(); //draw to the LCD screen LCD.drawInt(leftlightVal, 4, 0, 0); //use the sensor values to set the speed of the left and right motor //scale as the values are between 0-100 leftMotor.setSpeed(leftlightVal*10); //tell left and right motors to move forward leftMotor.forward(); } //end while }//end main }//end RobotLabLight
This code sets up a light sensor and a motor just like you would set up the size and background of your canvass in processing.
The while loop acts like the draw loop in Processing, running over and over again until the program stops.
Within the while loop we
- Create a variable called
leftlightVal
. Computer programs use variables to store information. Here we are storing the amount of light measured by the left light sensor (the brighter the light, the higher the light value that will be stored up to a maximum of 100) - We then use
getLightValue()
to get the value from the sensor to store inleftlightVal
- this will be a number between 0 and 100 (the brighter the light the higher the light value).getLightValue()
is an example of a function - a function is a small section of a program that performs a specific task that can be used repeatedly throughout a program - We then use
LCD.drawInt()
to print the value stored inleftlightVal
to the robot's LCD screen. - We also use the number stored in
leftlightVal
to set the speed of theleftMotor.
usingleftMotor.setSpeed(leftlightVal);
- Finally we tell the
leftMotor
to move forward usingleftMotor.forward();
- To compile and run the code you can press F9 (make sure your robot is connected via the USB 2.0 port and is turned on)
EX1: Can you alter the code to set up the correct ports for the leftLightSensor
and leftMotor
EX2: Can you add the code to set up the rightLightSensor
and rightMotor
EX3: Add the code create a variable called rightLightVal
to store the value returned by rightLightSensor.getLightValue();
EX4: Use the value of rightLightVal
to set the rightMotor
speed
EX5: Add the code to get the right motor to move forward.