Files
KDL_WORK/working/05-验收证据.md
2026-06-28 08:20:33 +08:00

1413 lines
47 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 05-验收证据
版本0.5
日期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/doc/通用机器人离线编程虚拟控制器技术方案.md` |
| 实施步骤对标文档 | `/home/meswork/kdl_work/work/doc/通用机器人项目主要实施步骤.md` |
| 数据流程对标文档 | `/home/meswork/kdl_work/work/doc/通用机器人项目功能与数据流程图.md` |
| 流程图资产目录 | `/home/meswork/kdl_work/work/doc/通用机器人项目功能与数据流程图-png` |
| 实施文档目录 | `/home/meswork/kdl_work/working` |
| Emscripten | `emcc 6.0.0` |
| Node.js | `v22.23.0` |
| 浏览器 | 待 Playwright 安装后记录 |
## 3. 管理证据
### EV-000对标实施文档
关联任务:`KW-000`
对标章节:`/home/meswork/kdl_work/work` 全部文档资产
类型:文件清单
命令:
```bash
find /home/meswork/kdl_work/work -maxdepth 3 -type f -print | sort
find /home/meswork/kdl_work/working -maxdepth 1 -type f -print | sort
```
预期结果:
```text
README.md
01-项目功能内容.md
02-项目程序开发详细步骤.md
03-推进台账.md
04-任务矩阵.md
05-验收证据.md
06-决策记录.md
```
结果摘要:实际 `/work` 文件清单包含 5 份 Markdown、5 份 Mermaid `.mmd` 流程图源码和 5 份 PNG 流程图渲染资产;`working` 文件清单包含 `README.md``01-项目功能内容.md``02-项目程序开发详细步骤.md``03-推进台账.md``04-任务矩阵.md``05-验收证据.md``06-决策记录.md`,与预期一致。
是否通过:通过。
### EV-200`work/doc` Markdown 对标任务入库
关联任务:`KW-000``KW-200``KW-208`
对标章节VC 2、3、6、7、9、10、11、12、13、15、16、17、18STEP 1 到 15FLOW 1 到 10
类型:文档审查、任务矩阵一致性检查
命令:
```bash
cd /home/meswork/kdl_work
find work/doc -maxdepth 1 -type f -name '*.md' -print | sort
rg -n 'KW-20[0-8]' working/02-项目程序开发详细步骤.md working/04-任务矩阵.md
rg -n '虚拟控制器|OPFS|品牌程序导入|客户交付包|IO 脚本|Wait 调试|OLP 对象模型' working
```
结果摘要:
1. `/home/meswork/kdl_work/work/doc` 下 5 份 Markdown 源文档已纳入 `working` 文档依据。
2. `KW-200``KW-208` 已加入开发步骤和任务矩阵,覆盖 OLP 对象模型、OPFS、虚拟控制器、Motion Queue、IO/Wait、工作台、报告、品牌导入、几何/碰撞/校准和客户交付包。
3. `KW-200``KW-208` 已加入开发步骤和任务矩阵,并在后续实现证据 `EV-202``EV-205` 中闭合。
4. `01-项目功能内容.md` 已补充虚拟控制器、IO、工作区、UI、报告、品牌导入、数据流和线程模型范围。
5. `06-决策记录.md` 已调整为 `work/doc` 全目录对标,并记录新增主线的边界决策。
是否通过:通过。
### EV-201`work` 全部文档资产覆盖入库
关联任务:`KW-000``KW-209``KW-211`
对标章节VC 7、11、12、13、14、15、16、18、20FLOW 2、3、4、5、9、10`flow-01``flow-05`
类型:文件资产清单、流程图覆盖检查
命令:
```bash
cd /home/meswork/kdl_work
find work -maxdepth 3 -type f -print | sort
find work/doc/通用机器人项目功能与数据流程图-png -maxdepth 1 -type f -printf '%f %s bytes\n' | sort
rg -n 'KW-20[9]|KW-210|KW-211' working/01-项目功能内容.md working/02-项目程序开发详细步骤.md working/04-任务矩阵.md
rg -n 'flow-01|flow-02|flow-03|flow-04|flow-05|流程图资产' working
```
结果摘要:
1. `/home/meswork/kdl_work/work` 下全部文档资产已纳入范围5 份 Markdown、5 份 `.mmd`、5 份 `.png`
2. `flow-01` 对应总体功能流程,映射到 `KW-211.1`
3. `flow-02` 对应 GRL 编译执行流程,映射到 `KW-211.2`
4. `flow-03` 对应 KDL 计算流程,映射到 `KW-211.3`
5. `flow-04` 对应 Project/Compile/KDL/Runtime/Output 数据传递流程,映射到 `KW-211.4`
6. `flow-05` 对应诊断 severity/sourceMap 传递流程,映射到 `KW-211.5`
7. `KW-209``KW-210` 补齐虚拟调试增强、多机器人、外部轴和真实控制器校验扩展,避免商业级功能被 MVP 边界遗漏。
是否通过:通过;`KW-209``KW-211` 的实现验收见 `EV-203``EV-202``EV-211`
### EV-202OLP 对象模型、Workspace、几何和校准
关联任务:`KW-200``KW-201``KW-208``KW-210`
对标章节VC 2.3、2.4、3.1、4.4、6.5、9、12、15、16、17、18FLOW 2、5
类型:单元测试、模型序列化、导入导出测试
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm run test -- olp workspace
npm test
```
结果摘要:
1. `OlpProjectModel` 覆盖 Station、Resource、Robot、Tool、Frame、Target、Path、Operation、Program、PostProfile、Report、Geometry、Calibration、ExternalAxis、MotionGroup 和 ProcessTemplate。
2. `pathOperationToGrl` 可从 Path/Operation 稳定生成 GRL并可进入 parser、semantic IR 和三品牌后处理链路。
3. JSON patch 可把品牌导入恢复出的 target/path/program 应用到 OLP 模型。
4. Workspace 提供 OPFS-like async storage、`project.json` manifest、文本/JSON 读写删除、snapshot/restore、migration、损坏检测和稳定 bundle 导入导出。
5. 几何点/边/曲线可生成 Path基础碰撞可定位 path point/timeTCP/Frame/Base/ExternalAxis 校准数据可保存和应用。
6. 多机器人、外部轴和运动组进入 schema 与验证报告边界。
是否通过:通过。
### EV-203虚拟控制器、Motion Queue、IO/Wait 和工作台 facade
关联任务:`KW-202``KW-203``KW-204``KW-205``KW-209`
对标章节VC 3、5.8、7.1、7.2、7.3、7.4、7.6、8.12、11、12、13、15、16FLOW 2、3、5、8、9
类型:运行时单元测试、调试 facade 测试
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm run test -- controller runtime workbench
npm test
```
结果摘要:
1. 虚拟控制器状态机覆盖 load/run/pause/stop/reset/step/hold 和非法转换诊断。
2. IR 执行内核暴露 PC、调用栈、作用域、报警队列、trace buffer、source map 和单步运行。
3. Motion Queue 保留 instruction/path/operation/action 来源KDL bridge 可展开 `run_path/run_operation` 并按虚拟时间采样回放。
4. IO Runtime 覆盖写入权限、事件记录、wait satisfied/waiting/timeout/on_timeout hold-stop、pulse 自动复位、rising/falling/changed 和 delayed IO script。
5. Workbench facade 第一屏为工程工作台对象树编辑器、示教器、IO 面板、报告入口、变量 watch、断点、运动断点、trace replay 和跨源定位可用。
是否通过:通过。
### EV-204验证报告、HTML 报告和客户交付包
关联任务:`KW-206`
对标章节VC 2.4.6、9.6、13.4.1、15、16FLOW 5、9、10
类型:报告 schema 测试、HTML 导出测试、交付包测试
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm run test -- reports
npm test
```
结果摘要:
1. 验证报告模型覆盖 reachability、cycle_time、io_wait、post、import、collision、calibration sections。
2. HTML 报告包含摘要、明细、diagnostics 和 source map JSON payload。
3. 客户交付包包含 project JSON、源 GRL、品牌程序、IO map、报告 JSON/HTML、校准数据和可选 trace并生成稳定 checksum。
是否通过:通过。
### EV-205三品牌程序导入 MVP
关联任务:`KW-207`
对标章节VC 6.6、6.6.1、6.6.2、7.4.2、10.6、12、13.6、15、16
类型golden case 导入测试
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm run test -- importers
npm test
```
结果摘要:
1. ABB RAPID `.mod/.sys` 风格文本导入覆盖 `robtarget/jointtarget/MoveJ/MoveL/MoveC/tooldata`
2. KUKA KRL `.src/.dat` 导入覆盖 `E6POS/E6AXIS/PTP/LIN/CIRC/$TOOL/$BASE`
3. FANUC LS 导入覆盖 `J/L/C/P[]/PR[]` 位置和圆弧运动。
4. 导入结果生成 OLP patch、GRL、Semantic IR、import report并可进入三品牌后处理链路。
是否通过:通过。
### EV-211流程图资产覆盖和同步检查实现
关联任务:`KW-211`
对标章节FLOW 2、3、4、5、9、10`flow-01``flow-05`
类型:流程图资产自动检查
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm run test -- flowAssetCoverage
npm test
```
结果摘要:
1. `validateFlowAssetCoverage` 检查 `flow-01.mmd``flow-05.mmd` 和对应 PNG 是否存在且非空。
2. 每张图映射到章节、任务编号和 `EV-211`
3. 检查覆盖总体功能流程、GRL 编译执行流程、KDL 计算流程、数据传递流程和诊断传递流程的关键术语。
是否通过:通过。
### EV-999`working` 全量任务收口验证
关联任务:`KW-000``KW-001``KW-013``KW-100``KW-112``KW-200``KW-211`
对标章节:`/home/meswork/kdl_work/work` 全部文档资产总体验收
类型:全量回归、文档一致性检查
命令:
```bash
cd /home/meswork/kdl_work
npm run typecheck
npm test
cmake --build kdl-wasm/build-wasm -j16
rg -n 'work[i]ng1|work/work[i]ng1|/home/meswork/kdl_work/work/work[i]ng1' working
```
执行环境:
```text
Node.js v22.23.0
npm 10.9.8
Vitest 3.2.6
cmake 3.22.1
Emscripten emcc 6.0.0
```
结果摘要:
1. `npm run typecheck` 通过。
2. `npm test` 通过38 个测试文件共 146 个测试通过。
3. `cmake --build kdl-wasm/build-wasm -j16` 通过。
4. `working` 文档中旧实施目录路径已清理。
5. 任务矩阵中 `KW-001``KW-013``KW-100``KW-112``KW-200``KW-211` 均为 `Done`
6. 当前 `/work` 全目录对标范围全部有对应实现、测试证据或明确的非 MVP 边界说明。
7. 本轮最终全量回归通过38 个测试文件共 146 个测试通过。
是否通过:通过。
## 4. KDL WASM 证据
### EV-001WASM 工程和 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 生命周期和结构化错误边界;轮次 024/025 已进一步接入 native KDL Chain、FK、fkAllLinks、Jacobian、IK 和 sampleTrap高层轨迹规划仍由 TypeScript runtime 基线承载。
是否通过:通过。
### EV-002URDF 和 `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. Worker runtime 当前仍由 TypeScript registry 管理 RobotHandleC ABI 已可根据同一 `NormalizedRobotModel` 构造 native KDL Chain 并执行 FK、fkAllLinks、Jacobian、IK 和 sampleTrap。
是否通过:通过。
### EV-003FK 和 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. Worker `fk/fkAllLinks` 当前为 TypeScript 标准模型数值基线C ABI 已补 native `kdl_fk` pose7 golden 测试和 `kdl_fk_all_links` JSON link pose 顺序测试。
是否通过:通过。
### EV-004IK 和 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. Worker IK 当前为 TypeScript 基线几何求解器,支持 single-prismatic 和 Rz+Px 链C ABI 已补 native Orocos KDL `ChainIkSolverPos_LMA` IK 回代测试,后续可继续把 Worker IK 路由切到 native solver。
是否通过:通过。
### EV-005Jacobian、奇异性和检查 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 返回可达性、关节解、残差和批量顺序。
9. 轮次 024 已补 C ABI native `kdl_jacobian` golden 测试,覆盖 Orocos KDL `ChainJntToJacSolver` 输出的 6 x dof 矩阵。
是否通过:通过。
### 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-008MOVEJ 轨迹
关联任务:`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-009MOVEL 轨迹
关联任务:`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. 每个采样点逐点 IKseed 使用上一采样点关节解。
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-010MOVEC 轨迹
关联任务:`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. 圆弧采样逐点 IKseed 使用上一采样点关节解。
8. 三点重合或共线返回 `TrajectoryResult.ok=false``KDL_ARC_DEGENERATE`
9. 非 linear speed 返回 `KDL_MOVEC_JOINT_SPEED_APPROX` warning非 fine zone 返回 `KDL_ZONE_APPROX_FINE` warning。
是否通过:通过。
### EV-011Path 规划和验证
关联任务:`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-013C ABI、Embind 和性能
关联任务:`KW-013`
对标章节KDL 18、19、24
类型:构建、性能报告
命令:
```bash
npm run typecheck
cmake --build kdl-wasm/build-wasm -j16
npm test -- kdl-wasm/web/tests/kdl/cAbi.test.ts
npm run test -- kdl fk jacobian checks c-abi
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 test -- kdl-wasm/web/tests/kdl/cAbi.test.ts` 通过1 个测试文件共 6 个测试通过。
4. `npm run test -- kdl cAbi trapProfile` 通过27 个测试文件共 109 个测试通过。
5. `npm test` 通过27 个测试文件共 109 个测试通过。
6. 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`
7. C++ ABI 现支持 `kdl_create_robot/kdl_destroy_robot/kdl_get_robot_info` 的 handle 生命周期和 JSON 输出。
8. WASM wrapper 链接 Orocos KDL 最小源码集C ABI 可从 `NormalizedRobotModel` 构造 native KDL Chain。
9. `kdl_fk` 通过 `ChainFkSolverPos_recursive` 输出 pose7测试覆盖 Rz+Px 链 `[pi/2, 0.4]` 的位置和四元数 golden。
10. `kdl_fk_all_links` 输出 JSON link pose 列表,测试覆盖 `base_link/link_1/tool0` 顺序和 tip 位姿。
11. `kdl_jacobian` 通过 `ChainJntToJacSolver` 输出 6 x dof 行主序矩阵,测试覆盖线速度和角速度分量。
12. `kdl_ik` 通过 `ChainIkSolverPos_LMA` 求解,测试覆盖 native IK 后 FK 回代到 `[pi/2, 0.4]`
13. `kdl_sample_trap` 输出完整梯形/三角速度曲线 JSON测试覆盖 trapezoid、triangle 和非法输入结构化错误。
14. 修复 native solver 生命周期FK/Jacobian/IK solver 在 map 内稳定 `RobotRecord` 上构造,避免持有 move 前 Chain 引用。
15. C ABI 失败统一通过 `kdl_last_error` 返回结构化 `code/message/diagnostics`,覆盖 `KDL_INVALID_HANDLE``KDL_INVALID_TRAP_PROFILE``KDL_BUFFER_TOO_SMALL`
16. 新增 `KdlNativeAbi` 封装 C ABI 导出检查、缓冲区读取、返回码检查和错误归一化。
17. 新增 `fkPose7` TypedArray 高频 FK 接口,支持复用输出缓冲区并覆盖输出维度错误。
18. 性能基线已记录 6 轴初始化、TypedArray FK、平面 IK、1000 点批量可达性和 10 秒 4 ms 轨迹采样。
19. native `planMoveJ/planMoveL/planMoveC/planPath` 仍由 TypeScript runtime 基线承载;底层 C ABI 已保留稳定导出,后续可逐步切到 native solver。
是否通过:通过。
## 5. GRL 证据
### EV-100Lexer、单位和关键字
关联任务:`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-101Parser 和 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、24KDL 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-104Path 和 `run_path`
关联任务:`KW-104`
对标章节GRL 10、18、20、21、24KDL 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-105Operation 和 `run_operation`
关联任务:`KW-105`
对标章节GRL 11、20、21、24KDL 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 segmentoperation action 的 IO/Wait/Pulse 语义在 `KW-106` 继续展开。
是否通过:通过。
### EV-106IO、wait 和 pulse
关联任务:`KW-106`
对标章节GRL 12、20、21、24KDL 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-108proc、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 declarationAST 可表达完整 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、24KDL 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 typecheck
npm run test -- grl generator roundtrip
npm test
cmake --build kdl-wasm/build-wasm -j16
```
验证点:
1. 优先生成 target/path/operation。
2. 点名稳定。
3. defaults 和单点 override 稳定。
4. source metadata 保留。
5. compact/expanded 输出。
6. 生成后可再解析为等价对象和 IR。
执行环境:
```text
Node.js v22.23.0
npm 10.9.8
Vitest 3.2.6
cmake 3.22.1
```
结果摘要:
1. `npm run typecheck` 通过。
2. `npm run test -- grl generator roundtrip` 通过12 个 GRL 相关测试文件共 49 个测试通过。
3. `npm test` 通过27 个测试文件共 107 个测试通过。
4. `cmake --build kdl-wasm/build-wasm -j16` 通过。
5. 新增 `generateGrlProgram`,从结构化 spec 生成稳定 GRL 文本和 stable ids。
6. target 按名称稳定排序,未显式命名的 path point 自动生成 `p00/p01/...`
7. speed、zone、path defaults、point override、source metadata 和 operation action 输出稳定。
8. expanded 与 compact 两种输出均可解析;生成后可进入 parser、semantic IR 和三品牌后处理链路。
9. 修正 source metadata 字符串格式化:`id` 等外部标识保留字符串引号,`type` 等类别值可保持 GRL 标识符。
是否通过:通过。