13 KiB
13 KiB
自动路径规划功能逐步实现方案
创建日期: 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 创建网格地图生成器
// 新建文件:src/PathPlanning/GridMapGenerator.cs
public class GridMapGenerator
{
public GridMap GenerateFromBIM(Document document, double cellSize = 0.5)
public bool[,] CreateObstacleGrid(List<ModelItem> obstacles)
public void ApplyVehicleInflation(bool[,] grid, double vehicleWidth)
}
功能描述:
- 将BIM模型转换为2D网格表示
- 基于包围盒检测障碍物,标记可通行/不可通行区域
- 支持用户配置网格分辨率(默认0.5m×0.5m)
- 实现障碍物膨胀算法,考虑车辆尺寸
1.2 集成RoyT.AStar算法
// 新建文件: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 简化障碍物检测
// 扩展文件:src/Core/CategoryAttributeManager.cs
public List<ModelItem> GetObstacleItems(Document document)
{
// 利用现有分类逻辑识别墙体、柱子等障碍物
// 基于包围盒尺寸和属性名称的启发式识别
}
功能描述:
- 利用现有的CategoryAttributeManager识别墙体、柱子等障碍物
- 实现包围盒膨胀算法考虑车辆尺寸
- 简化策略:暂时忽略门状态,视所有门为可通行(降低复杂度)
1.4 集成到现有UI
// 修改文件:src/Core/PathPlanningManager.cs
public PathRoute AutoPlanPath(Point3D startPoint, Point3D endPoint)
{
// 调用自动路径规划算法
// 将结果转换为现有的PathRoute格式
}
功能描述:
- 在路径规划管理器中添加"自动规划"功能
- 用户选择起点终点后,调用自动算法生成路径
- 复用现有的路径可视化和保存功能
- 保持与现有手动路径编辑功能的兼容性
⏱️ 预期时间:2-3周
🔧 技术风险:低(基于成熟的A*库)
阶段2:智能元素识别(增强版)
🎯 目标
提升自动识别准确性,支持门和通道的差异化处理
📦 交付物
- 智能识别门、通道、障碍物
- 支持成本差异化的路径规划
- 用户手动干预支持
📋 具体任务
2.1 智能元素分类器
// 新建文件: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 成本差异化路径规划
// 扩展文件: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 手动干预支持
// 新建文件:src/UI/ElementClassificationReviewDialog.cs
public partial class ElementClassificationReviewDialog : Window
{
// 显示自动分类结果
// 允许用户修正分类错误
// 支持SelectionSet手动标记
}
功能描述:
- 支持用户通过SelectionSet手动标记特殊区域
- 优先级机制:用户定义的分类优先级高于自动识别
- 提供分类结果审查和修正界面
- 支持批量分类修正操作
⏱️ 预期时间:2-3周
🔧 技术风险:中等(识别准确性需要调优)
阶段3:动态功能扩展(完善版)
🎯 目标
支持动态环境变化,优化用户体验
📦 交付物
- 门状态管理系统
- 路径质量优化
- 高级可视化功能
📋 具体任务
3.1 门状态管理系统
// 新建文件: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 路径质量优化
// 扩展文件: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 vehicleWidth)
}
功能描述:
- 转向惩罚机制:为急转弯添加成本,生成更平滑路径
- 多方案对比:提供最短距离 vs 最少转弯 vs 最低成本的路径选项
- 路径验证:确保路径满足车辆尺寸要求
- 冲突检测:集成基础的路径可行性验证
3.3 高级可视化功能
// 新建文件: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 性能优化
// 新建文件:src/PathPlanning/SpatialIndex.cs
public class SpatialIndex
{
// 四叉树空间索引
// 多线程路径计算
// 内存优化管理
}
功能描述:
- 空间索引优化:四叉树/网格索引加速碰撞检测
- 多线程计算:并行路径规划处理
- 大型模型优化:内存管理和渐进式加载
- 缓存机制:避免重复计算相同区域
4.2 批量处理功能
// 新建文件: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 高级算法集成
// 新建文件: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验证:能够生成基础无碰撞路径
- 阶段2验证:路径质量明显提升,成本优化生效
- 阶段3验证:用户体验完善,支持动态调整
- 阶段4验证:性能达标,支持企业级应用
🔄 迭代开发原则
- 可增量交付:每个阶段都能独立部署和使用
- 向后兼容:新功能不影响现有手动路径编辑
- 用户反馈驱动:根据实际使用反馈调整优先级
- 风险控制:复杂功能作为可选项,确保核心功能稳定
风险评估与应对
⚠️ 主要风险点
1. 算法性能风险
- 风险:大型模型计算时间过长
- 应对:分阶段优化,提供粗糙/精细两种模式
2. 元素识别准确性
- 风险:自动识别错误率过高
- 应对:提供人工审查和修正机制
3. 集成复杂性
- 风险:与现有系统集成困难
- 应对:保持接口一致性,充分测试
💡 成功因素
- ✅ 已有坚实基础:手动路径功能已验证可行
- ✅ 成熟算法库:RoyT.AStar久经验证
- ✅ 渐进式开发:风险可控,价值可持续交付
- ✅ 用户需求明确:物流路径规划场景清晰
结论
本方案采用渐进式开发策略,从简单的MVP开始,逐步增加复杂功能。每个阶段都有明确的交付物和验证标准,确保项目风险可控,价值持续交付。
关键优势:
- 快速验证:MVP在3周内交付,快速验证技术可行性
- 风险可控:复杂功能分阶段实现,避免技术风险集中
- 用户导向:每个阶段都能产生实际可用的功能
- 技术可行:基于已验证的技术栈和算法库
下一步行动:
- 确认阶段1的详细任务分解和时间安排
- 开始GridMapGenerator类的设计和实现
- 建立单元测试框架,确保代码质量
- 准备小规模模型用于功能验证
文档维护:本方案将根据实施过程中的实际情况进行更新,确保与项目进展保持同步。