| |
|
|
||||
![]() |
||||||
| |
|
|||||
|
Overview
of Data Flow The
data flow begins with the Stimulus Detection Unit, which filters sound
events and visible objects and updates the Known Goals queue. The Goal
Selector then compares the Known Goals and Acquired Goals against the
personality and commander directives and then selects Target Goals.
The navigator determines the best route to get to a position goal using
a path finding algorithm. The direction and position goal servos drive
the body until the Target Goals are achieved and then the Acquired Goals
queue is updated.
The stimulus detection fields are:
The response
fields are: Modeling stimulus detection in a physical way can achieve symmetry and help fulfill the user's expectations (i.e. if I can see him, he should be able to see me). This also prevents the AI from receiving hidden knowledge and having an unfair advantage. The stimulus detection unit models the signal strength of an event as a distance threshold. For example, the HeardGunFire event can be detected within a distance of 250 meters. This threshold distance can be attenuated by a number of factors. If a stimulus event is detected, it is encoded into a BRAIN_GOAL and added to the known goals queue. This implementation of stimulus detection considers only three sensory modalities: visual, auditory and tactile. Visual
stimulus detection begins by considering all humans and objects within
the field of view of the observer (~180 degrees). A scaled distance
threshold is then computed based on the size of the object, object illumination,
off-axis angle and tangential velocity. If the object is within the
scaled distance threshold, a ray cast is performed to determine if the
object is not occluded by the world. If all these tests are passed,
the object is encoded into a BRAIN_GOAL. For example, a generic human
can be encoded into a SeenEnemyGoal or generic object can be encoded
into SeenExplosiveGoal . As
sounds occur in the game, they are added to the sound event queue. These
sound events contain information about the source object type, position
and detection radius. Audio stimulus detection begins by scanning the
sound event queue for objects within the distance threshold. This distance
threshold can be further reduced by an extinction factor if the ray
from the listener to the sound source is blocked by the world. If a
sound event is within the scaled distance threshold, it is encoded into
a BRAIN_GOAL and sent to the known goals queue. When
the known goals queue is updated with a BRAIN_GOAL, a test is made to
determine if it is was previously known. If it was previously known,
the matching known goal is updated with a new time of detection and
location. Otherwise the oldest known goal is replaced by it. The PREVIOUSLY_KNOWN
flag of this known goal is set appropriately for directives that respond
to the rising edge of a detection event. Injuries
and collision can generate tactile stimulus detection events. These
are added to the acquired goals queue directly. Tactile stimulus events
are primarily used for the generation of vocal responses. The Goal Selector The
goal selector chooses target goals based on stimulus response directives.
The grammar for the directives is constructed as a simple IF THEN statement:
IF
I detect an object of type X (and priority weight Y is best) THEN call
target goal function Z. The
process of goal selection starts by evaluating each active directive
for a given personality. The known goals queue or the acquired goals
queue is then tested to find a match for this directive object type.
If a match is found and the priority weight is the highest in the list,
then the target goal function is called. This function can perform additional
logic to determine if this BRAIN_GOAL is to be chosen as a target. For
example, if the AI is already within the target distance of a BRAIN_GOAL's
position, an alternate goal (i.e. direction) could be chosen. Once a
target goal is selected, the position, direction and posture goals can
be assigned. Unconditional directives do not require a matching object
type to be called. These are used for default behavior in the absence
of known goals. The
priority weight for a directive can decay at a linear rate based on
the age of a known goal (current time minus time of detection). For
example, if an AI last saw an enemy 20 seconds ago and the directive
has a decay rate of 0.01 units per second, the priority decay is: -2.
This decay allows the AI's to lose interest in known goals that haven't
been observed for a while. The
goal selector can assign the three target goals (direction, position
and posture) orthogonally or in a coupled fashion. In addition to these
target goals, the goal selector can also select an inventory item and
directly activate audio responses. When a direction goal is assigned,
the action at target field can be set. For example, the stationary attack
directive sets the action at target field to IO_FIRE. When the direction
servo gets within the pointing tolerance threshold, the action is taken
(i.e. the gun is fired). When a position goal is selected, an inner
and outer radius are set by the directive - the outer radius specifies
the distance threshold for the goal selector to acquire, and the inner
radius is the distance threshold that the position goal servo uses for
completion. The inner and outer radius thresholds are different by a
small buffer distance (~250 millimeters), so as to prevent oscillations
at the boundary. When a position goal is acquired, the action at target
can be evoked. For example, the Demolish Target directive sets the action
at goal field to IO_USE_INVENTORY. This directive also selects the satchel
explosive from the inventory. Some directives can set the posture goal;
for example, the StationaySniperAttack directive sets the posture goal
to prone. Likewise the HitTheDirt directive sets the posture goal to
prone. |
|
|