14 KiB
14 KiB
通用机器人项目主要实施步骤
版本:0.1
日期:2026-06-27
来源:/home/meswork/kdl_work/work/working1
用途:作为阅读参考,概览项目从 KDL WASM 计算接口到 GRL 编译与后处理的主要实施步骤。
1. 实施主线
项目实施分两条主线推进:
-
KDL WASM 计算接口线
- 任务编号:
KW-001到KW-013 - 对标:
KDL_WASM计算接口设计.md - 目标:提供稳定的 Worker API、机器人模型、运动学、轨迹规划、Path 验证、诊断和性能能力。
- 任务编号:
-
GRL 编程语法线
- 任务编号:
KW-100到KW-112 - 对标:
通用机器人编程语法规范.md - 目标:实现 GRL lexer/parser、AST、语义检查、IR、Path/Operation、IO/wait、后处理和自动生成。
- 任务编号:
两条线的集成点是:GRL 的 movej/movel/movec/path/operation 编译为 KDL WASM 的 MoveJRequest/MoveLRequest/MoveCRequest/PathPlanRequest,由 KDL WASM 返回轨迹和诊断。
2. 推荐工程结构
/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/
tests/
kdl/
grl/
integration/
post/
3. 阶段 1:基础工程、Worker RPC 和 GRL 词法骨架
关联任务:KW-001、KW-100、KW-101
目标:
- 建立
kdl-wasmwrapper 工程。 - 使用 Emscripten 编译 Orocos KDL,生成
kdl.js、kdl.wasm、kdl.d.ts。 - 建立
KdlRpcRequest/KdlRpcResponse和KdlWorkerClient。 - KDL WASM 只在 Worker 中运行。
- 建立 GRL lexer,支持注释、标识符、字符串、数字、单位和保留关键字。
- 建立 GRL parser 和 AST 骨架,支持
language grl 0.1、module、import、顶层声明。
输入:
- Orocos KDL 源码。
- GRL 源文件。
输出:
- KDL WASM 构建产物。
- Worker RPC 基础 API。
- GRL Tokens 和 AST。
验收重点:
init()返回KdlRuntimeInfo。- Worker 请求有唯一 id。
- 错误返回
{ code, message, diagnostics }。 - GRL 最小文件可解析。
- AST 保留 source range、注释位置、单位原文和规范化值。
4. 阶段 2:机器人模型、GRL 数据声明和共享类型
关联任务:KW-002、KW-102
目标:
- TypeScript 解析 URDF XML。
- 检查 link/joint 连通性和单位。
- 生成
NormalizedRobotModel。 - WASM 根据标准模型构造 KDL
Tree/Chain。 - 创建
RobotHandle并缓存求解器。 - GRL 支持
const/var/persistent、基础类型、机器人类型。 - GRL 支持
tool/frame/load/joint_target/pose_target/pose/poseq/robot_config/ext_axis/speed/zone/offset/offset_in。
输入:
robot.urdf- GRL 中的 tool/frame/target/speed/zone 声明。
输出:
NormalizedRobotModelRobotHandleJointTargetPoseTargetSpeedSpecZoneSpecOffsetSpec
验收重点:
- URDF joint 顺序稳定。
- base/tip 不连通返回
KDL_INVALID_MODEL。 getRobotInfo/getJointLimits正确。- GRL target 能编译为 KDL 共享数据结构。
- speed/zone 能编译为
SpeedSpec/ZoneSpec。
5. 阶段 3:KDL 基础运动学和 GRL 运动指令
关联任务:KW-003 到 KW-006、KW-103
目标:
- 实现 KDL
fk、fkAllLinks。 - 实现 KDL
ik、ikBatch。 - 实现 KDL
jacobian、checkSingularity、checkJointLimits、checkReachability、checkReachabilityBatch、checkVelocityLimits。 - 实现 KDL
normalizePose、composePose、inversePose、applyToolAndFrame、applyOffset。 - GRL 支持
movej/movel/movec和set_tool/set_frame/set_speed/set_zone。 - GRL 运动指令编译为
MotionInstruction,再映射为 KDL request。
输入:
RobotHandleJointTargetPoseTargettool/frame/speed/zone- GRL 运动语句。
输出:
- FK/TCP 位姿。
- IK 关节解。
- Jacobian 和奇异性诊断。
MotionInstructionMoveJRequest/MoveLRequest/MoveCRequest
验收重点:
- FK 与 golden 数据或原生 KDL 对比在容差内。
- IK 后 FK 回代误差小于容差。
ikBatch返回顺序与输入顺序一致。- 奇异点返回
KDL_SINGULARITYwarning。 offset、offset_in tool、offset_in frame结果正确。- GRL 编译到 IR 前能解析确定的 tool、frame、speed、zone。
6. 阶段 4:梯形速度和三类基础运动轨迹
关联任务:KW-007 到 KW-010
目标:
- 实现
makeTrapProfile和sampleTrapProfile。 - 实现
planMoveJ。 - 实现
planMoveL。 - 实现
planMoveC。
MOVEJ 重点:
joint_target直接作为qEnd。pose_target先 IK 得到qEnd。- 各关节同起同停。
- 每个采样点 FK 输出 TCP。
MOVEL 重点:
- 起点由
startJointsFK 得到。 - 目标点应用 tool/frame/offset。
- 生成 TCP 直线采样。
- 逐点 IK,seed 使用上一采样点关节。
MOVEC 重点:
- 起点由当前关节 FK 得到。
- via 和 target 应用 tool/frame/offset。
- 检查三点重合或近似共线。
- 计算圆心、半径、法向、角度、弧长。
TrajectoryResult.meta.circle包含CirclePlanMeta。
输入:
MoveJRequestMoveLRequestMoveCRequestTrapProfileOptions
输出:
TrapProfileResultTrajectoryResultMotionDiagnostic
验收重点:
- 梯形速度曲线长距离为 trapezoid,短距离为 triangle。
- 采样首点
s=0,末点s=1,s单调递增。 - MOVEJ 关节同起同停。
- MOVEL TCP 直线误差小于容差。
- MOVEC 圆弧元数据正确。
- 三点共线返回
KDL_ARC_DEGENERATE。 - P0 中非 fine zone 返回
KDL_ZONE_APPROXIMATED。
7. 阶段 5:Path、Operation 和批量路径验证
关联任务:KW-011、KW-104、KW-105
目标:
- GRL 支持
path/defaults/source/point/event/run_path。 - GRL 支持
operation/kind/path/process/start_action/end_action/run_operation。 - Path 编译为
PathPlanRequest。 - Operation 展开为 start action + path + end action。
- KDL 实现
planPath和validatePath。
输入:
- GRL Path。
- GRL Operation。
MotionSegmentRequest[]PathPlanRequest
输出:
PathPlanResultPathValidationResult- Path source map。
- Operation 展开结果。
验收重点:
- 空 Path 报错。
- 重复 point 名称报错。
run_path可生成PathPlanRequest。planPath按 segment 顺序规划。- 上一段终点关节作为下一段起点。
- 轨迹点合并后重新编号和更新时间。
- 保留
segmentId/targetId/sourceMap。 run_operation展开后 KDL 只处理 motion segment。
8. 阶段 6:IO、wait、pulse 和流程控制
关联任务:KW-106、KW-107
目标:
- 支持
io.di/do/ai/ao/gi/go/ri/ro。 - 支持
io.alias.*。 - 支持 IO 赋值。
- 支持
wait条件、timeout、on_timeout alarm/call。 - 支持
all/any/rising/falling/changed。 - 支持
pulse。 - 支持
if/elseif/else、while、for、switch/case/default。 - 支持
break/continue/label/jump。
输入:
- IO map。
- GRL IO/wait/pulse 语句。
- GRL 流程控制语句。
输出:
IoInstructionWaitInstructionBranchInstruction- pulse IR。
验收重点:
- IO 地址按 io_map 或允许范围校验。
- wait 条件可编译。
- pulse trace 必须包含置位和复位事件。
- 条件表达式必须为 bool。
break/continue位置合法。switch case为常量表达式且不重复。jump不能跳入非法块结构。- IO、wait、pulse 和流程控制不直接进入 KDL。
9. 阶段 7:proc、func、异常、报警、中断和多任务语法
关联任务:KW-108、KW-109
目标:
- 支持
proc、func、call、return。 - 支持参数方向
in/out/inout。 - 实现作用域和名称解析。
- 对递归给出 warning 或 error。
- 支持
alarm、raise、try/catch/finally。 - P1 语法保留
trap/interrupt/enable/disable/task cycle。
输入:
- GRL 子程序和函数。
- GRL 异常和中断语法。
输出:
CallInstructionReturnInstructionAlarmInstruction- 异常处理 IR。
- P1 语法 AST。
验收重点:
out参数所有正常返回路径赋值。inout/out实参必须为左值。func所有正常返回路径返回兼容类型。func默认不允许执行运动、wait、pulse、run_path、run_operation。- P0 支持 alarm/raise/try/catch 基础语义。
- P1 未实现语义必须在后处理或运行时报明确诊断。
10. 阶段 8:语义检查、IR、source map 和 KDL 集成
关联任务:KW-110、KW-012
目标:
- 实现 Symbol Table。
- 实现 Semantic Analyzer。
- 生成 Executable IR。
- 保留 source map。
- 完成 GRL 到 KDL request 的编译桥接。
- KDL 实现
estimateCycleTime和resampleTrajectory。 - 建立统一诊断分级:error、warning、info。
必须检查:
- 标识符重复或未声明。
- 类型是否匹配。
- 目标点类型是否适合运动指令。
movec是否缺少 via 点。- 圆弧三点是否重合或共线。
- 工具、坐标系、速度、过渡是否可解析。
- 单位是否正确。
- IO 地址是否存在。
- 子程序参数数量和类型是否匹配。
out参数是否赋值。func返回路径是否正确。break/continue/jump是否合法。- Path 是否为空或点名重复。
- Operation 是否引用不存在的 Path。
- 目标点是否可达。
- 关节是否超限。
- 后处理目标品牌是否支持所用语义。
输入:
- AST。
- Symbol Table。
RobotHandle。- KDL 检查结果。
输出:
- Executable IR。
- KDL request。
CycleTimeResult。MotionDiagnostic。
验收重点:
- 完整 GRL 示例可编译为 IR。
- IR 运动指令可映射到 KDL request。
- source map 能定位 GRL 行列、path point、operation。
estimateCycleTime只计算运动时间。resampleTrajectory时间和点序稳定。- 所有错误返回结构化诊断。
11. 阶段 9:三品牌后处理原型
关联任务:KW-111
目标:
- ABB RAPID 后处理。
- FANUC LS/TP 风格后处理。
- KUKA KRL 后处理。
- 支持
post_hint和@brand.*。 - 生成后处理转换报告。
输入:
- Executable IR。
- target/tool/frame/speed/zone 数据。
- post profile。
- brand metadata。
输出:
- ABB RAPID 程序。
- FANUC LS/TP 风格文本。
- KUKA KRL 程序。
- 转换报告。
验收重点:
movej/movel/movec三品牌 golden file 通过。- target/tool/frame/speed/zone 映射正确。
- IO/wait 基础映射正确。
post_hint和@brand.*只影响指定品牌。- 不支持语义进入转换报告,不能静默丢失。
12. 阶段 10:自动生成、往返和性能优化
关联任务:KW-112、KW-013
目标:
- 自动生成 GRL 时优先生成 target/path/operation。
- 点名稳定。
- path defaults 和单点 override 稳定。
- source metadata 稳定。
- 支持 compact/expanded 输出风格。
- 生成 GRL 可再解析回等价对象。
- KDL 底层导出稳定 C ABI。
- 高频 FK/IK 增加 TypedArray 版本。
- RobotHandle 缓存 FK、IK、Jacobian solver。
- 长路径分块计算或提供进度。
输入:
- 自动编程对象。
- Path/Operation 数据。
- KDL 批量计算输入。
输出:
- 稳定 GRL 文本。
- 可回读 AST/IR。
- C ABI / Embind API。
- TypedArray 批量接口。
- 性能报告。
验收重点:
- 同一输入重复生成结果一致。
- 生成文本可 diff。
- 生成文本可解析、语义检查并后处理。
- 单机器人 6 轴初始化小于 1 秒。
- 单次 FK 小于 1 ms。
- 单次 IK 平均小于 10 ms。
- 1000 个目标点批量可达性检查在可接受交互时间内完成。
- 10 秒轨迹按 4 ms 采样约 2500 点可稳定生成和回放。
13. 推荐集成顺序
1. KW-001 + KW-100 + KW-101
基础工程、Worker RPC、Lexer/Parser 骨架。
2. KW-002 + KW-102
URDF/标准模型和 GRL target/tool/frame/speed/zone。
3. KW-003 到 KW-006 + KW-103
运动指令编译到 KDL FK/IK/变换。
4. KW-007 到 KW-010
梯形速度、MOVEJ、MOVEL、MOVEC。
5. KW-104 + KW-011
Path 编译为 PathPlanRequest,KDL 生成整条路径。
6. KW-105 + KW-011
Operation 展开后复用 Path 规划。
7. KW-106 到 KW-110
完成 P0 语义检查和 IR。
8. KW-111
三品牌后处理原型。
9. KW-112 + KW-013
自动生成、往返、性能和批量优化。
14. 常用验证命令
实际命令以工程 package.json 和 CMake 配置为准。每个阶段至少应提供等效命令:
npm run typecheck
npm run test -- grl
npm run test -- kdl
npm run test -- integration
npm run test -- post
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
15. 阅读建议
- 先读本文,理解项目主要阶段和集成顺序。
- 再读
通用机器人项目功能与数据流程图.md,理解功能流和数据流。 - 需要接口细节时读
KDL_WASM计算接口设计.md。 - 需要语言语法和后处理细节时读
通用机器人编程语法规范.md。 - 需要执行级任务和证据时读
/home/meswork/kdl_work/work/working1下的实施文档。