8.0 KiB
LinuxCNC RTCP G-code 特点分析
1. 实现方式
这套 LinuxCNC 源码没有把 RTCP 作为独立的 G43.4/G43.5 代码实现。源码中的 RTCP 是运动学层能力:
src/emc/kinematics/trtfuncs.c实现 XYZAC 和 XYZBC 的正逆运动学。src/emc/kinematics/xyzac-trt-kins.c和xyzbc-trt-kins.c将对应运动学注册为 LinuxCNC kinematics。src/emc/kinematics/5axiskins.c实现 XYZBCW Bridge Mill 的 pivot-length、刀长和 W 轴变换。src/emc/kinematics/genhexkins.c的注释明确说明,tool-offset连接到motion.tooloffset.Z时实现 RTCP。
因此,G 代码主要承担四件事:
- 选择 TCP 或 identity 运动学。
- 设置刀长补偿和工件坐标系。
- 给出刀尖/工件坐标和刀具姿态。
- 用同步的直线、圆弧和旋转轴运动验证逆运动学结果。
2. M428/M429/M430 的作用
在 TRT、TDR、Bridge Mill 和 Hexapod 的 switchkins 配置中,常见映射如下:
| 命令 | 作用 |
|---|---|
M428 |
选择非平凡 TCP/RTCP kinematics,通常通过 M68 E3 Q1 设置 motion.switchkins-type=1,然后用 M66 E0 L0 同步 |
M429 |
选择 identity/trivkins,通常设置 motion.switchkins-type=0 |
M430 |
选择 userk,通常设置 motion.switchkins-type=2;它是扩展运动学入口,不等于 RTCP 本身 |
这几个 M 代码是 remap 出来的用户命令,不是 LinuxCNC 固定的通用 M 代码。使用前必须匹配 INI 中的 REMAP、SUBROUTINE_PATH 和 HAL 信号。例如 TRT 配置需要把 motion.analog-out-03 接到 motion.switchkins-type。
428remap.ngc 和 429remap.ngc 都会检查 motion.switchkins-type 是否存在,并在 task 模式下检查切换结果;缺少 HAL_PIN_VARS 或 HAL 网络时会输出 debug 信息并停止。这说明运动学切换被设计成有确认步骤的同步操作。
3. TRT 的 XYZAC 与 XYZBC
XYZAC
xyzac-trt 表示:
- 直线轴:X、Y、Z
- 倾转轴:A
- 旋转轴:C
- 典型结构:A 倾转台上安装 C 旋转台
trtfuncs.c 的正逆变换会使用:
- C 轴旋转中心:
x-rot-point、y-rot-point、z-rot-point - A 轴相对于 C 轴的偏置:
y-offset、z-offset - 当前刀长:
tool-offset
XYZBC
xyzbc-trt 表示:
- 直线轴:X、Y、Z
- 倾转轴:B
- 旋转轴:C
- 典型结构:B 倾转台上安装 C 旋转台
它使用 x-offset、z-offset 描述 B/C 旋转组件之间的几何偏置,并同样使用旋转中心参数和当前刀长。
两种运动学的共同点是:G 代码给出的 XYZ 和旋转姿态被当作笛卡尔 pose,逆运动学再计算实际关节位置。RTCP 的核心效果是改变 A/B/C 姿态时,刀尖 TCP 的空间位置仍按程序要求保持。
4. 刀长和 TCP 偏置
典型写法包括:
T1 M6
G43 H1 Z5.0
...
G49
或:
G43.1 Z#1
...
G49
含义分别是:
G43 Hn:使用刀具表中第 n 号刀的长度。G43.1:从当前 G 代码块的轴字设置动态刀长。G49:取消刀长补偿。
在 TRT 配置中,motion.tooloffset.z 通过 HAL 连接到 xyzac-trt-kins.tool-offset 或 xyzbc-trt-kins.tool-offset。这使得普通 G43/G43.1 的结果进入运动学变换,而不是只修改显示坐标。
cone.ngc 特别体现了动态刀长的使用:它先令 B/C 回到零位,再用 G43.1 Z#1 设置刀长,随后执行五轴旋转轨迹。这样可以避免切换刀长时旋转姿态带来的大幅关节变化。
5. 工件坐标系与旋转中心
RTCP 程序常见以下组合:
G53 G0 X0 Y0 Z...
G10 L20 P0 X0 Y0 Z... A0 C0
G54
G53用于在机器坐标下安全定位。G10 L20 P0根据当前姿态建立或重设工件坐标系。G54激活工件坐标系。
centering.ngc、helix_ac.ngc、helix_bc.ngc 和 xyzab-tdr-demo.ngc 还读取 HAL 变量,例如旋转中心和机械偏置。这类程序不是只验证 G 代码语法,而是验证“配置中的旋转中心、偏置和程序坐标”是否保持一致。
6. 轨迹类型
CAM 点列轨迹
boat-xyzac.ngc、boat-xyzbc.ngc 和 impeller-7bl-xyzac.ngc 是典型后处理器输出:
- 大量连续的
G1线段。 - 同一段轨迹同时改变 X/Y/Z 与 A/C 或 B/C。
boat-xyzbc.ngc和 impeller 程序使用G93逆时间进给,并在安全移动时切回G94。- 通过高密度姿态点逼近船体、叶轮等复杂曲面。
- 文件规模较大,适合验证连续五轴轨迹和逆运动学稳定性,不适合作为最小功能测试。
运动学切换测试
xyzac_switchkins_test_1.ngc、xyzac_switchkins_test_2.ngc、xyzac_switchkins_test_3.ngc 的重点是对照:
M429下的 identity 坐标。M428下的 TCP 坐标。- C 轴旋转后,同一个 X/Y/Z 指令对应的实际关节变化。
(debug,...)输出的预期坐标。- M1 可选停,用于人工检查切换前后的结果。
其中 test_3 直接写出切换前后的预期位置,例如 C=90 后进入 TCP 模式时,X/Y 位置会因旋转变换而改变。
螺旋和四象限测试
helix_ac.ngc 和 helix_bc.ngc 的主要模式是:
M429
G10 L20 ...
M428
G0 A... C...
G2 I... Z... P...
M429
它们在 TCP 模式下执行带旋转姿态的螺旋,再回到 identity 模式进行安全返回。xyzac_switchkins_sub.ngc 和 xyzbc_switchkins_sub.ngc 将该动作扩展到四个象限,并用参数传入安全高度、半径、圈数、进给率、姿态角和象限间距。
旋转中心保持测试
centering.ngc 先输出 HAL 中的旋转中心,然后进入 TCP 模式,在 C 轴每个角度执行一个小方形轨迹。它用于观察工件坐标中心是否在 C 轴旋转过程中保持固定。
参数化 Bridge Mill 测试
5axisgui.ngc 使用 O 代码循环和三角函数:
- B 轴分层改变倾角。
- C 轴分段改变方位角。
- 根据角度计算球面上的 X/Y/Z 位置。
- 用 W 轴执行钻削和退刀。
- 使用
G43将当前刀长送入 5axiskins 的 pivot length。
它更偏向运动学和可视化演示,代码结构比 CAM 输出更适合阅读和移植。
7. 这些程序的共同特点
- RTCP 由 kinematics 完成,程序行本身通常仍是普通
G0/G1/G2/G3加旋转轴字。 - TCP 模式和 identity 模式经常交替出现,前者用于加工或姿态变换,后者用于机器坐标定位、建立偏置和安全返回。
- 刀长不是单独的显示量,而是通过
motion.tooloffset.z进入逆运动学。 - 旋转中心、旋转组件偏置和工件坐标系是正确运行的必要条件;参数错误会直接表现为 TCP 漂移。
- 连续五轴 CAM 程序经常使用
G93,因为 XYZ 直线运动和旋转轴运动必须在同一段时间内完成。 - 许多程序明确使用
G53、高 Z 安全位置、G49和姿态归零,说明五轴 RTCP 程序对切换点和刀长变化较敏感。 - 大型船体和叶轮程序主要验证连续轨迹;小型 switchkins、helix、centering 程序主要验证几何和状态切换。
8. 筛选边界
以下内容没有放入本集合:
- 只出现普通
G43/G49、没有五轴非平凡运动学关联的通用铣削、车削和探测程序。 - SCARA、Puma、Melfa 等使用
M428/M429进行运动学切换,但源码没有将其定义为 RTCP 的示例。 - millturn 的
M428/M429,其作用是铣削/车削运动学切换,不是 TCP/RTCP。 - 只有
XYZAC或XYZBC文字、但配置使用trivkinsidentity 的普通五轴坐标示例。 G43.1工具测量程序本身,除非同时包含五轴姿态和 RTCP 运动学上下文。
筛选依据来自源码中的配置和运动学实现,尤其是:
configs/sim/axis/vismach/5axis/table-rotary-tilting/READMEconfigs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.txtconfigs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.txtconfigs/sim/axis/vismach/5axis/table-dual-rotary/READMEdocs/src/motion/5-axis-kinematics.adocsrc/emc/kinematics/trtfuncs.csrc/emc/kinematics/5axiskins.csrc/emc/kinematics/genhexkins.c