mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 19:49:19 +02:00
ai braking logic tweaks
This commit is contained in:
20
Driver.cpp
20
Driver.cpp
@@ -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() ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user