fix: correct EM observation painter geometry

This commit is contained in:
梁薄云
2026-08-07 10:58:18 +08:00
parent d019b08074
commit 37c27bdb1b
3 changed files with 149 additions and 15 deletions
@@ -23,6 +23,7 @@ internal static class TrajectoryObservationChecks
{
TrajectoryObservationSettingsChecks.Run();
TrajectoryObservationSegmentChecks.Run();
VerifiesPainterPoseGeometryReplacesLargeArrow();
TrajectoryObservationVisualizationChecks.Run();
VerifiesObservationSourceHasNoActuatorCalls();
VerifiesObservationSourceUsesRequiredOperatorText();
@@ -48,6 +49,7 @@ internal static class TrajectoryObservationChecks
VerifiesPublishedPlanningDiagnosticsIncludeTrajectorySummary();
VerifiesEmptyChartsReceivePersistentPlanningDiagnostic();
VerifiesLsPresentationUsesPathSOnHorizontalAxis();
VerifiesPainterStAxesUsePathSAndTimeUnits();
VerifiesRollingRequestUsesOnePublishedTrajectorySnapshot();
VerifiesActiveSegmentControllerDoesNotCrossSeedTrajectories();
VerifiesLoopDefersSegmentAdvanceUntilPlanningIsConsumed();
@@ -982,14 +984,52 @@ internal static class TrajectoryObservationChecks
TrajectoryObservationLsPresentationModel model = TrajectoryObservationLsPresentationModel.Create(charts);
Verification.Equal("path-S (m)", model.HorizontalAxisLabel, "observer LS horizontal axis label");
Verification.Equal("lateral offset (m)", model.VerticalAxisLabel, "observer LS vertical axis label");
Verification.Equal("ReferenceS (m)", model.HorizontalAxisLabel, "observer LS horizontal axis label");
Verification.Equal("l (m)", model.VerticalAxisLabel, "observer LS vertical axis label");
Verification.NearlyEqual(10.25d, model.Samples[0].HorizontalPathS,
"observer LS path-S is horizontal");
"observer LS shared ReferenceS is horizontal");
Verification.NearlyEqual(0.10d, model.Samples[0].VerticalLateralOffset,
"observer LS lateral offset is vertical");
}
private static void VerifiesPainterPoseGeometryReplacesLargeArrow()
{
string presentationPath = Path.Combine(Directory.GetCurrentDirectory(), "ClumsyPilot",
"ParkrobTrajplanner", "tarjplanner_movementtest", "TrajectoryObservationPresentation.cs");
string source = new UTF8Encoding(false, true).GetString(File.ReadAllBytes(presentationPath));
Verification.True(!source.Contains("endArrow: true"),
"observer painter removes the large terminal arrow");
Verification.True(source.Contains("endArrow: false"),
"observer painter uses a thin heading ray without an arrow");
foreach (string corner in new[]
{
"frontLeftX", "frontLeftY", "frontRightX", "frontRightY",
"rearRightX", "rearRightY", "rearLeftX", "rearLeftY",
})
{
Verification.True(source.Contains(corner), "observer pose outline includes " + corner);
}
Verification.True(source.Contains("VehicleParameters vehicle"),
"observer pose outline is scaled from vehicle parameters");
Verification.True(source.Contains("MillimetersPerMeter = 1000f") &&
source.Contains("ToMillimeters(path[index - 1].X)") &&
source.Contains("ToMillimeters(path[index - 1].Y)") &&
source.Contains("ToMillimeters(path[index].X)") &&
source.Contains("ToMillimeters(path[index].Y)"),
"observer world paths use one millimetres-per-metre factor for x and y");
}
private static void VerifiesPainterStAxesUsePathSAndTimeUnits()
{
string presentationPath = Path.Combine(Directory.GetCurrentDirectory(), "ClumsyPilot",
"ParkrobTrajplanner", "tarjplanner_movementtest", "TrajectoryObservationPresentation.cs");
string source = new UTF8Encoding(false, true).GetString(File.ReadAllBytes(presentationPath));
Verification.True(source.Contains("\"t (s)\""), "observer ST horizontal axis uses seconds");
Verification.True(source.Contains("\"PathS (m)\""), "observer ST vertical axis uses true PathS");
}
private static void FreezesBootstrapVehicleForRollingRequests()
{
DateTimeOffset effectiveAt = new DateTimeOffset(2026, 8, 4, 2, 0, 0, TimeSpan.Zero);