想象你要教会一个从未下过厨房的铁手徒弟做番茄炒蛋。你没法给它讲抽象理论——它听不懂;你也不能指望它看一遍视频就会——它没有常识。于是你拿起一只「魔法教鞭」:上面有小屏幕、按键,还有一个需要你一直捏住的安全开关。你轻轻抓住徒弟的手,带它从冰箱走到灶台、举起铲子、开火、倒油、翻炒。每到一个关键姿势,你按下「记录」,徒弟就把这一刻「印在脑子里」。全程你捏着那个安全开关——只要它动作不对劲,你立刻松开手指,时间瞬间「冻结」,整个世界停下来。这套「手把手示范 + 按键记录 + 安全兜底」的流程,就是工业机器人世界里最经典的现场编程方式:示教器编程(Pendant / Teach Pendant)。 这套方式看起来很像「教徒弟做菜」,但背后藏着严密的工程规范:教鞭(示教器)有哪些按钮、以谁的视角录点位(坐标系)、用哪种姿势走过去(运动指令)、菜谱里怎么加「如果锅干了就加水」的逻辑分支、如何整理备份菜谱本(程序管理)。掌握它,你就拿到了与机器人对话的第一语言。下面是整个知识版图的全景演示。

岗位关联

对 AI 从业者来说,示教器编程是理解机器人「数据从哪来、动作如何生成」的入口。无论你将来做视觉引导、数字孪生还是智能产线调度,最终都得与现场这道「手把手教」的工序对接——理解它,才能让 AI 方案真正落地到车间。

目录
  1. 可视化演示
  2. 示教器基础:认识你的「魔法教鞭」
  3. 坐标系设定:统一「方位语言」
  4. 运动指令:三种「走路姿势」
  5. 逻辑编程:给菜谱加「分岔路口」
  6. 轨迹示教:手把手留下的「脚印」
  7. 程序管理:打理你的「菜谱柜」
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示示教器硬件结构与安全操控机制、多坐标系标定方法(TCP/用户坐标)及运动指令与轨迹示教流程,切换模式理解工业机器人编程核心技能。

本节配有交互动效(进入视口后自动加载,约 3KB)。

示教器硬件结构与安全操控 急停按钮(红色蘑菇头)按下立即切断运动电源,是安全操作第一道防线 使能键(死人开关)三位置设计:松开停止、中间允许运动、完全按下停止 E-Stop → Power Cut | Enable: OFF→STOP, MID→RUN, ON→STOP 示教器是工业机器人最核心的人机交互设备,安全机制贯穿全部操作

示教器基础:认识你的「魔法教鞭」

在正式教徒弟做菜之前,你得先把自己手里的魔法教鞭摸透。这只教鞭长得像「游戏手柄 + 平板电脑」的合体:正面是一块能显示菜单、坐标和报错信息的屏幕,屏幕下方是密密麻麻的按键——有的是数字键盘,有的是「运动模式切换」,还有的是「记录点位」的快捷键。侧面往往藏着一个像扳机一样的开关,背后或上方还有一个红色大圆钮。不认识这些,你连「让徒弟迈一步」都做不到。

这三样东西各司其职:屏幕告诉你机器人的实时状态;按键负责「下达指令」和「记录位置」;红色大圆钮是急停开关——遇到任何不对劲,一巴掌拍下去,所有电机立即断电。而侧面那个「扳机」叫三态使能开关:它有三个位置,只有轻捏在中间位时,机器人电机才被允许上电;完全松开或使劲捏到底,都会立刻触发停机。这是工业安全最重要的设计:机器人绝不允许在操作者失去意识或慌乱的时候还能乱动。

示教器的安全逻辑可以抽象成一个「所有条件同时满足才放行」的布尔表达式:

所以,示教器的本质不是一个「遥控器」,而是一把带三重保险的「教学指挥棒」。你捏住它,徒弟才敢动;你松手或捏紧,它立刻站住。搞懂这把教鞭,后面的所有操作才真正安全。

Ssafe=Emid∧¬Epress∧¬EreleaseS_{safe} = E_{mid} \land \lnot E_{press} \land \lnot E_{release}
这个公式的意思是:使能开关处在中间位(操作者清醒地握着)、没有捏到底、也没有完全松开——三者同时成立,安全继电器才会吸合,机器人才有电。
  1. 中间位信号使能开关在中间位置时输出高电平,表示操作者「有意识地握持」,就像你一直稳稳捏住教鞭的中段。
    EmidE_{mid}
  2. 未捏到底如果操作者因紧张而死死攥紧开关,系统判定为异常,不予放行。
    ¬Epress\lnot E_{press}
  3. 未完全松开如果操作者撒手或晕倒,开关弹回释放位,同样立即切断动力,防止机器人「自由发挥」。
    ¬Erelease\lnot E_{release}
  4. 三者合取用逻辑「与」(AND)连接,任何一个条件不满足,安全输出就为 0,机器人断电静止。
    Ssafe=Emid∧¬Epress∧¬EreleaseS_{safe} = E_{mid} \land \lnot E_{press} \land \lnot E_{release}

坐标系设定:统一「方位语言」

做菜时你朝徒弟喊「把盐放在你的左手边」——可如果徒弟面朝你站着,它的左手正好是你的右手,鸡同鸭讲。机器人也一样:一个点位必须说清楚「以谁为参照」。这套「方位语言」,在机器人世界里就是坐标系。

机器人最常用的有四个坐标系。基座坐标系以机器人底座中心为原点,是机器人「心里的家」,每个关节的角度最终都要换算回这个坐标系;世界坐标系是车间地面上划定的「大地图」,用于多台机器人协同;工具坐标系建立在焊枪尖端或夹爪中心,说「工具的尖尖在哪里」就是用它;工件坐标系贴在工作台或零件上,工件摆放歪了,只需要重新定义工件坐标系的原点和方向,程序里的点位就能整体「跟着工件走」,而不必逐个重录。

示教器上显示的位置,本质上是把工具坐标系下的点经过旋转和平移「翻译」到基座坐标系下的结果。二维的旋转加平移可以写成这样:

下次在示教器上看到一串坐标时,你就知道:那不是一串随便的数字,而是「徒弟视角」与「你的视角」之间一次严谨的翻译。坐标系选错了,就好比徒弟把「我的左手」听成了「你的左手」,整盘菜的方向全反。

[XY1]base=[cos⁡θ−sin⁡θtxsin⁡θcos⁡θty001][xy1]tool\begin{bmatrix} X \\ Y \\ 1 \end{bmatrix}_{base} = \begin{bmatrix} \cos\theta & -\sin\theta & t_x \\ \sin\theta & \cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}_{tool}
通俗说:小坐标(工具系)里的点,先按角度 θ 转一下头,再平移一段距离,就落到了大坐标(基座系)里。这个矩阵就是把「徒弟自己的左手边」翻译成「你的左手边」的词典。
  1. 旋转子矩阵左上角的 2×2 矩阵负责「转头」,它把工具坐标系相对基座坐标系的角度差 θ 编码进坐标变换。
    [cos⁡θ−sin⁡θsin⁡θcos⁡θ]\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}
  2. 平移向量右上角的两个数表示两个坐标系原点之间的位移,就像徒弟和你的站位差了多远。
    [txty]\begin{bmatrix} t_x \\ t_y \end{bmatrix}
  3. 齐次坐标在二维坐标后面补一个 1,是为了把「旋转+平移」两种运算统一成一次矩阵乘法,这也是机器人学里最常用的数学技巧。
    [x,y,1]T[x, y, 1]^T
  4. 矩阵乘展开把乘法展开就能得到熟悉的坐标映射公式:新 X 等于原来的 x、y 各旋转投影后再加平移量。
    X=xcos⁡θ−ysin⁡θ+tx,Y=xsin⁡θ+ycos⁡θ+tyX = x\cos\theta - y\sin\theta + t_x, \quad Y = x\sin\theta + y\cos\theta + t_y

运动指令:三种「走路姿势」

徒弟学会了认方位,接下来要教它怎么走过去。从冰箱到灶台这一小段路,其实有多种走法:可以「先扭腰再迈腿」地大步走过去,也可以「端着托盘走一条笔直的线」防止汤汁洒出来,还可以「绕过地上的一滩水」画一道弧。机器人把这三种姿势做成了标准指令:MOVJ、MOVL、MOVC。

MOVJ 是关节运动,控制每个关节各自转到目标角度,末端走的轨迹是一段空间弧线——它最快,但路径不可控,适合在无障碍区域快速到位。MOVL 是直线运动,末端在三维空间严格走直线,适合涂胶、焊接、点焊这些「路线不能偏」的工艺。MOVC 是圆弧运动,通过三个点确定一段圆弧,让机械臂在拐角处平滑过渡,避免急刹车。每条运动指令还附带速度、加减速和精度等级:精度等级决定了机器人经过示教点时是「精准停住再走」还是「贴边掠过」,直接影响节拍。

MOVL 的直线路径本质是控制器在起点和终点之间不断插补中间点,数学上就是做一次线性插值:

三种走路姿势各有各的用武之地:追求效率用 MOVJ,追求路径用 MOVL,追求平滑用 MOVC。聪明的师傅会按工序搭配它们——正如你不会让徒弟举着滚烫的汤碗走弧线,也不会让它在空旷车间里非要走一条笔直的长路。选对姿势,菜才端得稳。

P(t)=P0+(P1−P0)⋅t,0≤t≤1P(t) = P_0 + (P_1 - P_0) \cdot t, \quad 0 \le t \le 1
从起点 P₀ 出发,朝着终点 P₁ 的方向均匀地走。t=0 时在起点,t=1 时到终点,中间每个瞬间都精确落在两点连成的直线上。
  1. 起点向量P₀ 是直线运动起始点的空间坐标,对应示教器中记录的第一个点位。
    P0=(x0,y0,z0)P_0 = (x_0, y_0, z_0)
  2. 方向向量P₁ − P₀ 是从起点指向终点的方向向量,它决定了直线往哪个方向延伸。
    P1−P0P_1 - P_0
  3. 插补比例t 从 0 渐变到 1,相当于「走路的进度条」,控制器每隔几毫秒按当前 t 计算一个新目标点发给电机。
    t∈[0,1]t \in [0, 1]

逻辑编程:给菜谱加「分岔路口」

徒弟学会了一个动作一个动作地走,但真正的菜谱从来不是直线背下来的。你会说:「如果锅太干了,就加一点水;否则继续翻炒。」「我数三下,停手。」这些「如果……否则……」「重复三次」的句子,就是程序的逻辑。没有它,机器人只是一台不断循环同一动作的机械,有了它,机器人成了会看火候的「智能厨师」。

示教器程序里的每一行不只是点位,还包含逻辑指令。IF 指令读入一个数字信号或计算结果,决定程序跳到哪一行执行;FOR/WHILE 构建循环,让一段动作重复指定次数;JUMP 可以跳转到任意行号,类似「菜谱第 3 步完成后再翻回第 1 步」;CALL 则调用子程序,比如把「洗锅」封装成一个公共子程序,任何主程序都能调用。而连接这一切与外界沟通的,是 IO 信号——机器人通过输入信号感知传送带到位没有、夹具夹紧没有,通过输出信号告诉下一台设备「我干完了」。

一个典型的联锁逻辑可以写成布尔表达式:

逻辑指令让示教程序从「一张动作清单」升级成「一棵决策树」。现场调试时最见功夫的,往往不是点位录得准,而是这些「分岔路口」判断得干净利落——什么时候该等、什么时候该跳、什么时候该报警,全藏在这一行行逻辑里。

Rout=(Istart∧¬Ialarm)∨ImanualR_{out} = (I_{start} \land \lnot I_{alarm}) \lor I_{manual}
意思是:机器人允许动作,当且仅当「启动信号来了、报警没响」,或者操作者切到了手动模式。任何一条满足都能让它动起来,但报警优先。
  1. 启动输入I_start 是来自 PLC 或按钮的启动信号,表示「传送带把工件送来了,可以开工」。
    IstartI_{start}
  2. 报警取反I_alarm 是报警信号,取反后变成「没有报警」这一有利条件。
    ¬Ialarm\lnot I_{alarm}
  3. 条件合取两个条件用 AND 连接,意味着「没报警」且「有启动信号」,自动模式才放行,避免带着故障硬干。
    Istart∧¬IalarmI_{start} \land \lnot I_{alarm}
  4. 手动旁路I_manual 是示教模式信号,与前面的自动条件做 OR。调试时即使没有启动信号,手动模式也能动——就像师傅说「这次我手把手带你,不用等锅热」。
    Rout=(…)∨ImanualR_{out} = (\ldots) \lor I_{manual}

轨迹示教:手把手留下的「脚印」

学做菜最直接的方式是什么?师傅站在徒弟身后,握着它的手,带着它完成一整道菜——每到一个关键姿势,徒弟就低头看看自己的手在哪,记下来。机器人示教(Teaching)正是这个动作的机械化:操作者握住示教器,把机器人末端推到目标位置,按下「记录点位」,一个脚印就留下来了。

点位示教通常用「手动操作」模式完成:先切到低速,用 MOVJ/MOVL 指令微调机器人姿态,还可以调整每次按键的移动量——粗调用大步距快速接近,精调用小步距毫米级逼近。当示教器上显示的坐标和角度都满意了,按下「记录」,这一点连同速度和精度参数就写进了程序行。把所有关键点依次记录完,机器人会自动在相邻点之间按设定的插补方式过渡,形成一条完整轨迹。

示教出的轨迹到底准不准,要看实际走到与示教点之间的偏差是否在容差范围内:

轨迹示教的终极目标是「快而准」,但两者常常互相打架。高手会只记录必要的关键点,把直线段拉长、拐角用圆弧过渡,并在示教完成后先空跑一遍、再带负载跑一遍。脚印留得越讲究,徒弟跑得越稳。

∥Pactual(i)−Ptaught(i)∥2≤ε\lVert P_{actual}(i) - P_{taught}(i) \rVert_2 \le \varepsilon
每一个被示教的目标点,机器人实际到达位置与记录位置之间的直线距离,必须在允许的误差 ε 之内。这个 ε 往往是零点几毫米。
  1. 示教目标点P_taught(i) 是你在示教模式下记录的第 i 个点位,也就是「脚印」本来的位置。
    Ptaught(i)P_{taught}(i)
  2. 实际到达点P_actual(i) 是机器人全速运行时,第 i 个点真实到达的位置,受惯性、速度和负载影响会略有偏离。
    Pactual(i)P_{actual}(i)
  3. 距离容差用二范数计算两点间的直线距离,并限制在容差 ε 内。ε 越小要求越高,但同时也牺牲节拍。
    ∥Pactual(i)−Ptaught(i)∥2≤ε\lVert P_{actual}(i) - P_{taught}(i) \rVert_2 \le \varepsilon

程序管理:打理你的「菜谱柜」

徒弟慢慢学会了炖排骨、炒时蔬、蒸鱼……几十道菜的做法全记在脑子里。可万一徒弟闹脾气「失忆」了怎么办?菜谱得抄一份备份;菜谱多了,还得分门别类、编好目录。示教器里的程序管理,就是这座「菜谱柜」。

程序管理的第一步是新建与命名:每个程序像一份独立菜谱,有文件名、注释和创建时间。第二步是编辑:你可以插入、删除、复制指令行,修改点位坐标、速度、精度,甚至批量替换——比如把程序里所有 MOVL 的速度从 100 改成 200,一次搞定。第三步是调试运行:新写的程序不能直接全速跑,正确的姿势是先低速单步执行,盯着每行坐标和 IO 状态变化,确认无碰撞、无跳变后再逐步提速;调试时还有「试运行」模式,让程序在安全门关闭后空跑一遍。第四步是备份传输:程序最终保存在控制器内部存储中,但为了防丢失和方便换线,要用 U 盘导出、局域网传输到上位机或制造执行系统。

程序执行时,控制器内部有一个「当前行指针」,它决定了下一行执行哪条指令:

打理好「菜谱柜」,才是示教编程的收尾功夫。一个没有命名规范、没有备份习惯、没有调试记录的现场,就像一本乱糟糟的菜谱——徒弟今天能炒出菜,明天未必能。程序管理看似不起眼,却是工程质量的真正分水岭。

PCnext={PC+1,if sequentialADDRjump,if jumpPC_{next} = \begin{cases} PC + 1, & \text{if sequential} \\ ADDR_{jump}, & \text{if jump} \end{cases}
正常情况下程序一行一行往下走,行号加一;遇到跳转或调用指令时,指针直接跳到指定的目标行。这就是「顺序执行」与「跳转」的底层机制。
  1. 程序计数器PC(Program Counter)保存当前执行到的程序行号,相当于菜谱本上夹着的书签。
    PCPC
  2. 顺序递增没有跳转时,下一行就是当前行加一,程序按书写的顺序逐条执行。
    PC+1PC + 1
  3. 跳转目标遇到 JUMP 或 CALL 指令时,PC 被改写为目标行地址 ADDR_jump,程序从这里继续。
    ADDRjumpADDR_{jump}

AI 应用场景

汽车焊装产线的轨迹示教与 AI 辅助

阶段:数据采集与人工校验(Correction)

解决的问题:传统方式下,焊装线上一台白车身有几百个焊点,工程师要逐一示教,耗费数天且容易漏点。AI 视觉系统可以自动识别焊缝特征并生成候选焊点与姿态,机器人工程师只需用示教器在关键路径上确认、微调,再让机器人走一遍验证。

具体案例:某汽车厂门盖线引入 3D 视觉扫描,AI 在仿真环境中预生成 200 个焊点的路径方案,工程师用示教器对其中 15 个高风险点进行手动修正,整体调试时间从 5 天压缩到 1.5 天,且焊点位置重复精度保持在 ±0.5mm 以内。

3C 产线快速换产中的工件坐标系复用

阶段:模型部署与参数配置(Deployment)

解决的问题:3C 电子产品更新换代快,产线频繁换型。传统做法是每换一次产品就重新示教全部点位,停产损失巨大。利用「工件坐标系」机制,把程序点位建立在工件坐标下,换产时只需用三点法重新标定工件坐标系,程序点位自动跟随新位置,无须逐点重录。

具体案例:某手机装配线上,A/B 两款手机壳共用同一台六轴机器人。工程师将 120 个装配点位全部记录在工件坐标系下,换型时只用示教器标定 3 个基准孔,整个换产时间从 8 小时降到 40 分钟。

数字孪生离线编程与现场示教校准

阶段:仿真验证与前端校准(Validation)

解决的问题:离线编程软件可以在电脑上仿真生成机器人程序,但仿真和现实总有偏差(工装误差、机器人本体误差)。AI 数字孪生平台负责生成初版轨迹,示教器负责最后的「真机校准」——操作者现场微调关键点位、重新标定工具坐标系,再把修正后的数据回传,形成闭环优化。

具体案例:某家电涂胶工位用离线编程生成胶路轨迹,AI 仿真显示无碰撞。到了现场,工程师用示教器将胶枪的 TCP(工具中心点)重新标定,修正了 0.8mm 的定位偏差,并将修正参数同步回数字孪生模型,使下一版程序更贴近现实。

Python 演示

python58 行
import numpy as np  def fk(q, l1=1.0, l2=0.8):    """正运动学: 已知关节角, 求末端坐标"""    x = l1 * np.cos(q[0]) + l2 * np.cos(q[0] + q[1])    y = l1 * np.sin(q[0]) + l2 * np.sin(q[0] + q[1])    return np.array([x, y])  def ik(px, py, l1=1.0, l2=0.8, elbow=1.0):    """逆运动学: 已知末端坐标, 求关节角, elbow=1 肘上 / -1 肘下"""    d2 = px * px + py * py    c2 = np.clip((d2 - l1 * l1 - l2 * l2) / (2.0 * l1 * l2), -1.0, 1.0)    q2 = elbow * np.arccos(c2)    q1 = np.arctan2(py, px) - np.arctan2(l2 * np.sin(q2), l1 + l2 * np.cos(q2))    return np.array([q1, q2])  def main():    q_start = np.array([-0.7, 1.3])    q_end = np.array([0.9, 0.7])    p_start = fk(q_start)    p_end = fk(q_end)    ts = np.linspace(0.0, 1.0, 100)     # MOVJ: 关节角度线性插值, 末端走弧线    traj_joint = np.array([fk(q_start + (q_end - q_start) * t) for t in ts])    # MOVL: 末端直线插值, 再反解关节角    traj_cart = np.array([        fk(ik(p_start[0] + (p_end[0] - p_start[0]) * t,              p_start[1] + (p_end[1] - p_start[1]) * t))        for t in ts    ])     print("起点:", p_start)    print("终点:", p_end)    print("关节空间轨迹首点:", traj_joint[0])    print("笛卡尔空间轨迹末点:", traj_cart[-1])     try:        import matplotlib        matplotlib.use("Agg")        import matplotlib.pyplot as plt        plt.figure(figsize=(6, 5))        plt.plot(traj_joint[:, 0], traj_joint[:, 1], "--", label="MOVJ path")        plt.plot(traj_cart[:, 0], traj_cart[:, 1], label="MOVL path")        plt.scatter([p_start[0], p_end[0]], [p_start[1], p_end[1]], color="red")        plt.legend()        plt.axis("equal")        plt.savefig("traj.png", dpi=80)        print("轨迹图已保存到 traj.png")    except ImportError:        print("未安装 matplotlib, 跳过画图")  if __name__ == "__main__":    main()
目的:用 40 行代码复现示教器中最核心的「关节插补 vs 直线插补」轨迹对比,帮助你直观理解 MOVJ 与 MOVL 的路径差异。
  1. def fk(q, l1=1.0, l2=0.8):正运动学函数:给定两个关节角度,计算出机械臂末端在空间中的坐标,这是示教器屏幕上显示坐标的基础。
  2. def ik(px, py, l1=1.0, l2=0.8, elbow=1.0):逆运动学函数:给定末端目标位置,反算出每个关节应该转多少度。elbow 参数决定「肘部朝上还是朝下」,对应反解的多解选择。
  3. q2 = elbow * np.arccos(c2)用余弦定理求第二个关节角,并通过 elbow 符号区分两种可能的臂型配置。
  4. traj_joint = np.array([fk(q_start + (q_end - q_start) * t) for t in ts])关节空间插值:把每个关节的角度从起点匀速线性变到终点,算出整条 MOVJ 轨迹。
  5. traj_cart = np.array([...])笛卡尔空间插值:先把末端位置从起点到终点做直线插值,再对每个中间点反解关节角,实现 MOVL 直线运动。
  6. plt.plot(traj_joint[:, 0], traj_joint[:, 1], "--", label="MOVJ path")用虚线画出关节运动路径,你会在图上看到一条弧线。
  7. plt.plot(traj_cart[:, 0], traj_cart[:, 1], label="MOVL path")用实线画出直线运动路径,末端严格走直线。

常见误区

误区示教器不是遥控器吗?那我按某个运动键,机器人就应该像我按游戏手柄那样立刻动起来。为什么按了没反应?

正解示教器不是「遥控器」,而是「教学指挥棒」。要让机器人动起来,必须同时满足三个条件:一是使能开关捏在中间位,二是机器人处于手动模式,三是按下的运动方向键在允许范围内。这就像教徒弟做菜时,你既要握住安全手柄,也要说清楚「迈左脚还是右脚」,缺一个徒弟都不会动。所有条件都满足后,机器人也是以低速、低力矩的状态「试探性」移动。

为何常见:因为游戏手柄和遥控器的「按了就响应」给人留下了深刻印象,而示教器的安全机制是反直觉的——它故意设计成「不轻易动」,这种行业安全惯例初学者很容易误读。

误区示教器上显示的坐标不就是 XYZ 三个数字嘛,基座坐标、工具坐标、工件坐标应该都差不多,随便用哪个记录点位不行吗?

正解坐标系选错,点位就会「跑偏」。把程序记录在工具坐标系下,换一个不同长度的焊枪,所有焊点位置全变;把点位记在工件坐标系下,工装转个角度程序照样精准。就像教徒弟「把盐放在你的左手边」,如果不规定「你的左手边」到底以谁为参照,徒弟伸错手是必然的。基座坐标是机器人的「出厂视角」,工具坐标是「手的视角」,工件坐标是「零件视角」,三者各管一段距离的翻译。

为何常见:人天生只习惯「以自己为参照」这一个视角,而机器人要求操作者随时切换「站在谁的角度说话」,这种视角切换的认知负担让初学者容易偷懒统一化。

误区MOVL 听起来更高级,直线运动应该比关节运动更快更准,所以能用到直线就尽量用 MOVL。

正解恰恰相反,MOVJ 通常比 MOVL 快得多。MOVJ 是每个关节独立地以最快协同方式转到位,末端走弧线;MOVL 为了保证末端严格走直线,控制器要不断做逆解、实时计算每个关节的角速度,机器人等于「压着速度」保持直线,自然更慢。这就像让徒弟在空旷场地放心跑(MOVJ)和端着满满一碗汤走得笔直(MOVL),后者一定更慢更累。

为何常见:名字里带「直线」让人下意识觉得更先进,实际上「快」来自关节空间的最优分配,而不是笛卡尔空间的直线约束。

误区为了让机器人走得准,我应该把路径上的点录得密密麻麻,点位越多越保险,误差越小。

正解点位过多反而有害:程序变长、执行变慢、每个点都要减速停留(或做精度过渡),节拍大幅下降;而且相邻点太密还会引入抖动,轨迹反而更毛糙。正确做法是只录关键点,直线段两端各录一个点,拐角用圆弧过渡,让机器人「贴着弧线飞过去」。真正决定精度的不是点的数量,而是插补算法和机械重复定位精度。

为何常见:人的直觉是「样本越多越准确」,但在离散点插补的运动控制里,多和密并不等于平滑和快,这是控制工程与直觉相悖的地方。

误区程序写好保存在示教器或机器人控制器里,它又不会丢,为什么还要导出来备份?这不是多此一举吗?

正解控制器内存可能因电池耗尽、升级、故障而丢失程序;示教器也可能损坏或被人误拿。备一份 U 盘导出文件,或者上传到产线服务器,相当于菜谱本多抄了几册。真正规范的项目还会有版本管理:今天调过的速度、明天的点位修正,都留档可追溯,下次换产直接调对应版本,比现场重新示教快得多。

为何常见:人总是对「存在本地设备里的东西」有安全感,直到设备出故障才后悔。现场工程师见过太多「程序丢了从头录」的惨案,备份习惯是靠教训养成的。

面试题

Q1. 三态使能开关处于哪个位置时,机器人电机才被允许上电运动?

单选题 · easy

  • A.完全按下位置
  • B.完全松开位置
  • C.中间位置← 正确答案
  • D.任意位置即可

答案:C。使能开关的三态分别是「松开」「中间」「按到底」,只有中间位表示操作者清醒且有意识地握持,机器人才允许上电。A 和 B 都是触发安全停机的状态,D 显然错误。这就像教鞭的安全手柄:只有稳稳捏住中段,徒弟才敢迈步。

Q2. 以下哪种运动指令会让机器人末端在空间中严格走直线?

单选题 · easy

  • A.关节运动
  • B.直线运动← 正确答案
  • C.圆弧运动
  • D.自由运动

答案:B。直线运动 MOVL 通过控制器不断插补,保证末端沿直线路径走,适合涂胶焊接。关节运动末端走弧线,圆弧运动走指定圆弧,自由运动不是标准指令。类比起来,只有「端着汤碗走直线」才是 MOVL 的姿态。

Q3. 下列哪些属于示教器上保障人身安全的功能?

多选题 · easy

  • A.急停按钮← 正确答案
  • B.三态使能开关← 正确答案
  • C.安全围栏信号← 正确答案
  • D.USB 接口

答案:ABC。急停按钮瞬间切断动力,使能开关保证操作者主动握持,安全围栏信号在自动模式下防止有人闯入。USB 接口是数据传输功能,与人身安全无关。三者像教徒弟时的「救命闸、防呆锁、隔离门」三道防线。

Q4. 工具坐标系标定的主要目的是什么?

单选题 · mid

  • A.让工具尖点被准确建模← 正确答案
  • B.让机器人运行速度变得更快
  • C.让程序行数大幅度减少
  • D.让电机温度保持恒定

答案:A。工具坐标标定是为了让控制器知道焊枪尖、夹爪中心相对法兰的精确位姿,从而让「工具尖尖」移动跟手。速度由工艺参数决定,行数与编程习惯有关,温度是散热问题。相当于给徒弟量好手上铲子的长度和角度,炒菜才不偏。

Q5. 关于 MOVJ 与 MOVL 的说法,以下哪项正确?

单选题 · mid

  • A.MOVJ 末端轨迹可控且定位最快
  • B.MOVL 末端走直线路径更稳定← 正确答案
  • C.MOVJ 末端必须走直线
  • D.MOVL 运动速度一定最慢

答案:B。MOVJ 各关节联动,末端路径是弧线、路径不可控,但通常最快,所以 A、C 错误。MOVL 末端走直线、路径稳定,B 正确。D 说「必然最慢」太绝对,速度还与设定值和距离有关。对应到做饭:跑步过去是 MOVJ,端汤走直线是 MOVL。

Q6. 下列哪些是工业机器人常用的坐标系?

多选题 · mid

  • A.基座坐标系← 正确答案
  • B.工具坐标系← 正确答案
  • C.工件坐标系← 正确答案
  • D.气压坐标系

答案:ABC。基座坐标系固定于机器人底座,工具坐标系建立在末端工具上,工件坐标系附着于零件或夹具,三者是最常用的三套「方位语言」。气压坐标系不存在,是气压传感器而非坐标参考系。就像做菜时的「自己、手边、菜板」三个参照维度。

Q7. 工件坐标系被重新标定后,原程序中点位坐标的变化是?

单选题 · mid

  • A.所有点位需要重新示教
  • B.点位自动跟随新坐标系← 正确答案
  • C.点位值会随机漂移
  • D.程序行数必须重写

答案:B。示教点位记录在工件坐标系下,重标定相当于把整个「菜板」重新放正,菜板上所有记号的位置自动跟着新基准走,程序不用改。A 是误解,C 是随机错误,D 与坐标无关。这正体现了工件坐标系的设计价值。

Q8. 对两连杆机械臂做逆运动学求解时出现两个解,如何确定选哪一个?

单选题 · hard

  • A.随机挑选其中一个即可
  • B.按肘部姿态约束来挑选← 正确答案
  • C.两个解必然完全相同
  • D.以工具坐标原点大小为准

答案:B。两连杆反解一般有两个解:肘部朝上和肘部朝下。选哪个取决于机器人当前的臂型配置和避障需求,工程上通过 elbow 参数或连续运动约束确保不跳变。随机选会致轨迹突变;两解只有在特殊退化位置才重合;D 与本题无关。

Q9. 下列哪些是优化机器人示教轨迹节拍的有效手段?

多选题 · hard

  • A.删除冗余的示教点← 正确答案
  • B.拐角处使用圆弧过渡← 正确答案
  • C.全程无限制提高速度
  • D.合并相近的直线段← 正确答案

答案:ABD。删除冗余点减少停顿,圆弧过渡替代直角减速,合并相近直线段减少指令切换开销,都能提升节拍。但 C 错误:速度受电机能力、工艺质量和安全规范三重限制,「无限制提速」只会伤设备或破坏工艺。就像做菜不是全程猛火,该大火大火、该收汁收汁。

Q10. 某焊缝在基坐标系下的位置为 (300, 0, 500),工具坐标系原点相对基坐标系平移为 (0, 0, 100),则焊缝在工具坐标系下的位置是?

单选题 · extreme

  • A.(300, 0, 400)← 正确答案
  • B.(300, 0, 600)
  • C.(0, 0, 100)
  • D.(300, 0, 500)

答案:A。工具坐标系相对基坐标系只做了 Z 方向 +100 的平移。把基系下的点减去这个平移:Z 方向 500 − 100 = 400,X、Y 不变,所以答案是 (300, 0, 400)。这相当于徒弟站在比你高一米的台子上,你看它手里的菜,要把这个高度差减掉。C 是工具原点的位置,B 是加反了,D 是没变换。