NavisworksTransport/doc/working/自动路径规划功能逐步实现方案_20250114.md

459 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自动路径规划功能逐步实现方案
**创建日期**: 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元素模型
---
## **项目管理计划**
### ⏰ **预期时间安排**
- **阶段1MVP**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. 准备小规模模型用于功能验证
---
**文档维护**本方案将根据实施过程中的实际情况进行更新确保与项目进展保持同步