NavisworksTransport/doc/working/astar_implementation_plan.md

4.7 KiB
Raw Blame History

A*寻路算法网格改进实施计划

现状分析

现有A*实现架构

  • AutoPathFinder.cs - 核心A*算法实现使用RoyT.AStar库
  • GridMap.cs - 网格地图数据结构,目前主要基于包围盒生成
  • GridMapGenerator.cs - 网格生成器,使用简单的包围盒方法
  • CategoryAttributeManager.cs - 已实现通道识别和分类功能
  • ChannelHeightDetector.cs - 已实现射线-三角形相交和三角形提取

核心问题

  • 当前网格生成使用CalculateCombinedBounds()简单包围盒方法,精度不足
  • 缺乏精确的通道覆盖计算
  • 没有2.5D高度信息支持

实施方案

第一阶段创建ChannelBasedGridBuilder 2天

1.1 新增核心类文件

文件位置: src/PathPlanning/ChannelBasedGridBuilder.cs

主要功能

  • 集成现有的CategoryAttributeManager.GetItemsByCategory("通道")获取通道
  • 复用ChannelHeightDetector.ExtractTrianglesFromModelItem()提取三角形
  • 复用ChannelHeightDetector.RayTriangleIntersect()进行相交测试
  • 实现智能投影策略:
    • 薄通道(<1.5m)优先使用顶面提取投影
    • 复杂通道使用空间哈希优化的射线扫描

1.2 扩展GridMap数据结构

修改文件: src/PathPlanning/GridMap.cs

新增字段

public struct GridCell
{
    // 现有字段保持不变
    public bool IsWalkable { get; set; }
    public double Cost { get; set; }
    public ElementType Type { get; set; }
    
    // 新增字段
    public bool IsInChannel { get; set; }
    public List<HeightInterval> PassableHeights { get; set; }
    public ChannelType ChannelType { get; set; }
}

1.3 创建空间哈希优化类

文件位置: src/PathPlanning/TriangleSpatialHash.cs

第二阶段创建VerticalScanProcessor 3天

2.1 新增垂直扫描处理器

文件位置: src/PathPlanning/VerticalScanProcessor.cs

主要功能

  • 多级筛选优化:邻域筛选 → 高度筛选 → 空间哈希
  • 复用现有的AutoPathObstacleDetector.CheckIfObstacle()障碍物识别
  • 并行扫描处理计算2.5D高度区间

2.2 集成到现有GridMapGenerator

修改文件: src/PathPlanning/GridMapGenerator.cs

新增方法

  • GenerateFromBIM() 增加 GridGenerationMode 枚举参数
  • 新增 GridGenerationMode.ChannelBased2_5D 模式
  • 保持向后兼容的 GridGenerationMode.BoundingBox 模式

第三阶段AutoPathFinder集成改进 2天

3.1 修改AutoPathFinder调用链

修改文件: src/PathPlanning/AutoPathFinder.cs

关键改动

  • FindPath()方法增加通道数据参数
  • ConvertToAStarGrid()中使用新的通道覆盖数据
  • 支持高度约束的路径规划

3.2 更新PathPlanningManager

修改文件: src/Core/PathPlanningManager.cs

集成点

  • AutoPathPlanning()方法中调用新的网格生成模式
  • 传递车辆高度参数给网格生成器
  • 保持现有的UI事件机制不变

第四阶段:性能优化和测试 2天

4.1 性能监控和调优

  • 添加性能统计日志
  • 调优空间哈希参数
  • 并行化优化

4.2 向后兼容性测试

  • 确保现有的命令模式(AutoPathPlanningCommand)正常工作
  • UI集成测试WPF ViewModels
  • 验收标准测试

关键技术要点

复用现有代码策略

  1. 几何处理完全复用

    • ChannelHeightDetector.ExtractTrianglesFromModelItem() - 三角形提取
    • ChannelHeightDetector.RayTriangleIntersect() - 射线相交测试
    • GeometryExtractorCallback - COM API几何回调
  2. 属性管理复用

    • CategoryAttributeManager.GetItemsByCategory() - 通道识别
    • CategoryAttributeManager.IsItemInCategory() - 类别判断
    • AutoPathObstacleDetector.CheckIfObstacle() - 障碍物检测
  3. 坐标系统复用

    • GridMap.WorldToGrid() / GridToWorld() - 坐标转换
    • UnitsConverter.ConvertToMeters() - 单位转换

架构设计原则

  1. 渐进式改进保持现有AutoPathFinder.cs核心算法不变只改进网格生成部分
  2. 配置驱动:通过GridGenerationMode参数控制使用新旧算法
  3. 向后兼容确保现有的UI和命令系统无需修改
  4. 性能可测:每个阶段都有明确的性能提升指标

预期效果

  • 通道投影精度提升: 从包围盒误差→精确几何投影
  • 性能优化: 通道投影提升200-1000倍障碍检测提升10000倍以上
  • 功能增强: 支持不同车辆高度的2.5D路径规划
  • 质量改进: 避免L型、T型通道中的不必要绕行

这个方案充分利用了现有代码的几何处理、属性管理等核心功能,只需要新增网格生成的改进算法,实现成本低且风险可控。