Add AC/BC RTCP programs and 3D machine manager

This commit is contained in:
2026-09-20 12:31:12 +08:00
parent 1c1e5f9672
commit 8aab531b02
363 changed files with 53213 additions and 58 deletions

View File

@@ -0,0 +1,54 @@
# 五轴机床与 RTCP 教学课件
新增完整教材:[五轴RTCP与工件坐标:初学者完整讲义(72页A4)](../rtcp-beginners/五轴RTCP与工件坐标-初学者完整讲义.pdf)。系统补充原点/方向、G54配准、G代码逐字/逐行和真实关节计算。下方31页文件保留作投影概要;详细学习优先使用[完整版索引](../rtcp-beginners/README.md)。
已交付:[五轴机床与RTCP-教学课件.pdf](五轴机床与RTCP-教学课件.pdf),31 页、16:9 横向、中文可选择文本、目录书签。建议 60–90 分钟,适合投影或分两次授课。
可编辑/离线阅读源稿:[course.html](course.html)。原理图和机床截图在 `assets/`,各页目录在 [outline.json](outline.json)。整个目录可离线使用;PDF 内的官方资料链接需要联网。
## 核心理解
- 五轴通常是 XYZ 加 AC 或 BC,本课以刀具侧 XYZ、工件侧 A/B→C 的双转台桁架为例,不把六个字母都当成五个轴。
- 非 RTCP 的“独立”指不自动做旋转姿态引起的 XYZ 几何补偿,不代表不能同步插补,也不代表刀具与工件的相对位置不会改变。
- G 代码的数值需要经过单位、绝对/增量、工件偏置、刀具补偿等解释;不能不加条件地等同于真实编码器反馈。
- RTCP 根据目标位置、角度和机床几何换算关节位置。工件坐标方向随转台改变,但导轨方向并未旋转;旋转中心、轴间偏置及刀长也参与计算。
- “刀尖跟随”是相对工件的目标关系。保持同一编程点时,刀尖可在机床空间移动;切换模式时则应保持物理关节,允许坐标数值重新解释。
## 课程组织
| 页码 | 内容 |
| --- | --- |
| 1–5 | 对原始表述的修正、轴名、两条机械链、AC/BC 桁架模型 |
| 6–7 | 编程点、关节指令、实际反馈;G54/G90/G91 等影响 |
| 8–13 | 非RTCP/RTCP点追踪、C轴算例、工件方向与AC/BC倾转 |
| 14–17 | 旋转中心、偏置、父子顺序、刀长、相对刀轴方向 |
| 18–21 | 联动情形、中间轨迹、模式切换、TCP/倾斜平面/刀补区别 |
| 22–26 | G代码对照、浏览器实验、参数编辑、限位与常见误解 |
| 27–28 | 五道课堂练习及答案 |
| 29–31 | 公式推导、本项目完整参数式、课时安排和资料依据 |
## 验证与来源
- [numeric-evidence.json](numeric-evidence.json):实际加载仓库 WASM,12 个姿态逆解及正解回代、方向增量、切换模式、圆弧与弦线比较;附 WASM SHA256。
- [verification/layout.json](verification/layout.json):31 页逐页边界、图片加载与页面错误检查。
- [verification/acceptance.json](verification/acceptance.json):PDF 页数、文本/字体、书签、文件哈希及数值验证汇总。
- 原理示意图由 Matplotlib 绘制;机床图片来自本项目原创 GLB 渲染,没有使用许可不明的网络机床图片。
- 已核对 [LinuxCNC 五轴运动学](https://linuxcnc.org/docs/html/motion/5-axis-kinematics.html)、[Switchkins](https://linuxcnc.org/docs/html/motion/switchkins.html)、[CNC Machine Overview](https://linuxcnc.org/docs/html/gcode/machining-center.html),以及本地 `trtfuncs.c`、`control.c`、`428remap.ngc` 和 `429remap.ngc`。
本课主要数值例子使用零旋转中心/偏置/刀长差,以分离概念;第20页模式切换使用真实BC示例参数。图的正向变换采用本项目原生AC/BC约定,不据此决定真实电机接线正负。M428/M429 是本项目重映射,不是跨控制器通用标准。内容为仿真教学,不替代真实机床标定与操作规程。
## 重新生成
不修改应用源码、上游或已有本地改动。Matplotlib/PyPDF 仅安装在临时目录,没有新增项目依赖。
```bash
node scripts/generate_rtcp_teaching_data.mjs
PYTHONPATH=/tmp/rtcp-course-deps python3 scripts/generate_rtcp_teaching_figures.py
# 仅重新截图模型时需要 http://127.0.0.1:5174/ 开发服务;已有资产可直接复用。
PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs node scripts/capture_rtcp_teaching_models.mjs
python3 scripts/generate_rtcp_teaching_html.py
PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs node scripts/render_rtcp_teaching_pdf.mjs
PYTHONPATH=/tmp/rtcp-course-deps python3 scripts/verify_rtcp_teaching_pdf.py
```
换环境需准备 Python Matplotlib/PyPDF、Chrome、Playwright 及 Noto Sans CJK 字体;已交付的 PDF 不依赖这些工具。

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1,240 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>五轴机床与 RTCP:从各轴独立到刀尖跟随</title><style>
@page { size: 338.6667mm 190.5mm; margin: 0; }
* { box-sizing: border-box; }
html,body { margin:0; padding:0; background:#dce3e7; color:#23303a; font-family:"Noto Sans CJK SC","Noto Sans CJK JP",sans-serif; }
.slide { width:1280px; height:720px; padding:34px 54px 28px; background:#fff; position:relative; overflow:hidden; break-after:page; page-break-after:always; }
.slide:last-child { break-after:auto; page-break-after:auto; }
.chapter { color:#00877b; font-size:15px; margin:0 0 10px; font-weight:600; }
h1 { font-size:36px; font-weight:700; line-height:1.3; margin:0 0 24px; letter-spacing:0; }
h3 { font-size:23px; line-height:1.4; margin:0 0 14px; color:#00877b; }
p { font-size:22px; line-height:1.55; margin:0 0 17px; }
.body { height:498px; overflow:hidden; }
.cols { display:grid; grid-template-columns:1fr 1fr; gap:36px; }
.image-right { grid-template-columns: .95fr 1.1fr; gap:24px; }
.tight p { margin-bottom:0; font-size:20px; }
.small { font-size:17px; line-height:1.6; color:#53636d; }
.intro { font-size:22px; padding-bottom:8px; }
.takeaway { position:absolute; left:54px; right:54px; bottom:62px; background:#eaf5f2; border-left:5px solid #00877b; padding:10px 15px; font-size:19px; line-height:1.5; }
.footer { position:absolute; bottom:20px; left:54px; right:54px; display:flex; align-items:flex-end; justify-content:space-between; gap:20px; color:#6b7880; font-size:12px; line-height:1.5; border-top:1px solid #d8e1e6; padding-top:8px; }
.footer .source { max-width:1030px; }
.page-number { font-size:16px; color:#00877b; white-space:nowrap; }
figure { margin:0; min-width:0; }
figure img { width:100%; height:380px; object-fit:contain; display:block; }
figcaption { font-size:14px; line-height:1.5; margin-top:5px; color:#617079; text-align:center; }
.large-diagram img { height:306px; }
.large-diagram { margin-bottom:15px; }
.wide-diagram img { height:280px; }
.model-pair img { height:373px; }
.model-pair { margin-bottom:18px; }
table { border-collapse:collapse; width:100%; margin:8px 0 24px; font-size:19px; line-height:1.55; }
th { background:#eaf0f3; font-weight:600; text-align:left; border-bottom:2px solid #a5b8c1; padding:12px 14px; }
td { padding:13px 14px; border-bottom:1px solid #d8e1e6; vertical-align:top; }
td:first-child { font-weight:600; color:#2563b8; }
.compact { font-size:18px; }
.compact td,.compact th { padding:9px 12px; }
.equation { text-align:center; background:#f1f5f7; padding:14px 18px; font-size:26px; line-height:1.5; margin:14px 0 20px; }
.small-eq { font-size:23px; }
.flow { display:flex; gap:12px; align-items:center; margin:8px 0 25px; font-size:18px; }
.flow span { flex:1; background:#edf4f5; padding:13px 8px; text-align:center; }
.flow i { color:#00877b; font-size:25px; font-style:normal; }
.pair { display:flex; justify-content:space-around; }
.pair p { color:#00877b; }
.number { font-size:23px; color:#d45549; }
.blue { color:#2563b8; } .teal { color:#00877b; } .red { color:#d45549; }
pre { font-family:"DejaVu Sans Mono","Noto Sans Mono CJK SC",monospace; white-space:pre-wrap; background:#edf2f5; border-left:4px solid #2563b8; padding:18px; font-size:21px; line-height:1.8; margin:12px 0 20px; }
.math { font-family:"Noto Sans CJK SC",sans-serif; font-size:23px; line-height:1.65; }
ul,ol { margin:8px 0 14px; padding-left:29px; font-size:22px; line-height:1.6; }
li { margin-bottom:12px; }
.steps { font-size:21px; line-height:1.6; }
.steps li { padding-left:6px; margin-bottom:15px; }
.exercises,.answers { font-size:22px; line-height:1.65; }
.exercises li,.answers li { margin-bottom:19px; padding-left:7px; }
.vertical-flow { display:flex; flex-direction:column; align-items:center; gap:4px; font-size:22px; }
.vertical-flow span { padding:12px 16px; background:#f0f5f7; width:100%; text-align:center; }
.vertical-flow b { color:#00877b; }
.references p { font-size:18px; line-height:1.6; margin-bottom:13px; }
.references h3 { margin-bottom:10px; }
a { color:#136fb0; text-decoration:none; }
sub { font-size:.7em; }
.cover h1 { font-size:48px; margin-top:8px; margin-bottom:18px; }
.cover-grid { display:grid; grid-template-columns:1.12fr .88fr; gap:55px; }
.cover .subtitle { font-size:30px; color:#00877b; line-height:1.4; margin-bottom:22px; }
.cover-model img { height:402px; background:#242a2a; }
.rule { width:85px; height:5px; background:#d45549; margin:25px 0; }
.badge { color:#2563b8; font-size:17px; margin-top:21px; }
.slide[data-page="12"] figure img { height:345px; }
.slide[data-page="12"] .cols p { margin-bottom:12px; }
.slide[data-page="12"] .equation { margin:10px 0 14px; padding:10px 14px; }
.slide[data-page="30"] .equation { margin:8px 0; padding:8px 14px; font-size:24px; }
.slide[data-page="30"] table { margin-bottom:14px; }
.slide[data-page="30"] p { margin-bottom:10px; }
@media screen { .slide { margin:24px auto; box-shadow:0 3px 14px #0002; } }
@media print { html,body { background:#fff; } .slide { margin:0; box-shadow:none; } * { -webkit-print-color-adjust:exact; print-color-adjust:exact; } }
</style></head><body><section class="slide cover" data-page="1">
<div class="chapter">教学课件 · 2026.09</div><h1>五轴机床与 RTCP</h1>
<div class="body"><div class="cover-grid"><div><p class="subtitle">从“各轴独立”到“刀尖跟随”</p><p>看懂两个坐标系、一棵结构树、<br>一条运动学计算链。</p><div class="rule"></div><p class="small">适用对象:数控入门、五轴调试与仿真教学<br>主线机型:XYZAC / XYZBC 双转台桁架机床<br>建议课时:60–90 分钟,可拆成两讲</p><p class="badge">原理图解 + 数值演算 + 浏览器实验 + 练习答案</p></div><figure class="cover-model"><img src="assets/machine-bc.png" alt="原创 BC 桁架模型:XYZ 移动刀具,B–C 转动工件"><figcaption>原创 BC 桁架模型:XYZ 移动刀具,B–C 转动工件</figcaption></figure></div></div>
<div class="takeaway">核心问题:程序中的 XYZ,究竟是在告诉谁“去哪里”?</div>
<footer class="footer"><span class="source">图:本项目原创 GLB 模型;数值:LinuxCNC WASM 实算。</span><span class="page-number">01 / 31</span></footer>
</section><section class="slide " data-page="2">
<div class="chapter">01 · 先统一理解</div><h1>你的两点理解,怎样说得更准确?</h1>
<div class="body"><div class="cols"><div><h3>① 非 RTCP:直接轴映射</h3><p>在本课的双转台结构中,XYZ 带动刀具,A/C 或 B/C 带动工件。</p><p><b>只改变旋转轴指令,不自动触发 XYZ 的刀尖保持补偿。</b>但多个轴仍可在同一段 G 代码中协调插补。</p><p class="small">“独立”描述几何映射,不是运动时间完全无关。</p></div><div><h3>② RTCP:保持刀尖相对工件的轨迹</h3><p>控制器根据编程点、转台角度、旋转中心和标定参数,计算实际关节位置。</p><p><b>工件坐标方向随转台变换,XYZ 关节按需联动。</b>计算还包括平移与偏置,不能只旋转方向箭头。</p><p class="small">“跟随”是相对工件满足目标关系,不是世界坐标中的刀尖永远不动。</p></div></div></div>
<div class="takeaway">课程约定:先用零工件偏置、零刀长差的简化模型讲清原理,再加入实际参数。</div>
<footer class="footer"><span class="source">[S1][S2];结合本项目 AC/BC 模型。</span><span class="page-number">02 / 31</span></footer>
</section><section class="slide " data-page="3">
<div class="chapter">01 · 结构与轴名</div><h1>五轴 = 三个直线轴 + 两个旋转轴</h1>
<div class="body"><table class=""><thead><tr><th>名称</th><th>通常的轴线含义</th><th>本课中的执行机构</th></tr></thead><tbody><tr><td>X / Y / Z</td><td>沿三个正交方向平移</td><td>刀具侧的直线滑台、滑枕</td></tr><tr><td>A</td><td>绕 X 方向的轴线转动</td><td>AC 机床的外层倾转轴</td></tr><tr><td>B</td><td>绕 Y 方向的轴线转动</td><td>BC 机床的外层倾转轴</td></tr><tr><td>C</td><td>绕 Z 方向的轴线转动</td><td>装在倾转台上的内层旋转轴</td></tr></tbody></table><div class="pair"><p><b>AC 型:</b>X、Y、Z、A、C</p><p><b>BC 型:</b>X、Y、Z、B、C</p></div><p class="small">XYZABC 六个独立轴同时配置,通常应称六轴。A/B/C 是旋转轴的通用名称,本课不是三只转台轴同时工作。C 的轴线会被父级 A/B 倾转,倾转后不再固定平行于机床 Z。</p></div>
<div class="takeaway">从正方向看懂箭头前,先确认观察视角、父级坐标系和机床正负号约定。</div>
<footer class="footer"><span class="source">[S3] 轴命名;图中数值采用本项目原生变换约定。</span><span class="page-number">03 / 31</span></footer>
</section><section class="slide " data-page="4">
<div class="chapter">01 · 机械拓扑</div><h1>两条运动链,共用一个底座</h1>
<div class="body"><figure class="wide-diagram"><img src="assets/hierarchy.png" alt="本课桁架结构:X 带动整个横梁,Y 带动滑座,Z 带动滑枕与刀具。"><figcaption>本课桁架结构:X 带动整个横梁,Y 带动滑座,Z 带动滑枕与刀具。</figcaption></figure><div class="cols tight"><p><b class="blue">刀具分支</b><br>底座 → X → Y → Z<br>运动从父节点传给所有子节点。</p><p><b class="teal">工件分支</b><br>底座 → A/B → C → 工件<br>A/B 转动时,C 的轴线也随之倾斜。</p></div></div>
<div class="takeaway">这是一种五轴结构,不是所有五轴机床的通用拓扑;摆头、头台混合型需要不同模型。</div>
<footer class="footer"><span class="source">本项目 trt-xyz-gantry/1;旧标准型在 Z 下另有固定主轴箱节点。</span><span class="page-number">04 / 31</span></footer>
</section><section class="slide " data-page="5">
<div class="chapter">01 · 真实模型</div><h1>AC 与 BC:外层倾转轴不同</h1>
<div class="body"><div class="cols model-pair"><figure class=""><img src="assets/machine-ac.png" alt="AC 桁架:A 绕 X,内层 C 随 A 倾转"><figcaption>AC 桁架:A 绕 X,内层 C 随 A 倾转</figcaption></figure><figure class=""><img src="assets/machine-bc.png" alt="BC 桁架:B 绕 Y,内层 C 随 B 倾转"><figcaption>BC 桁架:B 绕 Y,内层 C 随 B 倾转</figcaption></figure></div><p class="small">两者都能实现刀尖相对工件的五轴轨迹,但同一角度数值对应的空间姿态不同;不能只把程序里的 A 字母换成 B,就认为加工姿态完全相同。</p></div>
<div class="takeaway">先识别“哪根轴装在哪根轴上”,再选择运动学模型。</div>
<footer class="footer"><span class="source">图:原创可下载 GLB;不是制造商的标定尺寸图。</span><span class="page-number">05 / 31</span></footer>
</section><section class="slide " data-page="6">
<div class="chapter">02 · 三种位置</div><h1>不要把“程序点、关节位置、实际反馈”混为一谈</h1>
<div class="body"><table class=""><thead><tr><th>量</th><th>回答的问题</th><th>典型表示</th></tr></thead><tbody><tr><td>编程位置 p</td><td>刀尖相对所用编程参考系要到哪里?</td><td>(X, Y, Z),加 A/C 或 B/C</td></tr><tr><td>关节指令 q</td><td>各执行轴需要到哪个位置?</td><td>(J0, J1, J2, J3, J4)</td></tr><tr><td>实际反馈 q_actual</td><td>编码器报告电机/机械轴在哪里?</td><td>真实设备中可能存在跟随误差</td></tr><tr><td>三维刀尖位置 r</td><td>把关节和模型组合后,刀尖在场景哪里?</td><td>显示坐标,不是独立运动控制源</td></tr></tbody></table><p class="small">理想仿真中“关节指令 = 关节反馈”常成立,但真实机床两者仍须区分。RTCP 的运动学把 p 转成 q;模型再把 q 投影成画面。</p></div>
<div class="takeaway">“实际位置”一词要说明是在说编程坐标、关节指令,还是编码器反馈。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">06 / 31</span></footer>
</section><section class="slide " data-page="7">
<div class="chapter">02 · G 代码含义</div><h1>非 RTCP 时,G 代码也不总等于机械绝对位置</h1>
<div class="body"><div class="flow"><span>程序字值</span><i>→</i><span>单位 / G90–G91</span><i>→</i><span>工件零点 / 补偿</span><i>→</i><span>运动学</span><i>→</i><span>关节指令</span></div><table class=""><thead><tr><th>因素</th><th>为什么不能直接等同</th></tr></thead><tbody><tr><td>G90 与 G91</td><td>G90 通常给绝对目标;G91 给相对增量,X10 不一定是到 X=10。</td></tr><tr><td>G54 等工件坐标系</td><td>工件零点可能偏离机床零点;程序 X10 可能对应机床 X30。</td></tr><tr><td>G92、刀长等补偿</td><td>控制器还需处理偏置和刀具参考点。</td></tr><tr><td>Identity 直接映射</td><td>在完成以上处理后,所选坐标与关节才按配置直接对应。</td></tr></tbody></table><p class="small">简化例:G54 原点位于机床 (20,30,0),无其他偏置/补偿,程序点 (10,0,5) 对应机床点 (30,30,5)。</p></div>
<div class="takeaway">只有把偏置、单位、增量方式、刀具基准都约定好,才能说“程序值直接对应轴位置”。</div>
<footer class="footer"><span class="source">[S2][S3];本页示例为无旋转的 Identity 情形。</span><span class="page-number">07 / 31</span></footer>
</section><section class="slide " data-page="8">
<div class="chapter">03 · 非 RTCP</div><h1>只转 C,工件点会离开刀尖</h1>
<div class="body"><figure class="large-diagram"><img src="assets/identity-no-follow.png" alt="俯视图:蓝色为固定机床坐标;绿色为工件;红色为刀尖。Z 保持 20 mm。"><figcaption>俯视图:蓝色为固定机床坐标;绿色为工件;红色为刀尖。Z 保持 20 mm。</figcaption></figure><p>起点刀尖对准转台上半径 100 mm 的标记点。只命令 C 从 0° 转到 90°,<b>XYZ 关节不补偿</b>,标记点转到另一处,刀尖仍在原来的机床位置。</p></div>
<div class="takeaway">轴可以独立驱动,不代表“刀具与工件的相对位置”不受其他轴影响。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">08 / 31</span></footer>
</section><section class="slide " data-page="9">
<div class="chapter">03 · RTCP</div><h1>同样只改变角度,刀尖跟住工件点</h1>
<div class="body"><figure class="large-diagram"><img src="assets/tcp-follow.png" alt="同一个工件局部点 p=(100,0,20),C=0° 与 C=90°;旋转中心和偏置取零。"><figcaption>同一个工件局部点 p=(100,0,20),C=0° 与 C=90°;旋转中心和偏置取零。</figcaption></figure><p>保持编程点 p 不变,只改变 C。控制器计算所需 XYZ 关节,让刀尖到达标记点的新机床位置。<b>点在工件坐标中不变,在机床坐标中沿圆弧移动。</b></p></div>
<div class="takeaway">判断“跟随”的参考系是工件,而不是屏幕或机床底座。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">09 / 31</span></footer>
</section><section class="slide " data-page="10">
<div class="chapter">03 · 数值算例 1</div><h1>C 转 90°:同一编程点,不同关节位置</h1>
<div class="body"><p class="intro">零偏置、零刀长差,p = (100, 0, 20) mm;A/B = 0°。</p><table class=""><thead><tr><th>C 角度</th><th>RTCP 编程 XYZ</th><th>RTCP 所需关节 XYZ</th><th>非 RTCP:只转 C 的关节 XYZ</th></tr></thead><tbody><tr><td>0°</td><td>(100, 0, 20)</td><td>(100.000, 0.000, 20.000)</td><td>(100, 0, 20)</td></tr><tr><td>45°</td><td>(100, 0, 20)</td><td>(70.711, 70.711, 20.000)</td><td>(100, 0, 20)</td></tr><tr><td>90°</td><td>(100, 0, 20)</td><td>(0.000, 100.000, 20.000)</td><td>(100, 0, 20)</td></tr></tbody></table><div class="equation">q<sub>x</sub> = 100 cos C  q<sub>y</sub> = 100 sin C  q<sub>z</sub> = 20</div><p class="small">C=90° 时,XYZ 关节目标是 (0,100,20)。这不是控制器偷偷修改了程序点,而是同一点在另一参考系中的正确位置。</p></div>
<div class="takeaway">RTCP:程序坐标可以不变,执行轴位置必须按姿态变化。</div>
<footer class="footer"><span class="source">numeric-evidence.json;原生 WASM IK/FK 双向核对,显示保留3位小数。</span><span class="page-number">10 / 31</span></footer>
</section><section class="slide " data-page="11">
<div class="chapter">04 · 坐标方向</div><h1>C = 45° 时,“沿工件 X 走”意味着什么?</h1>
<div class="body"><div class="cols image-right"><div><p>蓝色 X<sub>M</sub>、Y<sub>M</sub> 是机床固定方向;绿色 X<sub>W</sub>、Y<sub>W</sub> 随工件转动。</p><p>姿态保持 C=45°,编程增量:</p><div class="equation">Δp<sub>W</sub> = (10, 0, 0)</div><p>对应的机床直线轴增量:</p><div class="equation">Δq = (7.071, 7.071, 0)</div><p class="small">不是机床 X 导轨真的旋转了,而是 X、Y 导轨合成出所需空间运动方向。</p></div><figure class=""><img src="assets/rotated-direction.png" alt="图中工件原点为便于观看作了平移;增量不受原点平移影响。"><figcaption>图中工件原点为便于观看作了平移;增量不受原点平移影响。</figcaption></figure></div></div>
<div class="takeaway">你的“XYZ 方向随旋转改变”可理解为工件基向量在机床坐标中的方向改变。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">11 / 31</span></footer>
</section><section class="slide " data-page="12">
<div class="chapter">04 · 数值算例 2</div><h1>BC 倾转后,沿工件 X 会同时改变机床 X、Y、Z</h1>
<div class="body"><div class="cols image-right"><div><p>采用本课的正向变换约定:</p><div class="equation small-eq">R = R<sub>Y</sub>(B) · R<sub>Z</sub>(C)</div><p>当 B=30°、C=45° 时:</p><div class="equation small-eq">X<sub>W</sub> 在 M 中的方向<br>(0.6124, 0.7071, −0.3536)</div><p>所以沿 X<sub>W</sub> 前进 10 mm:</p><p class="number">Δq ≈ (6.124, 7.071, −3.536) mm</p><p class="small">倾斜后的坐标方向并不与任何一根直线导轨重合,需要三根直线轴合成。</p></div><figure class=""><img src="assets/bc-frame.png" alt="B=30°、C=45°;红点为工件点 p=(100,0,20) 的机床位置。"><figcaption>B=30°、C=45°;红点为工件点 p=(100,0,20) 的机床位置。</figcaption></figure></div></div>
<div class="takeaway">RTCP 中“沿工件 X”不是“只让 X 电机动”。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">12 / 31</span></footer>
</section><section class="slide " data-page="13">
<div class="chapter">04 · AC 与 BC 对照</div><h1>同样的 30° / 45°,不是同一个姿态</h1>
<div class="body"><p class="intro">仍取 p=(100,0,20) mm,所有旋转中心、偏置和刀长差为零。</p><table class=""><thead><tr><th>结构</th><th>父级倾转 × 子级旋转</th><th>倾转30°、C45°时的关节XYZ</th></tr></thead><tbody><tr><td>AC</td><td>R<sub>X</sub>(A) · R<sub>Z</sub>(C)</td><td>(70.711, 51.237, 52.676)</td></tr><tr><td>BC</td><td>R<sub>Y</sub>(B) · R<sub>Z</sub>(C)</td><td>(71.237, 70.711, -18.035)</td></tr></tbody></table><div class="cols"><div><h3>AC:绕 X 倾转</h3><p>C 先改变平面位置,A 再把局部 Y/Z 方向倾斜。</p></div><div><h3>BC:绕 Y 倾转</h3><p>C 先改变平面位置,B 再把局部 X/Z 方向倾斜。</p></div></div><p class="small">矩阵从右向左作用于列向量;这是坐标转换次序,不是要求 G 代码先运动 C 再运动 A/B。插补时两轴可以同时运动。</p></div>
<div class="takeaway">运动学类型选错,即使每个轴都会动,刀尖也不会沿正确的相对轨迹走。</div>
<footer class="footer"><span class="source">numeric-evidence.json;零偏置原生 WASM 结果。</span><span class="page-number">13 / 31</span></footer>
</section><section class="slide " data-page="14">
<div class="chapter">05 · 为什么还需要几何参数</div><h1>同样转 90°,绕不同的中心会到不同的位置</h1>
<div class="body"><figure class="large-diagram"><img src="assets/pivot-offset.png" alt="二维俯视例:起点相同,旋转角度相同,仅旋转中心不同。"><figcaption>二维俯视例:起点相同,旋转角度相同,仅旋转中心不同。</figcaption></figure><div class="equation">p<sub>M</sub> = O + R · (p − O)</div><p class="small">计算顺序:先减去旋转中心 → 旋转 → 再加回中心。不能只计算 R·p,否则相当于错误地绕坐标零点转。</p></div>
<div class="takeaway">RTCP 不只是“方向变换”,还包括“绕哪里转”的平移关系。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">14 / 31</span></footer>
</section><section class="slide " data-page="15">
<div class="chapter">05 · 轴间偏置与变换顺序</div><h1>C 轴装在倾转轴上:父子关系不能交换</h1>
<div class="body"><div class="cols"><div><h3>先看几何,再写方程</h3><p><b>P:</b>C 轴零位参考点。<br><b>D:</b>倾转轴与 C 轴之间的偏置。<br><b>T=P+D:</b>倾转轴参考位置。</p><p>C 旋转后的点还要随 A/B 倾转;偏置也必须放在正确的父子层级中。</p></div><div><h3>URDF / GLB 里的对应关系</h3><table class="compact"><thead><tr><th>节点</th><th>本项目零位 origin</th></tr></thead><tbody><tr><td>A/B,父节点为底座</td><td>P + D</td></tr><tr><td>C,父节点为 A/B</td><td>−D</td></tr><tr><td>work,父节点为 C</td><td>−P</td></tr></tbody></table></div></div><div class="equation small-eq">q<sub>XYZ</sub> = P + D + R<sub>tilt</sub> [ R<sub>C</sub> (p − P) − D ] (刀长差为零)</div><p class="small">这是本项目 AC/BC TRT 约定。更一般的机床使用完整的刚体变换链;不能把这三个参数关系硬套到摆头机床。长度在运行配置中为 mm,URDF 为 m。</p></div>
<div class="takeaway">R<sub>tilt</sub>R<sub>C</sub> 通常不等于 R<sub>C</sub>R<sub>tilt</sub>;机械安装顺序决定计算顺序。</div>
<footer class="footer"><span class="source">本地 trtfuncs.c;本项目 URDF profile / D11 / D12。</span><span class="page-number">15 / 31</span></footer>
</section><section class="slide " data-page="16">
<div class="chapter">05 · 刀长与受控点</div><h1>控制的是刀尖,不只是主轴箱</h1>
<div class="body"><figure class="large-diagram"><img src="assets/tool-length.png" alt="侧视示意:同一主轴参考位置,刀长不同会产生不同刀尖位置。"><figcaption>侧视示意:同一主轴参考位置,刀长不同会产生不同刀尖位置。</figcaption></figure><p>刀长改变时,为保持同一个刀尖目标,需要重新计算主轴参考点的位置。必须明确刀具长度的测量基准、正负号、刀补状态,以及模型上“tool”节点代表哪里。</p><p class="small">教学主算例采用刀长差为零。本项目原生 TRT 使用相对于 master tool 的 tool-offset 约定,不能把它直接当作任意模型网格的总长度。</p></div>
<div class="takeaway">同一组关节位置 + 不同刀具标定,不一定得到同一个刀尖位置。</div>
<footer class="footer"><span class="source">[S1][S3];实际使用以机床和控制器的刀具标定约定为准。</span><span class="page-number">16 / 31</span></footer>
</section><section class="slide " data-page="17">
<div class="chapter">06 · 姿态的物理意义</div><h1>双转台没有转动主轴,却改变了相对刀轴方向</h1>
<div class="body"><figure class="large-diagram"><img src="assets/orientation.png" alt="侧视:主轴在机床中保持竖直,工件随转台倾斜,二者的相对夹角改变。"><figcaption>侧视:主轴在机床中保持竖直,工件随转台倾斜,二者的相对夹角改变。</figcaption></figure><p>在本课双转台机床中,刀轴在机床坐标里的方向固定;工件转动后,<b>刀轴在工件坐标里的方向改变</b>。RTCP 根据指定角度协调刀尖位置,不会自动推断曲面法向。</p></div>
<div class="takeaway">RTCP 不是“自动让刀轴垂直于任意曲面”;姿态仍由程序、CAM 或操作者给定。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">17 / 31</span></footer>
</section><section class="slide " data-page="18">
<div class="chapter">06 · 三种常见联动情形</div><h1>分清“保持点”“沿方向走”“同时改变位置和姿态”</h1>
<div class="body"><table class=""><thead><tr><th>输入变化</th><th>RTCP 应做什么</th><th>观察重点</th></tr></thead><tbody><tr><td>XYZ 不变;A/B、C 改变</td><td>让刀尖保持同一工件编程点;XYZ关节可能联动。</td><td>刀尖与工件标记点不分离。</td></tr><tr><td>角度不变;XYZ 改变</td><td>沿当前工件参考系定义的方向移动。</td><td>机床多轴合成编程方向。</td></tr><tr><td>XYZ 与角度同时改变</td><td>执行变化的编程轨迹,同时维持角度对应的几何关系。</td><td>全过程相对轨迹正确,不只看终点。</td></tr><tr><td>XYZ 不变;点恰在 C 轴线上;只转 C</td><td>该点机床位置可以不变。</td><td>XYZ 不动不一定是故障。</td></tr></tbody></table><p class="small">“五轴联动”不要求每个时刻五轴速度都非零。非 RTCP 也能多轴同步加工:CAM/后置可以预先按指定机床几何计算轴目标,但这不等于控制器开启了实时刀尖补偿。</p></div>
<div class="takeaway">每次解释一个动作,先说清哪些程序量保持不变、哪些程序量在改变。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">18 / 31</span></footer>
</section><section class="slide " data-page="19">
<div class="chapter">06 · 全过程的重要性</div><h1>终点都正确,不代表中间轨迹正确</h1>
<div class="body"><div class="cols image-right"><div><p>同一个工件点绕 C 转动,理想半径为 100 mm。</p><p><b class="teal">RTCP:</b>刀尖跟随圆弧。<br><b class="red">不做 RTCP:</b>若只让 X/Y 线性插补到相同终点,刀尖可能走弦线。</p><table class="compact"><thead><tr><th>中间位置</th><th>X / Y</th></tr></thead><tbody><tr><td>圆弧,C=45°</td><td>70.711 / 70.711</td></tr><tr><td>弦线,50%进度</td><td>50.000 / 50.000</td></tr></tbody></table><p class="small">图示采用共同线性进度比较几何路径,不是断言所有控制器的加减速过程相同。</p></div><figure class=""><img src="assets/arc-chord.png" alt="中途差距 29.289 mm;起点和终点却完全相同。"><figcaption>中途差距 29.289 mm;起点和终点却完全相同。</figcaption></figure></div></div>
<div class="takeaway">验收 RTCP 要看连续采样、刀尖相对轨迹和关节约束,不能只比首末坐标。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">19 / 31</span></footer>
</section><section class="slide " data-page="20">
<div class="chapter">07 · 模式切换</div><h1>M429 ↔ M428:坐标可以变,机床不能无故跳动</h1>
<div class="body"><p class="intro">本项目 BC 示例:保持同一组物理关节,切换坐标解释。</p><table class=""><thead><tr><th>量</th><th>M429 / Identity</th><th>M428 / TCP</th></tr></thead><tbody><tr><td>物理关节 XYZ</td><td>(0.000, 0.000, 44.586)</td><td>(0.000, 0.000, 44.586)</td></tr><tr><td>物理关节 B / C</td><td>4.8675° / 179.88°</td><td>4.8675° / 179.88°</td></tr><tr><td>显示/解释的 XYZ</td><td>(0.000, 0.000, 44.586)</td><td>(-29.885, 27.975, 43.985)</td></tr><tr><td>三维刀尖</td><td>同一空间位置</td><td>同一空间位置</td></tr></tbody></table><div class="flow"><span>取当前关节 q</span><i>→</i><span>切换运动学</span><i>→</i><span>新模式正解 p</span><i>→</i><span>同步 TP / 解释器</span></div><p class="small">本例使用真实 BC 模型参数 P=(−18,14,12)、D=(22,0,−40) mm,刀长差0。切换之后再给运动指令,才产生运动。</p></div>
<div class="takeaway">若切换时强行保持旧 XYZ 数字并重新逆解,就可能错误地改变物理关节。</div>
<footer class="footer"><span class="source">[S2] 同步原则;本地 control.c::handle_kinematicsSwitch;WASM实算。</span><span class="page-number">20 / 31</span></footer>
</section><section class="slide " data-page="21">
<div class="chapter">07 · 控制器功能边界</div><h1>RTCP、旋转工作平面、刀补,不是同一个开关</h1>
<div class="body"><table class=""><thead><tr><th>功能</th><th>主要解决的问题</th><th>不要误认为</th></tr></thead><tbody><tr><td>RTCP / TCP 运动学</td><td>姿态变化时,按机床结构实现目标刀尖相对轨迹。</td><td>所有控制器都会以完全相同方式解释XYZ。</td></tr><tr><td>工件坐标系 / 倾斜工作平面</td><td>选择编程参考原点或定义编程方向。</td><td>只旋转工作平面就自动具备完整五轴RTCP。</td></tr><tr><td>刀长补偿</td><td>把刀具参考点换算到实际受控刀尖。</td><td>更换刀具后只更新网格外观就够了。</td></tr><tr><td>机床标定</td><td>确定中心、偏置、轴向、正负号和长度。</td><td>只要支持RTCP,错误几何参数也会自动纠正。</td></tr></tbody></table><p class="small">不同控制器可能分别使用 TCP、TCPM、RTCP 等名称,并把倾斜平面/刀补组合进不同指令。本课明确讲本项目的 AC/BC 双转台语义,不推定所有品牌一致。</p></div>
<div class="takeaway">换控制器时先核对“参考系、受控点、角度定义、指令组合”,不要只对照功能名称。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">21 / 31</span></footer>
</section><section class="slide " data-page="22">
<div class="chapter">08 · 程序对照</div><h1>同样写 C90,开关状态决定 XYZ 是否补偿</h1>
<div class="body"><div class="cols"><div><h3>M429:直接映射</h3><pre>G21 G90 G94
M429
G1 X100 Y0 Z20 A0 C0 F300
G1 C90 F60</pre><p>后一段只改变 C。<br>XYZ 关节保持 (100,0,20),<br>工件标记点会离开刀尖。</p></div><div><h3>M428:RTCP</h3><pre>G21 G90 G94
M428
G1 X100 Y0 Z20 A0 C0 F300
G1 C90 F60</pre><p>后一段保持编程 XYZ。<br>XYZ 关节变到 (0,100,20),<br>刀尖仍对准同一个工件点。</p></div></div><p class="small">仅为零偏置/零刀长差 AC 教学片段,起始角度和当前模态需已知;BC 用 B0。现有下载模型参数非零,不能期待相同数字。M428/M429 为本项目重映射,不是通用标准M码;F值只作插补示意,实际需按机床的旋转/混合进给规则设定。</p></div>
<div class="takeaway">程序字值相同,不代表开关前后表达的是同一个机械目标。</div>
<footer class="footer"><span class="source">本项目 xyzac/xyzbc-trt.ini,428remap.ngc / 429remap.ngc。</span><span class="page-number">22 / 31</span></footer>
</section><section class="slide " data-page="23">
<div class="chapter">08 · 浏览器课堂实验</div><h1>用 AC/BC 桁架模型验证,而不是只看公式</h1>
<div class="body"><ol class="steps"><li><b>加载:</b>打开“导入机床模型”,选 AC 或 BC 桁架示例;记录旋转中心与偏置。</li><li><b>准备:</b>确认空闲,开机并回零;选一个离 C 轴线有一定距离的刀尖位置。</li><li><b>Identity:</b>选择 M429,只 Jog A/B 或 C;观察 XYZ 关节是否保持。</li><li><b>切换:</b>停止后选择 M428;观察关节/刀尖不跳,XYZ 坐标可能变化。</li><li><b>TCP:</b>再次 Jog 旋转轴;观察 XYZ 关节按需补偿、刀尖相对工件点保持。</li><li><b>对照:</b>先停止,再切回 M429;重复方向相同的小幅 Jog,比较两种行为。</li></ol><p class="small">实验先用小幅角度并远离限位。记录的是“每次试验起点相对工件的同一点”;切换或重新定位后,不要把两个不同起点混作同一个目标。</p></div>
<div class="takeaway">同时观察三项:程序XYZ、J0…J4、刀尖与工件的相对关系。</div>
<footer class="footer"><span class="source">页面 http://127.0.0.1:5174/;浏览器仿真教学,不是机床现场操作规程。</span><span class="page-number">23 / 31</span></footer>
</section><section class="slide " data-page="24">
<div class="chapter">08 · 参数化实验</div><h1>改几何参数后,为什么仍应保留同一个模型?</h1>
<div class="body"><div class="cols"><div><h3>正确的数据流</h3><div class="vertical-flow"><span>参数表:中心 / 偏置</span><b>↓</b><span>有效 URDF:节点零位关系</span><b>↓</b><span>INI → Worker → WASM</span><b>↓</b><span>关节 → 原导入模型</span></div></div><div><h3>课堂观察</h3><ul><li>同一 GLB 的网格、材质和文件身份保持。</li><li>新的轴心与偏置应进入运行结构和运动学。</li><li>相同程序点和角度,可能得到不同的 XYZ 关节值。</li><li>参数改变后需重新回零并重新解析程序。</li></ul><p class="small">源GLB不自动改写;可保存INI记录参数。改变轴心不等于自动重建支架、铸件等CAD外形,也不提供碰撞检测。</p></div></div></div>
<div class="takeaway">模型保留和参数生效必须同时成立;只改外观或只改计算都会造成误导。</div>
<footer class="footer"><span class="source">本项目 D11 / E09:AC、BC各18个姿态/刀长样本验证。</span><span class="page-number">24 / 31</span></footer>
</section><section class="slide " data-page="25">
<div class="chapter">09 · 约束与故障</div><h1>“工件点可达”不等于“每个关节都没到限位”</h1>
<div class="body"><div class="cols"><div><h3>两层约束</h3><table class="compact"><thead><tr><th>约束</th><th>检查什么</th></tr></thead><tbody><tr><td>坐标限位</td><td>编程轴/坐标允许的范围</td></tr><tr><td>关节限位</td><td>实际执行机构的物理行程</td></tr><tr><td>动力学约束</td><td>速度、加速度等能力</td></tr></tbody></table><p>RTCP 旋转时,即使编程 XYZ 不变,补偿出来的 X/Y/Z 关节仍可能触及边界。</p></div><div><h3>本项目排障实例</h3><p>BC 配置允许较大的 B 坐标范围,但对应 JOINT_3 上限为 <b>50°</b>。</p><p>旧问题:越界 → 运动计算失败 → 事件时钟不同步 → Connection ERROR。</p><p>修复后:按关节约束停止,保留正确时钟,可松开并反向 Jog。</p></div></div><p class="small">本仿真对 RTCP 越界采用最后有效伺服样本停止,不等同于工业控制器的全路径限位预测与减速保护。范围和行为必须分别验证。</p></div>
<div class="takeaway">正常限位阻止是一条运动诊断;序号缺口或连接错误是软件故障,不是RTCP原理。</div>
<footer class="footer"><span class="source">本项目 R07 / E11;不据此宣称硬件安全或碰撞防护。</span><span class="page-number">25 / 31</span></footer>
</section><section class="slide " data-page="26">
<div class="chapter">09 · 常见误解</div><h1>六个问题,快速判断是否真正理解</h1>
<div class="body"><table class="compact"><thead><tr><th>说法</th><th>准确解释</th></tr></thead><tbody><tr><td>“非RTCP时各轴互相没有影响。”</td><td>没有自动补偿;但工件转动当然会改变它与刀具的相对位置。</td></tr><tr><td>“RTCP把X/Y/Z导轨转了。”</td><td>导轨不转,是工件基方向改变,由固定导轨合成空间运动。</td></tr><tr><td>“RTCP时XYZ永远不变。”</td><td>只在保持同一编程点时程序XYZ不变;关节XYZ通常变化。</td></tr><tr><td>“只要开RTCP,刀尖在空间就不动。”</td><td>刀尖可在机床空间移动,以保持它相对工件的目标关系。</td></tr><tr><td>“C转了但XYZ没动,一定坏了。”</td><td>目标点恰在C轴线上时可能正确,应先检查几何。</td></tr><tr><td>“切换模式时XYZ数字跳,必须修好。”</td><td>要检查关节和物理刀尖是否跳;新参考系里的数值改变可能正确。</td></tr></tbody></table></div>
<div class="takeaway">先说参考系,再说位置;先看结构,再说联动。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">26 / 31</span></footer>
</section><section class="slide " data-page="27">
<div class="chapter">10 · 课堂练习</div><h1>请先画箭头,再写结论</h1>
<div class="body"><ol class="exercises"><li><b>点追踪:</b>零偏置,C=0°,工件点 p=(80,0,10)。只转 C 到90°,分别写出 Identity 和 RTCP 的 XYZ 关节目标。</li><li><b>方向合成:</b>C=30°且倾转角为0°,沿工件 +X 方向走20mm,机床 X/Y 各应增加多少?</li><li><b>模式切换:</b>M429切到M428时,XYZ显示值变化、J0…J4不变、刀尖不动,是否正常?为什么?</li><li><b>偏置识别:</b>BC模型 C 的局部 origin=(-0.022,0,0.040)m,倾转轴 origin=(0.004,0.014,-0.028)m。求本项目 P、D,单位mm。</li><li><b>结构判断:</b>C节点错误地挂在Z滑枕下。只Jog X时会发生什么?为什么不能靠RTCP开关解决?</li></ol></div>
<div class="takeaway">建议分组讨论 8–10 分钟;答案在下一页。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">27 / 31</span></footer>
</section><section class="slide " data-page="28">
<div class="chapter">10 · 参考答案</div><h1>用“相对谁”检查每一步</h1>
<div class="body"><ol class="answers"><li><b>Identity:</b>(80,0,10);<b>RTCP:</b>(0,80,10)。前者刀尖留在机床原位置,后者继续对准同一工件点。</li><li><b>ΔX=20cos30°=17.321mm;ΔY=20sin30°=10.000mm。</b>方向向量长度仍为20mm,机床Z不变。</li><li><b>正常。</b>运动学切换重新解释当前物理状态。坐标可以变,关节和刀尖应保持。</li><li><b>P=T+U=(-18,14,12)mm;D=−U=(22,0,−40)mm。</b>先统一单位,再按父子关系相加,不能直接拿URDF的米当毫米。</li><li><b>C及工件会错误地随XYZ移动。</b>这是结构树错误,不是开关模式能修复的;需把A/B→C分支正确挂回底座。</li></ol></div>
<div class="takeaway">检查顺序:轴数 → 层级 → 单位/正负号 → 几何参数 → 运动学 → 程序与状态。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">28 / 31</span></footer>
</section><section class="slide " data-page="29">
<div class="chapter">附录 A · 数学推导</div><h1>从一根 C 轴,推到两根旋转轴</h1>
<div class="body"><div class="cols"><div><h3>绕 C 的平面变换</h3><pre class="math">x′ = x cos C − y sin C
y′ = x sin C + y cos C
z′ = z</pre><h3>AC:再绕 X 倾转 A</h3><pre class="math">q_x = x′
q_y = y′ cos A − z′ sin A
q_z = y′ sin A + z′ cos A</pre></div><div><h3>BC:再绕 Y 倾转 B</h3><pre class="math">q_x = x′ cos B + z′ sin B
q_y = y′
q_z = −x′ sin B + z′ cos B</pre><p>这里所有旋转中心、轴间偏置及刀长差为零,列向量采用右手正向变换。</p><p class="small">式中的 q 是关节目标;若导入的是其他结构、符号约定或参考点,必须重新建立变换链。</p></div></div></div>
<div class="takeaway">先学会解释“这一步在谁的坐标系中发生”,再记忆公式。</div>
<footer class="footer"><span class="source">与本地 trtfuncs.c 零偏置逆解一致;三角函数实际以弧度计算。</span><span class="page-number">29 / 31</span></footer>
</section><section class="slide " data-page="30">
<div class="chapter">附录 B · 本项目完整参数式</div><h1>加入旋转中心、偏置与 master-tool 刀长差</h1>
<div class="body"><div class="equation">D<sub>L</sub> = D + L e<sub>z</sub></div><div class="equation">q<sub>XYZ</sub> = P + D<sub>L</sub> + R<sub>tilt</sub> [ R<sub>C</sub> (p − P) − D<sub>L</sub> ]</div><table class="compact"><thead><tr><th>符号</th><th>AC</th><th>BC</th></tr></thead><tbody><tr><td>R<sub>tilt</sub></td><td>R<sub>X</sub>(A)</td><td>R<sub>Y</sub>(B)</td></tr><tr><td>D</td><td>(0, D<sub>y</sub>, D<sub>z</sub>)</td><td>(D<sub>x</sub>, 0, D<sub>z</sub>)</td></tr><tr><td>旋转关节</td><td>q<sub>A</sub>=A,q<sub>C</sub>=C</td><td>q<sub>B</sub>=B,q<sub>C</sub>=C</td></tr></tbody></table><p class="small">P为原生rot-point;L为本项目/原生TRT的tool-offset标定量;e<sub>z</sub>=(0,0,1)。本式返回关节XYZ,不是未经处理的网格刀尖世界坐标。G54等解释器偏置在输入p形成前已按控制器规则处理。</p><p class="small">这一刀长表达是本项目约定,不能替代任意控制器的通用刀补说明。主课例子L=0;实际机床应以标定模型及其完整前后向验证为准。</p></div>
<div class="takeaway">工程实现不在画面中“补一个偏移”;应让同一组结构数据贯穿解释器、运动学和模型。</div>
<footer class="footer"><span class="source">原生源码:linuxcnc/src/emc/kinematics/trtfuncs.c,xyzac/xyzbcKinematicsInverse。</span><span class="page-number">30 / 31</span></footer>
</section><section class="slide " data-page="31">
<div class="chapter">附录 C · 教学安排与依据</div><h1>怎样讲、怎样验证、怎样继续学习</h1>
<div class="body"><div class="cols references"><div><h3>建议授课节奏</h3><p>10分钟:结构、轴名与三种位置。<br>20分钟:C轴点跟踪、方向合成、AC/BC倾转。<br>15分钟:旋转中心、偏置、刀长与模式切换。<br>15分钟:浏览器实验与错误诊断。<br>10分钟:练习、答案和模型参数核对。</p><h3>本课验算</h3><p>12个姿态由真实WASM逆解计算,并通过正解回代;另核对C45°方向增量、BC切换示例及弧弦差。详见同目录 <code>numeric-evidence.json</code>。</p><p>图形为原创教学示意及本项目GLB截图,不用于制造尺寸标定。</p></div><div><h3>官方资料与本地实现</h3><p id="S1"><b>[S1]</b> <a href="https://linuxcnc.org/docs/html/motion/5-axis-kinematics.html">LinuxCNC · 5-Axis Kinematics</a><br>AC/BC结构、运动学及偏置。</p><p id="S2"><b>[S2]</b> <a href="https://linuxcnc.org/docs/html/motion/switchkins.html">LinuxCNC · Switchable Kinematics</a><br>模式切换、identityfirst、同步要求。</p><p id="S3"><b>[S3]</b> <a href="https://linuxcnc.org/docs/html/gcode/machining-center.html">LinuxCNC · CNC Machine Overview</a><br>轴名、坐标、受控点与协调运动。</p><p><b>本地:</b>trtfuncs.c;control.c;428remap.ngc / 429remap.ngc;docs/glb-machine/。M428=TCP、M429=Identity仅适用于本项目配置。</p><p class="small">资料核对日期:2026-09-18。不同版本/品牌的指令与坐标约定应另行核查。</p></div></div></div>
<div class="takeaway">一句话记忆:程序描述相对工件的目标,运动学把目标换算成各关节应该怎样动。</div>
<footer class="footer"><span class="source">五轴机床与 RTCP · 原创教学示意 · 以本课双转台结构为限</span><span class="page-number">31 / 31</span></footer>
</section></body></html>

View File

@@ -0,0 +1,481 @@
{
"report_id": "rtcp-teaching-numerics-v1",
"status": "verified",
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"convention": "Native AC: Rx(A) Rz(C); BC: Ry(B) Rz(C). Main teaching examples P=D=tool_offset=0, mm/deg.",
"cases": [
{
"coordinates": "XYZAC",
"samples": [
{
"tilt": 0,
"c": 0,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
100,
0,
20,
0,
0
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 0,
"c": 45,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
70.71067811865476,
70.71067811865474,
20,
0,
45
],
"forward": {
"x": 100,
"y": -7.105427357601002e-15,
"z": 20,
"a": 0,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 0,
"c": 90,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
6.123233995736766e-15,
100,
20,
0,
90
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 0,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 30,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
100,
-9.999999999999998,
17.320508075688775,
30,
0
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 30,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 45,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 30,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
70.71067811865476,
51.23724356957945,
52.67584713501614,
30,
45
],
"forward": {
"x": 99.99999999999999,
"y": -3.552713678800501e-15,
"z": 20.000000000000004,
"a": 30,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 90,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 30,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
6.123233995736766e-15,
76.60254037844388,
67.32050807568876,
30,
90
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 30,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
}
}
],
"xw_increment_10_at_c45": [
7.0710678118654755,
7.0710678118654755,
0,
0,
0
]
},
{
"coordinates": "XYZBC",
"samples": [
{
"tilt": 0,
"c": 0,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
100,
0,
20,
0,
0
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 0,
"c": 45,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
70.71067811865476,
70.71067811865474,
20,
0,
45
],
"forward": {
"x": 100,
"y": -7.105427357601002e-15,
"z": 20,
"a": 0,
"b": 0,
"c": 45,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 0,
"c": 90,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
6.123233995736766e-15,
100,
20,
0,
90
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 0,
"c": 90,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 0,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 30,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
96.60254037844388,
0,
-32.67949192431122,
30,
0
],
"forward": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 30,
"c": 0,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 45,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 30,
"c": 45,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
71.23724356957945,
70.71067811865474,
-18.034830983638596,
30,
45
],
"forward": {
"x": 99.99999999999997,
"y": 6.217248937900877e-15,
"z": 19.999999999999996,
"a": 0,
"b": 30,
"c": 45,
"u": 0,
"v": 0,
"w": 0
}
},
{
"tilt": 30,
"c": 90,
"programmed": {
"x": 100,
"y": 0,
"z": 20,
"a": 0,
"b": 30,
"c": 90,
"u": 0,
"v": 0,
"w": 0
},
"joints": [
10.000000000000004,
100,
17.32050807568877,
30,
90
],
"forward": {
"x": 100,
"y": -1.7763568394002505e-15,
"z": 20,
"a": 0,
"b": 30,
"c": 90,
"u": 0,
"v": 0,
"w": 0
}
}
],
"xw_increment_10_at_c45": [
7.0710678118654755,
7.0710678118654755,
0,
0,
0
]
}
],
"switch_example": {
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"physical": [
0,
0,
44.5858,
4.8675,
179.88
],
"tcp_pose": {
"x": -29.88468896947041,
"y": 27.97513943472579,
"z": 43.984618633524605,
"a": 0,
"b": 4.8675,
"c": 179.88,
"u": 0,
"v": 0,
"w": 0
},
"identity_pose": {
"x": 0,
"y": 0,
"z": 44.5858,
"a": 0,
"b": 4.8675,
"c": 179.88,
"u": 0,
"v": 0,
"w": 0
}
},
"chord_midpoint": {
"compensated": [
70.71067811865474,
70.71067811865474,
20
],
"uncompensated_joint_interpolation": [
50,
50,
20
],
"distance": 29.289321881345245
}
}

View File

@@ -0,0 +1,157 @@
[
{
"page": 1,
"chapter": "教学课件 · 2026.09",
"title": "五轴机床与 RTCP"
},
{
"page": 2,
"chapter": "01 · 先统一理解",
"title": "你的两点理解,怎样说得更准确?"
},
{
"page": 3,
"chapter": "01 · 结构与轴名",
"title": "五轴 = 三个直线轴 + 两个旋转轴"
},
{
"page": 4,
"chapter": "01 · 机械拓扑",
"title": "两条运动链,共用一个底座"
},
{
"page": 5,
"chapter": "01 · 真实模型",
"title": "AC 与 BC:外层倾转轴不同"
},
{
"page": 6,
"chapter": "02 · 三种位置",
"title": "不要把“程序点、关节位置、实际反馈”混为一谈"
},
{
"page": 7,
"chapter": "02 · G 代码含义",
"title": "非 RTCP 时,G 代码也不总等于机械绝对位置"
},
{
"page": 8,
"chapter": "03 · 非 RTCP",
"title": "只转 C,工件点会离开刀尖"
},
{
"page": 9,
"chapter": "03 · RTCP",
"title": "同样只改变角度,刀尖跟住工件点"
},
{
"page": 10,
"chapter": "03 · 数值算例 1",
"title": "C 转 90°:同一编程点,不同关节位置"
},
{
"page": 11,
"chapter": "04 · 坐标方向",
"title": "C = 45° 时,“沿工件 X 走”意味着什么?"
},
{
"page": 12,
"chapter": "04 · 数值算例 2",
"title": "BC 倾转后,沿工件 X 会同时改变机床 X、Y、Z"
},
{
"page": 13,
"chapter": "04 · AC 与 BC 对照",
"title": "同样的 30° / 45°,不是同一个姿态"
},
{
"page": 14,
"chapter": "05 · 为什么还需要几何参数",
"title": "同样转 90°,绕不同的中心会到不同的位置"
},
{
"page": 15,
"chapter": "05 · 轴间偏置与变换顺序",
"title": "C 轴装在倾转轴上:父子关系不能交换"
},
{
"page": 16,
"chapter": "05 · 刀长与受控点",
"title": "控制的是刀尖,不只是主轴箱"
},
{
"page": 17,
"chapter": "06 · 姿态的物理意义",
"title": "双转台没有转动主轴,却改变了相对刀轴方向"
},
{
"page": 18,
"chapter": "06 · 三种常见联动情形",
"title": "分清“保持点”“沿方向走”“同时改变位置和姿态”"
},
{
"page": 19,
"chapter": "06 · 全过程的重要性",
"title": "终点都正确,不代表中间轨迹正确"
},
{
"page": 20,
"chapter": "07 · 模式切换",
"title": "M429 ↔ M428:坐标可以变,机床不能无故跳动"
},
{
"page": 21,
"chapter": "07 · 控制器功能边界",
"title": "RTCP、旋转工作平面、刀补,不是同一个开关"
},
{
"page": 22,
"chapter": "08 · 程序对照",
"title": "同样写 C90,开关状态决定 XYZ 是否补偿"
},
{
"page": 23,
"chapter": "08 · 浏览器课堂实验",
"title": "用 AC/BC 桁架模型验证,而不是只看公式"
},
{
"page": 24,
"chapter": "08 · 参数化实验",
"title": "改几何参数后,为什么仍应保留同一个模型?"
},
{
"page": 25,
"chapter": "09 · 约束与故障",
"title": "“工件点可达”不等于“每个关节都没到限位”"
},
{
"page": 26,
"chapter": "09 · 常见误解",
"title": "六个问题,快速判断是否真正理解"
},
{
"page": 27,
"chapter": "10 · 课堂练习",
"title": "请先画箭头,再写结论"
},
{
"page": 28,
"chapter": "10 · 参考答案",
"title": "用“相对谁”检查每一步"
},
{
"page": 29,
"chapter": "附录 A · 数学推导",
"title": "从一根 C 轴,推到两根旋转轴"
},
{
"page": 30,
"chapter": "附录 B · 本项目完整参数式",
"title": "加入旋转中心、偏置与 master-tool 刀长差"
},
{
"page": 31,
"chapter": "附录 C · 教学安排与依据",
"title": "怎样讲、怎样验证、怎样继续学习"
}
]

View File

@@ -0,0 +1,268 @@
{
"report_id": "rtcp-teaching-pdf-v1",
"status": "verified",
"pages": [
{
"page": 1,
"characters": 260,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 2,
"characters": 352,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 3,
"characters": 345,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 4,
"characters": 222,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 5,
"characters": 198,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 6,
"characters": 359,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 7,
"characters": 396,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 8,
"characters": 211,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 9,
"characters": 209,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 10,
"characters": 476,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 11,
"characters": 282,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 12,
"characters": 313,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 13,
"characters": 401,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 14,
"characters": 209,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 15,
"characters": 416,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 16,
"characters": 277,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 17,
"characters": 223,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 18,
"characters": 407,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 19,
"characters": 307,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 20,
"characters": 482,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 21,
"characters": 412,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 22,
"characters": 456,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 23,
"characters": 437,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 24,
"characters": 324,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 25,
"characters": 402,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 26,
"characters": 369,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 27,
"characters": 407,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 28,
"characters": 398,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 29,
"characters": 387,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 30,
"characters": 465,
"width_pt": 960.0,
"height_pt": 540.0
},
{
"page": 31,
"characters": 650,
"width_pt": 960.0,
"height_pt": 540.0
}
],
"pdf": "五轴机床与RTCP-教学课件.pdf",
"bytes": 1949318,
"sha256": "61f7c6923b63ba687b1cb85eeca8688f66d2ee87abccfdc314babf799786e365",
"bookmarks": 39,
"embedded_fonts": {
"/AAAAAA+NotoSansCJKsc-Bold": true,
"/BAAAAA+NotoSansCJKsc-Bold": true,
"/CAAAAA+NotoSansCJKsc-Regular": true,
"/DAAAAA+DejaVuSansMono": true,
"/EAAAAA+DejaVuSansMono": true
},
"numeric_report_id": "rtcp-teaching-numerics-v1",
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"layout_report": "verification/layout.json",
"evidence": [
{
"path": "course.html",
"sha256": "1ff8f4aa3797e83421d0c23b380ef0cb267cd46b965dd98b37d055c7b908019f"
},
{
"path": "numeric-evidence.json",
"sha256": "ebfc8b3d579c144f29943aefa7565ca919027c733d4262e7e0f3c51a211ecf63"
},
{
"path": "outline.json",
"sha256": "48d31c947eb18b96c17ee7bc9345ffa671a88290e35e7bfaed8d271331feaa38"
},
{
"path": "verification/layout.json",
"sha256": "968f33a16651ca340697f348d4c680541fb114b316131140362b81d6a2a409cf"
},
{
"path": "assets/arc-chord.png",
"sha256": "947bfc50ca994ae58b63ed0b198048854690c402a8a2b48d72e306920bf5a93b"
},
{
"path": "assets/bc-frame.png",
"sha256": "b6c467d33eff25e4e02bd04b601388ee4beca460c47426cb906c2ce628dd1eb0"
},
{
"path": "assets/hierarchy.png",
"sha256": "cf76f72ffd315ad17567bf6de507d16c283d3a1882c6f70a9398a04434ccc989"
},
{
"path": "assets/identity-no-follow.png",
"sha256": "1ecb07bdeb7a5015b6c17b32fb3611bec78d8067fb93057d39d5f408eb166f80"
},
{
"path": "assets/machine-ac.png",
"sha256": "ec538e0c0ebe016a1f464ce519875b3338dd60867627ffad2e0a7cdfc425a0ab"
},
{
"path": "assets/machine-bc.png",
"sha256": "46c37c21ef8dbaad203d2aa930796cc96278d9371d28584ac7aade5064b39308"
},
{
"path": "assets/orientation.png",
"sha256": "56e9a6df913e805e07bd00a350f8da9eab4def2cfedaa3ce0cf1b191e65def74"
},
{
"path": "assets/pivot-offset.png",
"sha256": "fc378a8bf7aaf6b8969889bbd4a8f763bc71b01505d063402c0ea4251f06abcd"
},
{
"path": "assets/rotated-direction.png",
"sha256": "9fe171e5e6c95c5f81dd0b395a24351972da7e5d18a37d33e19a6ed9d0a0f645"
},
{
"path": "assets/tcp-follow.png",
"sha256": "875eba48ea1cb7b9f990ddc556d38cb4e855af77a3c29130f8c6c249fd3817c8"
},
{
"path": "assets/tool-length.png",
"sha256": "168941e33624f883b09c1cdf54b36ed6e31ba260c7f1abdc495fee3b54cc834a"
}
]
}

View File

@@ -0,0 +1,312 @@
{
"pages": [
{
"page": 1,
"title": "五轴机床与 RTCP",
"clipped": [],
"content_overflow": false,
"title_right": 428.75,
"images": [
{
"src": "assets/machine-bc.png",
"complete": true
}
]
},
{
"page": 2,
"title": "你的两点理解,怎样说得更准确?",
"clipped": [],
"content_overflow": false,
"title_right": 594.015625,
"images": []
},
{
"page": 3,
"title": "五轴 = 三个直线轴 + 两个旋转轴",
"clipped": [],
"content_overflow": false,
"title_right": 561.171875,
"images": []
},
{
"page": 4,
"title": "两条运动链,共用一个底座",
"clipped": [],
"content_overflow": false,
"title_right": 486.015625,
"images": [
{
"src": "assets/hierarchy.png",
"complete": true
}
]
},
{
"page": 5,
"title": "AC 与 BC:外层倾转轴不同",
"clipped": [],
"content_overflow": false,
"title_right": 488.75,
"images": [
{
"src": "assets/machine-ac.png",
"complete": true
},
{
"src": "assets/machine-bc.png",
"complete": true
}
]
},
{
"page": 6,
"title": "不要把“程序点、关节位置、实际反馈”混为一谈",
"clipped": [],
"content_overflow": false,
"title_right": 846.015625,
"images": []
},
{
"page": 7,
"title": "非 RTCP 时,G 代码也不总等于机械绝对位置",
"clipped": [],
"content_overflow": false,
"title_right": 773.21875,
"images": []
},
{
"page": 8,
"title": "只转 C,工件点会离开刀尖",
"clipped": [],
"content_overflow": false,
"title_right": 481.796875,
"images": [
{
"src": "assets/identity-no-follow.png",
"complete": true
}
]
},
{
"page": 9,
"title": "同样只改变角度,刀尖跟住工件点",
"clipped": [],
"content_overflow": false,
"title_right": 594.015625,
"images": [
{
"src": "assets/tcp-follow.png",
"complete": true
}
]
},
{
"page": 10,
"title": "C 转 90°:同一编程点,不同关节位置",
"clipped": [],
"content_overflow": false,
"title_right": 654.984375,
"images": []
},
{
"page": 11,
"title": "C = 45° 时,“沿工件 X 走”意味着什么?",
"clipped": [],
"content_overflow": false,
"title_right": 705.3125,
"images": [
{
"src": "assets/rotated-direction.png",
"complete": true
}
]
},
{
"page": 12,
"title": "BC 倾转后,沿工件 X 会同时改变机床 X、Y、Z",
"clipped": [],
"content_overflow": false,
"title_right": 798.921875,
"images": [
{
"src": "assets/bc-frame.png",
"complete": true
}
]
},
{
"page": 13,
"title": "同样的 30° / 45°,不是同一个姿态",
"clipped": [],
"content_overflow": false,
"title_right": 602.5,
"images": []
},
{
"page": 14,
"title": "同样转 90°,绕不同的中心会到不同的位置",
"clipped": [],
"content_overflow": false,
"title_right": 731.203125,
"images": [
{
"src": "assets/pivot-offset.png",
"complete": true
}
]
},
{
"page": 15,
"title": "C 轴装在倾转轴上:父子关系不能交换",
"clipped": [],
"content_overflow": false,
"title_right": 661.796875,
"images": []
},
{
"page": 16,
"title": "控制的是刀尖,不只是主轴箱",
"clipped": [],
"content_overflow": false,
"title_right": 522.015625,
"images": [
{
"src": "assets/tool-length.png",
"complete": true
}
]
},
{
"page": 17,
"title": "双转台没有转动主轴,却改变了相对刀轴方向",
"clipped": [],
"content_overflow": false,
"title_right": 774.015625,
"images": [
{
"src": "assets/orientation.png",
"complete": true
}
]
},
{
"page": 18,
"title": "分清“保持点”“沿方向走”“同时改变位置和姿态”",
"clipped": [],
"content_overflow": false,
"title_right": 882.015625,
"images": []
},
{
"page": 19,
"title": "终点都正确,不代表中间轨迹正确",
"clipped": [],
"content_overflow": false,
"title_right": 594.015625,
"images": [
{
"src": "assets/arc-chord.png",
"complete": true
}
]
},
{
"page": 20,
"title": "M429 ↔ M428:坐标可以变,机床不能无故跳动",
"clipped": [],
"content_overflow": false,
"title_right": 835.203125,
"images": []
},
{
"page": 21,
"title": "RTCP、旋转工作平面、刀补,不是同一个开关",
"clipped": [],
"content_overflow": false,
"title_right": 794.890625,
"images": []
},
{
"page": 22,
"title": "同样写 C90,开关状态决定 XYZ 是否补偿",
"clipped": [],
"content_overflow": false,
"title_right": 713.203125,
"images": []
},
{
"page": 23,
"title": "用 AC/BC 桁架模型验证,而不是只看公式",
"clipped": [],
"content_overflow": false,
"title_right": 718.671875,
"images": []
},
{
"page": 24,
"title": "改几何参数后,为什么仍应保留同一个模型?",
"clipped": [],
"content_overflow": false,
"title_right": 774.015625,
"images": []
},
{
"page": 25,
"title": "“工件点可达”不等于“每个关节都没到限位”",
"clipped": [],
"content_overflow": false,
"title_right": 810.015625,
"images": []
},
{
"page": 26,
"title": "六个问题,快速判断是否真正理解",
"clipped": [],
"content_overflow": false,
"title_right": 594.015625,
"images": []
},
{
"page": 27,
"title": "请先画箭头,再写结论",
"clipped": [],
"content_overflow": false,
"title_right": 414.015625,
"images": []
},
{
"page": 28,
"title": "用“相对谁”检查每一步",
"clipped": [],
"content_overflow": false,
"title_right": 450.015625,
"images": []
},
{
"page": 29,
"title": "从一根 C 轴,推到两根旋转轴",
"clipped": [],
"content_overflow": false,
"title_right": 525.96875,
"images": []
},
{
"page": 30,
"title": "加入旋转中心、偏置与 master-tool 刀长差",
"clipped": [],
"content_overflow": false,
"title_right": 744.5625,
"images": []
},
{
"page": 31,
"title": "怎样讲、怎样验证、怎样继续学习",
"clipped": [],
"content_overflow": false,
"title_right": 594.015625,
"images": []
}
],
"errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB