1170 lines
35 KiB
Markdown
1170 lines
35 KiB
Markdown
# 05-验收证据
|
||
|
||
版本:0.3
|
||
日期:2026-06-27
|
||
|
||
## 1. 记录规则
|
||
|
||
每条证据必须包含:
|
||
|
||
1. 证据编号。
|
||
2. 关联任务。
|
||
3. 对标章节。
|
||
4. 命令、页面、报告、截图、日志或产物路径。
|
||
5. 执行环境。
|
||
6. 结果摘要。
|
||
7. 是否通过。
|
||
|
||
状态取值:
|
||
|
||
| 状态 | 含义 |
|
||
| --- | --- |
|
||
| 待验证 | 任务未执行或证据未产生。 |
|
||
| 通过 | 结果满足验收标准。 |
|
||
| 不通过 | 已执行但不满足验收标准。 |
|
||
| 阻塞 | 因环境、依赖或设计问题无法验证。 |
|
||
|
||
## 2. 环境基线
|
||
|
||
| 项 | 当前值 |
|
||
| --- | --- |
|
||
| 工作区 | `/home/meswork/kdl_work` |
|
||
| KDL 源码 | `/home/meswork/kdl_work/orocos_kinematics_dynamics/orocos_kdl` |
|
||
| KDL 对标文档 | `/home/meswork/kdl_work/work/doc/KDL_WASM计算接口设计.md` |
|
||
| GRL 对标文档 | `/home/meswork/kdl_work/work/doc/通用机器人编程语法规范.md` |
|
||
| 实施文档目录 | `/home/meswork/kdl_work/work/working1` |
|
||
| Emscripten | `emcc 6.0.0` |
|
||
| Node.js | `v22.23.0` |
|
||
| 浏览器 | 待 Playwright 安装后记录 |
|
||
|
||
## 3. 管理证据
|
||
|
||
### EV-000:对标实施文档
|
||
|
||
关联任务:`KW-000`
|
||
对标章节:两份源文档全文
|
||
类型:文件清单
|
||
命令:
|
||
|
||
```bash
|
||
find /home/meswork/kdl_work/work/working1 -maxdepth 1 -type f -print | sort
|
||
```
|
||
|
||
预期结果:
|
||
|
||
```text
|
||
README.md
|
||
01-项目功能内容.md
|
||
02-项目程序开发详细步骤.md
|
||
03-推进台账.md
|
||
04-任务矩阵.md
|
||
05-验收证据.md
|
||
06-决策记录.md
|
||
```
|
||
|
||
结果摘要:待复核。
|
||
是否通过:待验证。
|
||
|
||
## 4. KDL WASM 证据
|
||
|
||
### EV-001:WASM 工程和 Worker RPC
|
||
|
||
关联任务:`KW-001`
|
||
对标章节:KDL 2、17、18、24
|
||
类型:构建和单元测试
|
||
命令:
|
||
|
||
```bash
|
||
cd /home/meswork/kdl_work
|
||
npm run typecheck
|
||
emcmake cmake -S kdl-wasm -B kdl-wasm/build-wasm \
|
||
-DCMAKE_BUILD_TYPE=Release \
|
||
-DKDL_SOURCE_DIR=/home/meswork/kdl_work/orocos_kinematics_dynamics/orocos_kdl
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
npm run test -- kdl rpc
|
||
node --input-type=module -e "import createKdlModule from './kdl-wasm/build-wasm/kdl.js'; const m=await createKdlModule({ locateFile: (p) => new URL('./kdl-wasm/build-wasm/' + p, import.meta.url).pathname }); const rc=m.ccall('kdl_init','number',['string'],['{}']); console.log(JSON.stringify({ rc, hasCwrap: typeof m.cwrap === 'function' }));"
|
||
```
|
||
|
||
预期产物:
|
||
|
||
```text
|
||
kdl-wasm/build-wasm/kdl.js
|
||
kdl-wasm/build-wasm/kdl.wasm
|
||
kdl-wasm/build-wasm/kdl.d.ts
|
||
```
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
cmake 3.22.1
|
||
emcmake/emcc: /home/meswork/emsdk/upstream/emscripten
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. CMake 配置和 `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
3. 产物存在:`kdl-wasm/build-wasm/kdl.js`、`kdl-wasm/build-wasm/kdl.wasm`、`kdl-wasm/build-wasm/kdl.d.ts`。
|
||
4. `npm run test -- kdl rpc` 通过,2 个测试文件共 11 个测试通过。
|
||
5. Node 动态加载 `kdl.js` 并调用 `kdl_init`,输出 `{"rc":0,"hasCwrap":true}`。
|
||
6. 当前 C ABI 在 `KW-013` 已补稳定导出、RobotHandle 生命周期和结构化错误边界;真实 FK/IK 和轨迹计算仍由 TypeScript runtime 基线承载。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-002:URDF 和 `NormalizedRobotModel`
|
||
|
||
关联任务:`KW-002`
|
||
对标章节:KDL 6、22、23、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl urdf normalized-model
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. URDF link/joint/origin/axis/limit 解析。
|
||
2. base/tip 连通性诊断。
|
||
3. activeJointNames 顺序稳定。
|
||
4. `createRobotFromModel/getRobotInfo/getJointLimits/destroyRobot`。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl urdf normalized-model` 通过,4 个测试文件共 19 个测试通过。
|
||
3. URDF 解析覆盖 link、joint、origin、axis、limit。
|
||
4. `NormalizedRobotModel` 生成 `activeJointNames`、`limits`、`source.urdfHash`。
|
||
5. base/tip 不连通、unsupported joint type 返回 `KDL_INVALID_MODEL` 结构化诊断。
|
||
6. Worker runtime 支持 `loadRobotFromUrdf/createRobotFromModel/getRobotInfo/getJointLimits/destroyRobot` 的 RobotHandle 生命周期。
|
||
7. 当前 RobotHandle 由 TypeScript registry 管理;真实 KDL `Tree/Chain` 和求解器绑定在后续 FK/IK 任务中接入。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-003:FK 和 fkAllLinks
|
||
|
||
关联任务:`KW-003`
|
||
对标章节:KDL 8.1、8.2、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl fk
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `fk` 返回 flange、tcp、joints、diagnostics。
|
||
2. `fkAllLinks` 返回 link pose 列表。
|
||
3. FK golden 数据误差在容差内。
|
||
4. 关节维度错误返回结构化诊断。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl fk` 通过,6 个测试文件共 28 个测试通过。
|
||
3. `cmake --build kdl-wasm/build-wasm -j16` 回归通过。
|
||
4. `fk` 返回 `ok/flange/tcp/joints/diagnostics`。
|
||
5. `fkAllLinks` 返回 base-to-tip link pose 顺序。
|
||
6. 覆盖零位 FK、revolute + prismatic 关节、tool TCP 偏移、link 顺序和关节维度结构化诊断。
|
||
7. 当前 FK 为 TypeScript 标准模型数值基线,真实 Orocos KDL solver 对比可在后续 WASM 求解器接入时补充 golden 对比。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-004:IK 和 ikBatch
|
||
|
||
关联任务:`KW-004`
|
||
对标章节:KDL 8.3、15、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl ik
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. IK 后 FK 回代误差小于容差。
|
||
2. `ikBatch` 顺序保持。
|
||
3. seed、多 seed、qMin/qMax、maxIterations 生效。
|
||
4. 不可达、限位、奇异、迭代失败原因稳定。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl ik` 通过,8 个测试文件共 34 个测试通过。
|
||
3. `ik` 返回 `ok/joints/iterations/residualPosition/residualOrientation/reason/diagnostics`。
|
||
4. 覆盖可达目标 IK、FK 回代误差、`ikBatch` 顺序保持、关节限位失败、unsupported model 的 `invalid_model` reason。
|
||
5. 当前 IK 为 TypeScript 基线几何求解器,支持 single-prismatic 和 Rz+Px 链;通用 6 轴迭代 IK 与真实 Orocos KDL solver 接入后继续扩展。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-005:Jacobian、奇异性和检查 API
|
||
|
||
关联任务:`KW-005`
|
||
对标章节:KDL 8.4、15、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl jacobian checks
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. Jacobian rows/cols/data 正确。
|
||
2. 奇异点 warning。
|
||
3. 关节限位、速度限位、可达性诊断。
|
||
4. 批量可达性结果与输入一一对应。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl jacobian checks` 通过,9 个测试文件共 38 个测试通过。
|
||
3. `npm test` 通过,9 个测试文件共 38 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `jacobian` 返回 `ok/rows/cols/data/diagnostics`,覆盖 6 x dof 矩阵和关键线速度分量。
|
||
6. `checkSingularity` 返回 `nearSingularity/manipulability/conditionNumber`,奇异场景返回 `KDL_SINGULARITY` warning。
|
||
7. `checkJointLimits/checkVelocityLimits` 返回 `KDL_JOINT_LIMIT/KDL_VELOCITY_LIMIT/KDL_ACCEL_LIMIT` 结构化诊断。
|
||
8. `checkReachability/checkReachabilityBatch` 基于 IK 返回可达性、关节解、残差和批量顺序。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-006:位姿变换和 offset
|
||
|
||
关联任务:`KW-006`
|
||
对标章节:KDL 7、21、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl pose offset
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `normalizePose` 处理 `pose/poseq`。
|
||
2. `composePose/inversePose` 数值正确。
|
||
3. `applyToolAndFrame` 与 GRL tool/frame 语义一致。
|
||
4. `applyOffset` 支持 frame/tool/world。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl pose offset` 通过,10 个测试文件共 43 个测试通过。
|
||
3. `npm test` 通过,10 个测试文件共 43 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `normalizePose` 支持 `position/quaternion`、`xyz/rpy`、`xyz/quat`,并规范化四元数。
|
||
6. `composePose/inversePose` 覆盖平移组合和逆变换回到 identity。
|
||
7. `applyToolAndFrame` 按当前 FK 约定执行 `frame * target.pose * tool`。
|
||
8. `applyOffset` 覆盖 `frame/world` 左乘偏移、`tool` 右乘偏移,并保留目标点元数据。
|
||
9. 非法位姿输入返回 `KDL_INVALID_POSE` 结构化诊断。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-007:梯形速度曲线
|
||
|
||
关联任务:`KW-007`
|
||
对标章节:KDL 9、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl trap-profile
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 长距离为 trapezoid。
|
||
2. 短距离为 triangle。
|
||
3. 首末采样点严格对应 `s=0` 和 `s=1`。
|
||
4. `s` 单调递增。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl trap-profile` 通过,11 个测试文件共 47 个测试通过。
|
||
3. `npm test` 通过,11 个测试文件共 47 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 长距离场景生成 trapezoid,覆盖 `tAccel/tConst/tDecel/duration/vPeak`。
|
||
6. 短距离场景自动退化为 triangle,并输出 `KDL_TRAP_TRIANGLE_PROFILE` info 诊断。
|
||
7. `makeTrapProfile` 返回完整 profile 和 samples,`sampleTrapProfile` 返回同一采样规则下的 samples。
|
||
8. 首末采样点严格对应 `s=0` 和 `s=1`,采样时间和 `s` 单调递增。
|
||
9. 非法输入返回 `KDL_INVALID_TRAP_PROFILE` 结构化诊断。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-008:MOVEJ 轨迹
|
||
|
||
关联任务:`KW-008`
|
||
对标章节:KDL 11、21、22、23
|
||
类型:运动测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl movej planMoveJ
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 关节同起同停。
|
||
2. `joint_target` 和 `pose_target` 两类目标。
|
||
3. FK 输出 TCP。
|
||
4. 限位、速度、加速度、奇异性诊断。
|
||
5. 非 fine zone 返回 `KDL_ZONE_APPROX_FINE`。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl movej planMoveJ` 通过,12 个测试文件共 51 个测试通过。
|
||
3. `npm test` 通过,12 个测试文件共 51 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `planMoveJ` 支持 `joint_target` 直接规划和 `pose_target` IK 求终点关节。
|
||
6. 轨迹点输出 `time/dt/s/sd/sdd/joints/jointVelocity/jointAcceleration/flange/tcp`。
|
||
7. 使用梯形速度曲线生成关节同步轨迹,首末点速度归零。
|
||
8. 终点关节限位失败返回 `TrajectoryResult.ok=false` 和 `KDL_JOINT_LIMIT`。
|
||
9. 速度、加速度保持在 joint limits 内;非 fine zone 返回 `KDL_ZONE_APPROX_FINE` warning;采样点奇异性返回 `KDL_SINGULARITY` warning。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-009:MOVEL 轨迹
|
||
|
||
关联任务:`KW-009`
|
||
对标章节:KDL 12、21、22、23
|
||
类型:运动测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl movel planMoveL
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 起点 FK。
|
||
2. 目标 tool/frame/offset。
|
||
3. TCP 直线误差。
|
||
4. 逐点 IK 连续。
|
||
5. 速度、加速度、姿态误差和配置突变诊断。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl movel planMoveL` 通过,13 个测试文件共 54 个测试通过。
|
||
3. `npm test` 通过,13 个测试文件共 54 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `planMoveL` 使用起点 FK 得到 TCP 起点,按 TCP 直线生成采样 pose。
|
||
6. 每个采样点逐点 IK,seed 使用上一采样点关节解。
|
||
7. 轨迹点输出 `MOVEL` 的 `joints/jointVelocity/jointAcceleration/flange/tcp`。
|
||
8. 可达直线测试覆盖 TCP 直线误差和终点 TCP;不可达采样点返回 `TrajectoryResult.ok=false` 和 `KDL_JOINT_LIMIT`。
|
||
9. 非 linear speed 返回 `KDL_MOVEL_JOINT_SPEED_APPROX` warning;非 fine zone 返回 `KDL_ZONE_APPROX_FINE` warning。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-010:MOVEC 轨迹
|
||
|
||
关联任务:`KW-010`
|
||
对标章节:KDL 13、21、22、23
|
||
类型:运动测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl movec planMoveC
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 圆心、半径、法向、角度、弧长正确。
|
||
2. `TrajectoryResult.meta.circle` 包含 `CirclePlanMeta`。
|
||
3. 三点共线返回 `KDL_ARC_DEGENERATE`。
|
||
4. 逐点 IK 和圆弧误差诊断。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl movec planMoveC` 通过,14 个测试文件共 57 个测试通过。
|
||
3. `npm test` 通过,14 个测试文件共 57 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `planMoveC` 基于起点 TCP、via、target 三点计算圆心、半径、法向、角度和弧长。
|
||
6. `TrajectoryResult.meta.circle` 包含 `center/radius/normal/angle/length/direction/maxArcError`。
|
||
7. 圆弧采样逐点 IK,seed 使用上一采样点关节解。
|
||
8. 三点重合或共线返回 `TrajectoryResult.ok=false` 和 `KDL_ARC_DEGENERATE`。
|
||
9. 非 linear speed 返回 `KDL_MOVEC_JOINT_SPEED_APPROX` warning;非 fine zone 返回 `KDL_ZONE_APPROX_FINE` warning。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-011:Path 规划和验证
|
||
|
||
关联任务:`KW-011`
|
||
对标章节:KDL 14、15、21、22、23
|
||
类型:集成测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl path validation
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `planPath` 多段轨迹合并。
|
||
2. `validatePath` 返回 `PathValidationResult`。
|
||
3. 空路径返回 `KDL_PATH_EMPTY`。
|
||
4. segmentId、targetId、sourceMap 保留。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl path validation` 通过,15 个测试文件共 60 个测试通过。
|
||
3. `npm test` 通过,15 个测试文件共 60 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `PathPlanRequest/MotionSegmentRequest/PathPlanResult/PathValidationResult` 已从占位类型改为明确结构。
|
||
6. `planPath` 按段调用 `planMoveJ/planMoveL/planMoveC`,并用上一段终点关节作为下一段起点。
|
||
7. 合并轨迹点重新编号并更新时间,保留 `segmentId/targetId/sourceMap`。
|
||
8. `validatePath` 返回 `segmentReports`、`cycleTime`、速度/加速度比例和诊断。
|
||
9. 空路径返回 `TrajectoryResult.ok=false` 风格的 `KDL_PATH_EMPTY` 诊断。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-012:节拍估算、重采样和诊断
|
||
|
||
关联任务:`KW-012`
|
||
对标章节:KDL 16、19、20、22、23
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- kdl cycle-time resample diagnostics
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `estimateCycleTime` 只计算运动时间。
|
||
2. `resampleTrajectory` 时间和点序稳定。
|
||
3. error/warning/info 分级正确。
|
||
4. KDL API 不抛裸字符串错误。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- kdl cycle-time resample diagnostics` 通过,16 个测试文件共 63 个测试通过。
|
||
3. `npm test` 通过,16 个测试文件共 63 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `estimateCycleTime` 支持单段 `TrajectoryResult` 和多段 `PathPlanResult`,当前只统计 KDL 运动时间,`waitTime/ioTime` 保留为 0。
|
||
6. `resampleTrajectory` 按固定 `sampleTime` 重采样,首末点保持稳定,时间单调并重新编号。
|
||
7. 重采样对关节、速度、加速度、flange 和 tcp 位置做线性插值,并输出 `KDL_TRAJECTORY_RESAMPLED` info。
|
||
8. 空轨迹重采样返回 `KDL_RESAMPLE_EMPTY_TRAJECTORY` warning;非法采样时间抛出 `KDL_INVALID_SAMPLE_TIME` 结构化错误。
|
||
9. Path 段级 points 也保留 `segmentId/sourceMap`,便于节拍估算和诊断报告定位。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-013:C ABI、Embind 和性能
|
||
|
||
关联任务:`KW-013`
|
||
对标章节:KDL 18、19、24
|
||
类型:构建、性能报告
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
npm run test -- kdl c-abi performance
|
||
npm test
|
||
```
|
||
|
||
指标:
|
||
|
||
| 指标 | 结果 |
|
||
| --- | --- |
|
||
| 单机器人 6 轴初始化 | 3.536 ms,目标 < 1000 ms |
|
||
| 单次 FK | `fkPose7` TypedArray 平均 0.019288 ms,目标 < 1 ms |
|
||
| 单次 IK | 平面 Rz+Px IK 平均 0.010930 ms,目标 < 10 ms |
|
||
| 1000 个目标点批量可达性 | 7.166 ms,目标 < 500 ms |
|
||
| 10 秒轨迹 4 ms 采样 | 2526 点,48.864 ms,目标 < 500 ms |
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
Emscripten emcc 6.0.0
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
3. `npm run test -- kdl c-abi performance` 通过,18 个测试文件共 68 个测试通过。
|
||
4. `npm test` 通过,18 个测试文件共 70 个测试通过。
|
||
5. C ABI 稳定导出 `kdl_init/create_robot/destroy_robot/get_robot_info/fk/fk_all_links/jacobian/ik/plan_movej/plan_movel/plan_movec/plan_path/sample_trap/last_error`。
|
||
6. C++ ABI 现支持 `kdl_create_robot/kdl_destroy_robot/kdl_get_robot_info` 的 handle 生命周期和 JSON 输出。
|
||
7. C ABI 失败统一通过 `kdl_last_error` 返回结构化 `code/message/diagnostics`,覆盖 `KDL_NOT_IMPLEMENTED` 和 `KDL_BUFFER_TOO_SMALL`。
|
||
8. 新增 `KdlNativeAbi` 封装 C ABI 导出检查、缓冲区读取、返回码检查和错误归一化。
|
||
9. 新增 `fkPose7` TypedArray 高频 FK 接口,支持复用输出缓冲区并覆盖输出维度错误。
|
||
10. 性能基线已记录 6 轴初始化、TypedArray FK、平面 IK、1000 点批量可达性和 10 秒 4 ms 轨迹采样。
|
||
11. 真实通用 6 轴 IK/轨迹求解仍按当前 TypeScript baseline 能力覆盖;后续接入 Orocos KDL solver 时复用本轮 ABI 和性能测试作为回归基线。
|
||
|
||
是否通过:通过。
|
||
|
||
## 5. GRL 证据
|
||
|
||
### EV-100:Lexer、单位和关键字
|
||
|
||
关联任务:`KW-100`
|
||
对标章节:GRL 4、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl lexer units
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 注释、标识符、字符串、数字。
|
||
2. 保留关键字表。
|
||
3. 长度、角度、时间、质量、速度、加速度单位规范化。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl lexer` 通过,1 个测试文件 5 个测试通过。
|
||
3. Lexer 覆盖单行/多行注释、关键字、标识符、字符串、数字、source range 和 EOF token。
|
||
4. 关键字表覆盖 GRL 规范第 4.5 节 85 个保留关键字。
|
||
5. 单位规范化覆盖 `mm/m/deg/rad/mm/s/%/ms/kg/mm/s2`,`100 mm -> 0.1 m`、`180 deg -> pi rad`、`300 mm/s -> 0.3 m/s` 通过。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-101:Parser 和 AST
|
||
|
||
关联任务:`KW-101`
|
||
对标章节:GRL 5、22、23、24
|
||
类型:parser 测试和 snapshot
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl parser ast
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 最小文件解析。
|
||
2. 第 23 章完整示例解析。
|
||
3. AST source range、注释、单位原文、metadata。
|
||
4. 非法语法行列号。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl parser ast` 通过,2 个测试文件共 8 个测试通过。
|
||
3. 最小文件 `language grl 0.1 / module / proc / end` 可解析。
|
||
4. AST 保留 `LanguageDeclaration`、`ModuleDeclaration`、`ImportDeclaration`、`ProcedureDeclaration` 和 source range。
|
||
5. 顶层 `const/target/path/operation/func/trap/task/post_hint` 当前保留为 RawTopLevelDeclaration,后续 KW-102 到 KW-109 逐步细化。
|
||
6. 非法语法错误行列号稳定。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-102:类型、数据声明和目标点
|
||
|
||
关联任务:`KW-102`
|
||
对标章节:GRL 6、7、8、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl types declarations targets
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `const/var/persistent`。
|
||
2. `tool/frame/load`。
|
||
3. `joint_target/pose_target`。
|
||
4. `pose/poseq/robot_config/ext_axis`。
|
||
5. `speed/zone/offset/offset_in` 编译为共享结构。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl types declarations targets` 通过,3 个测试文件共 12 个测试通过。
|
||
3. Parser 结构化输出 `DataDeclaration`、`TargetDeclaration`、表达式 AST、对象表达式、数组、调用和 offset 表达式。
|
||
4. `tool/frame` 可编译为包含 TCP/origin 的共享结构。
|
||
5. `joint_target/pose_target` 可编译为 `JointTarget/PoseTarget`,单位规范化为 SI。
|
||
6. `speed/zone` 可编译为 `SpeedSpec/ZoneSpec`。
|
||
7. `offset/offset_in tool` 可编译为 `OffsetSpec`。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-103:运动指令
|
||
|
||
关联任务:`KW-103`
|
||
对标章节:GRL 9、20、21、24;KDL 21
|
||
类型:单元测试、集成测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl motion
|
||
npm test
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `movej/movel/movec` AST。
|
||
2. tool/frame/speed/zone 参数优先级。
|
||
3. MotionInstruction。
|
||
4. KDL `MoveJRequest/MoveLRequest/MoveCRequest`。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl motion` 通过,4 个测试文件共 14 个测试通过。
|
||
3. `npm test` 通过,8 个测试文件共 34 个测试通过。
|
||
4. `movej/movel/movec` 可从 `proc` body token 编译为 `MotionInstruction`。
|
||
5. 当前 `set_tool/set_frame/set_speed/set_zone` 可作为运行上下文默认值。
|
||
6. 显式 motion 参数优先于当前上下文。
|
||
7. `MotionInstruction` 可编译为 `MoveJRequest/MoveLRequest/MoveCRequest`,包含 startJoints、target/via、speed、zone、tool、frame、sampleTime、sourceMap。
|
||
8. 预留命令 `npm run test -- integration grl-kdl-motion` 当前无独立测试文件,集成点由 `grl motion` 和全量测试覆盖。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-104:Path 和 `run_path`
|
||
|
||
关联任务:`KW-104`
|
||
对标章节:GRL 10、18、20、21、24;KDL 14、21
|
||
类型:单元测试、集成测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl path run_path event
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `defaults/source/point/event`。
|
||
2. 空 Path、重复点名诊断。
|
||
3. `run_path` 编译为 `PathPlanRequest`。
|
||
4. source map 到 path point。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl path run_path event` 通过,6 个测试文件共 22 个测试通过。
|
||
3. `npm test` 通过,19 个测试文件共 75 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. Parser 将 `path` 从 raw declaration 提升为 `PathDeclaration`,覆盖 `defaults/source/point/event before/after/at distance`。
|
||
6. Path defaults 支持 tool、frame、speed、zone,并按高于当前控制器上下文的优先级应用到 point motion。
|
||
7. Source metadata 编译为 `PathPlanRequest.source`,数值单位规范化,例如 `5 mm -> 0.005`。
|
||
8. Path point 编译为 `MotionSegmentRequest`,保留 point id、targetId、sourceMap 和 source metadata。
|
||
9. `run_path` 从 procedure body token 编译为 `RunPathInstruction`,保留 sourceMap。
|
||
10. Event 当前编译为 `PathEventRequest` metadata,保留 timing、pointId、distance、kind、statement 和 sourceMap;具体 IO/Wait/Pulse IR 在 `KW-106` 展开。
|
||
11. 空 Path 返回 `GRL_PATH_EMPTY`,重复 point 返回 `GRL_PATH_POINT_DUPLICATE`,event 引用缺失 point 返回 `GRL_PATH_EVENT_POINT_NOT_FOUND`。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-105:Operation 和 `run_operation`
|
||
|
||
关联任务:`KW-105`
|
||
对标章节:GRL 11、20、21、24;KDL 14
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl operation run_operation
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. `operation kind/path/process/start_action/end_action`。
|
||
2. Operation 引用不存在 Path 报错。
|
||
3. `run_operation` 展开后 KDL 只处理 motion segment。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl operation run_operation` 通过,6 个测试文件共 23 个测试通过。
|
||
3. `npm test` 通过,20 个测试文件共 79 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. Parser 将 `operation` 从 raw declaration 提升为 `OperationDeclaration`,覆盖 `kind/path/process/start_action/end_action`。
|
||
6. `compileOperation` 验证 operation 引用的 path 存在,缺失时报 `GRL_OPERATION_PATH_NOT_FOUND`。
|
||
7. Process 参数编译为 metadata,保留数值、字符串和 identifier。
|
||
8. start/end action 编译为 `OperationActionInstruction` metadata,保留 actionKind、operationId、statement、sourceMap。
|
||
9. `parseProcedureRunOperationStatements` 从 procedure body token 提取 `run_operation` 并保留 sourceMap。
|
||
10. `expandRunOperation` 展开为 start action、`RUN_PATH`、end action;缺失 operation 报 `GRL_OPERATION_NOT_FOUND`。
|
||
11. KDL 仍只接收 Path 展开后的 motion segment;operation action 的 IO/Wait/Pulse 语义在 `KW-106` 继续展开。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-106:IO、wait 和 pulse
|
||
|
||
关联任务:`KW-106`
|
||
对标章节:GRL 12、20、21、24;KDL 21.1
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl io wait pulse
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. IO 地址和别名。
|
||
2. wait 条件、timeout、on_timeout。
|
||
3. all/any/rising/falling/changed。
|
||
4. pulse IR。
|
||
5. IO/wait/pulse 不直接调用 KDL。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl io wait pulse` 通过,7 个测试文件共 28 个测试通过。
|
||
3. `npm test` 通过,21 个测试文件共 84 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 新增 `IoWriteInstruction/WaitInstruction/PulseInstruction/IoFlowInstruction`,覆盖 IO 写入、等待和脉冲 IR。
|
||
6. `parseIoFlowStatements` 支持 `io.di/do/ai/ao/gi/go/ri/ro`、`io.alias.*`、IO map 范围校验和 `GRL_IO_ADDRESS_NOT_FOUND`。
|
||
7. `wait` 支持条件字符串、`timeout`、`on_timeout alarm/call`,并覆盖 `all/any/rising/falling/changed` 条件表达。
|
||
8. `pulse` 生成 set/reset trace,单位归一化保留到秒。
|
||
9. `compilePathEventIo` 和 `compileOperationActionIo` 可将 Path event / Operation action metadata 展开为 IO/wait/pulse IR。
|
||
10. Path/Operation action token 原样保留,statement fallback 使用 GRL lexer,确保 `true/false` 和 `ms/s` 单位类型正确。
|
||
11. KDL 边界保持不变:IO/wait/pulse 不进入 KDL motion segment 或 wasm 运动规划。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-107:流程控制
|
||
|
||
关联任务:`KW-107`
|
||
对标章节:GRL 13、20、21、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl control-flow
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. if/elseif/else。
|
||
2. while/for/switch。
|
||
3. break/continue 合法性。
|
||
4. label/jump 规则。
|
||
5. jump 进入非法块结构诊断。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl control-flow` 通过,8 个测试文件共 33 个测试通过。
|
||
3. `npm test` 通过,22 个测试文件共 89 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 新增流程控制 IR:`IfInstruction/WhileInstruction/ForInstruction/SwitchInstruction/BreakInstruction/ContinueInstruction/LabelInstruction/JumpInstruction`。
|
||
6. `parseProcedureControlFlow` 从 procedure body token 编译结构化流程控制树。
|
||
7. `if/elseif/else`、`while`、`for`、`switch/case/default` 均保留 sourceMap、条件/表达式文本和原始 token。
|
||
8. 条件表达式做 P0 bool 检查,明显数值/字符串条件报 `GRL_CONTROL_CONDITION_NOT_BOOL`。
|
||
9. `break/continue` 做位置合法性检查,非法位置分别报 `GRL_BREAK_OUTSIDE_FLOW` 和 `GRL_CONTINUE_OUTSIDE_LOOP`。
|
||
10. switch case 要求常量表达式,重复 case/default 会报结构化错误。
|
||
11. label/jump 做重复、缺失和跳入内层块检查,覆盖 `GRL_LABEL_DUPLICATE`、`GRL_LABEL_NOT_FOUND`、`GRL_JUMP_INTO_BLOCK`。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-108:proc、func、参数方向和作用域
|
||
|
||
关联任务:`KW-108`
|
||
对标章节:GRL 14、20、21、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl proc func scope
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. proc/call/return。
|
||
2. func 返回路径。
|
||
3. in/out/inout。
|
||
4. out 所有正常返回路径赋值。
|
||
5. func 非法副作用诊断。
|
||
6. 名称解析和遮蔽 warning。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl proc func scope` 通过,9 个测试文件共 39 个测试通过。
|
||
3. `npm test` 通过,23 个测试文件共 95 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. `func` 从 raw top-level declaration 提升为结构化 `FunctionDeclaration`。
|
||
6. 新增 procedure/function signature IR,支持 `in/out/inout` 参数方向。
|
||
7. `analyzeProcFunctionSemantics` 建立 proc/func 签名表,解析 `call` 和 `return`。
|
||
8. `out/inout` 实参必须为左值,参数数量和基础类型不匹配会返回结构化错误。
|
||
9. `out` 参数做正常返回路径赋值检查,支持通过 `call` 写入 out/inout 实参。
|
||
10. `func` 检查缺失返回、返回类型不兼容、proc return value 非法。
|
||
11. `func` 默认禁止运动、wait、pulse、run_path、run_operation 和调用 proc。
|
||
12. 名称遮蔽和自递归以 warning diagnostic 返回。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-109:异常、报警、中断和多任务语法
|
||
|
||
关联任务:`KW-109`
|
||
对标章节:GRL 15、16、24
|
||
类型:单元测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl alarm interrupt task
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. alarm/raise。
|
||
2. try/catch/finally。
|
||
3. trap/interrupt 语法。
|
||
4. task cycle 语法。
|
||
5. P1 未实现语义有明确诊断。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl alarm interrupt task` 通过,10 个测试文件共 43 个测试通过。
|
||
3. `npm test` 通过,24 个测试文件共 99 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 新增异常/报警 IR:`AlarmInstruction/RaiseInstruction/TryInstruction/CatchInstruction/FinallyInstruction/UnsupportedRuntimeInstruction`。
|
||
6. `parseProcedureExceptionFlow` 支持 `alarm`、`raise`、`try/catch/finally`。
|
||
7. `alarm` 保留 alarm id、message、severity 和 sourceMap。
|
||
8. `try` 要求至少一个 `catch` 或 `finally`,否则报 `GRL_TRY_HANDLER_MISSING`。
|
||
9. `trap` 和 `task ... cycle ... end` 保持为 raw top-level declaration,AST 可表达完整 token block。
|
||
10. `analyzeExceptionSemantics` 对 P1 的 trap/task 返回 `UNSUPPORTED_RUNTIME` 并输出 `GRL_P1_UNIMPLEMENTED` warning diagnostic。
|
||
11. procedure body 内 `enable/disable interrupt` 编译为 `UNSUPPORTED_RUNTIME`,明确标识 P0 不执行。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-110:语义检查、IR 和 source map
|
||
|
||
关联任务:`KW-110`
|
||
对标章节:GRL 20、21、24;KDL 21
|
||
类型:语义测试、IR snapshot
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- grl semantic ir sourcemap
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 语法规范第 21 章 22 项检查覆盖。
|
||
2. Executable IR。
|
||
3. Motion IR 到 KDL request。
|
||
4. source map 定位 GRL、Path、Operation。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- grl semantic ir sourcemap` 通过,11 个测试文件共 46 个测试通过。
|
||
3. `npm test` 通过,25 个测试文件共 102 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 新增 `compileSemanticProgram` 统一语义入口,组合数据、target、path、operation、proc/func、IO、流程控制、异常/报警语义。
|
||
6. 新增 `SemanticProgramIr`,包含 `symbols/semanticChecks/procedures/paths/operations/diagnostics/sourceMap/kdlBridge`。
|
||
7. `semanticChecks` 覆盖 22 项检查清单,用于对齐 GRL 第 21 章 P0 语义检查面。
|
||
8. Executable IR 支持 Motion、IO、Wait、Pulse、RunPath、RunOperation、Call、Return、Branch、Alarm、UnsupportedRuntime。
|
||
9. `kdlBridge.motionRequests` 可从 executable motion 映射到 KDL request,`kdlBridge.pathRequests` 保留 PathPlanRequest。
|
||
10. source map 聚合 GRL procedure 行列、path point/event、operation action。
|
||
11. 修正 motion 语句参数解析的跨行边界,避免 `movej ... zone fine` 吞掉下一行 IO/wait/control token。
|
||
12. 重复符号通过 semantic diagnostic 返回 `GRL_SYMBOL_DUPLICATE`。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-111:三品牌后处理原型
|
||
|
||
关联任务:`KW-111`
|
||
对标章节:GRL 17、19、24
|
||
类型:golden file 测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run typecheck
|
||
npm run test -- post abb fanuc kuka
|
||
npm test
|
||
cmake --build kdl-wasm/build-wasm -j16
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. ABB RAPID。
|
||
2. FANUC LS/TP 风格。
|
||
3. KUKA KRL。
|
||
4. post_hint。
|
||
5. brand metadata。
|
||
6. 不支持语义转换报告。
|
||
|
||
执行环境:
|
||
|
||
```text
|
||
Node.js v22.23.0
|
||
npm 10.9.8
|
||
Vitest 3.2.6
|
||
```
|
||
|
||
结果摘要:
|
||
|
||
1. `npm run typecheck` 通过。
|
||
2. `npm run test -- post abb fanuc kuka` 通过,1 个测试文件共 2 个测试通过。
|
||
3. `npm test` 通过,26 个测试文件共 104 个测试通过。
|
||
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
|
||
5. 新增 `postProcessBrand/postProcessAllBrands`,以 `SemanticProgramIr` 为后处理输入。
|
||
6. ABB RAPID 原型输出 `MoveJ/MoveL/MoveC/SetDO/WaitUntil/PulseDO`。
|
||
7. FANUC LS/TP 风格原型输出 `/PROG`、`J/L/C`、`DO/WAIT/PULSE`。
|
||
8. KUKA KRL 原型输出 `DEF`、`PTP/LIN/CIRC`、`$OUT/WAIT FOR/PULSE`。
|
||
9. speed/zone 映射覆盖 joint percent、linear mm/s、fine、distance zone。
|
||
10. `post_hint abb` 对 ABB 生效,对 FANUC/KUKA 输出 `GRL_POST_HINT_IGNORED` report。
|
||
11. 不支持语义进入转换报告,测试覆盖 `ALARM` 的 `GRL_POST_UNSUPPORTED`。
|
||
|
||
是否通过:通过。
|
||
|
||
### EV-112:自动生成规则和往返
|
||
|
||
关联任务:`KW-112`
|
||
对标章节:GRL 18、24
|
||
类型:生成器测试、往返测试
|
||
命令:
|
||
|
||
```bash
|
||
npm run test -- grl generator roundtrip
|
||
```
|
||
|
||
验证点:
|
||
|
||
1. 优先生成 target/path/operation。
|
||
2. 点名稳定。
|
||
3. defaults 和单点 override 稳定。
|
||
4. source metadata 保留。
|
||
5. compact/expanded 输出。
|
||
6. 生成后可再解析为等价对象和 IR。
|
||
|
||
结果摘要:待执行。
|
||
是否通过:待验证。
|