193 lines
8.0 KiB
Markdown
193 lines
8.0 KiB
Markdown
# 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 代码主要承担四件事:
|
||
|
||
1. 选择 TCP 或 identity 运动学。
|
||
2. 设置刀长补偿和工件坐标系。
|
||
3. 给出刀尖/工件坐标和刀具姿态。
|
||
4. 用同步的直线、圆弧和旋转轴运动验证逆运动学结果。
|
||
|
||
## 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 偏置
|
||
|
||
典型写法包括:
|
||
|
||
```gcode
|
||
T1 M6
|
||
G43 H1 Z5.0
|
||
...
|
||
G49
|
||
```
|
||
|
||
或:
|
||
|
||
```gcode
|
||
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 程序常见以下组合:
|
||
|
||
```gcode
|
||
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` 的主要模式是:
|
||
|
||
```gcode
|
||
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. 这些程序的共同特点
|
||
|
||
1. RTCP 由 kinematics 完成,程序行本身通常仍是普通 `G0/G1/G2/G3` 加旋转轴字。
|
||
2. TCP 模式和 identity 模式经常交替出现,前者用于加工或姿态变换,后者用于机器坐标定位、建立偏置和安全返回。
|
||
3. 刀长不是单独的显示量,而是通过 `motion.tooloffset.z` 进入逆运动学。
|
||
4. 旋转中心、旋转组件偏置和工件坐标系是正确运行的必要条件;参数错误会直接表现为 TCP 漂移。
|
||
5. 连续五轴 CAM 程序经常使用 `G93`,因为 XYZ 直线运动和旋转轴运动必须在同一段时间内完成。
|
||
6. 许多程序明确使用 `G53`、高 Z 安全位置、`G49` 和姿态归零,说明五轴 RTCP 程序对切换点和刀长变化较敏感。
|
||
7. 大型船体和叶轮程序主要验证连续轨迹;小型 switchkins、helix、centering 程序主要验证几何和状态切换。
|
||
|
||
## 8. 筛选边界
|
||
|
||
以下内容没有放入本集合:
|
||
|
||
- 只出现普通 `G43/G49`、没有五轴非平凡运动学关联的通用铣削、车削和探测程序。
|
||
- SCARA、Puma、Melfa 等使用 `M428/M429` 进行运动学切换,但源码没有将其定义为 RTCP 的示例。
|
||
- millturn 的 `M428/M429`,其作用是铣削/车削运动学切换,不是 TCP/RTCP。
|
||
- 只有 `XYZAC` 或 `XYZBC` 文字、但配置使用 `trivkins` identity 的普通五轴坐标示例。
|
||
- `G43.1` 工具测量程序本身,除非同时包含五轴姿态和 RTCP 运动学上下文。
|
||
|
||
筛选依据来自源码中的配置和运动学实现,尤其是:
|
||
|
||
- `configs/sim/axis/vismach/5axis/table-rotary-tilting/README`
|
||
- `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.txt`
|
||
- `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.txt`
|
||
- `configs/sim/axis/vismach/5axis/table-dual-rotary/README`
|
||
- `docs/src/motion/5-axis-kinematics.adoc`
|
||
- `src/emc/kinematics/trtfuncs.c`
|
||
- `src/emc/kinematics/5axiskins.c`
|
||
- `src/emc/kinematics/genhexkins.c`
|