namespace MultiWheelC.TrajectoryPlanning.PathSmoothing;
/// 一条原始或平滑路径的不可变质量指标。
public sealed class PathQualityMetrics
{
/// 创建全零、不可行的质量指标。
public PathQualityMetrics()
: this(false, 0d, 0d, 0d, 0d, 0d, 0d, 0d, 0d, 0d, 0d, 0d)
{
}
/// 创建不显式提供曲率导数峰值的完整质量指标快照;曲率导数峰值按 0 处理。
/// 是否通过完整安全和运动学复核。
/// 路径总弧长,单位 m。
/// 绝对车辆曲率峰值,单位 1/m。
/// 车辆曲率均方根,单位 1/m。
/// 按方向段累计的绝对曲率变化,单位 1/m。
/// 无单位的曲率变化能量/代价。
/// 扩大车体的最小保守净空,单位 m。
/// 相对原始粗路径的长度变化百分比。
/// 相对原始粗路径的峰值曲率变化百分比。
/// 相对原始粗路径的曲率变化百分比。
/// 相对原始粗路径的最小净空变化,单位 m。
public PathQualityMetrics(
bool isFeasible,
double pathLengthMeters,
double maximumAbsoluteVehicleCurvaturePerMeter,
double rootMeanSquareVehicleCurvaturePerMeter,
double totalAbsoluteCurvatureVariationPerMeter,
double curvatureVariationEnergy,
double minimumBodyClearanceMeters,
double lengthChangePercent,
double peakCurvatureChangePercent,
double curvatureVariationChangePercent,
double minimumClearanceChangeMeters)
: this(
isFeasible,
pathLengthMeters,
maximumAbsoluteVehicleCurvaturePerMeter,
0d,
rootMeanSquareVehicleCurvaturePerMeter,
totalAbsoluteCurvatureVariationPerMeter,
curvatureVariationEnergy,
minimumBodyClearanceMeters,
lengthChangePercent,
peakCurvatureChangePercent,
curvatureVariationChangePercent,
minimumClearanceChangeMeters)
{
}
/// 创建包含曲率导数峰值的完整质量指标快照。
/// 是否通过完整安全和运动学复核。
/// 路径总弧长,单位 m。
/// 绝对车辆曲率峰值,单位 1/m。
/// 绝对车辆曲率导数峰值,单位 1/m²。
/// 车辆曲率均方根,单位 1/m。
/// 按方向段累计的绝对曲率变化,单位 1/m。
/// 无单位的曲率变化能量/代价。
/// 扩大车体的最小保守净空,单位 m。
/// 相对原始粗路径的长度变化百分比。
/// 相对原始粗路径的峰值曲率变化百分比。
/// 相对原始粗路径的曲率变化百分比。
/// 相对原始粗路径的最小净空变化,单位 m。
public PathQualityMetrics(
bool isFeasible,
double pathLengthMeters,
double maximumAbsoluteVehicleCurvaturePerMeter,
double maximumAbsoluteVehicleCurvatureDerivativePerSquareMeter,
double rootMeanSquareVehicleCurvaturePerMeter,
double totalAbsoluteCurvatureVariationPerMeter,
double curvatureVariationEnergy,
double minimumBodyClearanceMeters,
double lengthChangePercent,
double peakCurvatureChangePercent,
double curvatureVariationChangePercent,
double minimumClearanceChangeMeters)
{
IsFeasible = isFeasible;
PathLengthMeters = pathLengthMeters;
MaximumAbsoluteVehicleCurvaturePerMeter = maximumAbsoluteVehicleCurvaturePerMeter;
MaximumAbsoluteVehicleCurvatureDerivativePerSquareMeter = maximumAbsoluteVehicleCurvatureDerivativePerSquareMeter;
RootMeanSquareVehicleCurvaturePerMeter = rootMeanSquareVehicleCurvaturePerMeter;
TotalAbsoluteCurvatureVariationPerMeter = totalAbsoluteCurvatureVariationPerMeter;
CurvatureVariationEnergy = curvatureVariationEnergy;
MinimumBodyClearanceMeters = minimumBodyClearanceMeters;
LengthChangePercent = lengthChangePercent;
PeakCurvatureChangePercent = peakCurvatureChangePercent;
CurvatureVariationChangePercent = curvatureVariationChangePercent;
MinimumClearanceChangeMeters = minimumClearanceChangeMeters;
}
/// 该路径是否通过完整安全和运动学复核。
public bool IsFeasible { get; }
/// 路径总弧长,单位 m。
public double PathLengthMeters { get; }
/// 绝对车辆曲率峰值,单位 1/m。
public double MaximumAbsoluteVehicleCurvaturePerMeter { get; }
/// 绝对车辆曲率导数峰值,单位 1/m²。
public double MaximumAbsoluteVehicleCurvatureDerivativePerSquareMeter { get; }
/// 车辆曲率均方根,单位 1/m。
public double RootMeanSquareVehicleCurvaturePerMeter { get; }
/// 逐方向段累加的绝对曲率变化,单位 1/m。
public double TotalAbsoluteCurvatureVariationPerMeter { get; }
/// 逐方向段计算的曲率变化能量。
public double CurvatureVariationEnergy { get; }
/// 曲率变化代价的兼容名称。
public double CurvatureVariationCost => CurvatureVariationEnergy;
/// 完整扩大车体的最小保守净空,单位 m。
public double MinimumBodyClearanceMeters { get; }
/// 相对原始粗路径的长度变化百分比。
public double LengthChangePercent { get; }
/// 相对原始粗路径的峰值曲率变化百分比。
public double PeakCurvatureChangePercent { get; }
/// 相对原始粗路径的曲率变化百分比。
public double CurvatureVariationChangePercent { get; }
/// 相对原始粗路径的最小净空变化,单位 m。
public double MinimumClearanceChangeMeters { get; }
}