4.7 KiB
4.7 KiB
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)
- 验收标准测试
关键技术要点
复用现有代码策略
-
几何处理完全复用:
ChannelHeightDetector.ExtractTrianglesFromModelItem()- 三角形提取ChannelHeightDetector.RayTriangleIntersect()- 射线相交测试GeometryExtractorCallback- COM API几何回调
-
属性管理复用:
CategoryAttributeManager.GetItemsByCategory()- 通道识别CategoryAttributeManager.IsItemInCategory()- 类别判断AutoPathObstacleDetector.CheckIfObstacle()- 障碍物检测
-
坐标系统复用:
GridMap.WorldToGrid()/GridToWorld()- 坐标转换UnitsConverter.ConvertToMeters()- 单位转换
架构设计原则
- 渐进式改进:保持现有AutoPathFinder.cs核心算法不变,只改进网格生成部分
- 配置驱动:通过
GridGenerationMode参数控制使用新旧算法 - 向后兼容:确保现有的UI和命令系统无需修改
- 性能可测:每个阶段都有明确的性能提升指标
预期效果
- 通道投影精度提升: 从包围盒误差→精确几何投影
- 性能优化: 通道投影提升200-1000倍,障碍检测提升10000倍以上
- 功能增强: 支持不同车辆高度的2.5D路径规划
- 质量改进: 避免L型、T型通道中的不必要绕行
这个方案充分利用了现有代码的几何处理、属性管理等核心功能,只需要新增网格生成的改进算法,实现成本低且风险可控。