fix: stabilize stopped-start EM planning and add txt diagnostics

This commit is contained in:
梁薄云
2026-08-07 15:51:31 +08:00
parent f2970d0aff
commit d378ad6257
13 changed files with 373 additions and 53 deletions
@@ -23,6 +23,7 @@ internal static class TrajectoryObservationChecks
{
TrajectoryObservationSettingsChecks.Run();
TrajectoryObservationSegmentChecks.Run();
VerifiesTrajectoryObservationReportWriterCreatesTxt();
VerifiesPainterPoseGeometryReplacesLargeArrow();
TrajectoryObservationVisualizationChecks.Run();
VerifiesObservationSourceHasNoActuatorCalls();
@@ -47,6 +48,7 @@ internal static class TrajectoryObservationChecks
VerifiesPresentationTextDescribesObservationWithoutSendingCommand();
VerifiesPlanningDiagnosticsKeepRawFailureReason();
VerifiesPublishedPlanningDiagnosticsIncludeTrajectorySummary();
VerifiesCurveReportIncludesLsStSpeedAccelerationAndJerk();
VerifiesEmptyChartsReceivePersistentPlanningDiagnostic();
VerifiesLsPresentationUsesPathSOnHorizontalAxis();
VerifiesPainterStAxesUsePathSAndTimeUnits();
@@ -81,6 +83,29 @@ internal static class TrajectoryObservationChecks
}
}
private static void VerifiesTrajectoryObservationReportWriterCreatesTxt()
{
string reportDirectory = Path.Combine(Path.GetTempPath(),
"em-trajectory-report-" + Guid.NewGuid().ToString("N"));
try
{
var writer = new TrajectoryObservationReportWriter(17L, reportDirectory);
writer.Append("cycle=1 status=SolverTimedOut primal=140.918");
string reportPath = writer.Save();
Verification.True(File.Exists(reportPath), "trajectory observation txt report exists");
string text = File.ReadAllText(reportPath);
Verification.True(text.Contains("session=17"), "report includes session identity");
Verification.True(text.Contains("OBSERVE_ONLY"), "report records observation-only boundary");
Verification.True(text.Contains("SolverTimedOut"), "report includes cycle failure");
}
finally
{
if (Directory.Exists(reportDirectory))
Directory.Delete(reportDirectory, true);
}
}
private static void VerifiesObservationSourceUsesRequiredOperatorText()
{
string movementTestSource = Path.Combine(Directory.GetCurrentDirectory(), "ClumsyPilot",
@@ -960,6 +985,25 @@ internal static class TrajectoryObservationChecks
}
}
private static void VerifiesCurveReportIncludesLsStSpeedAccelerationAndJerk()
{
DateTimeOffset effectiveAt = new DateTimeOffset(2026, 8, 5, 0, 0, 0, TimeSpan.Zero);
EmTrajectory trajectory = CreatePublishedTrajectory(effectiveAt);
DirectionSegmentView segment = CreateStraightSegment();
TrajectoryObservationCharts charts = TrajectoryObservationCharts.Build(trajectory, segment, 0.5d);
string text = TrajectoryObservationDiagnostics.CreateCurveReport(charts, trajectory).Text;
foreach (string section in new[]
{
"LS_CURVE", "ST_CURVE", "SPEED_CURVE", "ACCELERATION_CURVE", "JERK_CURVE",
"referenceS(m)", "time(s)", "signedSpeed(m/s)", "acceleration(m/s2)", "jerk(m/s3)",
})
{
Verification.True(text.Contains(section), "curve report includes " + section);
}
}
private static void VerifiesEmptyChartsReceivePersistentPlanningDiagnostic()
{
string presentationPath = Path.Combine(Directory.GetCurrentDirectory(), "ClumsyPilot",