chore: save current workspace progress
This commit is contained in:
@@ -22,15 +22,23 @@ public sealed class SmoothedPathValidator
|
||||
}
|
||||
|
||||
/// <summary>创建使用指定连续车体碰撞检查器的平滑路径验证器。</summary>
|
||||
/// <param name="collisionChecker">以车辆几何中心位姿执行完整车体和扫掠复核的检查器,不能为 <see langword="null"/>。</param>
|
||||
public SmoothedPathValidator(FootprintCollisionChecker collisionChecker)
|
||||
{
|
||||
_collisionChecker = collisionChecker ?? throw new ArgumentNullException(nameof(collisionChecker));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 复核候选平滑路径。每个候选方向段必须保持原始段的端点和换向拓扑;
|
||||
/// 输出中的净空均由本次实际车体检查重新计算,绝不沿用候选声明值。
|
||||
/// </summary>
|
||||
/// <summary>复核候选平滑路径,并以默认零转弯半径容差重新计算所有净空。</summary>
|
||||
/// <param name="candidatePath">待发布候选点序列;位置/弧长单位为 m、航向为 rad、曲率为 1/m。</param>
|
||||
/// <param name="candidateSegments">覆盖候选点的前进/倒车方向段集合。</param>
|
||||
/// <param name="originalPath">预处理原始路径,候选必须保留其端点与换向拓扑。</param>
|
||||
/// <param name="map">已准备的规划地图快照。</param>
|
||||
/// <param name="vehicle">车辆尺寸、安全余量和曲率约束。</param>
|
||||
/// <param name="maximumCollisionCheckStepMeters">相邻点车体扫掠最大中心步长,单位 m。</param>
|
||||
/// <param name="pathWithClearance">成功时为净空由真实复核重算的只读路径;失败时为空集合。</param>
|
||||
/// <param name="minimumClearanceMeters">成功时为完整扩大车体的最小保守净空,单位 m;失败时为 0。</param>
|
||||
/// <param name="reason">失败原因;成功时为空字符串。</param>
|
||||
/// <returns>端点、换向、曲率、点碰撞和扫掠均通过时为 <see langword="true"/>;否则为 <see langword="false"/>,不发布部分路径。</returns>
|
||||
public bool TryValidate(
|
||||
IReadOnlyList<SmoothedPathPoint> candidatePath,
|
||||
IReadOnlyList<SmoothedPathSegment> candidateSegments,
|
||||
@@ -41,6 +49,35 @@ public sealed class SmoothedPathValidator
|
||||
out IReadOnlyList<SmoothedPathPoint> pathWithClearance,
|
||||
out double minimumClearanceMeters,
|
||||
out string reason)
|
||||
{
|
||||
return TryValidate(
|
||||
candidatePath, candidateSegments, originalPath, map, vehicle, maximumCollisionCheckStepMeters, 0d,
|
||||
out pathWithClearance, out minimumClearanceMeters, out reason);
|
||||
}
|
||||
|
||||
/// <summary>以只用于曲率上限的显式转弯半径容差复核候选路径。</summary>
|
||||
/// <param name="candidatePath">待复核候选点序列。</param>
|
||||
/// <param name="candidateSegments">候选方向段集合。</param>
|
||||
/// <param name="originalPath">必须保持端点和换向拓扑的预处理原始路径。</param>
|
||||
/// <param name="map">规划地图快照。</param>
|
||||
/// <param name="vehicle">车辆几何和曲率约束。</param>
|
||||
/// <param name="maximumCollisionCheckStepMeters">扫掠复核最大中心步长,单位 m。</param>
|
||||
/// <param name="curvatureLimitRadiusToleranceMeters">仅曲率限制使用的最小转弯半径容差,单位 m。</param>
|
||||
/// <param name="pathWithClearance">成功时为重新计算净空后的完整只读路径;失败时为空集合。</param>
|
||||
/// <param name="minimumClearanceMeters">成功时最小保守净空,单位 m;失败时为 0。</param>
|
||||
/// <param name="reason">失败诊断;成功时为空字符串。</param>
|
||||
/// <returns>候选满足拓扑、严格弧长、曲率、点碰撞和扫掠约束时为 <see langword="true"/>;否则为 <see langword="false"/>。</returns>
|
||||
public bool TryValidate(
|
||||
IReadOnlyList<SmoothedPathPoint> candidatePath,
|
||||
IReadOnlyList<SmoothedPathSegment> candidateSegments,
|
||||
PreparedPath originalPath,
|
||||
PlanningGridMap map,
|
||||
VehicleParameters vehicle,
|
||||
double maximumCollisionCheckStepMeters,
|
||||
double curvatureLimitRadiusToleranceMeters,
|
||||
out IReadOnlyList<SmoothedPathPoint> pathWithClearance,
|
||||
out double minimumClearanceMeters,
|
||||
out string reason)
|
||||
{
|
||||
pathWithClearance = EmptyPath();
|
||||
minimumClearanceMeters = 0d;
|
||||
@@ -52,7 +89,8 @@ public sealed class SmoothedPathValidator
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!VehicleKinematics.TryGetMaximumCurvaturePerMeter(vehicle, out double maximumCurvatureMeters))
|
||||
if (!CurvatureLimitPolicy.TryGetAllowedMaximumVehicleCurvaturePerMeter(
|
||||
vehicle, curvatureLimitRadiusToleranceMeters, out double maximumCurvatureMeters))
|
||||
{
|
||||
reason = "车辆曲率约束无效。";
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user