Update shadow's driver
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6680 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 8490e7825f5296f16a182f1964e7ee4fb63afe9b Former-commit-id: 2dd6c43f41c904e26658b6d175dd9545ed86d9ff
This commit is contained in:
parent
3b1b16cbcb
commit
9dda55e873
6 changed files with 120 additions and 78 deletions
|
@ -156,8 +156,7 @@ double CarModel::CalcMaxSpeed(double k, double k1, double kz, double kFriction,
|
||||||
LogSHADOW.debug("MU = %.f\n", Mu);
|
LogSHADOW.debug("MU = %.f\n", Mu);
|
||||||
}
|
}
|
||||||
|
|
||||||
Den = (AbsCrv - ScaleBump * kz) - (CA_FW * MuF + CA_RW * MuR
|
Den = (AbsCrv - ScaleBump * kz) - (CA_FW * MuF + CA_RW * MuR + CA_GE_F * MuF + CA_GE_R * MuR) / MASS;
|
||||||
+ CA_GE_F * MuF + CA_GE_R * MuR) / MASS;
|
|
||||||
|
|
||||||
if (Den < 0.00001)
|
if (Den < 0.00001)
|
||||||
Den = 0.00001;
|
Den = 0.00001;
|
||||||
|
@ -348,8 +347,8 @@ double CarModel::CalcAcceleration(double k0, double kz0, double k1, double kz1,
|
||||||
|
|
||||||
if( Flatroad > Froad )
|
if( Flatroad > Froad )
|
||||||
Flatroad = Froad;
|
Flatroad = Froad;
|
||||||
double Ftanroad = sqrt(Froad * Froad - Flatroad * Flatroad) + Ftan;
|
|
||||||
|
|
||||||
|
double Ftanroad = sqrt(Froad * Froad - Flatroad * Flatroad) + Ftan;
|
||||||
double acc = Ftanroad / M;
|
double acc = Ftanroad / M;
|
||||||
double maxAcc = MIN(11.5, accFromSpd.CalcY(avgV));
|
double maxAcc = MIN(11.5, accFromSpd.CalcY(avgV));
|
||||||
|
|
||||||
|
@ -398,6 +397,7 @@ double CarModel::CalcMaxLateralF( double spd, double kFriction, double kz ) cons
|
||||||
double CarModel::CalcMaxSpeedCrv() const
|
double CarModel::CalcMaxSpeedCrv() const
|
||||||
{
|
{
|
||||||
const double MAX_SPD = 112; // 400 km/h
|
const double MAX_SPD = 112; // 400 km/h
|
||||||
|
|
||||||
return GRAVITY * TYRE_MU / (MAX_SPD * MAX_SPD);
|
return GRAVITY * TYRE_MU / (MAX_SPD * MAX_SPD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1320,21 +1320,26 @@ void TDriver::SpeedControl2( double targetSpd, double spd0, double& acc, double&
|
||||||
{
|
{
|
||||||
if (m_lastBrk && m_lastTargV)
|
if (m_lastBrk && m_lastTargV)
|
||||||
{
|
{
|
||||||
if( m_lastBrk > 0 )
|
if (m_lastBrk > 0)//|| (car->ctrl.accelCmd == -m_lastBrk) )
|
||||||
{
|
{
|
||||||
double err = m_lastTargV - spd0;
|
double err = m_lastTargV - spd0;
|
||||||
m_accBrkCoeff.Sample(err, m_lastBrk);
|
m_accBrkCoeff.Sample(err, m_lastBrk);
|
||||||
|
// GfOut( "accbrk sample %g -> %g\n", err, m_lastBrk );
|
||||||
}
|
}
|
||||||
m_lastBrk = 0;
|
m_lastBrk = 0;
|
||||||
m_lastTargV = 0;
|
m_lastTargV = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spd0 > targetSpd)
|
if (spd0 > targetSpd)
|
||||||
|
// if( targetSpd < 100 )
|
||||||
{
|
{
|
||||||
|
// if( spd0 - 1 > targetSpd )
|
||||||
{
|
{
|
||||||
double MAX_BRK = 0.5;
|
double MAX_BRK = 0.9;
|
||||||
|
// double MAX_BRK = 0.75;
|
||||||
double err = spd0 - targetSpd;
|
double err = spd0 - targetSpd;
|
||||||
brk = MX(0, MN(m_accBrkCoeff.CalcY(err), MAX_BRK));
|
brk = MX(0, MN(m_accBrkCoeff.CalcY(err), MAX_BRK));
|
||||||
|
// GfOut( "accbrk calcy %g -> %g\n", err, t );
|
||||||
acc = 0;
|
acc = 0;
|
||||||
|
|
||||||
m_lastBrk = brk;
|
m_lastBrk = brk;
|
||||||
|
@ -1346,8 +1351,21 @@ void TDriver::SpeedControl2( double targetSpd, double spd0, double& acc, double&
|
||||||
m_lastTargV = spd0;
|
m_lastTargV = spd0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GfOut( "*** brake *** spd0 %g targ %g brk %g acc %g\n",
|
||||||
|
// spd0, targetSpd, brk, acc );
|
||||||
}
|
}
|
||||||
|
// else
|
||||||
|
// acc = MN(acc, 0.1);
|
||||||
}
|
}
|
||||||
|
#if 1
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double x = (0 + spd0) * (targetSpd - spd0) / 200;
|
||||||
|
|
||||||
|
if (x > 0)
|
||||||
|
acc = x;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDriver::SpeedControl3( double targetSpd, double spd0, double& acc, double& brk )
|
void TDriver::SpeedControl3( double targetSpd, double spd0, double& acc, double& brk )
|
||||||
|
@ -1546,6 +1564,28 @@ void TDriver::Drive( tSituation* s )
|
||||||
PtInfo pi, aheadPi;
|
PtInfo pi, aheadPi;
|
||||||
double angle = 0.0;
|
double angle = 0.0;
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
/*if (m_Strategy->WantToPit())
|
||||||
|
angle = SteerAngle2(car, pi, aheadPi);
|
||||||
|
else*/
|
||||||
|
{
|
||||||
|
int steerControl = ((MN(car->_trkPos.toLeft, car->_trkPos.toRight) < 0.0 && car->_speed_x < MN(20.0f, m_lastTargV - 10.0f)) ? STEERCONTROL_RECOVERY : STEERCONTROL);
|
||||||
|
|
||||||
|
switch (steerControl)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
angle = SteerAngle0(car, pi, aheadPi); break;
|
||||||
|
case 1:
|
||||||
|
angle = SteerAngle1(car, pi, aheadPi); break;
|
||||||
|
case 2:
|
||||||
|
angle = SteerAngle2(car, pi, aheadPi); break;
|
||||||
|
case 3:
|
||||||
|
angle = SteerAngle3(car, pi, aheadPi); break;
|
||||||
|
case 4:
|
||||||
|
angle = SteerAngle4(car, pi, aheadPi); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
switch (STEER_CTRL)
|
switch (STEER_CTRL)
|
||||||
{
|
{
|
||||||
case 0: angle = SteerAngle0(car, pi, aheadPi); break;
|
case 0: angle = SteerAngle0(car, pi, aheadPi); break;
|
||||||
|
@ -1555,6 +1595,7 @@ void TDriver::Drive( tSituation* s )
|
||||||
case 4: angle = SteerAngle4(car, pi, aheadPi); break;
|
case 4: angle = SteerAngle4(car, pi, aheadPi); break;
|
||||||
default: angle = SteerAngle0(car, pi, aheadPi); break;
|
default: angle = SteerAngle0(car, pi, aheadPi); break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
double steer = angle / car->_steerLock;
|
double steer = angle / car->_steerLock;
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ SimpleStrategy::SimpleStrategy()
|
||||||
m_expectedfuelperlap = 0; // [Kg] Expected fuel per lap
|
m_expectedfuelperlap = 0; // [Kg] Expected fuel per lap
|
||||||
TrackLength = 0;
|
TrackLength = 0;
|
||||||
RaceDistance = 0;
|
RaceDistance = 0;
|
||||||
|
m_timeOfPitExit = -30;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -522,6 +523,3 @@ double SimpleStrategy::getRefuel2(int laps)
|
||||||
|
|
||||||
return refuelforrace;
|
return refuelforrace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ protected:
|
||||||
PIT_EXIT,
|
PIT_EXIT,
|
||||||
PIT_GONE
|
PIT_GONE
|
||||||
};
|
};
|
||||||
|
|
||||||
int m_State; // Current pitting state
|
int m_State; // Current pitting state
|
||||||
bool m_GoToPit; // Pit stop needed
|
bool m_GoToPit; // Pit stop needed
|
||||||
|
|
||||||
|
@ -116,6 +117,7 @@ public:
|
||||||
int pitRepair(tCarElt* car, tSituation *s);
|
int pitRepair(tCarElt* car, tSituation *s);
|
||||||
bool isPitFree(tCarElt* car);
|
bool isPitFree(tCarElt* car);
|
||||||
int pitStopPenalty() { return m_stopPenalty; }
|
int pitStopPenalty() { return m_stopPenalty; }
|
||||||
|
double TimeSincePit(double simtime) { return simtime - m_timeOfPitExit; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool test_Pitstop;
|
bool test_Pitstop;
|
||||||
|
@ -145,6 +147,7 @@ protected:
|
||||||
float calcFuel(double totalFuel);
|
float calcFuel(double totalFuel);
|
||||||
double getRefuel1(int laps); // How much fuel it takes to reach the finish line.
|
double getRefuel1(int laps); // How much fuel it takes to reach the finish line.
|
||||||
double getRefuel2(int laps);
|
double getRefuel2(int laps);
|
||||||
|
double m_timeOfPitExit;
|
||||||
|
|
||||||
float MAX_FUEL_PER_METER; // max fuel consumtion.
|
float MAX_FUEL_PER_METER; // max fuel consumtion.
|
||||||
double MAX_FUEL_TANK; // max fuel for this car(fuel tank capacity).
|
double MAX_FUEL_TANK; // max fuel for this car(fuel tank capacity).
|
||||||
|
|
Loading…
Reference in a new issue