balancing gt2 cars

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

Former-commit-id: 740dd1f011758953e4250c0e7c3cd26763756d0c
Former-commit-id: 309f7e4d248f274a090afa15a5fc4d01cea9f178
This commit is contained in:
andrewsumner 2011-05-31 04:36:35 +00:00
parent 0f065a9270
commit a05b339dc2
12 changed files with 88 additions and 72 deletions

View file

@ -919,7 +919,7 @@ void Driver::drive(tSituation *s)
car->_gearCmd = getGear();
calcSpeed();
car->_brakeCmd = filterABS(filterBrakeSpeed(filterBColl(filterBPit(getBrake()))));
if (car->_brakeCmd == 0.0f) {
if (car->_brakeCmd <= 0.001f) {
car->_accelCmd = filterTCL(filterTrk(filterTeam(filterOverlap(getAccel()))));
} else {
car->_accelCmd = 0.0f;
@ -1206,40 +1206,43 @@ int Driver::getGear()
if (car->_gear <= 0) {
return 1;
}
#if 0
// Hymie gear changing
float speed = currentspeed;
float *tRatio = car->_gearRatio + car->_gearOffset;
float rpm = (float) ((speed + 0.5) * tRatio[car->_gear] / car->_wheelRadius(2));
float down_rpm = (float) (car->_gear > 1 ? (speed + 0.5) * tRatio[car->_gear-1] / car->_wheelRadius(2) : rpm);
if (1 || car->_gear > 2)
{
// Hymie gear changing
float speed = currentspeed;
float *tRatio = car->_gearRatio + car->_gearOffset;
float rpm = (float) ((speed + 0.5) * tRatio[car->_gear] / car->_wheelRadius(2));
float down_rpm = (float) (car->_gear > 1 ? (speed + 0.5) * tRatio[car->_gear-1] / car->_wheelRadius(2) : rpm);
float rcu = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeUp[car->_gear] : RevsChangeUp);
float rcd = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeDown[car->_gear] : RevsChangeDown);
float rcm = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeDownMax[car->_gear] : RevsChangeDownMax);
float rcu = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeUp[car->_gear] : RevsChangeUp);
float rcd = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeDown[car->_gear] : RevsChangeDown);
float rcm = (car->_gear < 6 && car->_gear >= 0 ? GearRevsChangeDownMax[car->_gear] : RevsChangeDownMax);
if (rpm + MAX(0.0, (double) (car->_gear-3) * (car->_gear-3)*5) > car->_enginerpmMax * rcu && car->_gear < MaxGear)
car->_gearCmd = car->_gear + 1;
if (rpm + MAX(0.0, (double) (car->_gear-3) * (car->_gear-3)*10) > car->_enginerpmMax * rcu && car->_gear < MaxGear)
car->_gearCmd = car->_gear + 1;
if (car->_gear > 1 &&
rpm < car->_enginerpmMax * rcd &&
down_rpm < car->_enginerpmMax * rcm)
car->_gearCmd = car->_gear - 1;
#else
// BT gear changing
float gr_up = car->_gearRatio[car->_gear + car->_gearOffset];
float omega = car->_enginerpmRedLine/gr_up;
float wr = car->_wheelRadius(2);
if (omega*wr*SHIFT < car->_speed_x) {
car->_gearCmd = car->_gear + 1;
} else {
float gr_down = car->_gearRatio[car->_gear + car->_gearOffset - 1];
omega = car->_enginerpmRedLine/gr_down;
if (car->_gear > 1 && omega*wr*SHIFT > car->_speed_x + SHIFT_MARGIN) {
if (car->_gear > 1 &&
rpm < car->_enginerpmMax * rcd &&
down_rpm < car->_enginerpmMax * rcm)
car->_gearCmd = car->_gear - 1;
}
else
{
// BT gear changing
float gr_up = car->_gearRatio[car->_gear + car->_gearOffset];
float omega = car->_enginerpmRedLine/gr_up;
float wr = car->_wheelRadius(2);
if (omega*wr*SHIFT < car->_speed_x) {
car->_gearCmd = car->_gear + 1;
} else {
float gr_down = car->_gearRatio[car->_gear + car->_gearOffset - 1];
omega = car->_enginerpmRedLine/gr_down;
if (car->_gear > 1 && omega*wr*SHIFT > car->_speed_x + SHIFT_MARGIN) {
car->_gearCmd = car->_gear - 1;
}
}
}
#endif
return car->_gearCmd;
}
@ -3440,10 +3443,10 @@ float Driver::filterABS(float brake)
//brake = MAX(MIN(origbrake, collision ? 0.15f :0.05f), brake - MAX(fabs(angle), fabs(car->_yaw_rate) / 2));
brake = (float) (MAX(MIN(origbrake, (collision ? MAX(0.05f, (5.0-collision)/30) : 0.05f)), brake - fabs(angle-speedangle)*0.3));
#endif
if (fbrakecmd)
brake = MAX(brake, fbrakecmd);
#endif
return brake;
}
@ -3452,7 +3455,7 @@ float Driver::filterABS(float brake)
// TCL filter for accelerator pedal.
float Driver::filterTCL(float accel)
{
if (simtime < 2.0)
if (simtime < 0.7)
return accel;
accel = MIN(1.0f, accel);

View file

@ -89,6 +89,7 @@ LRaceLine::LRaceLine() :
BrakeDelay(20.0),
BrakeDelayX(1.0),
BrakeMod(1.0),
BrakePower(0.5),
IntMargin(1.5),
ExtMargin(2.0),
AvoidSpeedAdjust(0.0),
@ -330,6 +331,7 @@ void LRaceLine::AllocTrack( tTrack *ptrack )
BrakeDelay = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_BASE_BRAKE, (char *)NULL, 35.0f );
BrakeDelayX = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_BASE_BRAKE_X, (char *)NULL, 1.0f );
BrakeMod = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_BRAKE_MOD, (char *)NULL, 1.0f );
BrakePower = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_BRAKE_POWER, (char *)NULL, 0.5f );
SteerMod = (int) GfParmGetNum( carhandle, SECT_PRIVATE, PRV_STEER_MOD, (char *)NULL, 0.0f );
MaxSteerTime = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_MAX_STEER_TIME, (char *)NULL, 1.5f );
MinSteerTime = GfParmGetNum( carhandle, SECT_PRIVATE, PRV_MIN_STEER_TIME, (char *)NULL, 1.0f );
@ -944,7 +946,7 @@ void LRaceLine::CalcZCurvature(int rl)
if (slope < 0.0)
SRL[rl].tBrakeFriction[i] = 1.0 + MAX(-0.4, slope/10);
else
SRL[rl].tBrakeFriction[i] = 1.0 + slope/20;
SRL[rl].tBrakeFriction[i] = 1.0 + slope/40;
}
}
@ -1197,22 +1199,31 @@ void LRaceLine::ComputeSpeed(int rl)
if (tSpeed[rf][i] > tSpeed[rf][next])
{
if (BrakeMod > 0.1)
double nspeed = tSpeed[rf][next];
if (BrakeMod > 0.5)
{
double bspd = (MIN(100.0, tSpeed[rf][next]) - 30.0) / 60 + fabs(SRL[rl].tRInverse[next])*40;
tSpeed[rf][i] = MIN(tSpeed[rf][i],
tSpeed[rf][next] + (BrakePower * MAX(0.2, (100.0 - tSpeed[rf][next])/50)) *
(fabs(SRL[rl].tRInverse[next]) > 0.001 ? MAX(0.1, 1.0 - fabs(SRL[rl].tRInverse[next]*80)) : 1.0) *
SRL[rl].tBrakeFriction[i]);
}
else if (BrakeMod > 0.1)
{
double bspd = MAX(0.0, (MIN(100.0, tSpeed[rf][next]) - 30.0)) / 80 + fabs(SRL[rl].tRInverse[next])*40;
tSpeed[rf][i] = MIN(tSpeed[rf][i],
tSpeed[rf][next] + MAX(0.1,
nspeed + MAX(0.1,
((0.1 - MIN(0.085, fabs(SRL[rl].tRInverse[next])*7))
* SRL[rl].tBrakeFriction[i]
* MAX(bd/4.0, bd / ((tSpeed[rf][next]*(tSpeed[rf][next]/20))/20)))
* (MAX(0.2, 1.0 - (tSpeed[rf][next] > 30.0 ? bspd*(bspd+0.2) : 0.0)) * BrakeMod)));
* MAX(bd/4.0, bd / ((nspeed*(nspeed/20))/20)))
* (MAX(0.2, 1.0 - (nspeed > 30.0 ? bspd*(bspd+0.2) : 0.0)) * BrakeMod)));
}
else
{
tSpeed[rf][i] = MIN(tSpeed[rf][i], tSpeed[rf][next] + MAX(0.1,
tSpeed[rf][i] = MIN(tSpeed[rf][i], nspeed + MAX(0.1,
((0.1 - MIN(0.085, fabs(SRL[rl].tRInverse[next])*8))
* SRL[rl].tBrakeFriction[i]
* MAX(bd/4.0, bd / ((tSpeed[rf][next]*(tSpeed[rf][next]/20))/20)))));
* MAX(bd/4.0, bd / ((nspeed*(nspeed/20))/20)))));
}
}
}

View file

@ -148,6 +148,7 @@ class LRaceLine {
double BrakeDelay;
double BrakeDelayX;
double BrakeMod;
double BrakePower;
double IntMargin;
double ExtMargin;
double AvoidSpeedAdjust;

View file

@ -50,6 +50,7 @@
#define PRV_BASE_BRAKE "base brake"
#define PRV_BASE_BRAKE_X "base brake factor"
#define PRV_BRAKE_MOD "brake mod"
#define PRV_BRAKE_POWER "brake power"
#define PRV_SPEED_LIMIT "speed limit"
#define PRV_RACELINE_DEBUG "raceline debug"
#define PRV_ACCEL_EXIT "accel exit"

View file

@ -24,7 +24,7 @@
<attnum name="avoid brake factor" min="-20" max="20" val="0.8"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.1"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
<attnum name="base speed factor" min="0.0" max="50.0" val="1.25"/>
<attnum name="base speed factor" min="0.0" max="50.0" val="1.05"/>
<attnum name="base brake factor" min="0.0" max="50.0" val="1.15"/>
<attnum name="base speed" min="0.0" max="50.0" val="10.00"/>
<attnum name="base brake" min="10.0" max="100.0" val="21.00"/>
@ -37,9 +37,9 @@
<attnum name="accel curve" min="0" max="2" val="1.20"/>
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve limit" min="0" max="6" val="2"/>
<attnum name="revs change up" min="0" max="2" val="0.84"/>
<attnum name="revs change down" min="0" max="2" val="0.64"/>
<attnum name="revs change down max" min="0" max="2" val="0.74"/>
<attnum name="revs change up" min="0" max="2" val="0.80"/>
<attnum name="revs change down" min="0" max="2" val="0.60"/>
<attnum name="revs change down max" min="0" max="2" val="0.70"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="2.2"/>

View file

@ -20,7 +20,7 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.8"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
@ -34,13 +34,13 @@
<attnum name="accel exit" min="0.0" max="10.0" val="0.50"/>
<attnum name="turn decel" min="0" max="2" val="0.8"/>
<attnum name="curve factor" min="0" max="2" val="0.13"/>
<attnum name="accel curve" min="0" max="2" val="1.20"/>
<attnum name="accel curve" min="0" max="2" val="1.15"/>
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change up" min="0" max="2" val="0.83"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change down max" min="0" max="2" val="0.75"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -20,7 +20,7 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.8"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
@ -38,9 +38,9 @@
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change up" min="0" max="2" val="0.82"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change down max" min="0" max="2" val="0.73"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -20,13 +20,13 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.82"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
<attnum name="base speed factor" min="0.0" max="50.0" val="1.00"/>
<attnum name="base speed factor" min="0.0" max="50.0" val="0.94"/>
<attnum name="base brake factor" min="0.0" max="50.0" val="0.90"/>
<attnum name="base speed" min="0.0" max="50.0" val="12.20"/>
<attnum name="base speed" min="0.0" max="50.0" val="12.00"/>
<attnum name="base brake" min="10.0" max="100.0" val="19.00"/>
<attnum name="brake mod" min="0.0" max="1.0" val="1.00"/>
<attnum name="steer mod" min="0.0" max="1.0" val="1.00"/>
@ -38,9 +38,9 @@
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change up" min="0" max="2" val="0.80"/>
<attnum name="revs change down" min="0" max="2" val="0.60"/>
<attnum name="revs change down max" min="0" max="2" val="0.70"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -20,7 +20,7 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.84"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
@ -38,9 +38,9 @@
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change up" min="0" max="2" val="0.77"/>
<attnum name="revs change down" min="0" max="2" val="0.62"/>
<attnum name="revs change down max" min="0" max="2" val="0.70"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -20,13 +20,13 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.82"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
<attnum name="base speed factor" min="0.0" max="50.0" val="1.00"/>
<attnum name="base brake factor" min="0.0" max="50.0" val="0.90"/>
<attnum name="base speed" min="0.0" max="50.0" val="12.50"/>
<attnum name="base speed" min="0.0" max="50.0" val="12.20"/>
<attnum name="base brake" min="10.0" max="100.0" val="21.00"/>
<attnum name="brake mod" min="0.0" max="1.0" val="1.00"/>
<attnum name="steer mod" min="0.0" max="1.0" val="1.00"/>
@ -38,9 +38,9 @@
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change up" min="0" max="2" val="0.82"/>
<attnum name="revs change down" min="0" max="2" val="0.62"/>
<attnum name="revs change down max" min="0" max="2" val="0.72"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -34,13 +34,13 @@
<attnum name="accel exit" min="0.0" max="10.0" val="0.50"/>
<attnum name="turn decel" min="0" max="2" val="0.8"/>
<attnum name="curve factor" min="0" max="2" val="0.13"/>
<attnum name="accel curve" min="0" max="2" val="1.20"/>
<attnum name="accel curve" min="0" max="2" val="1.16"/>
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change up" min="0" max="2" val="0.76"/>
<attnum name="revs change down" min="0" max="2" val="0.60"/>
<attnum name="revs change down max" min="0" max="2" val="0.68"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>

View file

@ -20,7 +20,7 @@
<attnum name="increase corner inverse" min="0" max="2" val="0.045"/>
<attnum name="add avoid speed" min="-20" max="20" val="0.0"/>
<attnum name="avoid speed factor" min="-20" max="20" val="0.80"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.9"/>
<attnum name="avoid brake factor" min="-20" max="20" val="0.85"/>
<attnum name="exit boost factor" min="-20" max="20" val="1.40"/>
<attnum name="avoid exit boost factor" min="-20" max="20" val="1.3"/>
<attnum name="brake margin" min="-20" max="20" val="1.0"/>
@ -38,9 +38,9 @@
<attnum name="accel curve limit" min="0" max="6" val="1.5"/>
<attnum name="brake curve" min="0" max="2" val="0.80"/>
<attnum name="brake curve limit" min="0" max="6" val="3"/>
<attnum name="revs change up" min="0" max="2" val="0.86"/>
<attnum name="revs change up" min="0" max="2" val="0.78"/>
<attnum name="revs change down" min="0" max="2" val="0.66"/>
<attnum name="revs change down max" min="0" max="2" val="0.76"/>
<attnum name="revs change down max" min="0" max="2" val="0.72"/>
<attnum name="steer skid" min="0" max="3" val="0.0"/>
<attnum name="steer gain" min="0" max="3" val="1.5"/>
<attnum name="max steer time" min="0.5" max="10" val="1.9"/>