Files
linuxcncWebWASM/test_Rtcp/rtcp_analysis.md

193 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`