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