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