AI on the Racetrack

advertisement
By Emily Cohen
Hit the Track!
 The first video racing game is said to be by Atari back
in 1974 called Grand Track 10
Now:
Then:
Bad Racing AI
 When competing against AI you should feel
challenged
 Not so challenging
 We are going to talk about the general steps to make a
good AI
Start at the Bottom
 In order to create a ‘good’ AI we must start from the
bottom
 Store as much information as possible in the road
 Two types of roads:
 Race Tracks
 Open Street Conditions
Divide it up
 Sectors:
 The track is divided up into multiple sectors


Defined by a doubly linked list that allows for forward and
backward traversal
Connected by Interfaces
Connect the Dots
 Interfaces are the basic building blocks of the race
track
 Define the left and rightmost boundaries
 Define possible driving lines
 The Sector linked lists point to Leading and Trailing
edge Interfaces
Drive on the Line!
 Driving lines used to define optimal paths between
interfaces
 Comprised of:


Forward vector
Right Vector – used to determine how far the car is from the
racing line
 Planes used to mark
boundaries of sector
 Use to check if car
is in particular sector
Approximating Racing Lines
Approach #1
 Record the path taken by a vehicle while under the
control of human player
 Good: Fast and efficient way of making accurate
approx to racings lines
 Bad: can not be used for randomly generated or player
created tracks
Approach #2
 Have predefined segments with precompiled racing
lines
 Good: not to much…
 Bad:
 Tracks are less random
 Racing lines change depending on what comes before
and after the current segment
Approach #3
 Lines of Minimum Curvature
 Repeatedly apply small forces to every set of three
contiguous points
 Gradually reduces the curvature
Lines of Minimum Curvature
 Good:
 Can be approximated quickly, efficiently , and reliably.
 Follows true racing lines accurately enough
 focuses on finding an approx to the path of minimum
curvature
 Finds the path the vehicle can travel at max speed
 Bad:
 Ignores details of the physics of the vehicle
 No sense of direction.
 Can produce errors in the way approx trades curvature
in one part of track off against curvature further along
Just For Fun
Where am I?
 It is easy to determine where you are on the track when
using sectors.
Floast DistAlongSector(const Csector& sector, const vector3& pos)
{
vector3 delta = pos – sector.drivingLinePos;
delta.y = 0.0f;
float dist = DotPorduct(sector.drivingLineForward, delta);
return (dist * lengthScale);
}
More Info Please
 Other relevant data about the environment should be
stored in each sector
 Path Type

Short cut, winding road, weapon pick-up rout etc.
 Terrain Type

Rugged terrain
 Walls
 Hairpin turn
 Break/Throttle

-1.0 to +1.0
Now for the AI…
 Goal: have the AI produce an output that emulates
human input
 Basic Framework:
 Finite-State Machine
 A Fixed Time-Step

Changing the Time-Step can cause issues because AI might
miss breaking points, or react to late to obstacles if the timestep is to long
Now for the AI… - con’t
 Controlling the car
 Simple structure:


Steering: x  range -1.0 to +1.0
Acceleration: y  <0.0 = breaking, >0.0 = acceleration
 Simplifying with 2D
 Project 3D coordinates onto XZ plane by zeroing Y
element and then normalizing
 This simplifies many calculations
State = STARTING_GRID
 The AI must initialize the car
 Pass in the starting grid location
 Sector pointer should be stored internally as the current
and last-valid sectors
 Last-valid sector helps to return the car if it is no longer
in a sector
 When the state is set to STATE_RACING, give little delay
before actually starting… more realistic
Weeeee
State = RACING
 Use linked list of sectors to traverse the track
 Also helps keep track of the car…
 If the car can’t be found on a sector that means it is
probably lost somewhere
 For that you switch to STATE_OFF_TRACK
What to do?
 Split Decisions
 Deciding what way to go when you have two paths
 Combination of AI’s current needs and path info
 Anticipating the Road Ahead
 Knowing your come up to a sharp bend
 Traverse sectors a certain distance ahead from car’s
current position
Turn Quick!
 Hairpin turns:
 Looking ahead can cause issues with hairpin turns
 Mark sectors as “hairpin left” or “hairpin right”

Cut the search short
 The AI will continue to target the start of the first sector.
Once the minimum search distance is reached, the AI
will then target the driving line ahead by this distance.

Result: The AI targets the first marked sector while breaking
to a reasonable speed, and then following the corner when
close enough
Turn Quick!
 Hairpin turns:
 Looking ahead can cause issues with hairpin turns
 Mark sectors as “hairpin left” or “hairpin right”

Cut the search short
 The AI will continue to target the start of the first sector.
Once the minimum search distance is reached, the AI
will then target the driving line ahead by this distance.

Result: The AI targets the first marked sector while breaking
to a reasonable speed, and then following the corner when
close enough
Get Out of My Way
 Overtaking:
 As we say before there is an overtaking line
 Just use the index of the alternate driving line to follow
 Improve upon the AI’s over taking ability by creating
multiple overtaking lines.
 Chose appropriate line based on other car’s relative
position and what line is on the inside corner
Some Other States
 STATE_AIRBORN
 Some tracks have jumps
 Need to prepare the car for a controlled landing
 Set steering straight ahead and put acceleration to full
 STATE_OFF_TRACK
 When car is no longer on in any of the sectors
 Keeping track of last valid sector
Catch up!
 If the AI is doing “too well”
 Limit AI’s top speed to proportion to how far it is in the
lead
 Break earlier for corners and accelerate slower
 If weapons involved, AI could only target other AI
 What NOT to do
Around Town
 Handling Open Street Conditions
 Random network of roads and intersections
 First need to create a map that the AI can handle
Roads
 Roads represent space between two intersections
 Straight or Curved
 Might include sidewalks with obstacles
 Any two roads at an intersection define a sharp turn
with an angle between them > 45˚
Roads
 Roads represent space between two intersections
 Straight or Curved
 Might include sidewalks with obstacles
 Any two roads at an intersection define a sharp turn
with an angle between them > 45˚
Navigating the City
 Figure out what road or intersection car is on
 Can then determine the relative location in the primary
route
 Plan immediate rout to navigate up coming obstacles
 Update Road Cache
 Includes current and next two road segments defined
by primary route
Navigating the City… con’t
 Enumerate all possible routes for traversing road
segment
 Route planning distance
 Longer


provide better choices, see potentially blocked routes
Uses up more CPU time
Watch Out
 Obstacle map:
 Bucket system for organizing obstacles on the road
 Breaks the road into smaller subsections
 Intersections are defined as an obstacle bucket
 When a collision happens:
 Vehicle is completely under control of physics engine
 Must backup (if visible)… manually reposition
Buckets
Getting around Obstacle
Handling an Intersection
 The arc of a circle defines the path through a sharp
turn
How Fast Can I Go?
 Usually AI tries to go as fast as possible
 Find fastest way to go through sharp turn:
 Attain max speed without losing friction
Velocity
v = √μgR
Coefficient of friction
Radius
Gravity
Breaking
 Once you get the target velocity figure out how long
before you reach the turn:
 Time to Reach the Turn (T) = Distance to Turn/Speed
 Then calculate breaking force:
 Breaking Force =
(Current Speed – Target Speed)/(T*μ*g)
Good ol’ Physics
 If the car is modeled with even a basic physics
simulator the car will be subjected to under-steering
and over-steering.
 This causes spinning and missing a turn
 3 Steps:
 Detect the Car’s Stability
 Testing for a Stability
 Correcting the Car
Detecting Stability
 The stability can be determined by a few comparisons
of the sideways velocities of each wheel
 Find the dot product of the velocity of the wheel and
the unit-length right direction of its orientation
Testing for Stability
Correcting the Car
Case
Velocity Signs Correction
Under-Steer
Same
Abs(FrontVel + RearVel)/UndersteerRange
Over-Steer 1
Same
Abs(FrontVel - RearVel)/OversteerRange
Over-Steer 2 Different
(Abs(RearVel)-Abs(FrontVel))/OversteerRange
 Summed velocities divided by range factor – this
reduces the correction amount to a value between 0
and 1
 Correction value should be added or subtracted from
the current steering positions depending on sign on dx
Summary
 Sectors, Interfaces and the information stored in the
track
 Two types of tracks: Race tracks and Open Street
conditions
 Driving lines, and some ways to generate them
 Accounting for a physics engine to correct over and
under turning
Questions?
Download