using System;
namespace MultiWheelC.TrajectoryPlanning.CoarsePath;
///
/// Hybrid A* 粗路径搜索的可调配置。
/// 长度和距离使用 m,航向使用 rad,曲率使用 1/m;各项有效范围由规划器在执行前校验。
///
public sealed class HybridAStarConfiguration
{
/// 创建采用 P0 固定安全边界和代价权重的默认配置。
public HybridAStarConfiguration()
{
PrimitiveLengthMeters = 0.50d;
IntegrationStepMeters = 0.05d;
MaximumCollisionCheckStepMeters = 0.025d;
HeadingResolutionRadians = Math.PI / 36d;
CurvatureLevelCount = 5;
GoalPositionToleranceMeters = 0.15d;
GoalHeadingToleranceRadians = Math.PI / 36d;
MaximumExpandedNodes = 200000;
SearchTimeout = TimeSpan.FromSeconds(5d);
HeuristicWeight = 1d;
ReverseCostMultiplier = 1.5d;
GearSwitchPenaltyMeters = 1d;
CurvatureMagnitudeWeight = 0.10d;
CurvatureChangePenaltyMetersPerLevel = 0.05d;
ClearanceCostWeight = 0.20d;
ClearanceCostDistanceMeters = 0.50d;
AllowReverse = true;
}
/// 单个恒曲率原语的最大行驶长度,单位 m。
public double PrimitiveLengthMeters { get; set; }
/// 原语内部输出积分点之间允许的最大弧长,单位 m。
public double IntegrationStepMeters { get; set; }
/// 连续碰撞检查允许的最大车辆中心位移,单位 m;实际值还受地图分辨率限制。
public double MaximumCollisionCheckStepMeters { get; set; }
/// 搜索状态离散所使用的航向格宽,单位 rad。
public double HeadingResolutionRadians { get; set; }
/// 从最大负曲率到最大正曲率的离散曲率等级数。
public int CurvatureLevelCount { get; set; }
/// 终点位置允许的欧氏距离误差,单位 m。
public double GoalPositionToleranceMeters { get; set; }
/// 终点车头航向允许的最小环形角度误差,单位 rad。
public double GoalHeadingToleranceRadians { get; set; }
/// 单次搜索允许扩展的最大节点数。
public int MaximumExpandedNodes { get; set; }
/// 单次搜索允许消耗的最长时间;超出后返回 。
public TimeSpan SearchTimeout { get; set; }
/// 二维绕障启发式的权重;1 表示不额外放大。
public double HeuristicWeight { get; set; }
/// 倒车原语长度代价相对前进原语的倍率。
public double ReverseCostMultiplier { get; set; }
/// 相邻原语发生换向时增加的等效距离代价,单位 m。
public double GearSwitchPenaltyMeters { get; set; }
/// 曲率绝对值对应的无量纲代价权重。
public double CurvatureMagnitudeWeight { get; set; }
/// 相邻曲率等级每变化一级增加的等效距离代价,单位 m。
public double CurvatureChangePenaltyMetersPerLevel { get; set; }
/// 车体保守净空不足时增加的无量纲代价权重。
public double ClearanceCostWeight { get; set; }
/// 计算净空代价时视为足够安全的车体保守净空,单位 m。
public double ClearanceCostDistanceMeters { get; set; }
/// 是否允许生成倒车原语;false 时搜索只生成前进原语。
public bool AllowReverse { get; set; }
}