fix: treat near-zero start as stopped in full-direction schedule
This commit is contained in:
+8
-3
@@ -46,7 +46,11 @@ public sealed class FullDirectionSegmentScheduleBuilder
|
||||
int stationCount = speedLimit.PathS.Count;
|
||||
var speeds = new double[stationCount];
|
||||
double desired = Math.Min(desiredSpeedMetersPerSecond, speedLimit.DirectionMaximumSpeedMetersPerSecond);
|
||||
speeds[0] = Math.Min(initialProgressSpeedMetersPerSecond, Math.Min(desired,
|
||||
double effectiveInitialSpeed = initialProgressSpeedMetersPerSecond <=
|
||||
longitudinal.StopSpeedToleranceMetersPerSecond
|
||||
? 0d
|
||||
: initialProgressSpeedMetersPerSecond;
|
||||
speeds[0] = Math.Min(effectiveInitialSpeed, Math.Min(desired,
|
||||
speedLimit.MaximumSpeedMetersPerSecond[0]));
|
||||
for (int index = 1; index < stationCount; index++)
|
||||
{
|
||||
@@ -100,7 +104,7 @@ public sealed class FullDirectionSegmentScheduleBuilder
|
||||
referenceSpeeds[referenceSpeeds.Count - 1] = 0d;
|
||||
pathS[pathS.Count - 1] = speedLimit.PathUpperBoundS;
|
||||
EnsureJerkReachableReferenceTimes(times, referenceSpeeds, longitudinal);
|
||||
EnsureMinimumExactStopDuration(times, speedLimit.PathUpperBoundS, initialProgressSpeedMetersPerSecond,
|
||||
EnsureMinimumExactStopDuration(times, speedLimit.PathUpperBoundS, effectiveInitialSpeed,
|
||||
initialAccelerationMetersPerSecondSquared, longitudinal);
|
||||
if (!IsFinite(longitudinal.ZeroSpeedHoldSeconds) || longitudinal.ZeroSpeedHoldSeconds < 0d)
|
||||
{
|
||||
@@ -139,7 +143,8 @@ public sealed class FullDirectionSegmentScheduleBuilder
|
||||
private static void EnsureMinimumExactStopDuration(IList<double> times, double stopBoundaryPathS,
|
||||
double initialSpeed, double initialAcceleration, LongitudinalConfiguration configuration)
|
||||
{
|
||||
if (initialSpeed <= Tolerance || !JerkLimitedStoppingMath.TryCalculate(initialSpeed, initialAcceleration,
|
||||
if (initialSpeed <= configuration.StopSpeedToleranceMetersPerSecond ||
|
||||
!JerkLimitedStoppingMath.TryCalculate(initialSpeed, initialAcceleration,
|
||||
configuration.MaximumDecelerationMetersPerSecondSquared,
|
||||
configuration.MaximumJerkMetersPerSecondCubed, out JerkLimitedStoppingProfile stop, out _))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user