more refinements to Asr and Abs

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

Former-commit-id: 2ea1ab8ee8803db8918eefc67c7bbb6315b3ccb7
Former-commit-id: dfbc8eccc2442070dcf61f255c114be3945b9244
This commit is contained in:
andrewsumner 2011-05-11 00:17:00 +00:00
parent 3e2356b66a
commit 956db469e8

View file

@ -953,12 +953,14 @@ common_drive(const int index, tCarElt* car, tSituation *s)
if (car->_speed_x > 5 && fabs(skidAng) > 0.2) if (car->_speed_x > 5 && fabs(skidAng) > 0.2)
brake1 = MIN(car->_brakeCmd, 0.10 + 0.70 * cos(skidAng)); brake1 = MIN(car->_brakeCmd, 0.10 + 0.70 * cos(skidAng));
#if 0
// reduce brake if car steering sharply // reduce brake if car steering sharply
if (fabs(car->_steerCmd) > 0.1) if (fabs(car->_steerCmd) > 0.1)
{ {
tdble decel = ((fabs(car->_steerCmd)-0.1) * (1.0 + fabs(car->_steerCmd)) * 0.2); tdble decel = ((fabs(car->_steerCmd)-0.1) * (1.0 + fabs(car->_steerCmd)) * 0.2);
brake2 = MIN(car->_brakeCmd, MAX(0.35, 1.0 - decel)); brake2 = MIN(car->_brakeCmd, MAX(0.35, 1.0 - decel));
} }
#endif
const tdble abs_slip = 1.0; const tdble abs_slip = 1.0;
const tdble abs_range = 9.0; const tdble abs_range = 9.0;
@ -966,12 +968,11 @@ common_drive(const int index, tCarElt* car, tSituation *s)
// reduce brake if wheels are slipping // reduce brake if wheels are slipping
slip = 0; slip = 0;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
slip += car->_wheelSpinVel(i) * car->_wheelRadius(i); slip = MAX(slip, car->_speed_x - (car->_wheelSpinVel(i) * car->_wheelRadius(i)));
} }
slip = car->_speed_x - slip/4.0f;
if (slip > abs_slip) if (slip > abs_slip)
brake3 = MAX(MIN(0.35, car->_brakeCmd), car->_brakeCmd - MIN(car->_brakeCmd*0.8, (slip - abs_slip) / abs_range) * 0.7); brake3 = MAX(MIN(0.35, car->_brakeCmd), car->_brakeCmd - MIN(car->_brakeCmd*0.8, (slip - abs_slip) / abs_range));
car->_brakeCmd = MIN(brake1, MIN(brake2, brake3)); car->_brakeCmd = MIN(brake1, MIN(brake2, brake3));
} }
@ -1020,8 +1021,8 @@ common_drive(const int index, tCarElt* car, tSituation *s)
drivespeed = (((car->_wheelSpinVel(REAR_RGT) + car->_wheelSpinVel(REAR_LFT)) - (20 * friction)) * drivespeed = (((car->_wheelSpinVel(REAR_RGT) + car->_wheelSpinVel(REAR_LFT)) - (20 * friction)) *
car->_wheelRadius(REAR_LFT) + car->_wheelRadius(REAR_LFT) +
(steer_correct ? (steer_diff * fabs(car->_yaw_rate) * (8 / friction)) : 0.0) + (steer_correct ? (steer_diff * fabs(car->_yaw_rate) * (8 / friction)) : 0.0) +
-(car->_wheelSlipAccel(REAR_RGT)) + MAX(0.0, (-(car->_wheelSlipAccel(REAR_RGT)) - friction)) +
-(car->_wheelSlipAccel(REAR_LFT)) + MAX(0.0, (-(car->_wheelSlipAccel(REAR_LFT)) - friction)) +
fabs(car->_wheelSlipSide(REAR_RGT) * MAX(4, 80-fabs(car->_speed_x))/(8 * friction)) + fabs(car->_wheelSlipSide(REAR_RGT) * MAX(4, 80-fabs(car->_speed_x))/(8 * friction)) +
fabs(car->_wheelSlipSide(REAR_LFT) * MAX(4, 80-fabs(car->_speed_x))/(8 * friction))) fabs(car->_wheelSlipSide(REAR_LFT) * MAX(4, 80-fabs(car->_speed_x))/(8 * friction)))
/ 2.0; / 2.0;