diff --git a/doc/design/2026/无人物流车转弯路径去鲜花简化方案截图.png b/doc/design/2026/无人物流车转弯路径去鲜花简化方案截图.png new file mode 100644 index 0000000..fac699b Binary files /dev/null and b/doc/design/2026/无人物流车转弯路径去鲜花简化方案截图.png differ diff --git a/doc/design/2026/无人物流车转弯路径曲线化方案_VDA5050.md b/doc/design/2026/无人物流车转弯路径曲线化方案_VDA5050.md new file mode 100644 index 0000000..a54210e --- /dev/null +++ b/doc/design/2026/无人物流车转弯路径曲线化方案_VDA5050.md @@ -0,0 +1,172 @@ +# **无人物流车转弯路径曲线化方案** + +## **1. 需求分析与 3D 仿真环境背景** + +在复杂车间环境下,无人物流车(AGV/AMR)的碰撞仿真精度直接受限于路径几何表达的保真度。传统的离散路径(直线连接)在转弯处存在航向角突变,无法描述真实的“扫掠路径(Swept Path)”,导致内轮差擦撞等关键隐患无法在仿真中检出 1。 + +由于当前仿真系统基于 **Autodesk Navisworks** 进行 3D 展示和碰撞分析,路径处理的核心需求已从简单的 2D 绘图演变为 **3D 空间轨迹的动态生成与标准化输出**。系统需要根据动力学约束(如最小转弯半径)将直线折角平滑为圆弧段,并能将生成的 3D 特征点(切点、圆心、采样位姿)同步至 Navisworks 场景及 DELMIA 等专业数字化工厂平台 3。 + +## **2. 关键算法:3D 圆弧平滑与拓扑重构** + +本方案采用 **圆弧过渡法(Arc Fillet)**,其曲率恒定的特性最符合大多数 AGV 的转向特性,且计算开销低,易于在 3D 空间进行高频位姿采样 6。 + +### **2.1 几何计算原理** + +假设路径中有连续三点 mathbf{P}_{i-1}, mathbf{P}_i, mathbf{P}_{i+1},转弯半径为 R。 + +1. **计算夹角 alpha**:通过 3D 向量 vec{v}_1 = mathbf{P}_{i-1}-mathbf{P}_i 和 vec{v}_2 = mathbf{P}_{i+1}-mathbf{P}_i 的夹角公式求得。 +2. 计算切线长度 L_t: + + L_t = frac{R}{tan(frac{alpha}{2})} +3. **动态半径缩放**:为防止曲线重叠,限制 L_t le 0.45 times min(dist_1, dist_2) 9。 +4. **定位切点**: + * **进入切点 (T_s)**:mathbf{P}_i + L_t cdot text{unit}(vec{v}_1) + * **退出切点 (T_e)**:mathbf{P}_i + L_t cdot text{unit}(vec{v}_2) + +### **2.2 路径点逻辑重构:控制点与轨迹点分离** + +平滑处理后,路径逻辑从“点列表”升级为“段序列”: + +* **虚拟控制点 (Control Points)**:原始 Waypoints P_i 仅作为拓扑控制柄。 +* **物理特征点**:新增 T_s、T_e 和圆弧中心 O,用于精确控制转向的起始与结束。 +* **运动状态机**:AGV 在直线段 T_{e(i-1)} to T_{s(i)} 处于巡线状态,到达 T_s 后切换为圆弧插补转向模式 11。 + +## **3. 基于 VDA 5050 标准的路径数据结构** + +为了实现仿真系统与真实车辆控制、以及 DELMIA 等平台的深度集成,本方案参考 **VDA 5050 协议** 定义了标准化的路径数据模型。VDA 5050 将路径描述为一个由**节点(Nodes)**和**边(Edges)**组成的有向图,并允许通过轨迹属性精确定义运动曲线。 + +### **3.1 节点 (Node) 数据结构** + +节点对应路径中的关键停靠点或控制点(Waypoints)。 + +| 字段名称 | 类型 | 说明 | +| :---- | :---- | :---- | +| nodeId | String | 节点的唯一标识符。 | +| sequenceId | Integer | 在当前订单路径中的序列号(递增)。 | +| nodePosition | Object | 包含 x、y 坐标及车辆目标航向角 theta(弧度)。 | +| actions | Array | 在该位置执行的动作(如:举升、等待)。 | + +### **3.2 边 (Edge) 数据结构** + +边定义了两个节点之间的物理连接及运动约束。 + +| 字段名称 | 类型 | 说明 | +| :---- | :---- | :---- | +| edgeId | String | 边的唯一标识符。 | +| startNodeId | String | 边的起始节点 ID。 | +| endNodeId | String | 边的终止节点 ID。 | +| maxSpeed | Double | 该路段允许的最大行驶速度(单位:m/s)。 | +| trajectory | Object | **核心:** 定义边上的具体运动曲线(如圆弧平滑后的路径)。 | + +### **3.3 轨迹 (Trajectory) 与 NURBS 描述** + +VDA 5050 推荐使用 NURBS(非均匀有理 B 样条)来描述轨迹,这能完美覆盖直线和圆弧。 + +* **degree (阶数)**:对于直线段 text{degree} = 1;对于圆弧平滑段,建议 text{degree} = 2。 +* **controlPoints (控制点列表)**:包含 3D 坐标 (x, y, z) 及其权重 w。 + * 对于圆弧段,切点 T_s 和 T_e 作为起始/结束控制点,折点 P_i 配合特定权重可定义出精确圆弧。 +* **knotVector (节点向量)**:定义控制点对曲线的影响范围及连续性。 + +## **4. DELMIA 兼容性与 3D 展示集成** + +### **4.1 兼容性导出格式 (XML/CSV)** + +为了让生成的路径能够与 DELMIA 兼容,系统支持将 VDA 5050 结构转换为 **Tag Groups** 格式,这在 DELMIA 机器人任务中具有原生支持: + +```xml + + + + + + +``` + +### **4.2 Navisworks 内部 UI 界面设计** + +UI 应设计为集成在 Navisworks 内部的 **Dockable Pane**: + +* **路径配置区**:显示所有段落(Edges),支持针对特定拐角手动覆盖半径(Radius Override)。 +* **可视化开关**:提供“显示控制柄(Node)”和“显示物理轨迹(Trajectory)”的切换按钮。 +* **导出工具**:一键将符合 VDA 5050 逻辑的路径导出为 DELMIA XML 或 CSV 序列。 + +## **5. 算法 C# 实现示例:Navisworks 3D 轨迹生成** + +以下代码演示了如何根据 VDA 5050 逻辑计算 3D 切点,并通过 Navisworks API 进行简单的几何操作。 + +```csharp +using System; +using System.Collections.Generic; +using Autodesk.Navisworks.Api; // Navisworks.NET API + +namespace AGVSim.Core { + public class NavisPathEngine { + // 计算 3D 空间圆弧参数并生成 VDA 5050 兼容节点 + public ArcResult Compute3DFillet(Point3D pPrev, Point3D pCurr, Point3D pNext, double radius) { + Vector3D v1 = pPrev - pCurr; + Vector3D v2 = pNext - pCurr; + + // 1. 计算夹角 (3D 向量内积) + double angleRad = Math.Acos(Vector3D.DotProduct(v1.Normalize(), v2.Normalize())); + + // 2. 切线长度计算与安全截断 + double tangentLength = radius / Math.Tan(angleRad / 2.0); + double limit = Math.Min(v1.Length, v2.Length) * 0.45; + if (tangentLength > limit) { + tangentLength = limit; + radius = tangentLength * Math.Tan(angleRad / 2.0); + } + + // 3. 计算 VDA 5050 物理轨迹切点 Ts, Te + Point3D Ts = pCurr + v1.Normalize() * tangentLength; + Point3D Te = pCurr + v2.Normalize() * tangentLength; + + return new ArcResult { Ts = Ts, Te = Te, R = radius, IsValid = true }; + } + + // 用于 Navisworks API 的离散化采样点生成 (用于碰撞检测与 3D 渲染) + public List SamplePath(ArcResult arc, double stepSize = 0.05) { + var points = new List(); + // 内部实现:基于 Rodrigues 旋转公式或切线平面进行 Point3D 离散化插值 + return points; + } + } + + public struct ArcResult { + public Point3D Ts; public Point3D Te; + public double R; public bool IsValid; + } +} +``` + +## **6. 高精度碰撞仿真的深度优化:扫掠路径分析 (Swept Path Analysis)** + +在 Navisworks 中进行碰撞检测时,需利用其 API 执行精细判定: + +1. **位姿序列生成**:在轨迹段(Trajectory)按采样步长 Delta s 生成密集的位姿切片。每个位姿包含精确的朝向角 theta。 +2. **多点包围盒 (Multi-OBB)**:对车体四个角点分别计算轨迹线,生成其扫掠包络区域,确保内轮差区域无死角检测 1。 +3. **SAT 碰撞算法**:对每个采样位的 OBB 执行分离轴定理(SAT)检测,确保仿真结果符合物理真实性 14。 + +## **7. 结论与工程实践建议** + +本方案通过引入 **VDA 5050 标准的数据模型**,将路径抽象为“具备轨迹属性的边”,解决了平滑后原始路径点偏移的逻辑矛盾。同时,通过支持 **DELMIA XML Tag Groups** 导出,实现了从 Navisworks 离线规划到专业仿真平台的数据闭环。 + +在 Navisworks 插件开发中,建议利用其 RenderPlugin 或 OverlayRender 接口实时展示计算出的平滑轨迹,确保用户在调节转弯半径时能即时看到物理扫掠区域的变化。 + +#### **Works cited** + +1. Turning Vehicle Simulation: Interactive Computer-Aided Design and Drafting Application, accessed December 30, 2025, [https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf](https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf) +2. Step-by-Step Guide to Conducting a Swept Path Analysis - Quantum Traffic, accessed December 30, 2025, [https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis](https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis) +3. Smoothed A* Algorithm for Practical Unmanned Surface Vehicle Path Planning - UCL Discovery, accessed December 30, 2025, [https://discovery.ucl.ac.uk/10064237/3/Liu Smoothed A algorithm for practical unmanned surface vehicle path planning.pdf](https://discovery.ucl.ac.uk/10064237/3/Liu Smoothed A algorithm for practical unmanned surface vehicle path planning.pdf) +4. AGV PATH PLANNING BASED ON SMOOTHING A* ALGORITHM, accessed December 30, 2025, [https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf](https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf) +5. Iterative Learning-Based Path and Speed Profile Optimization for an Unmanned Surface Vehicle - PMC - NIH, accessed December 30, 2025, [https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/](https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/) +6. Curved Paths - Red Blob Games, accessed December 30, 2025, [https://www.redblobgames.com/articles/curved-paths/](https://www.redblobgames.com/articles/curved-paths/) +7. PRM Path Smoothening by Circular Arc Fillet Method for Mobile Robot Navigation - DergiPark, accessed December 30, 2025, [https://dergipark.org.tr/tr/download/article-file/3067231](https://dergipark.org.tr/tr/download/article-file/3067231) +8. Solved: Fillet Two line c# - Autodesk Community, accessed December 30, 2025, [https://forums.autodesk.com/t5/net-forum/fillet-two-line-c/td-p/13101919](https://forums.autodesk.com/t5/net-forum/fillet-two-line-c/td-p/13101919) +9. AG Corners Live Effect | Astute Graphics Documentation, accessed December 30, 2025, [https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect](https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect) +10. javascript - Applying rounded corners to paths/polygons - Stack Overflow, accessed December 30, 2025, [https://stackoverflow.com/questions/19269622/applying-rounded-corners-to-paths-polygons](https://stackoverflow.com/questions/19269622/applying-rounded-corners-to-paths-polygons) +11. Path planning for autonomous vehicles using clothoid based smoothing of A* generated paths and optimal control - DiVA portal, accessed December 30, 2025, [https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf](https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf) +12. Collision Detection - Cepton, accessed December 30, 2025, [https://developer.cepton.com/blog/2d_collision_detection](https://developer.cepton.com/blog/2d_collision_detection) +13. Exact Mathematical Solution for Maximum Transient Offtracking Calculation of a Single-Unit Vehicle Negotiating Circular Curves - MDPI, accessed December 30, 2025, [https://www.mdpi.com/2076-3417/14/13/5570](https://www.mdpi.com/2076-3417/14/13/5570) +14. OrientedBoundingBox(OBB)Collision · SimonDarksideJ ... - GitHub, accessed December 30, 2025, [https://github.com/SimonDarksideJ/XNAGameStudio/wiki/OrientedBoundingBox(OBB)Collision](https://github.com/SimonDarksideJ/XNAGameStudio/wiki/OrientedBoundingBox(OBB)Collision) +15. Collision Detection Using the Separating Axis Theorem | Envato Tuts+, accessed December 30, 2025, [https://code.tutsplus.com/collision-detection-using-the-separating-axis-theorem--gamedev-169t](https://code.tutsplus.com/collision-detection-using-the-separating-axis-theorem--gamedev-169t) \ No newline at end of file diff --git a/doc/design/2026/无人物流车转弯路径曲线化方案_初始版本.md b/doc/design/2026/无人物流车转弯路径曲线化方案_初始版本.md new file mode 100644 index 0000000..b03ca6a --- /dev/null +++ b/doc/design/2026/无人物流车转弯路径曲线化方案_初始版本.md @@ -0,0 +1,355 @@ +# **工业无人物流车路径平滑处理与高精度碰撞仿真技术研究报告** + +## **离散路径规划在复杂物流环境中的局限性与平滑需求分析** + +在当代工业自动化领域,无人物流车(AGV/AMR)的路径规划通常始于基于图搜索(如 A* 算法)或采样(如 RRT 算法)的离散路径生成过程 1。这些算法生成的原始路径通常由一系列离散的路径点(Waypoints)及连接它们的直线段组成。然而,这种简化的几何表达在高性能碰撞仿真和真实车辆控制中存在显著的物理性缺陷。 + +首先,离散路径在路径点处存在明显的几何不连续性,即切向量在折点处发生突变,这种现象在运动学上表现为车辆航向角(Heading Angle)的瞬时改变 3。由于真实的物流车辆受限于非圆约束(Non-holonomic Constraints),如轴距、转向机构的最大偏转角等,车辆无法在静止状态外实现零半径的瞬时转向 5。如果仿真系统仅基于直线段进行碰撞检测,系统将完全忽略车辆在转弯过程中由于旋转而产生的扫掠区域(Swept Path)变化。对于精度要求极高的车间环境,这种“运动学失真”可能导致严重的仿真偏差,例如车辆在转弯时车尾摆动(Tail-swing)可能擦撞侧方货架,而传统的直线连接模型由于无法描述转弯曲线,将导致此类碰撞事件的漏检 7。 + +其次,碰撞仿真的保真度直接取决于路径的几何连续性等级。在路径点处,简单的 C^0 连续(仅位置连续)会导致车辆执行器产生无限大的向心加速度需求 4。通过引入平滑曲线(如圆弧或贝塞尔曲线),可以将路径提升至 G^1(切线连续)甚至 G^2(曲率连续)级别。这种提升不仅是为了视觉上的平滑,更是为了在碰撞算法中能够以解析或高频采样的方式计算车体包围盒在每一时刻的精确位姿(Pose) 10。 + +## **车辆运动学模型与平滑曲线的技术关联** + +要实现符合真实场景的路径平滑,必须首先确立车辆的运动学基础。物流车的最小转弯半径 R 是由其物理结构决定的关键参数,它与车辆轴距 L 和转向轮最大偏角 delta 存在明确的数学关系: + +R = frac{L}{tan(delta)} +在车间环境的路径优化中,任何平滑技术都必须将此半径作为硬性约束,确保生成的曲线在任何一点的曲率半径 rho 均满足 rho ge R_{min} 5。 + +在碰撞仿真中,车辆通常被视为一个具有固定长度和宽度的刚体多边形,最常见的是导向包围盒(OBB, Oriented Bounding Box) 14。当路径从离散折线变为连续曲线后,OBB 的中心坐标 (x, y) 和旋转角 theta 成为路径参数 s(弧长)的连续函数。这意味着碰撞检测引擎不再仅仅检查静态线段之间的距离,而是需要通过对曲线进行精细采样,生成一系列在时间或空间上密集的位姿实例,并对每一对实例执行分离轴定理(SAT)检测 16。这种从“线段检测”向“位姿序列检测”的转变,是提升碰撞仿真精度的核心机制。 + +## **路径平滑算法的对比与选型** + +在实现局部功能优化时,需要权衡算法的计算复杂性、几何特性以及在 C# 环境下的实现难度。下表对比了目前主流的路径平滑技术方案: + +| 算法类型 | 连续性等级 | 计算复杂度 | 几何特性与碰撞检测适用性 | 物理仿真匹配度 | +| :---- | :---- | :---- | :---- | :---- | +| 圆弧过渡 (Arc Fillet) | G^1 | 极低 | 曲率恒定,偏置曲线计算简单,最适合 OBB 线性插值 19。 | 高(符合大多数 AGV 恒定转向角特性) | +| 二次贝塞尔曲线 (Quadratic Bézier) | G^1 | 低 | 抛物线形式,计算位姿需数值采样 10。 | 中(曲率变化不均匀) | +| 三次 B 样条 (B-Spline) | C^2 | 高 | 曲率连续,适合高速 AGV,但局部控制参数调整复杂 4。 | 极高(平滑度最好) | +| 回旋曲线 (Clothoid) | G^2 | 极高 | 曲率随弧长线性变化,计算极其复杂,涉及菲涅耳积分 12。 | 极高(符合真实驾驶习惯) | + +针对“局部功能优化”且“满足仿真要求”的前提,本方案选择圆弧过渡法(Arc Fillet)作为核心算法 19。该算法在两个切线段之间插入一段半径为 R 的圆弧。其优势在于:圆弧上的曲率半径是恒定的,这使得在仿真中可以非常容易地计算出车辆在转弯时的固定偏转角,且圆弧的偏置线(考虑车体宽度后的扫掠轨迹)依然是简单的圆弧或线段,极大地降低了碰撞检测的数学开销。 + +## **关键算法实现与路径拓扑重构** + +圆弧平滑技术的核心在于根据给定的折点坐标和目标半径,计算出圆弧的切点、中心点以及弧线参数。 + +### **1. 几何计算原理** + +假设路径中存在连续的三个点 mathbf{P}_{i-1}、mathbf{P}_{i}(折点)和 mathbf{P}_{i+1}。平滑的目标是在 mathbf{P}_{i-1}mathbf{P}_{i} 和 mathbf{P}_{i}mathbf{P}_{i+1} 之间插入半径为 R 的圆弧 23。 + +首先定义两个方向向量: + +mathbf{v}_1 = frac{mathbf{P}_{i-1} - mathbf{P}_{i}}{|mathbf{P}_{i-1} - mathbf{P}_{i}|} + +mathbf{v}_2 = frac{mathbf{P}_{i+1} - mathbf{P}_{i}}{|mathbf{P}_{i+1} - mathbf{P}_{i}|} +计算两向量之间的夹角 alpha = arccos(mathbf{v}_1 cdot mathbf{v}_2)。 +圆弧的切线长度 L_t(即从折点 mathbf{P}_i 到切点 mathbf{T} 的距离)计算公式为: + +L_t = frac{R}{tan(frac{alpha}{2})} +这里存在一个关键的物理约束:切线长度 L_t 不能超过相邻两线段长度的一半,否则圆弧会与前后的平滑处理发生重叠,导致路径扭曲 24。 + +### **2. 路径点逻辑重构:控制点与轨迹点的分离** + +在曲线平滑后,原始路径点 mathbf{P}_i 将不再位于物理路径上。在路径规划逻辑中,应按以下策略处理 : + +* **角色定义**:将原始路径点定义为**虚拟控制点 (Control Points)**。它们用于定义路径的宏观拓扑,不直接参与车辆的运动执行。 +* **特征点生成**:算法会在每个折点处生成两个新的物理特征点——**进入切点 (Tangent Start, T_s)** 和 **退出切点 (Tangent End, T_e)**。 +* **段序列结构**:将路径的数据结构由 List 升级为 List。路径变为直线段与圆弧段交替的序列:P_0 to T_{s1} to text{Arc}(T_{s1}, T_{e1}) to T_{s2} dots 。 +* **状态切换逻辑**:车辆控制器在直线段行驶时处于“巡线模式”,一旦坐标到达 T_s,立即切换为“定曲率转向模式”,直至到达 T_e 后恢复直线巡线。 + +## **控制参数描述与可视化方案** + +### **1. 控制参数表** + +| 参数名称 | 变量类型 | 单位 | 描述说明 | 典型取值范围 | +| :---- | :---- | :---- | :---- | :---- | +| 期望转弯半径 (R) | Double | 米 | 车辆执行转弯的曲率半径。 | 0.5 - 5.0 | +| 最小半径限制 (R_min) | Double | 米 | 转向机构物理极限,作为强制约束。 | 0.8 - 1.5 | +| 采样步长 (Delta s) | Double | 米 | 碰撞离散化采样的空间分辨率 7。 | 0.01 - 0.1 | +| 切线占比上限 (eta) | Double | % | 防止圆弧重叠的最大比例 24。 | 10% - 45% | + +### **2. 分层可视化策略 (Windows/WPF)** + +在 UI 设计中,为了兼顾路径编辑的直观性和仿真的准确性,应采用分层渲染: + +* **设计辅助层 (Design Skeleton)**:以虚线连接原始控制点 P_i。保留 P_i 的渲染标识,使其可交互(拖拽修改路径)。 +* **执行轨迹层 (Physical Trajectory)**:使用加粗实线绘制由直线和圆弧组成的实际路径。这是碰撞仿真引擎真正检测的对象 。 +* **切点标注 (Markers)**:在切点 T_s 和 T_e 处渲染不同颜色的微小圆点(如绿入红出),以便调试人员精确识别转弯启动位置 。 + +## **算法与可视化 C# 实现示例** + +以下代码展示了平滑算法的核心逻辑。该示例包含几何参数计算、半径约束检查以及碰撞检测所需的点位生成。 + +```csharp +using System; +using System.Collections.Generic; +using System.Windows; // 提供 Vector 和 Point 计算支持 + +namespace LogisticsVehicleSimulation.Geometry +{ + /// + /// 圆弧平滑路径段计算结果 + /// + public class ArcSegment + { + public Point Center { get; set; } + public Point StartPoint { get; set; } + public Point EndPoint { get; set; } + public double Radius { get; set; } + public double StartAngle { get; set; } + public double SweepAngle { get; set; } + public bool IsValid { get; set; } + } + + /// + /// 路径平滑引擎核心算法类 + /// 参考资料: [22, 23, 34] + /// + public class PathSmoothingEngine + { + private const double MinEdgeRatio = 0.45; // 限制切线长度不超过边长的45% + + /// + /// 为给定的路径点折角计算圆弧平滑参数 + /// + public ArcSegment ComputeArcFillet(Point pPrev, Point pCurr, Point pNext, double desiredRadius) + { + // 1. 提取方向向量并归一化 + Vector v1 = pPrev - pCurr; + Vector v2 = pNext - pCurr; + double L1 = v1.Length; + double L2 = v2.Length; + + v1.Normalize(); + v2.Normalize(); + + // 2. 计算向量夹角 alpha + double dot = v1 * v2; + double alpha = Math.Acos(Math.Clamp(dot, -1.0, 1.0)); + + // 3. 计算并限制切线长度 + // 公式: Tan(alpha/2) = R / Lt => Lt = R / Tan(alpha/2) + double tangentLength = desiredRadius / Math.Tan(alpha / 2.0); + double actualRadius = desiredRadius; + + // 几何安全性检查:如果半径过大导致切点超过线段一半,则自动缩放半径 + double maxAllowedTangent = Math.Min(L1, L2) * MinEdgeRatio; + if (tangentLength > maxAllowedTangent) + { + tangentLength = maxAllowedTangent; + actualRadius = tangentLength * Math.Tan(alpha / 2.0); + } + + // 4. 计算关键几何点坐标 [34, 35] + Point T1 = pCurr + (v1 * tangentLength); + Point T2 = pCurr + (v2 * tangentLength); + + // 圆弧中心位于角平分线上,距折点距离为 R / Sin(alpha/2) + Vector bisector = v1 + v2; + bisector.Normalize(); + double distToCenter = actualRadius / Math.Sin(alpha / 2.0); + Point center = pCurr + (bisector * distToCenter); + + // 5. 计算起始角与弧度范围 + Vector centerToT1 = T1 - center; + Vector centerToT2 = T2 - center; + double startAngle = Math.Atan2(centerToT1.Y, centerToT1.X); + double endAngle = Math.Atan2(centerToT2.Y, centerToT2.X); + + // 处理跨越 -PI/PI 的扫描角逻辑 + double sweepAngle = endAngle - startAngle; + while (sweepAngle > Math.PI) sweepAngle -= 2 * Math.PI; + while (sweepAngle < -Math.PI) sweepAngle += 2 * Math.PI; + + return new ArcSegment + { + Center = center, + StartPoint = T1, + EndPoint = T2, + Radius = actualRadius, + StartAngle = startAngle, + SweepAngle = sweepAngle, + IsValid = true + }; + } + + /// + /// 生成用于碰撞仿真的采样位姿序列 [7, 16, 26] + /// + public List GenerateSimulationPoses(ArcSegment arc, double samplingStep) + { + var poses = new List(); + double arcLength = Math.Abs(arc.SweepAngle) * arc.Radius; + int stepCount = Math.Max(2, (int)(arcLength / samplingStep)); + + for (int i = 0; i <= stepCount; i++) + { + double t = (double)i / stepCount; + double currentAngle = arc.StartAngle + (arc.SweepAngle * t); + + // 位置坐标 + double x = arc.Center.X + arc.Radius * Math.Cos(currentAngle); + double y = arc.Center.Y + arc.Radius * Math.Sin(currentAngle); + + // 航向角计算:对于圆弧,位姿方向即为切线方向 + // 切线方向 = 半径方向 + 90度 (取决于旋转方向) + double heading = currentAngle + (arc.SweepAngle > 0? Math.PI / 2.0 : -Math.PI / 2.0); + + poses.Add(new VehiclePose(new Point(x, y), heading)); + } + return poses; + } + } + + public struct VehiclePose + { + public Point Position; + public double HeadingRadians; // 弧度单位 + public VehiclePose(Point p, double h) { Position = p; HeadingRadians = h; } + } +} +``` + +以下代码展示了如何使用 WPF 的 PathGeometry 构建这种复合路径,并实现特征点计算 。 + +```csharp +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Media; // WPF 绘图支持 + +namespace AGVSimulation.Geometry +{ + public class PathManager + { + /// + /// 将离散路径点转换为 WPF 可视化几何对象 + /// + public PathGeometry CreateSmoothPath(List waypoints, double radius) + { + var geometry = new PathGeometry(); + var figure = new PathFigure { StartPoint = waypoints, IsClosed = false }; + + for (int i = 1; i < waypoints.Count - 1; i++) + { + // 计算平滑参数 [23, 27] + var arc = ComputeArcFillet(waypoints[i - 1], waypoints[i], waypoints[i + 1], radius); + + if (arc.IsValid) + { + // 1. 添加连接到切点 Ts 的直线段 + figure.Segments.Add(new LineSegment(arc.StartPoint, true)); + + // 2. 添加圆弧段 + figure.Segments.Add(new ArcSegment( + arc.EndPoint, + new Size(arc.Radius, arc.Radius), + 0, // 旋转角 + Math.Abs(arc.SweepAngle) > Math.PI, // 大弧标志 + arc.SweepAngle > 0? SweepDirection.Clockwise : SweepDirection.Counterclockwise, + true)); + } + else + { + // 如果无法生成圆弧(如点重合),则直接连接到折点 + figure.Segments.Add(new LineSegment(waypoints[i], true)); + } + } + + // 连接到终点 + figure.Segments.Add(new LineSegment(waypoints[^1], true)); + geometry.Figures.Add(figure); + return geometry; + } + + private ArcInfo ComputeArcFillet(Point pPrev, Point pCurr, Point pNext, double R) + { + Vector v1 = pPrev - pCurr; + Vector v2 = pNext - pCurr; + double alpha = Vector.AngleBetween(v1, v2); // 返回角度 + double alphaRad = Math.Abs(alpha) * Math.PI / 180.0; + + // 计算切线长 Lt = R / tan(alpha/2) + double tangentLength = R / Math.Tan(alphaRad / 2.0); + + // 约束检查:防止切点超过边长的一半 + double limit = Math.Min(v1.Length, v2.Length) * 0.45; + if (tangentLength > limit) + { + tangentLength = limit; + R = tangentLength * Math.Tan(alphaRad / 2.0); + } + + v1.Normalize(); v2.Normalize(); + Point Ts = pCurr + (v1 * tangentLength); + Point Te = pCurr + (v2 * tangentLength); + + return new ArcInfo { + StartPoint = Ts, EndPoint = Te, Radius = R, + SweepAngle = alpha, IsValid = true + }; + } + } + + public struct ArcInfo { + public Point StartPoint; public Point EndPoint; + public double Radius; public double SweepAngle; public bool IsValid; + } +} +``` + +## **高精度碰撞仿真的深度优化:扫掠路径分析 (Swept Path Analysis)** + +在无人物流车的实际运行中,仅仅平滑路径中心点是不够的。高精度仿真的核心挑战在于如何处理转弯时车辆的“内轮差”和“车尾摆动” 7。 + +### **扫掠区域几何特性** + +当物流车沿着圆弧路径行驶时,其内侧后轮的行驶半径要小于前轮(转向轮)的行驶半径。在仿真中,这种现象被称为“Off-tracking” 7。如果不考虑这一点,仿真可能显示路径安全,但实际车辆转弯时内侧车体会撞击立柱。 + +高精度仿真方案应采用以下改进措施: + +1. **多点包围盒检测**:不仅仅将车体简化为一个矩形,而是对车体的四个关键角点分别计算轨迹圆弧。车体占据的扫掠面积被定义为所有顶点轨迹的包络面 7。 +2. **空间占据网格预检**:在转弯处,基于平滑后的参数,将扫掠区域划分为一组微小的矩形切片 16。 +3. **时间连续碰撞检测 (CCD)**:通过平滑曲线模型,我们可以实现基于扫描体积的连续检测,从而确保即使在高速转弯仿真中也不会遗漏任何接触点 14。 + +## **结论与工程实践建议** + +本技术方案针对无人物流车在车间环境下的路径平滑与碰撞仿真需求,提出了一套基于圆弧过渡法的解析解方案。通过引入**控制点与轨迹点分离**的逻辑重构,以及基于 **WPF PathGeometry 的分层可视化**,该方案不仅解决了离散路径点处的运动学失真问题,更为高精度的碰撞模拟提供了坚实的几何基础。 + +在实际工程应用中,建议将几何计算逻辑封装为独立的 DLL 库,确保上位机可视化、离线仿真引擎以及 AGV 车载路径解析器使用的是同一套数学模型,实现“所见即所行”的仿真目标 。 + +#### **Works cited** + +1. Smoothed A* Algorithm for Practical Unmanned Surface Vehicle Path Planning - UCL Discovery, accessed December 30, 2025, [https://discovery.ucl.ac.uk/10064237/3/Liu%20Smoothed%20A%20algorithm%20for%20practical%20unmanned%20surface%20vehicle%20path%20planning.pdf](https://discovery.ucl.ac.uk/10064237/3/Liu%20Smoothed%20A%20algorithm%20for%20practical%20unmanned%20surface%20vehicle%20path%20planning.pdf) +2. AGV Path Planning Based on Smoothing A* Algorithm - ResearchGate, accessed December 30, 2025, [https://www.researchgate.net/publication/282775416_AGV_Path_Planning_Based_on_Smoothing_A_Algorithm](https://www.researchgate.net/publication/282775416_AGV_Path_Planning_Based_on_Smoothing_A_Algorithm) +3. AGV PATH PLANNING BASED ON SMOOTHING A* ALGORITHM, accessed December 30, 2025, [https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf](https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf) +4. Bézier Splines: Continuity, accessed December 30, 2025, [https://www.csc.kth.se/~weinkauf/notes/beziersplinecontinuity.html](https://www.csc.kth.se/~weinkauf/notes/beziersplinecontinuity.html) +5. Iterative Learning-Based Path and Speed Profile Optimization for an Unmanned Surface Vehicle - PMC - NIH, accessed December 30, 2025, [https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/](https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/) +6. Turning radius - Grokipedia, accessed December 30, 2025, [https://grokipedia.com/page/Turning_radius](https://grokipedia.com/page/Turning_radius) +7. Turning Vehicle Simulation: Interactive Computer-Aided Design and Drafting Application, accessed December 30, 2025, [https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf](https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf) +8. Step-by-Step Guide to Conducting a Swept Path Analysis - Quantum Traffic, accessed December 30, 2025, [https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis](https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis) +9. Path Smoothing Techniques in Robot Navigation: State-of-the-Art, Current and Future Challenges - PMC - NIH, accessed December 30, 2025, [https://pmc.ncbi.nlm.nih.gov/articles/PMC6165411/](https://pmc.ncbi.nlm.nih.gov/articles/PMC6165411/) +10. Smooth path planning with safety margins using Piece-Wise Bezier curves - arXiv, accessed December 30, 2025, [https://arxiv.org/pdf/2510.24972](https://arxiv.org/pdf/2510.24972) +11. Collision Avoidance Path Planning for Automated Vehicles Using Prediction Information and Artificial Potential Field - NIH, accessed December 30, 2025, [https://pmc.ncbi.nlm.nih.gov/articles/PMC11598233/](https://pmc.ncbi.nlm.nih.gov/articles/PMC11598233/) +12. Path planning for autonomous vehicles using clothoid based smoothing of A* generated paths and optimal control - DiVA portal, accessed December 30, 2025, [https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf](https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf) +13. Article 99 | Turning Radius - Virtual CRASH, accessed December 30, 2025, [https://www.vcrashusa.com/kb-vc-article99](https://www.vcrashusa.com/kb-vc-article99) +14. (PDF) An Efficient Centralized Planner for Multiple Automated Guided Vehicles at the Crossroad of Polynomial Curves - ResearchGate, accessed December 30, 2025, [https://www.researchgate.net/publication/355863030_An_Efficient_Centralized_Planner_for_Multiple_Automated_Guided_Vehicles_at_the_Crossroad_of_Polynomial_Curves](https://www.researchgate.net/publication/355863030_An_Efficient_Centralized_Planner_for_Multiple_Automated_Guided_Vehicles_at_the_Crossroad_of_Polynomial_Curves) +15. Oriented bounding box (OBB): All you need to know - Mindkosh AI, accessed December 30, 2025, [https://mindkosh.com/blog/oriented-bounding-box-annotation-all-you-need-to-know/](https://mindkosh.com/blog/oriented-bounding-box-annotation-all-you-need-to-know/) +16. The Math Behind Bounding Box Collision Detection - AABB vs OBB(Separate Axis Theorem), accessed December 30, 2025, [https://dev.to/pratyush_mohanty_6b8f2749/the-math-behind-bounding-box-collision-detection-aabb-vs-obbseparate-axis-theorem-1gdn](https://dev.to/pratyush_mohanty_6b8f2749/the-math-behind-bounding-box-collision-detection-aabb-vs-obbseparate-axis-theorem-1gdn) +17. OrientedBoundingBox(OBB)Collision · SimonDarksideJ ... - GitHub, accessed December 30, 2025, [https://github.com/SimonDarksideJ/XNAGameStudio/wiki/OrientedBoundingBox(OBB)Collision](https://github.com/SimonDarksideJ/XNAGameStudio/wiki/OrientedBoundingBox(OBB)Collision) +18. Collision Detection - Cepton, accessed December 30, 2025, [https://developer.cepton.com/blog/2d_collision_detection](https://developer.cepton.com/blog/2d_collision_detection) +19. Curved Paths - Red Blob Games, accessed December 30, 2025, [https://www.redblobgames.com/articles/curved-paths/](https://www.redblobgames.com/articles/curved-paths/) +20. PRM Path Smoothening by Circular Arc Fillet Method for Mobile Robot Navigation - DergiPark, accessed December 30, 2025, [https://dergipark.org.tr/tr/download/article-file/3067231](https://dergipark.org.tr/tr/download/article-file/3067231) +21. G Continuity Method based on C-B Spline Curves and C-Bézier - NADIA, accessed December 30, 2025, [http://article.nadiapub.com/IJCA/vol8_no8/4.pdf](http://article.nadiapub.com/IJCA/vol8_no8/4.pdf) +22. Solved: Fillet Two line c# - Autodesk Community, accessed December 30, 2025, [https://forums.autodesk.com/t5/net-forum/fillet-two-line-c/td-p/13101919](https://forums.autodesk.com/t5/net-forum/fillet-two-line-c/td-p/13101919) +23. An Algorithm for Polygons with Rounded Corners - Gorilla Sun, accessed December 30, 2025, [https://www.gorillasun.de/blog/an-algorithm-for-polygons-with-rounded-corners/](https://www.gorillasun.de/blog/an-algorithm-for-polygons-with-rounded-corners/) +24. AG Corners Live Effect | Astute Graphics Documentation, accessed December 30, 2025, [https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect](https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect) +25. javascript - Applying rounded corners to paths/polygons - Stack Overflow, accessed December 30, 2025, [https://stackoverflow.com/questions/19269622/applying-rounded-corners-to-paths-polygons](https://stackoverflow.com/questions/19269622/applying-rounded-corners-to-paths-polygons) +26. How to detect collisions with a curve - Stack Overflow, accessed December 30, 2025, [https://stackoverflow.com/questions/39541744/how-to-detect-collisions-with-a-curve](https://stackoverflow.com/questions/39541744/how-to-detect-collisions-with-a-curve) +27. turning radius calculations based on average of inner and outer front wheel cramp angles, accessed December 30, 2025, [https://www.mvfpd.org/files/ee1fa2b8f/turn+radii+for+developers.pdf](https://www.mvfpd.org/files/ee1fa2b8f/turn+radii+for+developers.pdf) +28. Exact Mathematical Solution for Maximum Transient Offtracking Calculation of a Single-Unit Vehicle Negotiating Circular Curves - MDPI, accessed December 30, 2025, [https://www.mdpi.com/2076-3417/14/13/5570](https://www.mdpi.com/2076-3417/14/13/5570) +29. Preparing Swept Path Analysis' | Invarion Help Center, accessed December 30, 2025, [https://help.invarion.com/rapidpath-online/swept-path-analysis/preparing-swept-path-analysis/](https://help.invarion.com/rapidpath-online/swept-path-analysis/preparing-swept-path-analysis/) +30. Physics Tutorial 4: Collision Detection, accessed December 30, 2025, [https://research.ncl.ac.uk/game/mastersdegree/gametechnologies/previousinformation/physics4collisiondetection/2017%20Tutorial%204%20-%20Collision%20Detection.pdf](https://research.ncl.ac.uk/game/mastersdegree/gametechnologies/previousinformation/physics4collisiondetection/2017%20Tutorial%204%20-%20Collision%20Detection.pdf) +31. Simple Oriented Bounding Box OBB collision detection explaining - Stack Overflow, accessed December 30, 2025, [https://stackoverflow.com/questions/47866571/simple-oriented-bounding-box-obb-collision-detection-explaining](https://stackoverflow.com/questions/47866571/simple-oriented-bounding-box-obb-collision-detection-explaining) +32. Fast Safe Rectangular Corridor-based Online AGV Trajectory Optimization with Obstacle Avoidance - arXiv, accessed December 30, 2025, [https://arxiv.org/html/2309.07979v2](https://arxiv.org/html/2309.07979v2) \ No newline at end of file diff --git a/doc/design/2026/无人物流车转弯路径曲线化方案_简化版.md b/doc/design/2026/无人物流车转弯路径曲线化方案_简化版.md new file mode 100644 index 0000000..f88bd7a --- /dev/null +++ b/doc/design/2026/无人物流车转弯路径曲线化方案_简化版.md @@ -0,0 +1,114 @@ +# **无人物流车转弯路径曲线化方案** + +## **1. 核心需求与思路分析** + +当前基于直线连接的路径在转弯处存在“瞬间转向”的非物理现象,导致仿真系统漏掉车辆在转弯时由于旋转(Swept Path)产生的碰撞 1。 +简化策略:采用圆弧过渡法(Arc Fillet)。在任意两个路径段之间插入一段切圆弧。这种方法数学计算最少,且能完美描述 AGV 的恒定转向状态 3。 + +## **2. 关键算法实现逻辑** + +### **2.1 路径拓扑重构** + +为了解决原始点“失准”问题,逻辑上将路径视为**“控制点”与“物理边”**的组合 5: + +1. **Waypoints (控制点)**:作为 Navisworks 中的操作手柄,用于定义路线走向。 +2. **Edges (物理边)**:连接相邻控制点。转弯处会自动生成**进入切点 (T_s)** 和 **退出切点 (T_e)**,两者之间的路径由直线变为圆弧。 + +### **2.2 几何计算流程 (3D 向量法)** + +假设连续三点 P_{i-1}, P_i, P_{i+1},预设半径为 R。 + +* **计算偏转角**:求向量 vec{v}_1(P_{i-1}-P_i) 与 vec{v}_2(P_{i+1}-P_i) 的夹角 alpha。 +* **计算切线长**:L_t = R / tan(alpha/2) 8。 +* **安全截断**:若 L_t 超过线段长度的一半,自动将 L_t 缩减为长度的 45%,反推实际半径 R_{act}。 +* **定位物理点**: + * T_s = P_i + text{unit}(vec{v}_1) times L_t + * T_e = P_i + text{unit}(vec{v}_2) times L_t + +## **3. 标准化数据结构说明 (参考 VDA 5050)** + +为保证与 DELMIA 兼容并支持 3D 导出,系统内部采用简化版的 **VDA 5050 路径模型** 10: + +* **Node (节点)**:存储原始 P_i 坐标及 ID。 +* **Edge (边)**:定义连接关系。 + * 属性 trajectory:如果边是转弯处,则包含 ArcCenter、Radius、Ts、Te 信息。 +* **Export (导出)**:一键输出为 DELMIA 专用的 **XML Tag Group** 格式,将 T_s、T_e 及弧中点定义为路径标签(Tags) 。 + +## **4. 控制参数配置 (Navisworks 侧边栏)** + +| 参数类别 | 参数名称 | 说明 | 典型值 | +| :---- | :---- | :---- | :---- | +| **车辆参数** | 转向半径 (R) | 车辆物理允许的转弯半径。 | 1.5 m | +| **仿真精度** | 采样步长 (Delta s) | 碰撞检测时圆弧离散化的间距。 | 0.05 m | +| **局部控制** | 半径覆盖 | 在点列表中,允许单独为某个急转弯设置小半径。 | - | +| **导出设置** | 文件格式 | 导出 DELMIA XML 或 CSV 坐标序列。 | XML | + +## **5. 核心 C# 实现示例 (Navisworks API)** + +C# + +using Autodesk.Navisworks.Api; // 仅依赖基础几何库 + +public struct SmoothTurn { + public Point3D Ts, Te; // 物理切点 + public double ActualRadius; + public bool IsValid; +} + +public class PathEngine { + // 核心:计算圆弧平滑参数 + public SmoothTurn CalculateFillet(Point3D pPrev, Point3D pCurr, Point3D pNext, double R) { + Vector3D v1 = (pPrev - pCurr).Normalize(); + Vector3D v2 = (pNext - pCurr).Normalize(); + + // 1. 计算夹角并求切线长 Lt + double angleRad = Math.Acos(Vector3D.DotProduct(v1, v2)); + double Lt = R / Math.Tan(angleRad / 2.0); + + // 2. 安全截断检查 (防止圆弧过大) + double limit = Math.Min((pPrev-pCurr).Length, (pNext-pCurr).Length) * 0.45; + if (Lt > limit) { + Lt = limit; + R = Lt * Math.Tan(angleRad / 2.0); + } + + return new SmoothTurn { + Ts = pCurr + v1 * Lt, + Te = pCurr + v2 * Lt, + ActualRadius = R, + IsValid = true + }; + } + + // 生成用于 Navisworks 碰撞检测的离散位姿序列 [12, 13] + public List SampleArc(SmoothTurn turn, int sampleCount = 10) { + // 基于 Ts 和 Te 在圆弧平面内进行线性角度插值,输出点序列供仿真引擎使用 + return new List(); + } +} + +## **6. 高精度碰撞仿真策略:扫掠分析 (Swept Path)** + +在 Navisworks 中,不仅检查中心线,还要利用车辆宽度(轮距)生成 OBB 包围盒序列 1: + +1. **位姿切片**:在圆弧段按“采样步长”生成密集的车辆外框实例。 +2. **SAT 判定**:对每个实例执行分离轴定理检测。由于圆弧段是连续生成的,这能有效检出内轮差碰撞风险。 + +## **7. 结论** + +本方案在不增加系统复杂度的前提下,通过**“控制点驱动、物理点执行”**的逻辑,实现了 Navisworks 3D 环境下的高保真路径仿真。其导出的 **XML Tag Group** 格式确保了数据能无缝进入 **DELMIA** 进行更深度的流程验证。 + +#### **Works cited** + +1. Turning Vehicle Simulation: Interactive Computer-Aided Design and Drafting Application, accessed December 30, 2025, [https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf](https://onlinepubs.trb.org/Onlinepubs/trr/1995/1500/1500-001.pdf) +2. Step-by-Step Guide to Conducting a Swept Path Analysis - Quantum Traffic, accessed December 30, 2025, [https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis](https://www.quantumtraffic.com.au/step-by-step-guide-to-conducting-a-swept-path-analysis) +3. Curved Paths - Red Blob Games, accessed December 30, 2025, [https://www.redblobgames.com/articles/curved-paths/](https://www.redblobgames.com/articles/curved-paths/) +4. PRM Path Smoothening by Circular Arc Fillet Method for Mobile Robot Navigation - DergiPark, accessed December 30, 2025, [https://dergipark.org.tr/tr/download/article-file/3067231](https://dergipark.org.tr/tr/download/article-file/3067231) +5. Smoothed A* Algorithm for Practical Unmanned Surface Vehicle Path Planning - UCL Discovery, accessed December 30, 2025, [https://discovery.ucl.ac.uk/10064237/3/Liu Smoothed A algorithm for practical unmanned surface vehicle path planning.pdf](https://discovery.ucl.ac.uk/10064237/3/Liu Smoothed A algorithm for practical unmanned surface vehicle path planning.pdf) +6. AGV PATH PLANNING BASED ON SMOOTHING A* ALGORITHM, accessed December 30, 2025, [https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf](https://airccse.org/journal/ijsea/papers/6515ijsea01.pdf) +7. Iterative Learning-Based Path and Speed Profile Optimization for an Unmanned Surface Vehicle - PMC - NIH, accessed December 30, 2025, [https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/](https://pmc.ncbi.nlm.nih.gov/articles/PMC7014130/) +8. An Algorithm for Polygons with Rounded Corners - Gorilla Sun, accessed December 30, 2025, [https://www.gorillasun.de/blog/an-algorithm-for-polygons-with-rounded-corners/](https://www.gorillasun.de/blog/an-algorithm-for-polygons-with-rounded-corners/) +9. AG Corners Live Effect | Astute Graphics Documentation, accessed December 30, 2025, [https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect](https://docs.astutegraphics.com/vectorscribe/ag-corners-live-effect) +10. Path planning for autonomous vehicles using clothoid based smoothing of A* generated paths and optimal control - DiVA portal, accessed December 30, 2025, [https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf](https://www.diva-portal.org/smash/get/diva2:1150741/FULLTEXT01.pdf) +11. (PDF) An Efficient Centralized Planner for Multiple Automated Guided Vehicles at the Crossroad of Polynomial Curves - ResearchGate, accessed December 30, 2025, [https://www.researchgate.net/publication/355863030_An_Efficient_Centralized_Planner_for_Multiple_Automated_Guided_Vehicles_at_the_Crossroad_of_Polynomial_Curves](https://www.researchgate.net/publication/355863030_An_Efficient_Centralized_Planner_for_Multiple_Automated_Guided_Vehicles_at_the_Crossroad_of_Polynomial_Curves) +12. Preparing Swept Path Analysis' | Invarion Help Center, accessed December 30, 2025, [https://help.invarion.com/rapidpath-online/swept-path-analysis/preparing-swept-path-analysis/](https://help.invarion.com/rapidpath-online/swept-path-analysis/preparing-swept-path-analysis/) \ No newline at end of file diff --git a/doc/requirement/todo_features.md b/doc/requirement/todo_features.md index 989bd4c..559f5e1 100644 --- a/doc/requirement/todo_features.md +++ b/doc/requirement/todo_features.md @@ -12,7 +12,7 @@ 6. [ ] (优化)优化路径规划分析和分析报告 7. [ ] (功能)增加物流属性自定义 8. [x] (BUG) 动画时物流车在起点时应该朝向路径方向,切换虚拟车辆和指定物体时,原有的要归位 -9. [ ] (功能)物流车在路径点转弯时,要对转弯的动作进行仿真,要设置角速率、转弯半径,并进行碰撞检测,意味着路径要变成曲线 +9. [ ] (功能)物流车在路径点转弯时,设置转弯半径等参数,将路径变成曲线 ### [2025/12/18]