Home
Projects
Downloads
Resources
Contact

 

 

 

 

 

Projects > NeuroDriver > Project Evolution

Contents

1. Overview

2. Demo

3. Detailed Information

4. Project Evolution
5. Resources used for this project


Project Evolution

19-Jun-05 CarND released

CarND is used to test and tweak NeuroDriver 2 physics.
It includes Win32 binaries, full C++ source code and an MSVC6 project.
The physics code is identical to the 
NeuroDriver 2 physics code (at time of writing).





12-Apr-04

NeuroDriver 2 Enhanced Track Format is ready for a ride! (see preview clip & screenshots)

The track format of NeuroDriver has been greatly enhanced since the first version :

* The track file is now in XML format and is easier to edit (a track editor is also planned)

* More parameters (bias & tension) were added for controling the exact curvature of each track segment

* New track texture

* Auto-Generation of scenery objects around track - configurable in track XML file and very easy to use!

Objects (trees, houses, banners, things, etc.) can be placed automatically around the track margins during the track generation phase.

By adding a short entry to the track XML file you can control the following parameters:
-
Object's 3D model (tree, car, jelly-fish, etc.)
-
Start Waypoint (objects will be placed starting from this track waypoint)
-
End Waypoint (where to stop placing objects)
-
Step Size (place object every X waypoints)
-
Distance (distance from track margins)
-
Side (on which side of the track to place the objects - Left, Right or Both)

Several Auto-Generate entries can be added to the track XML file, each with its own parameters.
So it is very easy to populate the track area with hundreds of objects without having to actually
place each individual object by hand.

Here's a sample track XML file: sample_track.xml (comments & suggestions are welcome)

 

 

 

 

 


31-Jan-04

NeuroDriver 2 Announced - check out the early preview

NeuroDriver 2 builds on top of the NeuroDriver framework.

A simple graphics engine was developed which works with a scene graph of objects.
Most objects inherit from a Geometry class (e.g.
GeomMesh, GeomStatic, etc. )
A transofrmation matrix is attached to each Geom when it is inserted into the graph.

To ensure optimal resource management, loading of resources (meshes, textures, fonts)
is handled by the Framework's resource system (ResourceSys).

All data files (tracks, car config files, etc.) are now in XML format (I use tinyXML for that)

Every object added to the world can interact with the physics engine (built on top of ODE)
This adds a whole new dimension to the simulation - vehicles can now collide with scenery objects.
This motivated me to modify the neural-network AI to work with proximity sensors,
The vehicle is surrounded by several sensors which measure the distance to the nearest obstacle,
The distances are then used as input to the neural-network which controls the vehicle.

 

 

 

 

09-Aug-03

The NeuroDriver framework is finally complete.

I've implemented the following sub-systems:

LogSys - provides file logging services. supports priorities, timestamp, variable argument list (printf style).

TimeSys - provides timing services with both a real-time clock and a simulation-time clock.

InputSys - provides user input services such as Keyboard input processing.

Graphics Sys - provides low-level rendering services through a RenderDevice interface.

Resource Sys - provides interfaces to resource managers (e.g. TextureManager)

Interface pointers to all of the above sub-systems are obtained through a singleton Systems object.
The NeuroDriver application is built on-top of these sub-systems.

I'm now working on adding new features to NeuroDriver for the next version.
First thing on the list is an improved graphics engine. then a new track system and improved AI.
I'll keep updating this log during development and post new screenshots when they become available.

 

 

 


07-Jun-03

I've completed implementing the Graphics sub-system.
It uses abstract interface classes so it can be implemented by any 3D API.
(Currently it only has a Direct3D8 implementation).
I removed all the D3D code from the main application so it only uses the Graphics system
interface - this makes it easier to port the application to a different API in the future.

I still need to implement the Resource system and the Input system and then I can finally
concentrate on adding new features to NeuroDriver and release a new version.

 

 

 

 

05-Apr-03

The first phase of the NeuroDriver code re-structuring is now complete.
The new version uses the State pattern to manage game flow (main menu, driving modes, etc.)
It also incorporates a simple game framework comprised of Systems (InputSys, LogSys, VisualSys, etc.)
At the moment, the skeleton for these systems is in place and only the LogSys is implemented, so I still have
a long way to go.

 

 

 

 

31-Mar-03

I've released the source code for my neural-network class including a sample application which
demonstrates how a neural network can be used in a Role Playing Game.
The sample application also comes with full source code.

 

 

 

 

05-Feb-03

Currently I'm re-structuring the NeuroDriver code and making it more organized and modular.
Afterwards, I will probably release the full source-code, so stay tuned.

I'm also working on a simple game framework for use with my current and future projects.
It is based on several articles from the Game Programming Gems books.
Eventually, NeuroDriver will be adopted to work with this framework.
Then I'll
start adding features and improve both the visuals and AI.

 

 

 

 

06-Jan-03

The initial version of the project, as featured on flipcode IOTD 06-Nov-2002 used only
Three values as inputs for the neural-network:

1. Speed - current car speed
2. Heading Factor - the sinus of the angle between the car's direction and the next waypoint
3. Traction - a value representing the amount of traction the wheels provide

This gave nice results but I could only train the driver to "hug the center-line" of the track.
I then changed the inputs and instead of feeding the network only the Heading Factor for the next waypoint,
I fed it the Heading Factors for the next 3 waypoints.
This gave the network a "sense" for the shape of the track in-front of it (on straight sections the
heading factors are
similar and on turns they differ from each other).
This change greatly improved the driver's steering behavior.

The next problem I encountered was that the AI driver would flip-over during turns.
In theory, the Traction input value should have caused the driver to slow down when it was about
to lose traction (when Traction value starts decreasing from 1.0 towards 0.0 ).
But
in practice, the AI driver only started slowing down when it was already inside a turn which most of
The times ended with the car flipping over.

What I did was replace the Traction input with a TurnFactor input.
The TurnFactor value is the the delta between HeadingFactors of several waypoints in front of the car.
This gives the AI driver "turn prediction" capability, similar to a human driver looking ahead and seeing a turn
coming up on the horizon.
With the addition of the TurnFactor input, I could finally train the driver to brake before turns.
When a turn is several waypoints ahead of the car, the TurnFactor value increases and the AI driver now
Slows down, enters the turn at a reasonable speed and does not flip-over.

 

Next: Resources used for this project >

 

Copyright © 2002 - 2004 Gideon Pertzov. All Rights Reserved.
Web Template Graphics by Art for the web