namespace RobotNet10.NavigationTune.Shared.Models;
///
/// 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 (0–100).
///
public class TestMetrics
{
/// Unique identifier for this metrics record.
public Guid Id { get; set; } = Guid.NewGuid();
/// Id of the test run this metrics belong to.
public Guid TestRunId { get; set; }
// --- Tracking Accuracy (độ chính xác bám đường) ---
/// 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 < 0.10 m (10 cm).
public double CrossTrackErrorRMS { get; set; }
/// Peak (max) cross-track error in meters. Giá trị CTE lớn nhất trong test. Mục tiêu < 0.20 m.
public double CrossTrackErrorPeak { get; set; }
/// Mean cross-track error in meters.
public double CrossTrackErrorMean { get; set; }
/// Standard deviation of cross-track error in meters. Độ phân tán của lỗi bám đường.
public double CrossTrackErrorStdDev { get; set; }
/// Root-mean-square of heading error in radians. Lỗi góc hướng (rad). Mục tiêu tương đương < 10°.
public double HeadingErrorRMS { get; set; }
/// Peak (max) heading error in radians.
public double HeadingErrorPeak { get; set; }
/// 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 < 0.05 m (5 cm).
public double GoalPositionError { get; set; }
/// Heading error at goal in radians. Lỗi góc tại điểm đích. Mục tiêu tương đương < 5°.
public double GoalHeadingError { get; set; }
// --- Smoothness (độ mượt chuyển động) ---
/// Standard deviation of linear velocity (m/s). Biến động tốc độ dọc đường. Mục tiêu < 0.1 m/s.
public double VelocityStdDev { get; set; }
/// Standard deviation of linear acceleration (m/s²). Biến động gia tốc. Mục tiêu < 0.5 m/s².
public double AccelerationStdDev { get; set; }
// --- Efficiency (hiệu quả) ---
/// Ratio actual path length / reference path length. > 1 = đi dài hơn đường chuẩn. Mục tiêu < 1.15 (115%).
public double PathLengthRatio { get; set; }
/// Total time to complete the test in seconds.
public double CompletionTime { get; set; }
/// Average linear speed during test in m/s.
public double AverageSpeed { get; set; }
/// Maximum linear speed during test in m/s.
public double MaxSpeed { get; set; }
// --- Scores (0–100) ---
/// Overall score 0–100. Weighted: Tracking 50%, Smoothness 30%, Efficiency 20%.
public double OverallScore { get; set; }
/// Tracking accuracy score 0–100 (CTE, heading, goal error).
public double TrackingScore { get; set; }
/// Smoothness score 0–100 (velocity stddev, acceleration stddev).
public double SmoothnessScore { get; set; }
/// Efficiency score 0–100 (path length ratio).
public double EfficiencyScore { get; set; }
/// True if all acceptance criteria are met (CTE RMS/peak, heading, goal error, path length ratio).
public bool PassedCriteria { get; set; }
}
///
/// Tracking accuracy metrics: độ chính xác bám đường (CTE, heading, goal error).
///
public class TrackingAccuracyMetrics
{
/// RMS cross-track error (m).
public double CrossTrackErrorRMS { get; set; }
/// Peak cross-track error (m).
public double CrossTrackErrorPeak { get; set; }
/// Mean cross-track error (m).
public double CrossTrackErrorMean { get; set; }
/// Std dev cross-track error (m).
public double CrossTrackErrorStdDev { get; set; }
/// RMS heading error (rad).
public double HeadingErrorRMS { get; set; }
/// Peak heading error (rad).
public double HeadingErrorPeak { get; set; }
/// Position error at goal (m).
public double GoalPositionError { get; set; }
/// Heading error at goal (rad).
public double GoalHeadingError { get; set; }
}
///
/// Smoothness metrics: độ mượt chuyển động (biến động vận tốc, gia tốc).
///
public class SmoothnessMetrics
{
/// Std dev of linear velocity (m/s).
public double VelocityStdDev { get; set; }
/// Std dev of linear acceleration (m/s²).
public double AccelerationStdDev { get; set; }
}
///
/// Efficiency metrics: hiệu quả (quãng đường, thời gian, tốc độ).
///
public class EfficiencyMetrics
{
/// Actual path length / reference path length.
public double PathLengthRatio { get; set; }
/// Completion time (s).
public double CompletionTime { get; set; }
/// Average speed (m/s).
public double AverageSpeed { get; set; }
/// Max speed (m/s).
public double MaxSpeed { get; set; }
}