Files
Denso/srcs/RobotNet10/Shared/RobotNet10.NavigationTune.Shared/Models/TestMetrics.cs
2026-07-03 16:31:37 +07:00

129 lines
5.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace RobotNet10.NavigationTune.Shared.Models;
/// <summary>
/// Complete test metrics calculated from telemetry data after a tuning test run.
/// Groups: Tracking Accuracy (bám đường), Smoothness (độ mượt), Efficiency (hiệu quả), and Scores (0100).
/// </summary>
public class TestMetrics
{
/// <summary>Unique identifier for this metrics record.</summary>
public Guid Id { get; set; } = Guid.NewGuid();
/// <summary>Id of the test run this metrics belong to.</summary>
public Guid TestRunId { get; set; }
// --- Tracking Accuracy (độ chính xác bám đường) ---
/// <summary>Root-mean-square of cross-track error (CTE) in meters. Khoảng cách vuông góc từ robot tới reference path. Mục tiêu &lt; 0.10 m (10 cm).</summary>
public double CrossTrackErrorRMS { get; set; }
/// <summary>Peak (max) cross-track error in meters. Giá trị CTE lớn nhất trong test. Mục tiêu &lt; 0.20 m.</summary>
public double CrossTrackErrorPeak { get; set; }
/// <summary>Mean cross-track error in meters.</summary>
public double CrossTrackErrorMean { get; set; }
/// <summary>Standard deviation of cross-track error in meters. Độ phân tán của lỗi bám đường.</summary>
public double CrossTrackErrorStdDev { get; set; }
/// <summary>Root-mean-square of heading error in radians. Lỗi góc hướng (rad). Mục tiêu tương đương &lt; 10°.</summary>
public double HeadingErrorRMS { get; set; }
/// <summary>Peak (max) heading error in radians.</summary>
public double HeadingErrorPeak { get; set; }
/// <summary>Position error at goal in meters (average over last ~10% of trajectory). Lỗi vị trí tại điểm đích. Mục tiêu &lt; 0.05 m (5 cm).</summary>
public double GoalPositionError { get; set; }
/// <summary>Heading error at goal in radians. Lỗi góc tại điểm đích. Mục tiêu tương đương &lt; 5°.</summary>
public double GoalHeadingError { get; set; }
// --- Smoothness (độ mượt chuyển động) ---
/// <summary>Standard deviation of linear velocity (m/s). Biến động tốc độ dọc đường. Mục tiêu &lt; 0.1 m/s.</summary>
public double VelocityStdDev { get; set; }
/// <summary>Standard deviation of linear acceleration (m/s²). Biến động gia tốc. Mục tiêu &lt; 0.5 m/s².</summary>
public double AccelerationStdDev { get; set; }
// --- Efficiency (hiệu quả) ---
/// <summary>Ratio actual path length / reference path length. &gt; 1 = đi dài hơn đường chuẩn. Mục tiêu &lt; 1.15 (115%).</summary>
public double PathLengthRatio { get; set; }
/// <summary>Total time to complete the test in seconds.</summary>
public double CompletionTime { get; set; }
/// <summary>Average linear speed during test in m/s.</summary>
public double AverageSpeed { get; set; }
/// <summary>Maximum linear speed during test in m/s.</summary>
public double MaxSpeed { get; set; }
// --- Scores (0100) ---
/// <summary>Overall score 0100. Weighted: Tracking 50%, Smoothness 30%, Efficiency 20%.</summary>
public double OverallScore { get; set; }
/// <summary>Tracking accuracy score 0100 (CTE, heading, goal error).</summary>
public double TrackingScore { get; set; }
/// <summary>Smoothness score 0100 (velocity stddev, acceleration stddev).</summary>
public double SmoothnessScore { get; set; }
/// <summary>Efficiency score 0100 (path length ratio).</summary>
public double EfficiencyScore { get; set; }
/// <summary>True if all acceptance criteria are met (CTE RMS/peak, heading, goal error, path length ratio).</summary>
public bool PassedCriteria { get; set; }
}
/// <summary>
/// Tracking accuracy metrics: độ chính xác bám đường (CTE, heading, goal error).
/// </summary>
public class TrackingAccuracyMetrics
{
/// <summary>RMS cross-track error (m).</summary>
public double CrossTrackErrorRMS { get; set; }
/// <summary>Peak cross-track error (m).</summary>
public double CrossTrackErrorPeak { get; set; }
/// <summary>Mean cross-track error (m).</summary>
public double CrossTrackErrorMean { get; set; }
/// <summary>Std dev cross-track error (m).</summary>
public double CrossTrackErrorStdDev { get; set; }
/// <summary>RMS heading error (rad).</summary>
public double HeadingErrorRMS { get; set; }
/// <summary>Peak heading error (rad).</summary>
public double HeadingErrorPeak { get; set; }
/// <summary>Position error at goal (m).</summary>
public double GoalPositionError { get; set; }
/// <summary>Heading error at goal (rad).</summary>
public double GoalHeadingError { get; set; }
}
/// <summary>
/// Smoothness metrics: độ mượt chuyển động (biến động vận tốc, gia tốc).
/// </summary>
public class SmoothnessMetrics
{
/// <summary>Std dev of linear velocity (m/s).</summary>
public double VelocityStdDev { get; set; }
/// <summary>Std dev of linear acceleration (m/s²).</summary>
public double AccelerationStdDev { get; set; }
}
/// <summary>
/// Efficiency metrics: hiệu quả (quãng đường, thời gian, tốc độ).
/// </summary>
public class EfficiencyMetrics
{
/// <summary>Actual path length / reference path length.</summary>
public double PathLengthRatio { get; set; }
/// <summary>Completion time (s).</summary>
public double CompletionTime { get; set; }
/// <summary>Average speed (m/s).</summary>
public double AverageSpeed { get; set; }
/// <summary>Max speed (m/s).</summary>
public double MaxSpeed { get; set; }
}