小P学长
小P学长

机器人与无人机路径规划:Dijkstra、A*、RRT/RRT*、Frenet 怎么选与验收

先按地图表示、维度、运动学、动态障碍和参考线判断算法,再用碰撞、长度、曲率、时间和多随机种子重复实验验收;路径规划、轨迹生成和轨迹跟踪不能混为一谈。

先分清:路径、轨迹和跟踪控制不是同一件事

  • 路径是一串几何位置或姿态,未必包含时间。
  • 轨迹通常带时间、速度、加速度,可能还需满足曲率、转向角或飞行动力学。
  • 跟踪控制让真实或仿真系统沿轨迹运动,需要处理误差、扰动和执行器限制。

因此,“A* 找到一条栅格最短路”不能证明无人车能转过去;“RRT 返回无碰撞节点”也不能证明无人机速度、加速度和安全距离合格。本站的轨迹 CSV 体检工具只能检查已有轨迹的时间顺序、速度和异常跳点,不能代替地图碰撞检测或动力学验证。

四类问题的起始选择

问题特征优先基线为什么
静态二维栅格、边权非负Dijkstra作为无启发函数的可复现最短路基线。
静态栅格、有可采纳启发函数A*通常减少扩展节点;必须记录启发函数和移动代价。
连续高维、有复杂障碍或姿态RRT,再比较 RRT*采样法更容易在连续空间探索;结果随机,需要多次重复。
已有道路/中心参考线Frenet 候选轨迹沿参考线用纵向 s 和横向偏移 d 表达候选,更适合结构化道路。

这些只是起点。动态障碍、差速/阿克曼约束、固定翼最小转弯半径或多机冲突会改变问题定义,不能靠更换算法名称自动解决。

统一输入契约:不然算法比较没有意义

  1. 坐标系、原点、轴方向和单位。
  2. 地图分辨率、障碍阈值、未知区域处置。
  3. 机器人/无人机尺寸和安全裕度;碰撞检测应针对膨胀障碍或真实几何体。
  4. 起终点合法性以及是否要求终点航向/姿态。
  5. 允许的移动、代价定义和是否含转弯、爬升或能耗惩罚。
  6. 随机算法的种子、时间预算、迭代上限和成功定义。

坐标、代价与碰撞检测:三个最容易藏住错误的地方

复现实验时,应把栅格行列、地图坐标和世界坐标的转换写成单独函数,并用至少三个已知点做往返测试。图像坐标的纵轴常向下,而笛卡尔坐标纵轴常向上;若再叠加米与格、角度与弧度的混用,动画看似合理也可能对应错误位置。结果文件至少记录坐标系名称、长度单位、角度单位、地图分辨率和时间单位。

“最短”也必须先说明代价。距离、时间、能耗、风险、转弯次数和离障碍距离可以产生完全不同的最优解。多项加权时,要保存每项原始量、归一化方法、权重与总分,避免只留下一个无法解释的总代价。建议先报告不加权的长度、时间、最小净空和最大曲率,再讨论综合目标。

碰撞检测频率不能只由路径节点数量决定。若两节点相距 2 米、障碍只有 0.5 米宽,只检查端点就可能穿障而不自知。应按地图分辨率、障碍尺度和载体尺寸设定线段插值或连续几何检测步长,并在平滑、重采样或坐标转换后重新检查一次。

Dijkstra 与 A*:先把栅格基线做正确

两者应在同一邻接规则和边权下比较。若允许八邻域,斜向代价通常不能与水平移动都设为 1;否则几何长度失真。A* 的启发函数应与移动模型匹配,并明确是否可采纳/一致。验收至少包括:起点终点、每一步邻接合法、所有栅格可通行、代价重新求和一致、在小地图上与手工或 Dijkstra 基线一致。

RRT/RRT*:单次漂亮动画不是证据

采样法需要完整记录采样范围、步长、目标偏置、最近邻、碰撞离散步长、重连半径、终止条件和随机种子。RRT* 的渐近性质不等于有限时间内一定优于 RRT。至少在同一批地图上运行 20–30 个种子,报告成功率、路径代价中位数/P90、碰撞检测次数和运行时间;失败也要进入统计。

Frenet:参考线质量决定候选轨迹质量

Frenet 方法适合已有合理参考线的结构化环境。应检查笛卡尔与 Frenet 转换、参考线曲率、投影是否唯一、候选的横向/纵向边界、障碍预测和从局部坐标回到全局后的碰撞。若道路交叉、参考线自交或偏移过大,s/d 表示可能失去清晰含义。

统一的九项验收表

  1. 起点、终点和全部中间点位于允许空间。
  2. 线段/曲线连续碰撞检查通过,而不是只检查离散节点。
  3. 考虑机器人尺寸与安全裕度,不把点机器人结果直接用于实体。
  4. 路径长度或总代价由独立函数重新计算一致。
  5. 最大曲率、转弯半径、速度和加速度满足模型约束。
  6. 固定数据集比较成功率、运行时间、扩展/采样数量和路径代价。
  7. 随机方法多种子重复并保留失败案例。
  8. 地图分辨率、碰撞步长或规划参数改变后,结论不过度跳变。
  9. 导出的 CSV 包含时间/坐标/单位/坐标系说明,并可从原始配置重跑。

最小可复现实验记录

每次运行至少保存:算法与代码版本、地图文件哈希、起终点、载体外形与安全裕度、全部参数、随机种子、机器与运行环境、开始时间、终止原因、是否成功、路径代价和运行时间。批量比较时不要覆盖失败日志;将每个种子写成独立一行,之后再汇总中位数、分位数和成功率。这样即使后来更换平滑器或碰撞模块,也能判断变化来自哪里。

常见但危险的“优化”

  • 先平滑再碰撞检查,导致曲线切过障碍。
  • 为了让所有案例成功,偷偷缩小机器人或安全距离。
  • 只报告成功种子,忽略失败率。
  • 比较算法时给不同时间预算、地图或终止条件。
  • 把二维点路径动画称为可直接飞行/驾驶的轨迹。

可公开复核的实现入口

外部开源项目受各自许可证约束。本指南解释算法选择和验收,不转载、转售或声称拥有这些仓库的代码。