Files
Robot_Arm/docs/路径规划优化报告.md
T

2.9 KiB
Raw Blame History

避障路径规划优化报告(2026-10-15,基于 1dfdd48)

现状问题(旧 routeOrVia 阶梯)

  1. 穿模:routeAroundPlan 每段只查 ≤8 点(长段采样间隔 15°+),coordinated 二分松弛只查 6 点。 60 个"直线被挡"随机场景里 18 条路径在 1° 细验下实际穿模(13 条为 coordinated)。
  2. 怪动作:CRUISE 巡航位形把 J3/J5/J6 强制拉到固定值(0/-60/0),与障碍无关的腕部和大臂自转也被 "归零再转回";回退绕行(retract_pass)先收臂再伸展,路径绕远。
  3. 单目标:绕行只认一个目标解 qT,换个肘/腕构型就能直走的情况被忽略。
  4. 动画顿挫:animTo 每个中间位形各占固定 ms 并各自 smoothstep —— 每过一个 via 都减速到 0; 5° 小段与 150° 大段用同样时间。

改动

  • ik-solver.js 新增 6c 节:
    • gatherGoals:候选表里端点安全的 IK 解按加权关节距离取前 6 个(同盆地去重)作为目标集;
    • 先试多目标直线(1.5° 细验)→ 再试弦中点 J2/J4 微调单中间点 → 再上 Lazy RRT-Connect (起点树 ↔ 多根目标树;生长时只查节点 + 边中点,连通后整条路径细验,坏边判死子树);
    • shortcut:随机捷径 + 贪心最远可达 + 逐轴拉直(去掉与障碍无关轴的来回摆);
    • 加权度量 PW=[1.6,1.4,1,1,0.7,0.5](近端轴代价高),定种子 LCG,结果可复现;
    • 连续轴段内变化 <179°,保证与查看器短弧插值走的是同一条线;
    • 规划失败时仍回落旧阶梯与 routeVia,最坏行为不劣于旧版。
  • 碰撞窄相位前加胶囊级包围球预筛(保守、零漏判):collideFree 2.9 → 1.8 ms/次, 4000 个随机位形与旧实现判定 0 差异。
  • ik-glue.js animTo:各段时长按"最慢轴所需时间"(轴速比 VREL)分配,整条折线一次全局缓入缓出, 中间位形不停顿;总时长按路径长度伸缩。

基准(node tests/route_bench.cjs [solver] 60,同一批 60 个直线被挡场景)

指标 旧 新
1° 细验无穿模的路径 42/60 58/60(剩 2 条最大侵入 0.28/0.08 mm,在 0.3 mm 安全裕度内)
到达且无穿模 37 53
两版都成功的 37 例:平均关节总行程 417° 388°(−7%)
同上:估算执行时间 2.56 s 2.46 s
平均规划耗时(Node 单线程) 0.72 s 1.23 s(全集)/ 0.94 s(37 例)

到不了的 5 例两版相同,属于目标超出安全可达区(IK 残差 4~235 mm),不是规划问题。

已知取舍 / 后续

  • 规划耗时上升约 0.3~0.5 s(Worker 里跑,不卡界面);拖拽实时模式预算 150 ms,超时回落旧阶梯。
  • 执行层仍是关节空间折线;若要上真机,下一步应做带加速度约束的时间最优参数化(TOPP)+ 拐角抛物线过渡, 过渡段需重新做碰撞校验。