16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 13:59:19 +02:00

ai braking logic tweaks

This commit is contained in:
tmj-fstate
2017-09-01 15:21:31 +02:00
parent 61e8b8a906
commit fa8881f52f

View File

@@ -2376,7 +2376,7 @@ bool TController::IncBrake()
} }
else { else {
if( mvOccupied->BrakeCtrlPos + 1 == mvOccupied->BrakeCtrlPosNo ) { if( mvOccupied->BrakeCtrlPos + 1 == mvOccupied->BrakeCtrlPosNo ) {
if (AccDesired < -1.5) // hamowanie nagle if (AccDesired < -0.75) // hamowanie nagle
OK = mvOccupied->BrakeLevelAdd(1.0); OK = mvOccupied->BrakeLevelAdd(1.0);
else else
OK = false; OK = false;
@@ -4396,9 +4396,12 @@ TController::UpdateSituation(double dt) {
if (ActualProximityDist < fMaxProximityDist) { if (ActualProximityDist < fMaxProximityDist) {
// jak minął już maksymalny dystans po prostu hamuj (niski stopień) // jak minął już maksymalny dystans po prostu hamuj (niski stopień)
// ma stanąć, a jest w drodze hamowania albo ma jechać // ma stanąć, a jest w drodze hamowania albo ma jechać
/*
VelDesired = Global::Min0RSpeed( VelDesired, VelNext ); VelDesired = Global::Min0RSpeed( VelDesired, VelNext );
if( VelDesired == 0.0 ) { */
if( VelNext == 0.0 ) {
// hamowanie tak, aby stanąć // hamowanie tak, aby stanąć
VelDesired = VelNext;
AccDesired = ( VelNext * VelNext - vel * vel ) / ( 25.92 * ( ActualProximityDist + 0.1 - 0.5*fMinProximityDist ) ); AccDesired = ( VelNext * VelNext - vel * vel ) / ( 25.92 * ( ActualProximityDist + 0.1 - 0.5*fMinProximityDist ) );
AccDesired = std::min( AccDesired, fAccThreshold ); AccDesired = std::min( AccDesired, fAccThreshold );
} }
@@ -4423,11 +4426,18 @@ TController::UpdateSituation(double dt) {
else { else {
// jest bliżej niż fMinProximityDist // jest bliżej niż fMinProximityDist
// utrzymuj predkosc bo juz blisko // utrzymuj predkosc bo juz blisko
/*
VelDesired = Global::Min0RSpeed( VelDesired, VelNext ); VelDesired = Global::Min0RSpeed( VelDesired, VelNext );
*/
if( VelNext == 0.0 ) {
VelDesired = VelNext;
}
else {
if( vel <= VelNext + fVelPlus ) { if( vel <= VelNext + fVelPlus ) {
// jeśli niewielkie przekroczenie, ale ma jechać // jeśli niewielkie przekroczenie, ale ma jechać
AccDesired = std::max( 0.0, AccPreferred ); // to olej (zacznij luzować) AccDesired = std::max( 0.0, AccPreferred ); // to olej (zacznij luzować)
} }
}
ReactionTime = 0.1; // i orientuj się szybciej ReactionTime = 0.1; // i orientuj się szybciej
} }
} }
@@ -4621,7 +4631,7 @@ TController::UpdateSituation(double dt) {
} }
// małe przyspieszenie // małe przyspieszenie
// Ra 2F1I: wyłączyć kiedyś to uśrednianie i przeanalizować skanowanie, czemu migocze // Ra 2F1I: wyłączyć kiedyś to uśrednianie i przeanalizować skanowanie, czemu migocze
if (AccDesired > -0.15) // hamowania lepeiej nie uśredniać if (AccDesired > -0.05) // hamowania lepeiej nie uśredniać
AccDesired = fAccDesiredAv = AccDesired = fAccDesiredAv =
0.2 * AccDesired + 0.2 * AccDesired +
0.8 * fAccDesiredAv; // uśrednione, żeby ograniczyć migotanie 0.8 * fAccDesiredAv; // uśrednione, żeby ograniczyć migotanie
@@ -4660,7 +4670,7 @@ TController::UpdateSituation(double dt) {
// margines dla prędkości jest doliczany tylko jeśli oczekiwana prędkość jest większa od 5km/h // margines dla prędkości jest doliczany tylko jeśli oczekiwana prędkość jest większa od 5km/h
if( false == TestFlag( iDrivigFlags, movePress ) ) { if( false == TestFlag( iDrivigFlags, movePress ) ) {
// jeśli nie dociskanie // jeśli nie dociskanie
if( AccDesired < -0.1 ) { if( AccDesired < -0.05 ) {
while( true == DecSpeed() ) { ; } // jeśli hamujemy, to nie przyspieszamy while( true == DecSpeed() ) { ; } // jeśli hamujemy, to nie przyspieszamy
} }
else if( ( vel > VelDesired ) else if( ( vel > VelDesired )
@@ -4730,7 +4740,7 @@ TController::UpdateSituation(double dt) {
|| ( ( AccDesired < fAccGravity - 0.1 ) && ( AbsAccS > AccDesired + fBrake_a1[ 0 ] ) ) ) { || ( ( AccDesired < fAccGravity - 0.1 ) && ( AbsAccS > AccDesired + fBrake_a1[ 0 ] ) ) ) {
// u góry ustawia się hamowanie na fAccThreshold // u góry ustawia się hamowanie na fAccThreshold
if( ( fBrakeTime < 0.0 ) if( ( fBrakeTime < 0.0 )
|| ( AccDesired < fAccGravity - 0.5 ) || ( AccDesired < fAccGravity - 0.75 )
|| ( mvOccupied->BrakeCtrlPos <= 0 ) ) { || ( mvOccupied->BrakeCtrlPos <= 0 ) ) {
// jeśli upłynął czas reakcji hamulca, chyba że nagłe albo luzował // jeśli upłynął czas reakcji hamulca, chyba że nagłe albo luzował
if( true == IncBrake() ) { if( true == IncBrake() ) {