forked from speed-dreams/speed-dreams-code
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:
parent
3ee635abb7
commit
4681971d6d
401 changed files with 610 additions and 1071 deletions
|
@ -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/([^/\\$ ]*).*\\$$")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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} ...")
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
# @file CMake configuration options
|
||||
# @author Mart Kelder, J.-P. Meuret
|
||||
# @version $Id$
|
||||
|
||||
INCLUDE(CMakeDependentOption)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
# @file 3rd party dependencies (include and libs)
|
||||
# @author Mart Kelder, J.-P. Meuret
|
||||
# @version $Id$
|
||||
|
||||
MACRO(ADD_SQLITE3_INCLUDEDIR)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
/** @file
|
||||
|
||||
@author <a href=mailto:torcs@free.fr>Eric Espie</a>
|
||||
@version $Id$
|
||||
*/
|
||||
|
||||
#ifndef _SD_DOC_H_
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>"-fPIC"</b> compiler switch when
|
||||
compiling PLib (export CFLAGS="-fPIC", export CPPFLAGS="-fPIC",
|
||||
export CXXFLAGS="-fPIC").
|
||||
compiling PLib (export CFLAGS="-fPIC", export CPPFLAGS="-fPIC",
|
||||
export CXXFLAGS="-fPIC").
|
||||
Under Windows, make sure you compile all the 3rd party libraries using
|
||||
the <b>"Multi-threaded DLL"</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>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 > 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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->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->type == segment->type && arc < PI/2.0) {
|
||||
arc += s->arc;
|
||||
s = s->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)));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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->_speed_x < 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>
|
||||
|
|
|
@ -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 < lookahead) {
|
||||
seg = seg->next;
|
||||
length += seg->length;
|
||||
length += seg->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->length;
|
||||
v2d s;
|
||||
s.x = (seg->vertex[TR_SL].x + seg->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->type == TR_STR) {
|
||||
v2d d;
|
||||
d.x = (seg->vertex[TR_EL].x - seg->vertex[TR_SL].x)/seg->length;
|
||||
d.y = (seg->vertex[TR_EL].y - seg->vertex[TR_SL].y)/seg->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->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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 </params>.
|
||||
the file above from </params>.
|
||||
</p>
|
||||
|
||||
|
||||
<p><pre class="lcolor"> <section name="<span style="color:red;">bt</span> private">
|
||||
<attnum name="fuelperlap" val="2.0"/>
|
||||
</section></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->_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"> <section name="<span style="color:red;">bt</span> private">
|
||||
<attnum name="fuelperlap" val="2.0"/>
|
||||
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"> <section name="0">
|
||||
<attstr name="skill level" val="semi-pro"/>
|
||||
</section></pre>
|
||||
</p>
|
||||
|
||||
|
||||
<h3>Summary</h3>
|
||||
<ul style="list-style-type:disk; color:black;">
|
||||
<li>You know what a car setup is.</li>
|
||||
|
|
|
@ -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->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->_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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"> <section name="Car">
|
||||
<attnum name="initial fuel" unit="l" min="1.0" max="100.0" val="100.0"/>
|
||||
</section></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"> <section name="Rear Wing">
|
||||
<attnum name="angle" unit="deg" min="0" max="30" val="10"/>
|
||||
</section></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"> <section name="Gearbox">
|
||||
<section name="gears">
|
||||
<section name="r">
|
||||
|
@ -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"> <section name="Rear Differential">
|
||||
<attstr name="type" in="SPOOL,FREE,LIMITED SLIP" val="LIMITED SLIP"/>
|
||||
</section></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"> <section name="Brake System">
|
||||
<attnum name="front-rear brake repartition" min="0.3" max="0.7" val="0.52"/>
|
||||
<attnum name="max pressure" unit="kPa" min="100" max="150000" val="11000"/>
|
||||
|
@ -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"> <section name="Front Right Wheel">
|
||||
<attnum name="ride height" unit="mm" min="100" max="200" val="100"/>
|
||||
<attnum name="toe" unit="deg" min="-5" max="5" val="0"/>
|
||||
|
@ -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"> <section name="Rear Anti-Roll Bar">
|
||||
<attnum name="spring" unit="lbs/in" min="0" max="5000" val="0"/>
|
||||
<attnum name="suspension course" unit="m" min="0" max="0.2" val="0.2"/>
|
||||
|
@ -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"> <section name="Front Right Suspension">
|
||||
<attnum name="spring" unit="lbs/in" min="0" max="10000" val="2500"/>
|
||||
<attnum name="suspension course" unit="m" min="0" max="0.2" val="0.2"/>
|
||||
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue