459 lines
13 KiB
Markdown
459 lines
13 KiB
Markdown
# 自动路径规划功能逐步实现方案
|
||
|
||
**创建日期**: 2025年1月14日
|
||
**项目**: NavisworksTransport - Navisworks 2026物流路径规划插件
|
||
**方案版本**: v1.0
|
||
|
||
## **当前项目状况分析**
|
||
|
||
### ✅ **已实现功能**
|
||
|
||
- **手工指定路径功能**:路径编辑、可视化、数据持久化
|
||
- **RoyT.AStar库集成**:A*算法库 v3.0.2 已成功安装
|
||
- **基础架构完备**:路径数据模型、类别管理、坐标转换、渲染系统
|
||
- **多插件架构**:AddInPlugin、ToolPlugin、RenderPlugin协同工作
|
||
- **WPF UI界面**:现代化用户界面,支持交互式路径编辑
|
||
|
||
### ❌ **待实现功能**
|
||
|
||
- **自动路径规划算法**:A*算法与现有系统的集成
|
||
- **智能元素识别**:自动识别门、通道、障碍物
|
||
- **网格地图生成**:BIM模型到路径规划网格的转换
|
||
- **碰撞检测系统**:基于包围盒的简化碰撞检测
|
||
|
||
## **逐步实现策略:从简单到复杂**
|
||
|
||
采用**渐进式开发**策略,每个阶段都有独立的功能验证点,可以持续交付价值,降低项目风险。
|
||
|
||
---
|
||
|
||
## **阶段1:核心自动路径规划(MVP - 最小可行产品)**
|
||
|
||
### 🎯 **目标**
|
||
|
||
实现基础的A*路径规划功能,快速验证技术可行性
|
||
|
||
### 📦 **交付物**
|
||
|
||
- 两点间自动无碰撞路径计算
|
||
- 基础网格地图生成
|
||
- A*算法集成
|
||
|
||
### 📋 **具体任务**
|
||
|
||
#### 1.1 **创建网格地图生成器**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/GridMapGenerator.cs
|
||
public class GridMapGenerator
|
||
{
|
||
public GridMap GenerateFromBIM(Document document, double cellSize = 0.5)
|
||
public bool[,] CreateObstacleGrid(List<ModelItem> obstacles)
|
||
public void ApplyObjectInflation(bool[,] grid, double objectWidth)
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 将BIM模型转换为2D网格表示
|
||
- 基于包围盒检测障碍物,标记可通行/不可通行区域
|
||
- 支持用户配置网格分辨率(默认0.5m×0.5m)
|
||
- 实现障碍物膨胀算法,考虑物体尺寸
|
||
|
||
#### 1.2 **集成RoyT.AStar算法**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/AutoPathFinder.cs
|
||
public class AutoPathFinder
|
||
{
|
||
public List<Point3D> FindPath(Point3D start, Point3D end, GridMap gridMap)
|
||
private Grid ConvertToAStarGrid(GridMap gridMap)
|
||
private List<Point3D> ConvertPathToWorldCoordinates(Path astarPath)
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 创建AutoPathFinder类封装A*算法调用
|
||
- 实现网格节点到RoyT.AStar格式的转换
|
||
- 添加基础启发式函数(欧几里得距离)
|
||
- 路径结果转换回世界坐标系
|
||
|
||
#### 1.3 **简化障碍物检测**
|
||
|
||
```csharp
|
||
// 扩展文件:src/Core/CategoryAttributeManager.cs
|
||
public List<ModelItem> GetObstacleItems(Document document)
|
||
{
|
||
// 利用现有分类逻辑识别墙体、柱子等障碍物
|
||
// 基于包围盒尺寸和属性名称的启发式识别
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 利用现有的CategoryAttributeManager识别墙体、柱子等障碍物
|
||
- 实现包围盒膨胀算法考虑物体尺寸
|
||
- **简化策略**:暂时忽略门状态,视所有门为可通行(降低复杂度)
|
||
|
||
#### 1.4 **集成到现有UI**
|
||
|
||
```csharp
|
||
// 修改文件:src/Core/PathPlanningManager.cs
|
||
public PathRoute AutoPlanPath(Point3D startPoint, Point3D endPoint)
|
||
{
|
||
// 调用自动路径规划算法
|
||
// 将结果转换为现有的PathRoute格式
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 在路径规划管理器中添加"自动规划"功能
|
||
- 用户选择起点终点后,调用自动算法生成路径
|
||
- 复用现有的路径可视化和保存功能
|
||
- 保持与现有手动路径编辑功能的兼容性
|
||
|
||
### ⏱️ **预期时间**:2-3周
|
||
|
||
### 🔧 **技术风险**:低(基于成熟的A*库)
|
||
|
||
---
|
||
|
||
## **阶段2:智能元素识别(增强版)**
|
||
|
||
### 🎯 **目标**
|
||
|
||
提升自动识别准确性,支持门和通道的差异化处理
|
||
|
||
### 📦 **交付物**
|
||
|
||
- 智能识别门、通道、障碍物
|
||
- 支持成本差异化的路径规划
|
||
- 用户手动干预支持
|
||
|
||
### 📋 **具体任务**
|
||
|
||
#### 2.1 **智能元素分类器**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/ElementClassifier.cs
|
||
public class ElementClassifier
|
||
{
|
||
public ElementType ClassifyByGeometry(ModelItem item)
|
||
public ElementType ClassifyByAttributes(ModelItem item)
|
||
public ElementType ClassifyByUserSelection(ModelItem item)
|
||
}
|
||
|
||
public enum ElementType
|
||
{
|
||
Obstacle, // 障碍物(墙、柱)
|
||
Door, // 门
|
||
Channel, // 通道
|
||
OpenSpace // 开放空间
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **几何分析**:基于包围盒尺寸启发式识别门(薄、矩形、适当高度)
|
||
- **属性匹配**:基于属性名称模式匹配("门"、"通道"、"走廊"等关键词)
|
||
- **多策略融合**:结合几何分析和属性推断的多策略分类
|
||
- **置信度评估**:为每个分类结果提供置信度评分
|
||
|
||
#### 2.2 **成本差异化路径规划**
|
||
|
||
```csharp
|
||
// 扩展文件:src/PathPlanning/AutoPathFinder.cs
|
||
public class CostConfiguration
|
||
{
|
||
public double ObstacleCost = double.MaxValue; // 无限大
|
||
public double DoorCost = 5.0; // 较高成本
|
||
public double ChannelCost = 0.5; // 较低成本
|
||
public double OpenSpaceCost = 1.0; // 标准成本
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 为不同元素类型设置差异化遍历成本
|
||
- **门**:较高成本(5.0),减少不必要穿越
|
||
- **通道**:较低成本(0.5),优先选择指定路线
|
||
- **开放区域**:标准成本(1.0)
|
||
- 支持用户手动调整各类元素的成本系数
|
||
|
||
#### 2.3 **手动干预支持**
|
||
|
||
```csharp
|
||
// 新建文件:src/UI/ElementClassificationReviewDialog.cs
|
||
public partial class ElementClassificationReviewDialog : Window
|
||
{
|
||
// 显示自动分类结果
|
||
// 允许用户修正分类错误
|
||
// 支持SelectionSet手动标记
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 支持用户通过SelectionSet手动标记特殊区域
|
||
- **优先级机制**:用户定义的分类优先级高于自动识别
|
||
- 提供分类结果审查和修正界面
|
||
- 支持批量分类修正操作
|
||
|
||
### ⏱️ **预期时间**:2-3周
|
||
|
||
### 🔧 **技术风险**:中等(识别准确性需要调优)
|
||
|
||
---
|
||
|
||
## **阶段3:动态功能扩展(完善版)**
|
||
|
||
### 🎯 **目标**
|
||
|
||
支持动态环境变化,优化用户体验
|
||
|
||
### 📦 **交付物**
|
||
|
||
- 门状态管理系统
|
||
- 路径质量优化
|
||
- 高级可视化功能
|
||
|
||
### 📋 **具体任务**
|
||
|
||
#### 3.1 **门状态管理系统**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/DoorStateManager.cs
|
||
public class DoorStateManager
|
||
{
|
||
public enum DoorState { Open, Closed, Unknown }
|
||
|
||
public void SetDoorState(ModelItem door, DoorState state)
|
||
public void UpdateGridWithDoorStates(GridMap gridMap)
|
||
public Dictionary<ModelItem, DoorState> GetAllDoorStates()
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- 实现门的开/关状态切换UI控件
|
||
- 动态更新网格中门的可通行性(关闭=无限成本)
|
||
- 支持批量门状态管理
|
||
- 门状态变化时自动触发路径重规划
|
||
|
||
#### 3.2 **路径质量优化**
|
||
|
||
```csharp
|
||
// 扩展文件:src/PathPlanning/AutoPathFinder.cs
|
||
public class PathOptimizer
|
||
{
|
||
public List<Point3D> ApplyTurnPenalty(List<Point3D> path)
|
||
public PathComparisonResult ComparePaths(List<PathRoute> alternatives)
|
||
public bool ValidatePathClearance(List<Point3D> path, double objectWidth)
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **转向惩罚机制**:为急转弯添加成本,生成更平滑路径
|
||
- **多方案对比**:提供最短距离 vs 最少转弯 vs 最低成本的路径选项
|
||
- **路径验证**:确保路径满足物体尺寸要求
|
||
- **冲突检测**:集成基础的路径可行性验证
|
||
|
||
#### 3.3 **高级可视化功能**
|
||
|
||
```csharp
|
||
// 新建文件:src/Visualization/GridMapRenderer.cs
|
||
public class GridMapRenderer
|
||
{
|
||
public void RenderGrid(GridMap gridMap, Graphics graphics)
|
||
public void ShowCostDistribution(GridMap gridMap)
|
||
public void AnimatePathPlanning(List<Point3D> searchSteps)
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **网格地图可视化**:显示障碍物、通道、成本分布
|
||
- **规划过程动画**:展示A*搜索过程,增强用户理解
|
||
- **多路径对比**:同时显示多个路径方案
|
||
- **交互式调试**:支持点击网格查看详细信息
|
||
|
||
### ⏱️ **预期时间**:3-4周
|
||
|
||
### 🔧 **技术风险**:中等(UI复杂性增加)
|
||
|
||
---
|
||
|
||
## **阶段4:性能优化与扩展(生产版)**
|
||
|
||
### 🎯 **目标**
|
||
|
||
大型模型性能优化,企业级功能完善
|
||
|
||
### 📦 **交付物**
|
||
|
||
- 高性能算法优化
|
||
- 批量处理功能
|
||
- 高级算法集成
|
||
|
||
### 📋 **具体任务**
|
||
|
||
#### 4.1 **性能优化**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/SpatialIndex.cs
|
||
public class SpatialIndex
|
||
{
|
||
// 四叉树空间索引
|
||
// 多线程路径计算
|
||
// 内存优化管理
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **空间索引优化**:四叉树/网格索引加速碰撞检测
|
||
- **多线程计算**:并行路径规划处理
|
||
- **大型模型优化**:内存管理和渐进式加载
|
||
- **缓存机制**:避免重复计算相同区域
|
||
|
||
#### 4.2 **批量处理功能**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/BatchPathPlanner.cs
|
||
public class BatchPathPlanner
|
||
{
|
||
public List<PathRoute> PlanMultiplePaths(List<PathRequest> requests)
|
||
public void ExportBatchResults(List<PathRoute> paths, string format)
|
||
}
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **多起点终点**:支持批量路径规划请求
|
||
- **任务队列管理**:异步处理大量路径规划任务
|
||
- **结果批量导出**:JSON、CSV、Excel等格式
|
||
- **进度报告**:批量处理进度和状态监控
|
||
|
||
#### 4.3 **高级算法集成**
|
||
|
||
```csharp
|
||
// 新建文件:src/PathPlanning/AdvancedAlgorithms.cs
|
||
public class FieldDStarPathFinder // 可选实现
|
||
public class HierarchicalPathPlanner // 可选实现
|
||
```
|
||
|
||
**功能描述**:
|
||
|
||
- **Field D*算法**:更平滑路径生成(可选高级功能)
|
||
- **分层路径规划(HPA*)**:支持超大型模型
|
||
- **动态重规划**:环境变化时的增量更新
|
||
- **算法对比工具**:不同算法性能和结果对比
|
||
|
||
### ⏱️ **预期时间**:4-6周
|
||
|
||
### 🔧 **技术风险**:高(算法复杂性和性能调优)
|
||
|
||
---
|
||
|
||
## **技术选型确认**
|
||
|
||
### 🔧 **核心技术栈**
|
||
|
||
- **路径规划算法**:A*(RoyT.AStar库)作为核心,满足效率要求
|
||
- **碰撞检测方法**:包围盒简化方法,支持物体尺寸膨胀
|
||
- **网格规划方式**:2.5D网格离散化,用户可配置分辨率
|
||
- **UI框架**:继续使用WPF,集成到现有界面
|
||
- **数据持久化**:扩展现有JSON序列化机制
|
||
|
||
### 📊 **性能指标目标**
|
||
|
||
- **小型模型**(<1000元素):路径规划 < 1秒
|
||
- **中型模型**(1000-5000元素):路径规划 < 5秒
|
||
- **大型模型**(>5000元素):路径规划 < 30秒
|
||
- **网格分辨率**:0.1m - 2.0m可配置
|
||
- **内存使用**:< 500MB for 10000元素模型
|
||
|
||
---
|
||
|
||
## **项目管理计划**
|
||
|
||
### ⏰ **预期时间安排**
|
||
|
||
- **阶段1(MVP)**:2-3周(2025.01.14 - 2025.02.03)
|
||
- **阶段2(增强版)**:2-3周(2025.02.03 - 2025.02.24)
|
||
- **阶段3(完善版)**:3-4周(2025.02.24 - 2025.03.24)
|
||
- **阶段4(生产版)**:4-6周(2025.03.24 - 2025.05.05)
|
||
|
||
**总计**:11-16周(约3-4个月)
|
||
|
||
### ✅ **验证策略**
|
||
|
||
每个阶段都包含独立的功能验证点:
|
||
|
||
1. **阶段1验证**:能够生成基础无碰撞路径
|
||
2. **阶段2验证**:路径质量明显提升,成本优化生效
|
||
3. **阶段3验证**:用户体验完善,支持动态调整
|
||
4. **阶段4验证**:性能达标,支持企业级应用
|
||
|
||
### 🔄 **迭代开发原则**
|
||
|
||
- **可增量交付**:每个阶段都能独立部署和使用
|
||
- **向后兼容**:新功能不影响现有手动路径编辑
|
||
- **用户反馈驱动**:根据实际使用反馈调整优先级
|
||
- **风险控制**:复杂功能作为可选项,确保核心功能稳定
|
||
|
||
---
|
||
|
||
## **风险评估与应对**
|
||
|
||
### ⚠️ **主要风险点**
|
||
|
||
#### 1. **算法性能风险**
|
||
|
||
- **风险**:大型模型计算时间过长
|
||
- **应对**:分阶段优化,提供粗糙/精细两种模式
|
||
|
||
#### 2. **元素识别准确性**
|
||
|
||
- **风险**:自动识别错误率过高
|
||
- **应对**:提供人工审查和修正机制
|
||
|
||
#### 3. **集成复杂性**
|
||
|
||
- **风险**:与现有系统集成困难
|
||
- **应对**:保持接口一致性,充分测试
|
||
|
||
### 💡 **成功因素**
|
||
|
||
- ✅ **已有坚实基础**:手动路径功能已验证可行
|
||
- ✅ **成熟算法库**:RoyT.AStar久经验证
|
||
- ✅ **渐进式开发**:风险可控,价值可持续交付
|
||
- ✅ **用户需求明确**:物流路径规划场景清晰
|
||
|
||
---
|
||
|
||
## **结论**
|
||
|
||
本方案采用**渐进式开发**策略,从简单的MVP开始,逐步增加复杂功能。每个阶段都有明确的交付物和验证标准,确保项目风险可控,价值持续交付。
|
||
|
||
**关键优势**:
|
||
|
||
1. **快速验证**:MVP在3周内交付,快速验证技术可行性
|
||
2. **风险可控**:复杂功能分阶段实现,避免技术风险集中
|
||
3. **用户导向**:每个阶段都能产生实际可用的功能
|
||
4. **技术可行**:基于已验证的技术栈和算法库
|
||
|
||
**下一步行动**:
|
||
|
||
1. 确认阶段1的详细任务分解和时间安排
|
||
2. 开始GridMapGenerator类的设计和实现
|
||
3. 建立单元测试框架,确保代码质量
|
||
4. 准备小规模模型用于功能验证
|
||
|
||
---
|
||
|
||
**文档维护**:本方案将根据实施过程中的实际情况进行更新,确保与项目进展保持同步。
|