Files
KDL_WORK/05-验收证据.md
2026-06-27 07:26:48 -04:00

35 KiB
Raw Blame History

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
对标章节:两份源文档全文
类型:文件清单
命令:

find /home/meswork/kdl_work/work/working1 -maxdepth 1 -type f -print | sort

预期结果:

README.md
01-项目功能内容.md
02-项目程序开发详细步骤.md
03-推进台账.md
04-任务矩阵.md
05-验收证据.md
06-决策记录.md

结果摘要:待复核。
是否通过:待验证。

4. KDL WASM 证据

EV-001WASM 工程和 Worker RPC

关联任务:KW-001
对标章节KDL 2、17、18、24
类型:构建和单元测试
命令:

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' }));"

预期产物:

kdl-wasm/build-wasm/kdl.js
kdl-wasm/build-wasm/kdl.wasm
kdl-wasm/build-wasm/kdl.d.ts

执行环境:

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.jskdl-wasm/build-wasm/kdl.wasmkdl-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-002URDF 和 NormalizedRobotModel

关联任务:KW-002
对标章节KDL 6、22、23、24
类型:单元测试
命令:

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

执行环境:

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 生成 activeJointNameslimitssource.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 任务中接入。

是否通过:通过。

关联任务:KW-003
对标章节KDL 8.1、8.2、22、23
类型:单元测试
命令:

npm run typecheck
npm run test -- kdl fk

验证点:

  1. fk 返回 flange、tcp、joints、diagnostics。
  2. fkAllLinks 返回 link pose 列表。
  3. FK golden 数据误差在容差内。
  4. 关节维度错误返回结构化诊断。

执行环境:

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-004IK 和 ikBatch

关联任务:KW-004
对标章节KDL 8.3、15、22、23
类型:单元测试
命令:

npm run typecheck
npm run test -- kdl ik

验证点:

  1. IK 后 FK 回代误差小于容差。
  2. ikBatch 顺序保持。
  3. seed、多 seed、qMin/qMax、maxIterations 生效。
  4. 不可达、限位、奇异、迭代失败原因稳定。

执行环境:

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-005Jacobian、奇异性和检查 API

关联任务:KW-005
对标章节KDL 8.4、15、22、23
类型:单元测试
命令:

npm run typecheck
npm run test -- kdl jacobian checks

验证点:

  1. Jacobian rows/cols/data 正确。
  2. 奇异点 warning。
  3. 关节限位、速度限位、可达性诊断。
  4. 批量可达性结果与输入一一对应。

执行环境:

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
类型:单元测试
命令:

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。

执行环境:

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/quaternionxyz/rpyxyz/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
类型:单元测试
命令:

npm run typecheck
npm run test -- kdl trap-profile
npm test
cmake --build kdl-wasm/build-wasm -j16

验证点:

  1. 长距离为 trapezoid。
  2. 短距离为 triangle。
  3. 首末采样点严格对应 s=0s=1
  4. s 单调递增。

执行环境:

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 和 samplessampleTrapProfile 返回同一采样规则下的 samples。
  8. 首末采样点严格对应 s=0s=1,采样时间和 s 单调递增。
  9. 非法输入返回 KDL_INVALID_TRAP_PROFILE 结构化诊断。

是否通过:通过。

EV-008MOVEJ 轨迹

关联任务:KW-008
对标章节KDL 11、21、22、23
类型:运动测试
命令:

npm run typecheck
npm run test -- kdl movej planMoveJ
npm test
cmake --build kdl-wasm/build-wasm -j16

验证点:

  1. 关节同起同停。
  2. joint_targetpose_target 两类目标。
  3. FK 输出 TCP。
  4. 限位、速度、加速度、奇异性诊断。
  5. 非 fine zone 返回 KDL_ZONE_APPROX_FINE

执行环境:

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=falseKDL_JOINT_LIMIT
  9. 速度、加速度保持在 joint limits 内;非 fine zone 返回 KDL_ZONE_APPROX_FINE warning采样点奇异性返回 KDL_SINGULARITY warning。

是否通过:通过。

EV-009MOVEL 轨迹

关联任务:KW-009
对标章节KDL 12、21、22、23
类型:运动测试
命令:

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. 速度、加速度、姿态误差和配置突变诊断。

执行环境:

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. 轨迹点输出 MOVELjoints/jointVelocity/jointAcceleration/flange/tcp
  8. 可达直线测试覆盖 TCP 直线误差和终点 TCP不可达采样点返回 TrajectoryResult.ok=falseKDL_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
类型:运动测试
命令:

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 和圆弧误差诊断。

执行环境:

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=falseKDL_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
类型:集成测试
命令:

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 保留。

执行环境:

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 返回 segmentReportscycleTime、速度/加速度比例和诊断。
  9. 空路径返回 TrajectoryResult.ok=false 风格的 KDL_PATH_EMPTY 诊断。

是否通过:通过。

EV-012节拍估算、重采样和诊断

关联任务:KW-012
对标章节KDL 16、19、20、22、23
类型:单元测试
命令:

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 不抛裸字符串错误。

执行环境:

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
类型:构建、性能报告
命令:

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

执行环境:

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_IMPLEMENTEDKDL_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-100Lexer、单位和关键字

关联任务:KW-100
对标章节GRL 4、24
类型:单元测试
命令:

npm run typecheck
npm run test -- grl lexer units

验证点:

  1. 注释、标识符、字符串、数字。
  2. 保留关键字表。
  3. 长度、角度、时间、质量、速度、加速度单位规范化。

执行环境:

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/s2100 mm -> 0.1 m180 deg -> pi rad300 mm/s -> 0.3 m/s 通过。

是否通过:通过。

EV-101Parser 和 AST

关联任务:KW-101
对标章节GRL 5、22、23、24
类型parser 测试和 snapshot
命令:

npm run typecheck
npm run test -- grl parser ast

验证点:

  1. 最小文件解析。
  2. 第 23 章完整示例解析。
  3. AST source range、注释、单位原文、metadata。
  4. 非法语法行列号。

执行环境:

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 保留 LanguageDeclarationModuleDeclarationImportDeclarationProcedureDeclaration 和 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
类型:单元测试
命令:

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 编译为共享结构。

执行环境:

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 结构化输出 DataDeclarationTargetDeclaration、表达式 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
类型:单元测试、集成测试
命令:

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

执行环境:

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
类型:单元测试、集成测试
命令:

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。

执行环境:

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_DUPLICATEevent 引用缺失 point 返回 GRL_PATH_EVENT_POINT_NOT_FOUND

是否通过:通过。

EV-105Operation 和 run_operation

关联任务:KW-105
对标章节GRL 11、20、21、24KDL 14
类型:单元测试
命令:

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。

执行环境:

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
类型:单元测试
命令:

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。

执行环境:

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/roio.alias.*、IO map 范围校验和 GRL_IO_ADDRESS_NOT_FOUND
  7. wait 支持条件字符串、timeouton_timeout alarm/call,并覆盖 all/any/rising/falling/changed 条件表达。
  8. pulse 生成 set/reset trace单位归一化保留到秒。
  9. compilePathEventIocompileOperationActionIo 可将 Path event / Operation action metadata 展开为 IO/wait/pulse IR。
  10. Path/Operation action token 原样保留statement fallback 使用 GRL lexer确保 true/falsems/s 单位类型正确。
  11. KDL 边界保持不变IO/wait/pulse 不进入 KDL motion segment 或 wasm 运动规划。

是否通过:通过。

EV-107流程控制

关联任务:KW-107
对标章节GRL 13、20、21、24
类型:单元测试
命令:

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 进入非法块结构诊断。

执行环境:

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. 新增流程控制 IRIfInstruction/WhileInstruction/ForInstruction/SwitchInstruction/BreakInstruction/ContinueInstruction/LabelInstruction/JumpInstruction
  6. parseProcedureControlFlow 从 procedure body token 编译结构化流程控制树。
  7. if/elseif/elsewhileforswitch/case/default 均保留 sourceMap、条件/表达式文本和原始 token。
  8. 条件表达式做 P0 bool 检查,明显数值/字符串条件报 GRL_CONTROL_CONDITION_NOT_BOOL
  9. break/continue 做位置合法性检查,非法位置分别报 GRL_BREAK_OUTSIDE_FLOWGRL_CONTINUE_OUTSIDE_LOOP
  10. switch case 要求常量表达式,重复 case/default 会报结构化错误。
  11. label/jump 做重复、缺失和跳入内层块检查,覆盖 GRL_LABEL_DUPLICATEGRL_LABEL_NOT_FOUNDGRL_JUMP_INTO_BLOCK

是否通过:通过。

EV-108proc、func、参数方向和作用域

关联任务:KW-108
对标章节GRL 14、20、21、24
类型:单元测试
命令:

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。

执行环境:

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 签名表,解析 callreturn
  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
类型:单元测试
命令:

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 未实现语义有明确诊断。

执行环境:

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. 新增异常/报警 IRAlarmInstruction/RaiseInstruction/TryInstruction/CatchInstruction/FinallyInstruction/UnsupportedRuntimeInstruction
  6. parseProcedureExceptionFlow 支持 alarmraisetry/catch/finally
  7. alarm 保留 alarm id、message、severity 和 sourceMap。
  8. try 要求至少一个 catchfinally,否则报 GRL_TRY_HANDLER_MISSING
  9. traptask ... 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
命令:

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。

执行环境:

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 requestkdlBridge.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 测试
命令:

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. 不支持语义转换报告。

执行环境:

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 风格原型输出 /PROGJ/L/CDO/WAIT/PULSE
  8. KUKA KRL 原型输出 DEFPTP/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. 不支持语义进入转换报告,测试覆盖 ALARMGRL_POST_UNSUPPORTED

是否通过:通过。

EV-112自动生成规则和往返

关联任务:KW-112
对标章节GRL 18、24
类型:生成器测试、往返测试
命令:

npm run test -- grl generator roundtrip

验证点:

  1. 优先生成 target/path/operation。
  2. 点名稳定。
  3. defaults 和单点 override 稳定。
  4. source metadata 保留。
  5. compact/expanded 输出。
  6. 生成后可再解析为等价对象和 IR。

结果摘要:待执行。
是否通过:待验证。