namespace RobotNet10.RobotApp.Services.Navigation.CSharp;
public enum ApproachResult
{
///
/// Approach waypoints đã sinh và prepend thành công
///
ApproachGenerated,
///
/// Robot đã trên path, không cần approach
///
AlreadyOnPath,
///
/// Robot quá xa path, fallback Rotate cũ
///
TooFarFromPath,
///
/// LocalPlanner tắt hoặc path quá ngắn
///
Disabled
}
public class LocalPlannerConfig
{
///
/// Bật/tắt Local Planner
///
public bool Enabled { get; set; } = true;
///
/// Khoảng cách dưới mức này coi robot đã trên path, không cần approach (m)
///
public double OnPathThreshold { get; set; } = 0.3;
///
/// Khoảng cách trên mức này thì fallback Rotate cũ (m)
///
public double MaxApproachDistance { get; set; } = 3.0;
///
/// Hệ số tính merge distance: mergeDistance = MergeDistanceGain × distToPath
///
public double MergeDistanceGain { get; set; } = 2.0;
///
/// Merge distance tối thiểu (m)
///
public double MergeDistanceMin { get; set; } = 0.3;
///
/// Merge distance tối đa (m)
///
public double MergeDistanceMax { get; set; } = 2.0;
///
/// Tỷ lệ control arm phía robot (P1): d1 = ratio × dist(P0, P3)
///
public double ControlArmRatioStart { get; set; } = 0.4;
///
/// Tỷ lệ control arm phía path (P2): d2 = ratio × dist(P0, P3)
///
public double ControlArmRatioEnd { get; set; } = 0.4;
///
/// Bước sample approach curve (m), nên giống PurePursuitConfig.ResolutionSplit
///
public double ResolutionSplit { get; set; } = 0.05;
}