From 9e71d62be0267e421867234e1b3eba3e526e24c7 Mon Sep 17 00:00:00 2001 From: andrewsumner Date: Wed, 1 Jul 2009 23:43:58 +0000 Subject: [PATCH] Human driver - Abs improved git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@1035 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 102c11c65e4463cf5c776fa07d116c574635272a Former-commit-id: 41399493a37c586e51156b9988af4cddb42b78c3 --- src/drivers/human/human.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/drivers/human/human.cpp b/src/drivers/human/human.cpp index 3df6cb2ba..673c48d8a 100644 --- a/src/drivers/human/human.cpp +++ b/src/drivers/human/human.cpp @@ -925,8 +925,9 @@ static void common_drive(int index, tCarElt* car, tSituation *s) if (HCtx[idx]->ParamAbs) { - if (fabs(car->_speed_x) > 10.0) + if (fabs(car->_speed_x) > 10.0 && car->_brakeCmd > 0.0) { + tdble brake1 = car->_brakeCmd, brake2 = car->_brakeCmd, brake3 = car->_brakeCmd; tdble rearskid = MAX(0.0, MAX(car->_skid[2], car->_skid[3]) - MAX(car->_skid[0], car->_skid[1])); int i; @@ -935,13 +936,13 @@ static void common_drive(int index, tCarElt* car, tSituation *s) NORM_PI_PI(skidAng); if (car->_speed_x > 5 && fabs(skidAng) > 0.2) - car->_brakeCmd = MIN(car->_brakeCmd, 0.10 + 0.70 * cos(skidAng)); + brake1 = MIN(car->_brakeCmd, 0.10 + 0.70 * cos(skidAng)); // reduce brake if car steering sharply if (fabs(car->_steerCmd) > 0.1) { - tdble decel = ((fabs(car->_steerCmd)-0.1) * (1.0 + fabs(car->_steerCmd)) * 0.4); - car->_brakeCmd = MIN(car->_brakeCmd, MAX(0.35, 1.0 - decel)); + tdble decel = ((fabs(car->_steerCmd)-0.1) * (1.0 + fabs(car->_steerCmd)) * 0.2); + brake2 = MIN(car->_brakeCmd, MAX(0.35, 1.0 - decel)); } const tdble abs_slip = 1.0; @@ -955,7 +956,9 @@ static void common_drive(int index, tCarElt* car, tSituation *s) slip = car->_speed_x - slip/4.0f; if (slip > abs_slip) - car->_brakeCmd = MAX(MIN(0.35, car->_brakeCmd), car->_brakeCmd - MIN(car->_brakeCmd*0.8, (slip - abs_slip) / abs_range)); + brake3 = MAX(MIN(0.35, car->_brakeCmd), car->_brakeCmd - MIN(car->_brakeCmd*0.8, (slip - abs_slip) / abs_range) * 0.7); + + car->_brakeCmd = MIN(brake1, MIN(brake2, brake3)); } }