Remove svn:keywords property from the repository

These properties are not transmitted with git-svn(1) [1], which might
then cause failed patches when modifying lines close to these
properties.


git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9554 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 6ed21e1fe12d01a370842418c35722c75117a30a
Former-commit-id: 8ecd21b7c0211cd000b10b3f0032980f63c06398
This commit is contained in:
xavi92 2024-10-02 15:30:18 +00:00
parent 3ee635abb7
commit 4681971d6d
401 changed files with 610 additions and 1071 deletions

View file

@ -82,7 +82,7 @@ IF(NOT OPTION_AUTOVERSION)
ELSE(NOT OPTION_AUTOVERSION)
# Use SVN HeadURL property on this CMakeLists.txt file in order to automatically get the current version
SET(HEAD_URL "$HeadURL$")
SET(HEAD_URL "$HeadURL: svn+ssh://xavi92@svn.code.sf.net/p/speed-dreams/code/trunk/CMakeLists.txt $")
# Define regular expressions
SET(REGEX_TAG "^\\$HeadURL:.*speed-dreams/code/tags/([^/\\$ ]*).*\\$$")

View file

@ -20,7 +20,6 @@
# it the way we need, so we needed another solution).
# Heavily based on OpenScenGraph cmake scripts.
# @author Brian Gavin, Jean-Philippe Meuret
# @version $Id$
################################################################################################
# Find a generic dependency, handling debug suffix

View file

@ -17,7 +17,6 @@
# @file CMake install macros
# @author Mart Kelder, J.-P. Meuret
# @version $Id$
# Get the real pathname of a target (taking care of the MSVC configuration-driven variables).

View file

@ -17,7 +17,6 @@
# @file Internal dependencies (include and libs)
# @author Mart Kelder, J.-P. Meuret
# @version $Id$
# SD include dirs macros.
MACRO(ADD_INTERFACE_INCLUDEDIR)

View file

@ -17,7 +17,6 @@
# @file Main CMake configuration file (to be included in every CMakeLists.txt)
# @author Mart Kelder
# @version $Id$
#MESSAGE(STATUS "Processing ${CMAKE_CURRENT_SOURCE_DIR} ...")

View file

@ -17,7 +17,6 @@
# @file CMake configuration options
# @author Mart Kelder, J.-P. Meuret
# @version $Id$
INCLUDE(CMakeDependentOption)

View file

@ -17,7 +17,6 @@
# @file Robots-related macros
# @author Mart Kelder
# @version $Id$
# Robot .def file generation for Windows builds with MSVC compilers
# ROBOTNAME : Name of the robot

View file

@ -17,7 +17,6 @@
# @file Generic macro argument parser
# @author Mart Kelder
# @version $Id$
# Internal use only : Get the list of specified keywords
MACRO(SPLIT_ARGN_KEYWORDS SAK_RESULT)

View file

@ -17,7 +17,6 @@
# @file 3rd party dependencies (include and libs)
# @author Mart Kelder, J.-P. Meuret
# @version $Id$
MACRO(ADD_SQLITE3_INCLUDEDIR)

View file

@ -4,9 +4,8 @@
#
# file : torcsdoc.conf
# created : Mon Jan 31 23:57:03 CET 2000
# copyright : (C) 2000,2002 by Eric Espie
# email : torcs@free.fr
# version : $Id: torcsdoc.conf.in,v 1.6 2003/06/24 21:01:54 torcs Exp $
# copyright : (C) 2000,2002 by Eric Espie
# email : torcs@free.fr
#
##############################################################################
#
@ -30,19 +29,19 @@
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of word surrounded
# by quotes) that should identify the project.
# by quotes) that should identify the project.
PROJECT_NAME = @PACKAGE@
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = @VERSION@
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
OUTPUT_DIRECTORY = doc/manual/api
@ -50,7 +49,7 @@ OUTPUT_DIRECTORY = doc/manual/api
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# The default language is English, other supported languages are:
# Dutch, French, Italian, Czech, Swedish, German and Japanese
OUTPUT_LANGUAGE = English
@ -93,7 +92,7 @@ HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.
@ -101,7 +100,7 @@ BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
REPEAT_BRIEF = YES
@ -126,7 +125,7 @@ FULL_PATH_NAMES = YES
STRIP_FROM_PATH = @SPEED_DREAMS_BASE@/
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation.
@ -191,16 +190,16 @@ TAB_SIZE = 8
# configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = src/libs/ src/interfaces/ src/doc/ src/modules/
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.
FILE_PATTERNS = *.cpp *.h
@ -212,7 +211,7 @@ FILE_PATTERNS = *.cpp *.h
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE =
@ -223,27 +222,27 @@ EXCLUDE =
EXCLUDE_PATTERNS =
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.
EXAMPLE_PATTERNS =
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH = doc/manual/img
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
@ -266,20 +265,20 @@ GENERATE_HTML = YES
HTML_OUTPUT = ./
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
HTML_HEADER = src/doc/header.html
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.
HTML_FOOTER = src/doc/footer.html
# The HTML_STYLESHEET tag can be used to specify a user defined cascading
# style sheet that is used by each HTML page. It can be used to
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet
@ -334,7 +333,7 @@ LATEX_OUTPUT =
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, a4wide, letter, legal and
# by the printer. Possible values are: a4, a4wide, letter, legal and
# executive. If left blank a4wide will be used.
PAPER_TYPE = a4wide
@ -344,9 +343,9 @@ PAPER_TYPE = a4wide
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
# the first chapter. If it is left blank doxygen will generate a
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
LATEX_HEADER =
@ -379,7 +378,7 @@ MAN_OUTPUT =
MAN_EXTENSION = .3
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
@ -389,7 +388,7 @@ MAN_EXTENSION = .3
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
# names in the source code. If set to NO (the default) only conditional
# names in the source code. If set to NO (the default) only conditional
# compilation will be performed.
MACRO_EXPANSION = NO
@ -408,7 +407,7 @@ INCLUDE_PATH = export/include/
# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed.
PREDEFINED = DEBUG
@ -420,10 +419,10 @@ PREDEFINED = DEBUG
EXPAND_ONLY_PREDEF = NO
#---------------------------------------------------------------------------
# Configuration options related to external references
# Configuration options related to external references
#---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tagfiles.
# The TAGFILES tag can be used to specify one or more tagfiles.
TAGFILES =
@ -444,10 +443,10 @@ ALLEXTERNALS = NO
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the search engine
# Configuration options related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be
# The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
@ -459,13 +458,13 @@ SEARCHENGINE = NO
CGI_NAME = search.cgi
# The CGI_URL tag should be the absolute URL to the directory where the
# cgi binaries are located. See the documentation of your http daemon for
# cgi binaries are located. See the documentation of your http daemon for
# details.
CGI_URL =
# The DOC_URL tag should be the absolute URL to the directory where the
# documentation is located. If left blank the absolute path to the
# documentation is located. If left blank the absolute path to the
# documentation, with file:// prepended to it, will be used.
DOC_URL =
@ -481,7 +480,7 @@ DOC_ABSPATH =
BIN_ABSPATH = /usr/local/bin/
# The EXT_DOC_PATHS tag can be used to specify one or more paths to
# The EXT_DOC_PATHS tag can be used to specify one or more paths to
# documentation generated for other projects. This allows doxysearch to search
# the documentation for these projects as well.
@ -497,13 +496,13 @@ EXT_DOC_PATHS =
HAVE_DOT = YES
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen will generate a graph for each documented
# class showing the direct and indirect inheritance relations. Setting this tag to YES will force the the CLASS_DIAGRAMS tag to NO.
# class showing the direct and indirect inheritance relations. Setting this tag to YES will force the the CLASS_DIAGRAMS tag to NO.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen will generate a graph for each documented
# class showing the direct and indirect implementation dependencies (inheritance, containment, and class references variables)
# of the class with other documented classes.
# of the class with other documented classes.
COLLABORATION_GRAPH = YES
@ -514,29 +513,29 @@ INCLUDE_GRAPH = YES
# If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented header file showing the documented files that directly
# or indirectly include this file.
# or indirectly include this file.
INCLUDED_BY_GRAPH = YES
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen will graphical hierarchy of all classes instead of a textual one.
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
CALL_GRAPH = YES
# This tag can be used to specify the path where the dot tool can be found. If left blank, it is assumed the dot tool can be found on the path.
# This tag can be used to specify the path where the dot tool can be found. If left blank, it is assumed the dot tool can be found on the path.
#DOT_PATH =
# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height (in pixels) of the graphs generated by dot.
# If a graph becomes larger than this value, doxygen will try to truncate the graph, so that it fits within the specified constraint.
# Beware that most browsers cannot cope with very large images.
# Beware that most browsers cannot cope with very large images.
#MAX_DOT_GRAPH_HEIGHT =
# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width (in pixels) of the graphs generated by dot.
# If a graph becomes larger than this value, doxygen will try to truncate the graph, so that it fits within the specified constraint.
# Beware that most browsers cannot cope with very large images.
# Beware that most browsers cannot cope with very large images.
#MAX_DOT_GRAPH_WIDTH =
@ -544,4 +543,3 @@ CALL_GRAPH = YES
# the meaning of the various boxes and arrows in the dot generated graphs.
GENERATE_LEGEND = YES

View file

@ -19,7 +19,6 @@
/** @file
@author <a href=mailto:torcs@free.fr>Eric Espie</a>
@version $Id$
*/
#ifndef _SD_DOC_H_

View file

@ -1,9 +1,8 @@
<!--
<!--
file : footer.html
created : Mon Jan 31 23:55:07 CET 2000
copyright : (C) 2000 by Eric Espie
email : torcs@free.fr
version : $Id$
copyright : (C) 2000 by Eric Espie
email : torcs@free.fr
-->
<!-- This program is free software; you can redistribute it and/or modify -->

View file

@ -1,10 +1,9 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<!--
<!--
file : header.html
created : Mon Jan 31 23:55:52 CET 2000
copyright : (C) 2000 by Eric Espie
email : torcs@free.fr
version : $Id$
copyright : (C) 2000 by Eric Espie
email : torcs@free.fr
-->
<!-- This program is free software; you can redistribute it and/or modify -->

View file

@ -5,7 +5,6 @@
created : Wed Feb 25 18:27:13 CET 2004
copyright : (C) 2004-2006 by Bernhard Wymann, 2009 The Speed Dreams Team
web : speed-dreams.sourceforge.net
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -155,7 +154,7 @@
<a href="http://speed-dreams.sourceforge.net" target="_parent">Speed Dreams</a>, <b>an Open Motorsport Sim</b>,
is a motorsport simulation, which allows you to drive in races against AI opponents (simulated by
the computer). You can also develop your own computer-controlled driver (also called a robot) in
C or C++ (or even in Delphi, as <a href="http://?????">Wolf-Dieter Beelitz</a>).
C or C++ (or even in Delphi, as <a href="http://?????">Wolf-Dieter Beelitz</a>).
</p>
<p>
Speed Dreams is "Open Source" (GNU General Public License Version 2 or later).
@ -170,7 +169,7 @@
more challenging AI opponents, and many other exciting new features to come soon (network, force feedback, career mode ...).
</p>
<p>
Some long time TORCS-addicted developers and artists immediately joined them in the core developers team :
Some long time TORCS-addicted developers and artists immediately joined them in the core developers team :
Andrew Sumner, Brian Gavin, Eckhard Jager, Mart Kelder and Wolf-Dieter Beelitz,
quickly followed by Gabor Kmetyko and Haruna Say.
Christos Dimitrakakis, Sebastian Heni and Kristof Kaly-Kullai also contribute a lot.
@ -189,10 +188,10 @@
<p>
Yes, there is some documentation available. Look at the official
<a href="http://speed-dreams.sourceforge.net" target="_parent">Speed Dreams site</a> and on
the under-construction <a href="http://sourceforge.net/apps/trac/speed-dreams">SF.net Wiki</a>.
the under-construction <a href="http://sourceforge.net/apps/trac/speed-dreams">SF.net Wiki</a>.
You can find installation instructions <a href="http://speed-dreams.svn.sourceforge.net/viewvc/speed-dreams/trunk/INSTALL?view=markup">here</a>,
the TORCS robot tutorial <a href="http://www.torcs.org">here</a>,
instructions about how to use Speed Dreams <a href="http://???/how_to_driver.html">here</a>.
instructions about how to use Speed Dreams <a href="http://???/how_to_driver.html">here</a>.
A very brief track howto is available
<a href="http://www.idiap.ch/~dimitrak/torcs/track-howto.html" target="_parent">here</a>,
there is as well a <a href="http://katergo.rege.org/projects/trackeditor" target="_parent">track editor</a> available,
@ -214,7 +213,7 @@
<h3><a name="c1_5">1.5 What are the future plans ?</a></h3>
<p>
Besides maintenance and bugfixing, the develoment team is currently working
on network gaming, racer life-time career mode, full weather simulation, improved engine sound, new tracks ;
on network gaming, racer life-time career mode, full weather simulation, improved engine sound, new tracks ;
force feedback, new car sets with AI opponents will also be there for the next release (2.0) ;
improved physics, better inside view, replay, improved graphic rendering, improved performances are also domains in which we'll be working in the mid-term.
</p>
@ -235,13 +234,13 @@
</p>
<h3><a name="c1_8">1.8 Why don't you replace GLUT with SDL ?</a></h3>
<p>
We actually are doing so : next release will no more use GLUT.
</p>
<h3><a name="c1_9">1.9 Why don't you replace PLib with OGRE 3D / OSG ?</a></h3>
<p>
We are currently thinking about starting to move that way ;
but we have to rewrite the whole 3D graphics module from scratch ...
@ -251,7 +250,7 @@
<h3><a name="c1_10">1.10 Are there official championships ?</a></h3>
<p>
Yes, you can find offline robot championships in the
Yes, you can find offline robot championships in the
<a href="http://www.berniw.org/trb" target="_parent">TORCS Racing Board</a>.
</p>
<p>
@ -315,7 +314,7 @@
<h3><a name="c2_3">2.3 What are the software requirements ?</a></h3>
<p>
You need recent, working and properly configured OpenGL/DRI drivers.
You need recent, working and properly configured OpenGL/DRI drivers.
</p>
<p>
You need also several 3rd party libraries :
@ -334,8 +333,8 @@
</p>
<p>
Note: Under x86_64 Linux, you need to set the <b>&quot;-fPIC&quot;</b> compiler switch when
compiling PLib (export CFLAGS=&quot;-fPIC&quot;, export CPPFLAGS=&quot;-fPIC&quot;,
export CXXFLAGS=&quot;-fPIC&quot;).
compiling PLib (export CFLAGS=&quot;-fPIC&quot;, export CPPFLAGS=&quot;-fPIC&quot;,
export CXXFLAGS=&quot;-fPIC&quot;).
Under Windows, make sure you compile all the 3rd party libraries using
the <b>&quot;Multi-threaded DLL&quot;</b> run-time C library.
</p>
@ -410,8 +409,8 @@
<p>
If the compiler stops with the above message you have probably OpenGL header files installed which do
not define the GL_TEXTURE0_ARB and other symbols. If you have updated your NVidia drivers to 6xxx
you will experience this error (NVidia removed those definitions...).
To fix it, you need to install a gl.h which defines the missing symbols.
you will experience this error (NVidia removed those definitions...).
To fix it, you need to install a gl.h which defines the missing symbols.
You can get it from your old (5xxx) NVidia drivers or from Mesa (the problem is not the driver itself).
</p>
@ -504,7 +503,7 @@ exception$LIBDIR/speed-dreams-bin -l $LOCAL_CONF -L $LIBDIR -D $DATADIR $*</pre>
<h4><a name="c4_3_5">4.3.5 My screen resolution is not supported.</a></h4>
<p>
You have a screen resolution which is not available in the Options / Display menu of Speed Dreams :
exit Speed Dreams and edit the file ~/.speed-dreams/config/screen.xml
exit Speed Dreams and edit the file ~/.speed-dreams/config/screen.xml
(or <My documents>/config/screen.xml under Windows), change the x, y,
window width and height to your values, and then restart sped-dreams.
</p>
@ -517,7 +516,7 @@ exception$LIBDIR/speed-dreams-bin -l $LOCAL_CONF -L $LIBDIR -D $DATADIR $*</pre>
You switched Speed Dreams to fullscreen and got a scrolling screen,
or the screen size is not fully utilized : if you use the original GLUT library,
you should choose the real resolution of your screen in the display settings.
To fix the problem, you can also download and install FreeGLUT,
To fix the problem, you can also download and install FreeGLUT,
then recompile and reinstall plib and Speed Dreams.
</p>
@ -531,7 +530,7 @@ exception$LIBDIR/speed-dreams-bin -l $LOCAL_CONF -L $LIBDIR -D $DATADIR $*</pre>
<p>
Shutdown Speed Dreams and restart it, go to the sound menu and disable the
sound or try the other backend (PLib or OpenAL).
One of us already experienced this issue with built-in OpenAL under Mandriva 2008.0
One of us already experienced this issue with built-in OpenAL under Mandriva 2008.0
Linux x86_64, and the solution was to install from sources and self-compile OpenAL.
</p>
@ -613,7 +612,7 @@ Trying generic initialization, fallback.</pre>
<p>
You have probably two OpenAL libraries installed on your system and Speed Dreams has been linked
to one, and uses another one at run-time (when starting a race).
to one, and uses another one at run-time (when starting a race).
Fix this issue in your build environment (CXX/CPP/LD_FLAGS) and / or run-time one (LD_LIBRARY_PATH).
Now recomplie and reinstall Speed Dreams.
</p>
@ -795,7 +794,3 @@ Trying generic initialization, fallback.</pre>
</body>
</html>

View file

@ -1,6 +1,5 @@
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id: LICENSE,v 1.1 2004/11/30 14:02:03 berniw Exp $
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Copyright (c) 2003 Bernhard Wymann.
Permission is granted to copy, distribute and/or modify this document

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -5,7 +5,6 @@
created : Wed Feb 25 18:27:13 CET 2004
copyright : (C) 2004 by Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -162,7 +161,7 @@
<h3><a name="c1_2">1.2 Who develops TORCS?</a></h3>
<p>
The TORCS project has been created by Eric Espié and Christophe Guionneau. Currently Bernhard Wymann,
The TORCS project has been created by Eric Espi<EFBFBD> and Christophe Guionneau. Currently Bernhard Wymann,
Christos Dimitrakakis and other contributors continue to develop the project.
Visit the official <a href="http://torcs.org" target="_parent">TORCS site</a> for more information.
</p>
@ -373,7 +372,7 @@
error message you did probably not follow exactly the instructions.
</p>
<pre>Linking...
   Creating library Release/txml.lib and object Release/txml.exp
<EFBFBD> <20>Creating library Release/txml.lib and object Release/txml.exp
The syntax of the command is incorrect.
The syntax of the command is incorrect.
Error executing c:\Windows\system32\cmd.exe.
@ -476,7 +475,7 @@ data/fonts/digital.glf: No such file or directory
Can't open file data/img/splash-main.png
Can't open file data/img/splash-single-player.png
Can't open file data/img/splash-qrdrv.png
/usr/local/bin/torcs: line 54:  6839 Floating point
/usr/local/bin/torcs: line 54:<EFBFBD><EFBFBD>6839 Floating point
exception$LIBDIR/torcs-bin -l $LOCAL_CONF -L $LIBDIR -D $DATADIR $*</pre>
<p>
@ -747,7 +746,3 @@ GLUT: Fatal Error in torcs-bin: visual with necessary capabilities not found.</p
</body>
</html>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -44,4 +43,4 @@ Free Documentation License".
</body>
</html>
</html>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -27,11 +26,11 @@ Free Documentation License".
<table class="maincontent">
<tr>
<td class="maincontent">
<h1>TORCS Requirements</h1>
<h2>Hardware</h2>
<h3>Introduction</h3>
<p>
You need a 3D-accelerator with OpenGL support for your platform. I recommend a CPU with 800
@ -44,7 +43,7 @@ Free Documentation License".
<p>
K6-III-400MHz (66MHz memory bus) with 256MB RAM, motherboard Asus TX-97E, graphics card Nvidia Riva TNT with 16MB RAM
(PCI). I ran it with 16 bit color depth and came to the following conclusions: This system is ok to practice
without opponents (8-45 frames per second). Running races with robots alone is possible, but driving manually is difficult
without opponents (8-45 frames per second). Running races with robots alone is possible, but driving manually is difficult
because the 6-20
frames per second (with 4 opponents) are not enough for a smooth ride. So the system is the bare minimum
sufficient for developing your driver (robot).

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -45,7 +44,7 @@ Free Documentation License".
Start your XFree86 (if not already done), open a terminal and run as normal user (the $ means the
prompt of a normal user, # the prompt of root).
</p>
<p>
<p>
<tt>$ glxinfo | grep direct</tt></p>
<p>The result should look like this:</p>
<p><tt>direct rendering: Yes</tt></p>
@ -107,4 +106,3 @@ Free Documentation License".
</body>
</html>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -55,7 +54,7 @@ Free Documentation License".
<p>
You have seen that TORCS runs on Windows, Linux/x86 and Linux/ppc. So you have to take care for
portability. There are also some issues with Visual C++ 6.0.<br/>
</p>
</p>
<h4>For Loops</h4>
<p>
@ -78,7 +77,7 @@ Free Documentation License".
for (i=7; i &gt 0; i--) { ... }<br/>
</tt>
</p>
<h4>Constants in Classes</h4>
<p>
Implement constants like I do in the next section, or use #define. If you need integer constants

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -119,7 +118,7 @@ shutdown(int index)
more than one robot of this module, they will share the stuck variable. So there could be weird
effects. Anyway, try a quickrace with your three robots to check if everything is ok so far.
</p>
<h3>Downloads</h3>
<p>
In case you got lost, you can <a href="../download/bt24.tar.gz">download</a> my robot for TORCS 1.2.0 or later.

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -188,7 +187,7 @@ const float Driver::UNSTUCK_TIME_LIMIT = 2.0; /* [s] */</pre>
</p>
<p><pre class="lcolor">/* Called for every track change or new race. */
void Driver::initTrack(tTrack* t, void *carHandle,
void Driver::initTrack(tTrack* t, void *carHandle,
void **carParmHandle, tSituation *s)
{
track = t;

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -51,7 +50,7 @@ Free Documentation License".
a function for v(s) with initial condition v(0)=v1. Finally I solved the function with v(s)=v2 for s, and that's it. I
also compared and checked the result with the numerical approach.
</p>
<h3>Discussion</h3>
<img id="pic3" src="images/optimal3d.jpg" alt="brake distance formulas" border="0"></img>
<p>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -32,7 +31,7 @@ Free Documentation License".
<h3>Implementation</h3>
<p>
I will show you an implementation similar to that used by the "Damned" robot from Eric Espié. I
I will show you an implementation similar to that used by the "Damned" robot from Eric Espi<EFBFBD>. I
show you this, because it's simply better than my implementation in the berniw robot.
</p>
<p>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -61,7 +60,7 @@ Free Documentation License".
want to race, use TORCS or go to the race track, please don't use public roads. But that's not
the subject, I want to discuss the physical speed limits...<br/>
Like you know from experience, you can't pass a turn with any speed, there are limits which can be
described with physical laws. Of course we need to know how fast we can pass a turn. The force that
described with physical laws. Of course we need to know how fast we can pass a turn. The force that
pushes the car outside
the turn is called centrifugal force. That's the left part of the top equation on the sketch. To hold
the car on the track, we need to compensate it. Our tires will do that job with friction on the

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -38,47 +37,47 @@ Free Documentation License".
heuristic approximation we take first the turns outside radius. Further we divide the radius
by the square root of the remaining angle of the turn (remember, this is a heuristic!). This
will lead to a problem, but we will fix that later.
An interesting feature of this approach is the growing acceleration toward the end of a turn.
An interesting feature of this approach is the growing acceleration toward the end of a turn.
</p>
<h3>Implementation</h3>
<p>
Replace getAllowedSpeed in driver.cpp with the following version:
</p>
<p><pre class="lcolor">/* Compute the allowed speed on a segment */
float Driver::getAllowedSpeed(tTrackSeg *segment)
{
if (segment-&gt;type == TR_STR) {
return FLT_MAX;
} else {</pre></p>
<p>
No changes so far. In the next part we compute the remaining angle (arc) of the turn. We
need a loop because large turns can be composed from a lot of small turns.
</p>
<p><pre class="lcolor"> float arc = 0.0;
tTrackSeg *s = segment;
while (s-&gt;type == segment->type && arc &lt; PI/2.0) {
arc += s-&gt;arc;
s = s-&gt;next;
}</pre></p>
<p>
Because we divide the radius by this angle it makes no sense to have values greater than 1.0,
so we normalize it.
</p>
<p><pre class="lcolor"> arc /= PI/2.0;
float mu = segment->surface->kFriction;</pre>
</p>
<p>
Compute the magic radius.
</p>
<p><pre class="lcolor"> float r = (segment->radius + segment->width/2.0)/sqrt(arc);
return sqrt((mu*G*r)/(1.0 - MIN(1.0, r*CA*mu/mass)));
}

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -36,9 +35,9 @@ Free Documentation License".
Now we make the car stay again on the track (at least on most of the tracks). We will introduce
a margin around the middle of the track. When we are farther away from the middle we set the
accelerator to zero. We will refine this by distinguish between inside and outside in the turns.
When we are inside we can accelerate further, because the centrifugal force pushes the car outside.
When we are inside we can accelerate further, because the centrifugal force pushes the car outside.
</p>
<h3>Implementation</h3>
<p>
Here follows the implementation, put it in driver.cpp.
@ -51,33 +50,33 @@ float Driver::filterTrk(float accel)
if (car-&gt;_speed_x &lt; MAX_UNSTUCK_SPEED) return accel;</pre>
</p>
<p>
If we are very slow do nothing. Then check if we are on a straight. If that's the case,
check both sides.
check both sides.
</p>
<p><pre class="lcolor"> if (seg->type == TR_STR) {
float tm = fabs(car->_trkPos.toMiddle);
float w = seg->width/WIDTHDIV;
if (tm > w) return 0.0; else return accel;</pre>
</p>
<p>
If we are in a turn check if we are inside or outside. If we are inside do nothing.
</p>
<p><pre class="lcolor"> } else {
float sign = (seg->type == TR_RGT) ? -1 : 1;
if (car->_trkPos.toMiddle*sign > 0.0) {
return accel;</pre>
</p>
<p>
If we are outside and more than "w" from the middle away set accelerator to zero.
</p>
<p><pre class="lcolor"> } else {
float tm = fabs(car->_trkPos.toMiddle);
float w = seg->width/WIDTHDIV;
@ -86,43 +85,43 @@ float Driver::filterTrk(float accel)
}
}</pre>
</p>
<p>
We need to define WIDTHDIV in driver.cpp.
</p>
<p><pre class="lcolor">const float Driver::WIDTHDIV = 4.0; /* [-] */</pre>
</p>
<p>
Add the call in Driver::drive(). Change
Add the call in Driver::drive(). Change
</p>
<p><pre class="lbcolor"> car->ctrl.accelCmd = filterTCL(getAccel());</pre>
</p>
<p>
to
</p>
<p><pre class="lcolor"> car->ctrl.accelCmd = filterTCL(filterTrk(getAccel()));</pre>
<p>
Finally we declare the new method and constant in driver.h.
</p>
<p><pre class="lcolor"> float filterTrk(float accel);</pre>
</p>
<p><pre class="lcolor"> static const float WIDTHDIV;</pre>
</p>
<h3>Testdrive</h3>
<p>
What you got till now is not too bad. You've written a robot that is able to master most of
the tracks. We also reduced the lap times very much:
</p>
<ul style="list-style-type:disk; color:black;">
<li>mixed-2: 1:14:70, 0 damage.</li>
<li>e-track-2: 1:24:45, 0 damage.</li>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -41,12 +40,12 @@ Free Documentation License".
<h3>Overview</h3>
<p>
<img id="pic1" src="images/steer.jpg" alt="steering with lookahead to middle" border="0"></img>
In this section we will improve the steering with a heuristic approach. In a nutshell, the
In this section we will improve the steering with a heuristic approach. In a nutshell, the
presented method still drives on the middle of the track, but now we will steer toward a point
ahead of the car. The disadvantage of this simple method is that we can't drive with the
ahead of the car. The disadvantage of this simple method is that we can't drive with the
biggest possible radius through turns like you can see easily on the sketch. This drawing
doesn't match exactly with the method presented below, because the lookahead distance will
be measured on the middle of the track.
be measured on the middle of the track.
</p>
</td>
</tr>
@ -55,12 +54,12 @@ Free Documentation License".
<table class="maincontent">
<tr>
<td class="maincontent">
<h3>The Target Point</h3>
<p>
First we discuss how to get the target point. We know the position of our car and the
geometry of the track. So we follow the track middle lookahead meters, there is our target
point. Put the following code into driver.cpp.
point. Put the following code into driver.cpp.
</p>
<p><pre class="lcolor">v2d Driver::getTargetPoint()
@ -72,19 +71,19 @@ Free Documentation License".
We compute the lookahead distance with a heuristic. Like you can see lookahead grows with
the speed.
</p>
<p><pre class="lcolor"> float length = getDistToSegEnd();
while (length &lt; lookahead) {
seg = seg-&gt;next;
length += seg-&gt;length;
length += seg-&gt;length;
}</pre>
</p>
<p>
This loop finds the segment which contains the target point.
This loop finds the segment which contains the target point.
</p>
<p><pre class="lcolor"> length = lookahead - length + seg-&gt;length;
v2d s;
s.x = (seg-&gt;vertex[TR_SL].x + seg-&gt;vertex[TR_SR].x)/2.0;
@ -96,19 +95,19 @@ Free Documentation License".
starting point itself. From that we are able to compute the target point in the global
coordinate system. We have to distinguish between straights and turns.
</p>
<p><pre class="lcolor"> if ( seg-&gt;type == TR_STR) {
v2d d;
d.x = (seg-&gt;vertex[TR_EL].x - seg-&gt;vertex[TR_SL].x)/seg-&gt;length;
d.y = (seg-&gt;vertex[TR_EL].y - seg-&gt;vertex[TR_SL].y)/seg-&gt;length;
return s + d*length;</pre>
</p>
<p>
For the straight we compute the starting point on the middle of the track and the direction
vector. From that we can get the final point and return it.
vector. From that we can get the final point and return it.
</p>
<p><pre class="lcolor"> } else {
v2d c;
c.x = seg-&gt;center.x;
@ -120,25 +119,25 @@ Free Documentation License".
}
}</pre>
</p>
<p>
For the turns it's a bit different. First we get the rotation center of the segment. Next we
compute from the length and the radius the angle of the target point relative to the
segments starting point. Finally we rotate the starting point around the center with the
computed angle. At the start of driver.cpp we need to define the constants.
computed angle. At the start of driver.cpp we need to define the constants.
</p>
<p><pre class="lcolor">const float Driver::LOOKAHEAD_CONST = 17.0; /* [m] */
const float Driver::LOOKAHEAD_FACTOR = 0.33; /* [1/s] */</pre>
</p>
<h3>Heading Toward the Target Point</h3>
<p>
Now we finally implement the getSteer() method, which computes the steerangle towards the
target point. We need atan2() because atan() doesn't work well from -PI..PI (atan(-y/-x) ==
target point. We need atan2() because atan() doesn't work well from -PI..PI (atan(-y/-x) ==
atan(y/x)).
</p>
<p><pre class="lcolor">float Driver::getSteer()
{
float targetAngle;
@ -154,35 +153,35 @@ const float Driver::LOOKAHEAD_FACTOR = 0.33; /* [1/s] */</pre>
<p>
Now you need to change Driver::drive() so that getSteer is called: replace
</p>
<p><pre class="lbcolor"> float steerangle = angle - car->_trkPos.toMiddle/car->_trkPos.seg->width;
car->ctrl.steer = steerangle / car->_steerLock;</pre>
</p>
<p>
with
</p>
<p><pre class="lcolor"> car->ctrl.steer = getSteer();</pre>
</p>
<h3>Finishing Implementation</h3>
<p>
Finally we need some changes in driver.h. The new methods and constants needs to be defined,
and we also need to include linalg.h.
and we also need to include linalg.h.
</p>
<p><pre class="lcolor">#include "linalg.h"</pre>
</p>
<p><pre class="lcolor"> float getSteer();
v2d getTargetPoint();</pre>
</p>
<p><pre class="lcolor"> static const float LOOKAHEAD_CONST;
static const float LOOKAHEAD_FACTOR;</pre>
</p>
<h3>Testdrive</h3>
<p>
Do some test runs with the different cars. The car drives now very nice on most of the tracks.

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -51,14 +50,14 @@ Free Documentation License".
and so forth... The problem with heuristics is that they may work great on some tracks
but also horribly fail on some other tracks or dislike certain features. I think you
can build quite a good driver with this method, but there will be always problems with
some track features.
some track features.
</p>
<h3>Geometric Trajectories</h3>
<p>
I call a trajectory geometric when it just takes the track geometry into account, but
doesn't consider the car setup and aerodynamics. A nice implementation is in K1999
from Rémi Coulom. It does linearize the curvature of the path in a quite efficient and
doesn't consider the car setup and aerodynamics. A nice implementation is in K1999
from R<EFBFBD>mi Coulom. It does linearize the curvature of the path in a quite efficient and
clever way. But it doesn't deliver optimal paths especially with high downforce car setups
in fast turns.</br>
What else did I try so far? My first approach was to find a few initial "good" points on
@ -72,13 +71,13 @@ Free Documentation License".
the turns. It is not yet refined enough for public release and too complicated for the
tutorial.
</p>
<h3>Machine Learning Approaches</h3>
<p>
<p>
I think TORCS would also be a nice playground for machine learning techniques. So
if you are a professor let your students write some robots for TORCS.
if you are a professor let your students write some robots for TORCS.
</p>
<h3>Feedback</h3>
<p>
<a href="mailto:berni4you@gmx.ch">Let me know</a>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -36,16 +35,16 @@ Free Documentation License".
we try to compute the steer angle or distances and angles to other cars in the later chapters.
After that we improve the steering of the car and reduce the lap times. We will do it this time
with a more heuristic approach, because the other methods are not that easy to implement. At the
end of this chapter we will discuss some other methods for finding a path around the track.
end of this chapter we will discuss some other methods for finding a path around the track.
</p>
<h3>Implementation</h3>
<p>
I will simply show you the vector class "v2d" here. Look up the implementation for
details. We implement operators for vector addition, subtraction, negation, multiplication
with a scalar and the dot product. Further we want also be able to normalize the vector, to
rotate it around a center and to get it's length. Put the following code in a new file called
linalg.h.
linalg.h.
</p>
<p>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -34,9 +33,9 @@ Free Documentation License".
<h3>Overview</h3>
<p>
Like you will see later it is also nice to have a straight class. It's purpose is to compute
intersection points of straights and distances between points and straights.
intersection points of straights and distances between points and straights.
</p>
<h3>Implementation</h3>
<p>
Put the following code also into linalg.h. Like you can see the straights are described with
@ -57,7 +56,7 @@ Free Documentation License".
/* methods */
v2d intersect(const Straight &s) const;
float dist(const v2d &p) const;
float dist(const v2d &p) const;
/* data */
v2d p; /* point on the straight */
@ -69,7 +68,7 @@ Free Documentation License".
inline v2d Straight::intersect(const Straight &s) const
{
float t = -(d.x*(s.p.y-p.y)+d.y*(p.x-s.p.x))/(d.x*s.d.y-d.y*s.d.x);
return s.p + s.d*t;
return s.p + s.d*t;
}</pre>
</p>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -41,37 +40,37 @@ Free Documentation License".
the test runs in the practice mode, set laps to 2 and display to normal so that you
can analyse the behaviour. You will need to edit the file "0/practice/g-track-3.xml"
(relative to the <span style="color:red;">bt</span> directory). To deploy the changed
setup you have to run "make install" from the directory "0/practice".
setup you have to run "make install" from the directory "0/practice".
</p>
<h3>Test Drive 1</h3>
<p>
First we run a test without any changes. The lap time is 1:08:86.
</p>
<table class="thumbnail">
<tr>
<td class="thumbnail">
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot1.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326115625.jpg"
<img src="images/tn/torcs-20030326115625.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot2.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326115631.jpg"
<img src="images/tn/torcs-20030326115631.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot3.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326115642.jpg"
<img src="images/tn/torcs-20030326115642.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot4.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326115748.jpg"
<img src="images/tn/torcs-20030326115748.jpg"
border="0" width="150" height="112"/>
</a>
</td>
@ -91,11 +90,11 @@ Free Documentation License".
</td>
</tr>
</table>
<p>
You can see on picture 1 the heavy understeering of the car in this narrow turn. It
You can see on picture 1 the heavy understeering of the car in this narrow turn. It
happens in
the acceleration part of it, so we can conclude that the "Limited Slip"
the acceleration part of it, so we can conclude that the "Limited Slip"
differential on the
driven rear wheels disallows us to pass the turn. So we will set the differential to
type "Free".
@ -119,35 +118,35 @@ Free Documentation License".
</ul>
</p>
<h3>Test Drive 2</h3>
<p>
The resulting lap time is 1:07:85, that's 1.01 seconds faster than the previous result.
</p>
<table class="thumbnail">
<tr>
<td class="thumbnail">
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot5.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326161354.jpg"
<img src="images/tn/torcs-20030326161354.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot6.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326161422.jpg"
<img src="images/tn/torcs-20030326161422.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot7.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326161428.jpg"
<img src="images/tn/torcs-20030326161428.jpg"
border="0" width="150" height="112"/>
</a>
</td>
<td class="thumbnail">
<a href="javascript:changetwoframes('images/shot8.html','content','navigation/backcarsetup.html','navigation')">
<img src="images/tn/torcs-20030326161440.jpg"
<img src="images/tn/torcs-20030326161440.jpg"
border="0" width="150" height="112"/>
</a>
</td>
@ -173,9 +172,9 @@ Free Documentation License".
trouble. But we face a new problem on the next turn like you can see on the pictures
6, 7 and 8. If you watch the practice session carefully you can observe that the
reason for this are locking front wheels. We can conclude that we have to move
the braking balance toward the rear wheels and to reduce the pressure.
the braking balance toward the rear wheels and to reduce the pressure.
</p>
<p>
<p>
<ul>
<li>Set the brakes "front-rear brake repartition" to 0.47.</li>
<li>Set the "max pressure" to 9000.</li>
@ -186,7 +185,7 @@ Free Documentation License".
<p>
The resulting lap time is 1:07:03, that's 1.83 seconds faster than the first result.
The car stays now quite good on the track so you can start the refinement of the setup.
After I changed the gearbox, suspension, brake and rear wing settings I got finally a
After I changed the gearbox, suspension, brake and rear wing settings I got finally a
1:05:95, that's
2.88 seconds faster than the default setup. Play now with different values to get a
feeling for the settings. An approach to find the optimal values is:
@ -205,17 +204,17 @@ Free Documentation License".
<li>Finally copy the setup to the right directory.</li>
</ol>
</p>
<p>
<p>
You have also to keep an eye on the damage you get per lap. Because you drive just a few
laps in the qualifying it doesn't matter if you get some damage. But for long races it
can be a problem. Damage causes additional drag and if it reaches a certain limit your
car is not able to drive further.
</p>
<h3>Downloads</h3>
<p>
In case you got lost, you can <a href="../download/bt56.tar.gz">download</a> my robot for TORCS 1.2.0 or later.
</p>
</p>
<h3>Feedback</h3>
<p>
@ -225,7 +224,7 @@ Free Documentation License".
also spelling, grammar, math and code corrections. Thank you for the feedback.
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know how to setup the car.</li>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -33,12 +32,12 @@ Free Documentation License".
<h3>Introduction</h3>
<p>
In this section we will create the directory structure and the Makefiles
In this section we will create the directory structure and the Makefiles
for the cg-nascar-rwd (the car with index <span style="color:green;">0</span>).
For the other cars it works the same way. We need Makefiles just to ease
the deployment, we could also copy the setup files manually to the torcs directory.
the deployment, we could also copy the setup files manually to the torcs directory.
</p>
<h3>Creating the Directories</h3>
<p>
Make sure you are in the <span style="color:red;">bt</span> source directory:
@ -48,11 +47,11 @@ Free Documentation License".
$ cd $TORCS_BASE/src/drivers/<span style="color:red;">bt</span><br/>
</tt>
</p>
<p>
Now we create the subdirectories for the setups:
</p>
<p>
<tt>
$ mkdir -p <span style="color:green;">0</span>/practice<br/>
@ -60,32 +59,32 @@ Free Documentation License".
$ mkdir <span style="color:green;">0</span>/race<br/>
</tt>
</p>
<p>
For another car replace <span style="color:green;">0</span> with its index and do it
the same way.
</p>
<h3>The Makefiles</h3>
<p>
First we change the main Makefile of <span style="color:red;">bt</span> to process
the subdirectory <span style="color:green;">0</span>. Change the line
First we change the main Makefile of <span style="color:red;">bt</span> to process
the subdirectory <span style="color:green;">0</span>. Change the line
</p>
<p>
<pre class="lbcolor">SHIPSUBDIRS =</pre>
</p>
<p>
to
</p>
<p>
<pre class="lcolor">SHIPSUBDIRS = <span style="color:green;">0</span></pre>
</p>
<p>
When you want to add more subdirectories append them to this line, e. g. "0 1". Now
create the Makefile in directory <span style="color:green;">0</span> with the
create the Makefile in directory <span style="color:green;">0</span> with the
following content:
</p>
@ -100,14 +99,14 @@ src-robots-bt_PKGFILES = $(shell find * -maxdepth 0 -type f -print)
src-robots-bt_PKGDIR = ${PACKAGE}-${VERSION}/$(subst ${TORCS_BASE},,$(shell pwd))
include ${MAKE_DEFAULT}</pre>
</p>
<p>
Like you can see it deploys the file default.xml and the subdirectories practice,
qualifying and race. In this subdirectories we need also Makefiles to deploy
the setup files. Here is the Makefile for the
<span style="color:green;">0</span>/practice directory.
</p>
<p>
<pre class="lcolor">ROBOT = <span style="color:red;">bt</span>
SHIPDIR = drivers/${ROBOT}/<span style="color:green;">0</span>/practice
@ -117,11 +116,11 @@ src-robots-bt_PKGFILES = $(shell find * -maxdepth 0 -type f -print)
src-robots-bt_PKGDIR = ${PACKAGE}-${VERSION}/$(subst ${TORCS_BASE},,$(shell pwd))
include ${MAKE_DEFAULT}</pre>
</p>
<p>
Here the Makefile for the <span style="color:green;">0</span>/qualifying directory.
</p>
<p>
<pre class="lcolor">ROBOT = <span style="color:red;">bt</span>
SHIPDIR = drivers/${ROBOT}/<span style="color:green;">0</span>/qualifying
@ -135,7 +134,7 @@ include ${MAKE_DEFAULT}</pre>
<p>
And finally the Makefile for the <span style="color:green;">0</span>/race directory.
</p>
<p>
<pre class="lcolor">ROBOT = <span style="color:red;">bt</span>
SHIPDIR = drivers/${ROBOT}/<span style="color:green;">0</span>/race
@ -145,13 +144,13 @@ src-robots-bt_PKGFILES = $(shell find * -maxdepth 0 -type f -print)
src-robots-bt_PKGDIR = ${PACKAGE}-${VERSION}/$(subst ${TORCS_BASE},,$(shell pwd))
include ${MAKE_DEFAULT}</pre>
</p>
<p>
Before the Makefiles work there has to be at least one XML file in every directory.
Put <a href="../download/default.xml">this</a> stripped down default setup of cg-nascar-rwd into the file
<span style="color:green;">0</span>/default.xml. Copy it also to the following locations:
</p>
<p>
<tt>
$ cp <span style="color:green;">0</span>/default.xml <span style="color:green;">0</span>/practice/g-track-3.xml</br>
@ -159,18 +158,18 @@ include ${MAKE_DEFAULT}</pre>
$ cp <span style="color:green;">0</span>/default.xml <span style="color:green;">0</span>/race/g-track-3.xml</br>
</tt>
</p>
<p>
This should be enough for a litte test run. Do a "make install", check if it works
without errors and look up in the target directory if everything is in place. In the
next sections we will work with these files.
</p>
<h3>Downloads</h3>
<p>
In case you got lost, you can <a href="../download/bt53.tar.gz">download</a> my robot for TORCS 1.2.0 or later.
</p>
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know the directory structure.</li>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -39,7 +38,7 @@ Free Documentation License".
for the race. Then we pass that back to the simulation, so that our car starts with
the ideal amount of fuel.
</p>
<h3>Implementation</h3>
<p>
First I show you the changes needed in the setup file. For the example we take the
@ -47,35 +46,35 @@ Free Documentation License".
on g-track-3 in practice mode. From that
follows that we have to modify the file
<span style="color:green;">0</span>/practice/g-track-3.xml. Add the following to
the file above from &lt;/params&gt;.
the file above from &lt;/params&gt;.
</p>
<p><pre class="lcolor"> &lt;section name="<span style="color:red;">bt</span> private"&gt;
&lt;attnum name="fuelperlap" val="2.0"/&gt;
&lt;/section&gt;</pre>
</p>
<p>
We define a new section type for all our private settings. Inside the section we
define our new property "fuelperlap" as numeric property and assign the value 2.0.
You could also put your properties into another file.
</p>
<p>
Now we add the code to load the property to driver.cpp. First we define new
constants to access the section and the attribute.
</p>
<p><pre class="lcolor">#define BT_SECT_PRIV "<span style="color:red;">bt</span> private"
#define BT_ATT_FUELPERLAP "fuelperlap"</pre>
</p>
<p>
The code to load and initialize settings has to be in Driver::initTrack(). Append
the following code at the end of the method.
</p>
<p><pre class="lcolor"> float fuel = GfParmGetNum(*carParmHandle, BT_SECT_PRIV,
<p><pre class="lcolor"> float fuel = GfParmGetNum(*carParmHandle, BT_SECT_PRIV,
BT_ATT_FUELPERLAP, (char*)NULL, 5.0);</pre>
</p>
<p>
@ -84,22 +83,22 @@ Free Documentation License".
lap. To play safe we add fuel for an additional lap. After that set the initial fuel
up.
</p>
<p><pre class="lcolor"> fuel *= (s-&gt;_totLaps + 1.0);
GfParmSetNum(*carParmHandle, SECT_CAR, PRM_FUEL, (char*)NULL, MIN(fuel, 100.0));</pre>
</p>
<p>
If you run a practice session with <span style="color:red;">bt 1</span> on g-track-3
the initial fuel should be 42.0 if everything works.
</p>
<h3>Accessing Subsections</h3>
<p>
You have seen that it is possible to have subsections in the setup files, so
that it is possible to structure the parameters.
But how do we access parameters in subsections? As example we assume that we add a
subsection "test" in our private section, which contains the parameter "cool".
subsection "test" in our private section, which contains the parameter "cool".
</p>
<p><pre class="lbcolor"> &lt;section name="<span style="color:red;">bt</span> private"&gt;
&lt;attnum name="fuelperlap" val="2.0"/&gt;
@ -123,13 +122,13 @@ char path[256];
sprintf(path, "%s/%s", BT_SECT_PRIV, BT_SECT_PRIV_TEST);
cool = GfParmGetNum(*carParmHandle, path, BT_ATT_COOL, (char*)NULL, 0.0);</pre>
</p>
<h3>Downloads</h3>
<p>
In case you got lost, you can <a href="../download/bt55.tar.gz">download</a> my robot for TORCS 1.2.0 or later.
</p>
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know how to load custom properties.</li>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -42,9 +41,9 @@ Free Documentation License".
(with n the number of parameters) which computes the lap time. We want to find the
minimal lap time, so we have to minimize this function. Because this function has
(at least!) around 10 dimensions it's almost impossible to find the global minimum. What you can
get is a local minimum, which can be much worse than the optimal (global) one.
get is a local minimum, which can be much worse than the optimal (global) one.
</p>
<h3>Qualifying Setup</h3>
<p>
In the qualifying the goal is to get the minimal lap time. Because there are no other
@ -56,13 +55,13 @@ Free Documentation License".
<p>
The racing setup is a bit different. Of course you still would like to minimize the lap
time, but other things become also important. For example it is much easier to overtake
on a straight than in a turn, so you want to optimize the setup also for top speed on
a straight,
on a straight than in a turn, so you want to optimize the setup also for top speed on
a straight,
altough it probably will increase the lap time. The car needs also to be more stable,
so that it doesn't spin of the track when it tries to overtake or to avoid a collision.
Keep in mind if you want to win a race you have to reach at least the finish line...
</p>
<h3>Skill Level</h3>
<p>
There are four skill levels available, namely rookie, amateur, semi-pro, and pro.
@ -72,13 +71,13 @@ Free Documentation License".
in the <span style="color:red;">bt</span>.xml file. Add the skill level line in the
section of the car you want to configure, e. g. for the car with index 0:
</p>
<p>
<pre class="lbcolor"> &lt;section name="0"&gt;
&lt;attstr name="skill level" val="semi-pro"/&gt;
&lt;/section&gt;</pre>
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know what a car setup is.</li>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -41,9 +40,9 @@ Free Documentation License".
the default settings are active. If we load a custom setup it just overwrites the
default settings, if we don't specify a certain value the default value is active.
To create a custom setup we make just a copy of the default setup, remove the stuff we
don't want to change and edit the values.
don't want to change and edit the values.
</p>
<h3>Loading Setups</h3>
<p>
The following implementation will first try to load a custom car setup for the
@ -51,23 +50,23 @@ Free Documentation License".
setup. If this fails also, the TORCS default setup stays active. Our custom
setup files will
be located e. g. for the driver with index 0 in the subdirectories 0, 0/practice,
0/qualifying and 0/race (relative to the <span style="color:red;">bt</span> directory).
0/qualifying and 0/race (relative to the <span style="color:red;">bt</span> directory).
Put the following code into driver.cpp, method Driver::initTrack().
</p>
<p>
<pre class="lcolor">/* Called for every track change or new race. */
void Driver::initTrack(tTrack* t, void *carHandle, void **carParmHandle, tSituation *s)
{
track = t;</pre>
</p>
<p>
First we compute a pointer to the tracks filename from the whole path. The
filename starts after the last "/", so we need to add 1 to the location found with
strrchr.
strrchr.
</p>
<p><pre class="lcolor"> char buffer[256];
/* get a pointer to the first char of the track filename */
char* trackname = strrchr(track-&gt;filename, '/') + 1;</pre>
@ -76,7 +75,7 @@ void Driver::initTrack(tTrack* t, void *carHandle, void **carParmHandle, tSituat
<p>
Depending on the race type, we want to load the fitting setup. For that we assemble
the required path to our setup file relative to the /usr/local/share/games/torcs
directory.
directory.
</p>
<p><pre class="lcolor"> switch (s-&gt;_raceType) {
case RM_TYPE_PRACTICE:
@ -86,33 +85,33 @@ void Driver::initTrack(tTrack* t, void *carHandle, void **carParmHandle, tSituat
sprintf(buffer, "drivers/<span style="color:red;">bt</span>/%d/qualifying/%s", INDEX, trackname);
break;
case RM_TYPE_RACE:
sprintf(buffer, "drivers/<span style="color:red;">bt</span>/%d/race/%s", INDEX, trackname);
sprintf(buffer, "drivers/<span style="color:red;">bt</span>/%d/race/%s", INDEX, trackname);
break;
default:
break;
}</pre>
</p>
<p>
Now we try to load the setup file. After that we check if the file has been loaded. If
not we assemble the path to the default setup file and try to read it. If you are not
sure about the setup file name you need for a certain track you can add a printf or
cout to print the filename to the terminal.
</p>
<p><pre class="lcolor"> *carParmHandle = GfParmReadFile(buffer, GFPARM_RMODE_STD);
if (*carParmHandle == NULL) {
sprintf(buffer, "drivers/<span style="color:red;">bt</span>/%d/default.xml", INDEX);
*carParmHandle = GfParmReadFile(buffer, GFPARM_RMODE_STD);
}
}
}</pre>
</p>
<p>
Because we haven't created any setups yet the loader will fail for now. In the next
section we will create the directory structure for the setups.
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know where the default setup files are located.</li>

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -1,10 +1,9 @@
<!DOCTYPE public "-//w3c//dtd html 4.01 transitional//en"
<!DOCTYPE public "-//w3c//dtd html 4.01 transitional//en"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
@ -24,11 +23,11 @@ Free Documentation License".
<script src="../../../js/utilities.js" type="text/javascript"></script>
<style type="text/css">
<!--
#pic1 { float:left; border:0px; width:150px; height:77px; border-style:hidden;
#pic1 { float:left; border:0px; width:150px; height:77px; border-style:hidden;
margin-bottom:5px; margin-right:10px; }
#pic2 { float:left; border:0px; width:200px; height:100px; border-style:hidden;
#pic2 { float:left; border:0px; width:200px; height:100px; border-style:hidden;
margin-bottom:5px; margin-right:10px; }
#pic3 { float:left; border:0px; width:120px; height:84px; border-style:hidden;
#pic3 { float:left; border:0px; width:120px; height:84px; border-style:hidden;
margin-bottom:5px; margin-right:10px; }
-->
</style>
@ -46,37 +45,37 @@ Free Documentation License".
<p>
This section will introduce you in the format of the setup files, the settings
constraints and the most important
properties (parameters, settings) of the TORCS cars.
properties (parameters, settings) of the TORCS cars.
If you look up the default settings files there are many more settings available than
presented here, but most of them you can't change (e. g. the engine). I want to
mention here that you can set all these properties up without a setup file, so you
are able to compute settings at the startup of the race.
are able to compute settings at the startup of the race.
</p>
<h3>Setup File Format</h3>
<p>
The setup files are XML files. The structure is very simple, you will see just sections,
subsections and attributes. Numerical attributes are usually defined with a name,
a unit and the boundaries which define the range of the allowed values.
a unit and the boundaries which define the range of the allowed values.
</p>
<h3>Settings Constraints</h3>
<p>
The car belongs to a car category, which defines some constraints like the range of
the allowed size, engine power, weight and more. The car model settings defines then
the values for its specific car and must not conflict with the constraints from the
car category. After that we will load our own setup files which must not violate
the constraints from the above definitions.
the constraints from the above definitions.
</p>
<h3>Properties</h3>
<p>
You can find all mentioned properties in the file 0/default.xml (relative to
the <span style="color:red;">bt</span> directory).
</p>
<h4>Initial Fuel</h4>
<p><pre class="lbcolor"> &lt;section name="Car"&gt;
&lt;attnum name="initial fuel" unit="l" min="1.0" max="100.0" val="100.0"/&gt;
&lt;/section&gt;</pre>
@ -85,17 +84,17 @@ Free Documentation License".
The amount of initial fuel for the setup. Perhaps you want to compute that
setting at startup instead of putting it into a setup file. Feel free to improve it.
For qualifying and short races you want just the minimal amount of fuel you need, for
longer races it will depend on your strategy (but we need to implement pit stops first).
longer races it will depend on your strategy (but we need to implement pit stops first).
</p>
</td>
</tr>
</table>
<table class="maincontent">
<tr>
<td class="maincontent">
<h4>Spoilers</h4>
<p><pre class="lbcolor"> &lt;section name="Rear Wing"&gt;
&lt;attnum name="angle" unit="deg" min="0" max="30" val="10"/&gt;
&lt;/section&gt;</pre>
@ -114,13 +113,13 @@ Free Documentation License".
</td>
</tr>
</table>
<table class="maincontent">
<tr>
<td class="maincontent">
<h4>Gearbox</h4>
<p><pre class="lbcolor"> &lt;section name="Gearbox"&gt;
&lt;section name="gears"&gt;
&lt;section name="r"&gt;
@ -138,14 +137,14 @@ Free Documentation License".
the highest gear you need the least value. For quick starts you need a very high value
for the first gear.
</p>
<h4>Differential</h4>
<p><pre class="lbcolor"> &lt;section name="Rear Differential"&gt;
&lt;attstr name="type" in="SPOOL,FREE,LIMITED SLIP" val="LIMITED SLIP"/&gt;
&lt;/section&gt;</pre>
</p>
<p>
Here the differential type is defined. The "Free" type distributes the power without
any control, so it is the classic differential you can find in most of the normal
@ -159,12 +158,12 @@ Free Documentation License".
This is most often the best setting for races.
</p>
<p>
The "Spool" setting links together the right and the left wheel, so it's usually a bad
The "Spool" setting links together the right and the left wheel, so it's usually a bad
setting for all turns. It could make sense on a very bumpy road or for offroad races.
</p>
<h4>Brakes</h4>
<p><pre class="lbcolor"> &lt;section name="Brake System"&gt;
&lt;attnum name="front-rear brake repartition" min="0.3" max="0.7" val="0.52"/&gt;
&lt;attnum name="max pressure" unit="kPa" min="100" max="150000" val="11000"/&gt;
@ -174,18 +173,18 @@ Free Documentation License".
The front-rear brake repartition defines how to distribute the pressure in the brake
system. If the value is 0.0 all pressure goes to the rear brakes, if it is 1.0 all
pressure hits the front brakes.
The max pressure setting defines the pressure for applying full brakes.
The max pressure setting defines the pressure for applying full brakes.
</p>
</td>
</tr>
</table>
<table class="maincontent">
<tr>
<td class="maincontent">
<h4>Wheels</h4>
<h4>Wheels</h4>
<p><pre class="lbcolor"> &lt;section name="Front Right Wheel"&gt;
&lt;attnum name="ride height" unit="mm" min="100" max="200" val="100"/&gt;
&lt;attnum name="toe" unit="deg" min="-5" max="5" val="0"/&gt;
@ -201,7 +200,7 @@ Free Documentation License".
car. You can improve the stability or the response to steer commands with these
settings.
Camber (on the right on the sketch) defines the angle of the wheel to the track. At the
moment it increases simply the adherence on the track in the simulation when you
moment it increases simply the adherence on the track in the simulation when you
decrease the angle (toward negative values).
</p>
</td>
@ -213,7 +212,7 @@ Free Documentation License".
<td class="maincontent">
<h4>Anti Roll Bar</h4>
<p><pre class="lbcolor"> &lt;section name="Rear Anti-Roll Bar"&gt;
&lt;attnum name="spring" unit="lbs/in" min="0" max="5000" val="0"/&gt;
&lt;attnum name="suspension course" unit="m" min="0" max="0.2" val="0.2"/&gt;
@ -224,7 +223,7 @@ Free Documentation License".
<img id="pic3" src="images/rotate.jpg" alt="rotation of car body" border="0"></img>
The anti-roll bars prevents the car body from rolling (e. g. in fast turns). When the
car body rolls (on the bottom of the sketch) the tire contact patch becomes smaller and
car body rolls (on the bottom of the sketch) the tire contact patch becomes smaller and
the grip drops down. The spring
setting defines how strong the anti-roll bar is linked. With a high bellcrank value
you can increase the strength of the link further.
@ -237,9 +236,9 @@ Free Documentation License".
<table class="maincontent">
<tr>
<td class="maincontent">
<h4>Suspension</h4>
<p><pre class="lbcolor"> &lt;section name="Front Right Suspension"&gt;
&lt;attnum name="spring" unit="lbs/in" min="0" max="10000" val="2500"/&gt;
&lt;attnum name="suspension course" unit="m" min="0" max="0.2" val="0.2"/&gt;
@ -259,9 +258,9 @@ Free Documentation License".
the car floor hitting the track on fast track sections. Slow bump and rebound allow you
to set up the damping of low frequency oscillations, e. g. caused by braking and steering. Fast
bump and rebound are for damping high frequency oscillations, e. g. caused by bumps on
the track or if you hit the curbs.
the track or if you hit the curbs.
</p>
<h3>Summary</h3>
<ul style="list-style-type:disk; color:black;">
<li>You know the most important car parameters and what they are good for.</li>

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -3,7 +3,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

View file

@ -4,7 +4,6 @@
<!--
copyright : (C) 2003-2004 Bernhard Wymann
email : berniw@bluewin.ch
version : $Id$
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2

Some files were not shown because too many files have changed in this diff Show more