LEGO MINDSTORMS Robots Manual page 164

Unofficial guide
Table of Contents

Advertisement

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.
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:
Figure 9-2.
The avoid behavior takes control of the robot when the bumper is pressed
Figure 9-3.
RoboTag behaviors
Page 181

Hide quick links:

Advertisement

Table of Contents
loading
Need help?

Need help?

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

Questions and answers

Subscribe to Our Youtube Channel

Table of Contents