EasyManuals Logo

LEGO MINDSTORMS Robots User Manual

LEGO MINDSTORMS Robots
226 pages
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Page #164 background imageLoading...
Page #164 background image
Figure 9-2.
The avoid behavior takes control of the robot when the bumper is pressed
There won't always be a one-to-one relationship between inputs and behaviors. It's entirely possible that one behavior will be triggered by some combination of inputs. Likewise, a single input
might trigger multiple behaviors, depending on the input's value.
Implementation
It's fairly easy to implement subsumption architecture on a system that includes preemptive multitasking. As you'll recall, the RCX's default firmware supports this feature. Our implementation of
subsumption architecture is written in NQC.
The basic idea is that each behavior is a separate task. The behaviors all run simultaneously, trying to control the robot according to their own rules. One additional task decides which behavior is
in charge and then sends its commands to the motors.
RoboTag behaviors
The robots in RoboTag actually need four different behaviors, shown in Figure 9-3. The basic cruise behavior is the same as before—it moves the robot forward. If one robot collides with the
other robot, the bumper is pressed. This causes the tag behavior to take control of the robot. If the robot drives over the edge of the playing field, the reading from the light sensor causes the
avoid behavior to assert itself. Finally, the top level behavior is tagged. This behavior is triggered if the robot has been tagged by the other robot.
Page 181
Figure 9-3.
RoboTag behaviors
I'll start by examining the NQC code for each behavior. Then I'll talk about how a behavior is selected and how the motors are controlled. In the next section, I'll present the entire source code for
RoboTag.
The cruise behavior is simple:
int cruiseCommand;
task cruise() {
cruiseCommand = COMMAND_FORWARD;
while (true) Wait(100);
}
cruise sets the cruiseCommand variable to the value COMMAND_FORWARD and then loops forever. Each behavior (task) has an associated command variable that holds the desired motor
output. cruise, for example, uses the cruiseCommand variable to hold the desired motor output. In this simple case, cruise always wants the robot to move forward. Later on, I'll show you
how this variable is used to determine what actually happens to the robot.
The next behavior is tag. Like cruise, tag has its own motor output variable, tagCommand:

Table of Contents

Questions and Answers:

Question and Answer IconNeed help?

Do you have a question about the LEGO MINDSTORMS Robots and is the answer not in the manual?

LEGO MINDSTORMS Robots Specifications

General IconGeneral
Product LineLEGO MINDSTORMS
CategoryToy
Age Range10+
Batteries RequiredYes
Memory64 MB RAM, 16 MB Flash
ConnectivityBluetooth, USB
SensorsTouch, Color, Gyro
Battery TypeAA
Interactive FeaturesProgrammable, Remote Control
App CompatibilityiOS, Android
ProcessorARM9
Pieces Count601
Battery Count6
App NameLEGO MINDSTORMS EV3 Programmer App

Related product manuals