perf(ik): 规划提速 32%:(2,4) 零件对类离线间隙表、撞点前移、判定记忆、routeFrom 惰性回退、平滑预算收紧

This commit is contained in:
Hark
2026-10-15 15:11:17 +00:00
parent 8ad5b3b4fa
commit 919e704771
5 changed files with 198 additions and 17 deletions
+4 -2
View File
File diff suppressed because one or more lines are too long
+28
View File
@@ -38,3 +38,31 @@
- 规划耗时上升约 0.3~0.5 s(Worker 里跑,不卡界面);拖拽实时模式预算 150 ms,超时回落旧阶梯。
- 执行层仍是关节空间折线;若要上真机,下一步应做带加速度约束的时间最优参数化(TOPP)+ 拐角抛物线过渡,
过渡段需重新做碰撞校验。
## 二期:规划提速(2026-10-15)
逐段计时(20 个被挡场景):时间主要花在"单中间点微调"(~350 ms/例)、RRT(~280 ms)和平滑(~250 ms 截止);
每次碰撞判定约 1.5 ms,其中 80% 的线段距离计算来自 (2,4) 类零件对(P05/M3 × P07/M5,长期相距 ~5 mm)。
改动:
1. **两关节零件对类间隙表**:(2,4) 类的相对位姿只取决于 J3、J4,离线按 1° 网格生成最小间隙表
(`webapp/tools/gen_pair2d.cjs` → `docs/collide.json` 的 `pair2d`)。运行时取最近网格点,按杠杆界
(J3 3.24 mm/°、J4 2.54 mm/°)给出上下界,能定论就跳过/判撞,否则回退精算。2 万随机姿态与精算判定 0 差异;
单次判定 1.60 → 1.25 ms。指纹校验:重新拟合胶囊后未重生成表会自动弃表(只变慢不出错)。
2. **前移启发**:撞上的零件对/簇对移到表头,规划中反复撞同一处时首查即短路。
3. **单次求解内判定记忆**:routeFrom / gatherGoals / 规划器对同一批 IK 候选不再重复判定。
4. **routeFrom 惰性回退**:被挡时先不算"贴边停"位形(findSafeTarget + 二分),规划失败才补算。
5. 微调只试前 2 个目标;平滑 50 次随机捷径 / 160 ms 截止,逐轴拉直 1 轮。
同一批 60 例(`node tests/route_bench.cjs <solver> 60`):
| 指标 | 一期 | 二期 |
|---|---:|---:|
| 平均规划耗时 | 1239 ms | 837 ms(−32%) |
| 到达目标 | 55 | 58 |
| 1° 细验不穿模 | 58 | 58 |
| 关节总行程均值 | 438° | 436° |
| 往返次数均值 | 2.08 | 1.98 |
尝试过但未采用:基于间隙 + 杠杆界的保守连续检测。(2,4) 类常年仅 ~5 mm 间隙把步长压到 <1°,
单次间隙查询又比布尔判定贵,实测比 1.5° 离散检测慢 25%。