24 KiB
24 KiB
02-项目程序开发详细步骤
版本:0.5
日期:2026-06-27
对标文档:
/home/meswork/kdl_work/work/doc/KDL_WASM计算接口设计.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/通用机器人项目功能与数据流程图.md/home/meswork/kdl_work/work/doc/通用机器人项目功能与数据流程图-png/flow-01.mmd到flow-05.mmd/home/meswork/kdl_work/work/doc/通用机器人项目功能与数据流程图-png/flow-01.png到flow-05.png
1. 推荐目录
目录按五条主线组织:grl 负责语言、AST、语义、IR、后处理;kdl-wasm 负责 KDL Worker API 和运动计算;controller 负责虚拟控制器、IO、wait、trace;workspace 和 station 负责 OPFS、OLP 对象模型和资源;reports/importers/ui 负责报告、品牌导入和工作台。
/home/meswork/kdl_work/
orocos_kinematics_dynamics/
orocos_kdl/
kdl-wasm/
CMakeLists.txt
bindings/
kdl_c_api.cpp
kdl_embind.cpp
web/
src/
kdl/
kdlClient.ts
kdl.worker.ts
rpc.ts
types.ts
robot/
urdfParser.ts
normalizedRobotModel.ts
grl/
lexer/
parser/
ast/
semantic/
ir/
generator/
post/
abb/
fanuc/
kuka/
controller/
runtime/
io/
alarm/
debug/
workspace/
opfs.ts
project.ts
importExport.ts
station/
stationModel.ts
resources.ts
olp/
model.ts
path.ts
operation.ts
importers/
abb/
fanuc/
kuka/
reports/
reportModel.ts
htmlReport.ts
jsonReport.ts
ui/
appShell.ts
tests/
kdl/
grl/
controller/
workspace/
reports/
importers/
integration/
post/
2. KDL 实施线
KDL 实施顺序严格对标 KDL_WASM计算接口设计.md 第 24 章。
2.1 KW-001:WASM 工程骨架和 Worker RPC
目标:
- 新建
kdl-wasmwrapper 工程。 - 使用 Emscripten 编译 Orocos KDL。
- 生成
kdl.js、kdl.wasm、kdl.d.ts。 - 建立
KdlRpcRequest/KdlRpcResponse。 - 建立
KdlWorkerClient,所有 KDL API 异步调用。
核心要求:
- KDL 运行在 Worker 中。
- Worker 请求必须有唯一 id。
- Worker 初始化失败可恢复并重新初始化。
- 错误返回结构化
{ code, message, diagnostics }。
验收:
init()返回KdlRuntimeInfo。dispose()可释放 Worker。- Worker RPC 单元测试通过。
2.2 KW-002:NormalizedRobotModel 到 KDL Chain
目标:
- TypeScript 解析 URDF XML。
- 检查 link/joint 连通性和单位。
- 生成
NormalizedRobotModel。 - WASM 根据标准模型构造 KDL
Tree/Chain。 - 创建
RobotHandle并缓存求解器。
必须实现:
loadRobotFromUrdfcreateRobotFromModeldestroyRobotgetRobotInfogetJointLimits
验收:
- URDF joint 顺序稳定。
- base/tip 不连通返回
KDL_INVALID_MODEL。 - 不支持 joint 类型返回诊断。
- 机器人信息中的
dof/jointNames/limits正确。
2.3 KW-003:FK 和 fkAllLinks
目标:
- 实现
fk。 - 实现
fkAllLinks。 - 支持 tool/frame 选项。
- 输出法兰位姿、TCP 位姿和 link 位姿。
验收:
- FK 与 golden 数据或原生 KDL 对比在容差内。
fkAllLinkslink 数量和顺序正确。- 关节维度错误有结构化诊断。
2.4 KW-004:IK 和 ikBatch
目标:
- 实现
ik。 - 实现
ikBatch。 - 支持 seed、qMin/qMax、多 seed、容差、最大迭代次数。
- 失败原因覆盖
unreachable/joint_limit/singularity/max_iteration/invalid_model。
验收:
- IK 后 FK 回代误差小于容差。
ikBatch返回顺序与输入顺序一致。- 不可达目标返回
KDL_TARGET_UNREACHABLE或KDL_IK_FAILED。 - 连续点 seed 使用上一点结果。
2.5 KW-005:Jacobian、奇异性和基础检查
目标:
- 实现
jacobian。 - 实现
checkSingularity。 - 实现
checkJointLimits。 - 实现
checkReachability和checkReachabilityBatch。 - 实现
checkVelocityLimits。
验收:
- Jacobian 行列数正确。
- 奇异点附近产生
KDL_SINGULARITYwarning。 - 关节超限产生
KDL_JOINT_LIMIT。 - 批量可达性保持输入顺序。
2.6 KW-006:位姿变换和 offset
目标:
- 实现
normalizePose。 - 实现
composePose。 - 实现
inversePose。 - 实现
applyToolAndFrame。 - 实现
applyOffset。
验收:
pose()欧拉角可规范化为四元数。poseq()四元数可归一化。offset默认在 frame 下解释。offset_in tool和offset_in frame fixture结果正确。
2.7 KW-007:梯形速度曲线
目标:
- 实现
makeTrapProfile。 - 实现
sampleTrapProfile。 - 长距离输出 trapezoid。
- 短距离自动退化为 triangle。
验收:
- 首点
s=0。 - 末点
s=1。 s单调递增。- 所有
TrajectoryResult保留实际速度曲线采样。
2.8 KW-008:planMoveJ
目标:
- 对应 GRL
movej。 - target 为
joint_target时直接得到qEnd。 - target 为
pose_target时先 IK。 - 按关节速度、加速度约束计算同步运动时长。
- 每个采样点 FK 输出 TCP。
必须诊断:
- 目标 IK 失败。
- 起点或终点关节超限。
- 采样点速度或加速度超限。
- 接近奇异点。
- P0 zone 被近似为 fine。
2.9 KW-009:planMoveL
目标:
- 对应 GRL
movel。 - 起点由
startJointsFK 得到。 - 目标点应用 tool/frame/offset。
- 生成 TCP 直线采样。
- 姿态使用 fixed 或 slerp。
- 每个采样点 IK,seed 使用上一采样点关节。
必须诊断:
- 目标不可达。
- 采样点 IK 失败。
- TCP 直线误差超过容差。
- 姿态误差超过容差。
- 关节配置突变。
- 速度或加速度超限。
2.10 KW-010:planMoveC
目标:
- 对应 GRL
movec via ... target ...。 - 起点由当前关节 FK 得到。
- via 和 target 应用 tool/frame/offset。
- 检查三点重合或近似共线。
- 计算圆心、半径、法向、角度、弧长。
- 每个圆弧采样点 IK。
TrajectoryResult.meta.circle包含CirclePlanMeta。
必须诊断:
- via 或 target 不可达。
- 三点重合、近似重合或近似共线。
- 半径过小或弧长过短。
- 采样点 IK 失败。
- 圆弧误差超过容差。
- 速度或加速度超限。
2.11 KW-011:planPath 和 validatePath
目标:
planPath用于run_path展开后的整条路径轨迹生成。validatePath用于离线编程路径验证。run_operation在 TypeScript 层展开,KDL 只处理 motion segment。
验收:
- 段顺序正确。
- 上一段终点关节作为下一段起点。
- 合并后轨迹点重新编号和更新时间。
- 保留
segmentId/targetId/sourceMap。 - 空路径返回
KDL_PATH_EMPTY。
2.12 KW-012:节拍估算、重采样和诊断报告
目标:
- 实现
estimateCycleTime。 - 实现
resampleTrajectory。 - KDL 只估算运动时间。
- waitTime、ioTime 由调用方补充。
验收:
CycleTimeResult.motionTime/totalTime/segmentTimes正确。- 重采样后轨迹时间、点序、source map 稳定。
- error/warning/info 分级正确。
2.13 KW-013:C ABI / Embind 和性能优化
目标:
- 底层导出稳定 C ABI。
- TypeScript API 包装 C ABI 或 Embind。
- 高频 FK/IK 增加 TypedArray 版本。
- RobotHandle 缓存 FK、IK、Jacobian solver。
- 长路径分块计算或提供进度。
性能目标:
- 单机器人 6 轴初始化小于 1 秒。
- 单次 FK 小于 1 ms。
- 单次 IK 平均小于 10 ms。
- 1000 个目标点批量可达性检查在可接受交互时间内完成。
- 10 秒轨迹按 4 ms 采样约 2500 点可稳定生成和回放。
3. GRL 实施线
GRL 实施顺序严格对标 通用机器人编程语法规范.md 第 24 章。
3.1 KW-100:Lexer、单位和关键字
目标:
- UTF-8 输入。
- 识别单行、多行注释。
- 识别标识符、字符串、数字、单位。
- 识别保留关键字。
- 单位规范化到 SI。
验收:
100 mm->0.1 m。180 deg->pi rad。300 mm/s->0.3 m/s。- 注释位置可保留。
3.2 KW-101:Parser 和 AST 骨架
目标:
- 实现 EBNF 第 22 章主体。
- 支持
language grl 0.1。 - 支持
module/import/end。 - 支持 top-level declarations。
- AST 保留 source range、原始单位文本、规范化值和 metadata。
验收:
- 最小文件可解析。
- 错误行列号准确。
- AST snapshot 稳定。
3.3 KW-102:数据声明、类型系统和目标点
目标:
const/var/persistent。- 基础类型和机器人类型。
tool/frame/load。joint_target/pose_target。pose/poseq/robot_config/ext_axis。speed/zone。offset/offset_in。
验收:
- 类型 AST 正确。
- target 能编译为
JointTarget/PoseTarget。 - speed/zone 能编译为
SpeedSpec/ZoneSpec。 - offset 能编译为
OffsetSpec。
3.4 KW-103:运动指令和当前上下文
目标:
movejmovelmovecset_toolset_frameset_speedset_zone
编译规则:
- 显式运动参数优先。
- path defaults 次之。
- target 自带 tool/frame 次之。
- 当前控制器状态最低。
- 编译到 IR 前必须解析出确定 tool/frame/speed/zone。
验收:
movej可生成MotionInstruction(joint)。movel可生成MotionInstruction(linear)。movec可生成MotionInstruction(circular)。movej/movel/movec可生成 KDL request。
3.5 KW-104:Path、event 和 run_path
目标:
pathdefaultssourcepointevent before/afterevent at ... distancerun_path
编译语义:
- 展开 defaults、points、events。
- 每个 point 变为 Motion IR。
- event 变为 IO/Wait/Process IR。
- 保留 pathId、pointId、source metadata。
验收:
- 空 path 报错。
- 重复 point 名称报错。
run_path可生成PathPlanRequest。
3.6 KW-105:Operation 和 run_operation
目标:
operationkindpathprocessstart_actionend_actionrun_operation
编译语义:
- 执行 start action。
- 执行引用 path。
- 执行 end action。
- 保留工艺参数,供仿真、报告和后处理使用。
验收:
- Operation 引用不存在 Path 报错。
run_operation可展开为 action + path + action。- KDL 只接收展开后的 motion segment。
3.7 KW-106:IO、wait 和 pulse
目标:
io.di/do/ai/ao/gi/go/ri/ro。io.alias.*。- IO 赋值。
wait条件。timeout。on_timeout alarm/call。all/any/rising/falling/changed。pulse。
验收:
- IO 地址可按 io_map 或允许范围校验。
- wait 条件可编译为 WaitInstruction。
- pulse trace 必须包含置位和复位事件。
- IO/wait 不进入 KDL。
3.8 KW-107:流程控制
目标:
if/elseif/elsewhileforswitch/case/defaultbreakcontinuelabeljump
验收:
- 条件表达式必须为 bool。
break/continue位置合法。switch case为常量表达式且不重复。jump不能跳入非法块结构。
3.9 KW-108:proc、func、参数方向和作用域
目标:
proc。func。call。return。in/out/inout。- 作用域和名称解析。
- 递归 warning 或 error。
验收:
out参数所有正常返回路径赋值。inout/out实参必须为左值。func所有正常返回路径返回兼容类型。func默认不允许执行运动、wait、pulse、run_path、run_operation。
3.10 KW-109:异常、报警、中断和多任务语法
目标:
alarmraisetry/catch/finallytrapinterruptenable/disable interrupttask ... cycle ...
范围:
- P0 至少实现
alarm、raise和简单catch。 trap/interrupt/task按 P1 语法保留,可先不做完整调度。
验收:
- AST 能表达全部语法。
- P0 支持 alarm/raise/try/catch 基础语义。
- P1 未实现语义在后处理或运行时报明确诊断。
3.11 KW-110:语义检查、IR 和 source map
目标:
- Symbol Table。
- Semantic Analyzer。
- Executable IR。
- Source map。
- GRL 到 KDL request 的编译桥接。
必须检查:
- 语法规范第 21 章全部 22 项。
- KDL 可达性、关节限位和圆弧退化。
- 后处理目标品牌是否支持所用语义。
验收:
- 完整示例可编译为 IR。
- IR 运动指令可映射到 KDL request。
- source map 能定位 GRL 行列、path point、operation。
3.12 KW-111:ABB、FANUC、KUKA 后处理原型
目标:
- ABB RAPID 映射。
- FANUC LS/TP 风格映射。
- KUKA KRL 映射。
- 后处理报告。
post_hint和@brand.*。
验收:
movej/movel/movec三品牌 golden file 通过。- target/tool/frame/speed/zone 映射正确。
- IO/wait 基础映射正确。
- 不支持语义进入转换报告。
3.13 KW-112:自动生成规则和往返
目标:
- 自动生成程序优先生成 target/path/operation。
- 点名稳定。
- path defaults 和单点 override 稳定。
- source metadata 稳定。
- compact/expanded 输出风格。
- 生成 GRL 可再解析回等价对象。
验收:
- 同一输入重复生成结果一致。
- 生成文本可 diff。
- 生成文本可解析、语义检查并后处理。
4. 虚拟控制器、工作区和交付实施线
以下任务对标 通用机器人离线编程虚拟控制器技术方案.md、通用机器人项目主要实施步骤.md 和 通用机器人项目功能与数据流程图.md,在 KDL/GRL P0 闭合后继续推进。
4.1 KW-200:OLP 对象模型和 Station/Resource 基础
目标:
- 定义
OlpProjectModel。 - 定义 Robot、Tool、Frame、Target、Path、PathPoint、Operation、Program、PostProfile。
- 定义 Station、Cell、Fixture、Part、Device、Geometry、Calibration、Report 基础模型。
- 建立对象树和文件资源之间的映射。
- 支持从 Path/Operation 对象生成 GRL,并从 GRL/品牌导入结果回填对象模型。
验收:
- 对象模型 schema 有单元测试。
- PathModel 可生成稳定 GRL。
- OperationModel 可展开为 IR 或 GRL。
- 品牌导入恢复出的 target/path/program 可作为对象模型 patch 应用。
4.2 KW-201:OPFS Workspace 和项目导入导出
目标:
- 实现
/projects/{projectId}布局。 - 实现
project.jsonmanifest。 - 实现
listProjects/openProject/createProject。 - 实现
readText/writeText/readJson/writeJson/delete。 - 实现 snapshot。
- 实现 zip 导入导出。
- 实现存储占用、迁移、备份和损坏检测。
验收:
- 新建项目后生成约定目录和 manifest。
- GRL、URDF、targets、paths、operations、io map、post profile 可保存和读取。
- 导出 zip 后再导入能恢复等价项目。
- OPFS 不可见性通过显式导出和快照缓解。
4.3 KW-202:虚拟控制器状态机和执行内核
目标:
- 实现
PowerOff/Booting/MotorsOff/Ready/Manual/Auto/Running/Hold/Fault/EmergencyStop。 - 实现
powerOn/powerOff/motorsOn/motorsOff/loadProgram/start/hold/resume/stop/resetFault/stepInto/stepOver/stepMotion。 - 实现 Program Counter、Call Stack、Scope Stack、Timer Table、Alarm Queue、Trace Buffer、Source Map。
- 执行
Executable IR,不直接解释品牌文本。 - 支持单主任务
Task MAIN。
验收:
- 状态转换非法路径有诊断。
- 可执行无运动逻辑程序。
- 当前行、变量、调用栈和报警可查询。
- hold 暂停虚拟时间,stop/reset 清理 ActiveWait 和 Motion Queue。
4.4 KW-203:Motion Queue 和 KDL 运行桥接
目标:
- 将 MotionInstruction、Path point、Operation 展开为
MotionQueueItem。 - 运行时调用
planMoveJ/planMoveL/planMoveC/planPath。 - 按虚拟时间推进轨迹采样。
- 保留
instructionId/pathId/pathPointId/operationId/sourceMap。 - 支持运动失败报警和 trace。
验收:
run_path能驱动虚拟机器人状态变化。run_operation能执行 start action、path、end action。- UI 或测试可从当前运动定位回 GRL 行、Path point 和 Operation。
- IK、限位、奇异、圆弧退化诊断进入 Alarm Queue 和报告数据。
4.5 KW-204:虚拟 IO、Wait、Pulse 和 IO 脚本
目标:
- 实现 IO Image、Alias Table、Event Queue、Wait Registry、Edge Detector、IO Script Engine、Trace Logger。
- 实现 IO 读写权限规则。
- 实现
wait立即求值、ActiveWait、timeout、on_timeout。 - 实现
rising/falling/changed边沿检测。 - 实现
pulse按虚拟时间自动复位。 - 实现 IO script delay 和触发器。
验收:
- 用户可手动切换虚拟输入满足 wait。
- IO 脚本可延迟写入输入满足 wait。
- wait timeout 可产生报警或执行 on_timeout。
- hold 时 timeout 暂停,stop/reset 时 ActiveWait 取消。
- IO trace 顺序稳定,包含 read/write/wait/pulse 事件。
4.6 KW-205:Web 工作台和调试界面
目标:
- 建立第一屏工作台,而不是营销页。
- 实现项目对象树。
- 实现程序编辑器、路径编辑器、Operation 编辑器。
- 实现虚拟示教器、控制器面板、运动监控、IO 面板。
- 实现日志、报警、Wait 调试面板、后处理报告视图。
- 支持项目导入导出、后处理导出和客户交付包入口。
验收:
- 用户能新建项目、导入 URDF、编辑 GRL、运行程序。
- 当前行、变量、IO、报警、TCP、关节、Path point、Operation 可见。
- Wait 卡住时显示表达式、子表达式值、已等待时间、剩余 timeout、相关 IO 最近变化和 IO 脚本状态。
- 诊断可从 UI 定位回源程序、Path、Operation 或品牌源。
4.7 KW-206:验证、报告和客户交付包
目标:
- 可达性报告。
- 基础碰撞报告接口和数据模型。
- 节拍报告,分解 motion/wait/IO script delay。
- IO/Wait 报告。
- 后处理报告。
- 品牌导入报告。
- JSON/HTML 报告导出。
- 客户交付包 zip。
验收:
- 报告 JSON schema 稳定。
- HTML 报告可打开并包含关键摘要。
- 客户交付包包含 GRL、品牌程序、目标点、路径、IO map、报告和可选 trace。
- 不可达点、IK 失败、wait timeout、后处理近似和品牌导入丢失语义能定位到 source map。
4.8 KW-207:品牌程序导入 MVP
目标:
- 实现 ABB RAPID 文本导入原型。
- 实现 KUKA KRL
.src/.dat导入原型。 - 实现 FANUC LS 风格文本导入原型。
- 生成 Brand AST。
- 转换为统一 IR。
- 尽量恢复 GRL、target、path、program。
- 输出品牌导入转换报告。
验收:
- 至少一种品牌程序可导入、转换为 IR 并在虚拟控制器中运行。
- 三品牌导入 golden case 可解析主要运动、目标点、工具、坐标系、速度、过渡和 IO。
- 不支持或近似语义必须进入导入报告,不能静默丢失。
- FANUC 首版只承诺 LS 风格或可读文本,不承诺 TP 二进制。
4.9 KW-208:几何、碰撞、校准和商业级 OLP 扩展
目标:
- 资源库管理。
- Mesh/CAD 转换文件导入。
- 从点、边、曲线、面法向生成 Path。
- 工艺模板库。
- TCP、Frame、Base 校准数据。
- 基础碰撞检测。
- 商业级客户交付流程。
验收:
- 可从几何曲线生成 Path。
- 可使用工艺模板生成 Operation。
- 可执行基础碰撞检测并定位对象和时间点。
- 可保存和应用校准数据。
- 可生成商业级客户交付包。
4.10 KW-209:虚拟调试增强和跨源定位
目标:
- 实现断点。
- 实现单步进入、单步越过。
- 实现运动断点。
- 实现轨迹回放。
- 实现变量 watch。
- 实现 IO 脚本调试。
- 实现 GRL、Path、Operation、品牌源程序与 IR 的跨源定位。
验收:
- 可像调试程序一样调试机器人逻辑。
- 可复现运行 trace。
- 可定位 IK、IO、逻辑错误。
- 可在 GRL、Path、Operation、品牌源程序之间定位同一条运动。
4.11 KW-210:多机器人、外部轴和真实控制器校验扩展
目标:
- 扩展任务模型,支持多机器人任务、后台任务、独立 IO 任务和监控任务。
- 扩展运动组和外部轴数据结构。
- 保留外部轴协调和复杂工作站接口。
- 建立真实控制器校验流程边界。
- 支持离线/现场差异比对和校验报告。
验收:
- 多机器人和外部轴进入对象模型、IR、任务模型和报告 schema。
- 真实控制器通信不作为 MVP 实时联调目标,但现场低速验证、差异记录和校验报告流程明确。
- 外部轴相关 KDL P1 能力有接口占位和诊断边界。
4.12 KW-211:流程图资产覆盖和同步维护
目标:
- 将
flow-01.mmd/png纳入总体功能流程覆盖。 - 将
flow-02.mmd/png纳入 GRL 编译与执行流程覆盖。 - 将
flow-03.mmd/png纳入 KDL WASM 计算流程覆盖。 - 将
flow-04.mmd/png纳入数据传递流程覆盖。 - 将
flow-05.mmd/png纳入诊断传递流程覆盖。 - 建立流程图源、渲染图、文档章节、任务矩阵和验收证据的同步检查。
验收:
.mmd文件和.png文件均被证据记录。- 每张流程图能映射到至少一个功能章节和任务编号。
- Mermaid 源和 PNG 渲染图缺失或新增时,文档一致性检查会提示。
- 流程图变更能追溯到对应任务和验收证据。
5. 集成顺序
- KW-001 + KW-100 + KW-101:基础工程、Worker RPC、Lexer/Parser 骨架。
- KW-002 + KW-102:URDF/标准模型和 GRL target/tool/frame/speed/zone。
- KW-003 到 KW-006 + KW-103:运动指令编译到 KDL FK/IK/变换。
- KW-007 到 KW-010:梯形速度、MOVEJ、MOVEL、MOVEC。
- KW-104 + KW-011:Path 编译为
PathPlanRequest,KDL 生成整条路径。 - KW-105 + KW-011:Operation 展开后复用 Path 规划。
- KW-106 到 KW-110:完成 P0 语义检查和 IR。
- KW-111:三品牌后处理原型。
- KW-112 + KW-013:自动生成、性能和批量优化。
- KW-200 + KW-201:OLP 对象模型和 OPFS 工作区。
- KW-202 + KW-203:虚拟控制器状态机、执行内核和 Motion Queue。
- KW-204:虚拟 IO、wait、pulse 和 IO 脚本。
- KW-205:Web 工作台和调试界面。
- KW-206:验证、报告和客户交付包。
- KW-207:品牌程序导入 MVP。
- KW-208:几何、碰撞、校准和商业级 OLP 扩展。
- KW-209:虚拟调试增强和跨源定位。
- KW-210:多机器人、外部轴和真实控制器校验扩展。
- KW-211:流程图资产覆盖和同步维护。
6. 通用命令约定
实际命令以工程 package.json 和 CMake 配置为准。文档验收要求每个阶段至少提供等效命令:
npm run typecheck
npm run test -- grl
npm run test -- kdl
npm run test -- integration
npm run test -- post
npm run test -- controller
npm run test -- workspace
npm run test -- reports
npm run test -- importers
npm run build
KDL WASM 构建:
cd /home/meswork/kdl_work
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