产业用机器人示教方法及其应用
Back to Top为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。
本文是 2025 年夏季接力连载第 9 天的文章。
笔者目前从事机器人系统开发(机器人 SI)。开发用于驱动机器人的程序(机器人语言)以及与机器人联动进行控制的程序(如 C# 等)。本文将介绍如何编写机器人程序,以及如何在 PC 环境下与机器人联动。
一般的产业用机器人程序的创建方法
#产业用机器人一般使用示教操作盘[1]来创建机器人程序。
- 将机器人的 TCP[2] 对准目标位置
- 通过沿 X、Y、Z 轴移动 TCP 或调整机器人的各关节角度来对准位置
- 将当前位置录入为示教点[3],并指示移动方式(移动速度或插补[4] 方法等)
- 点击“添加移动命令”等按钮来指定移动方式
- 指示其他命令
- 指定机器人程序提供的特殊命令(数学函数、等待处理、同步处理、坐标变换等)
- 若需进行手抓开闭或与外部设备联动,则通过 IO[5] 操作信号
- 编写流程命令(顺序执行、条件分支、重复等)
- 定义变量并进行状态管理
使用示教操作盘进行示教类似于软件工程师在 IDE 中编辑程序。通过示教操作盘示教的程序将在机器人所连接的机器人控制器[6]上执行,并重现其动作。这被称为示教-回放(Teaching-Playback)。
此外,由于编写程序时实时驱动机器人,也称为在线示教方式。
如果要在机器人上执行定型化处理,则使用示教-回放。它以极高的精度(例如 ±0.1mm 以下)精确地跟踪指定位置。在自动化生产线上,这是常见的方式。
另一方面,由于示教点数据与机器人程序一起写入[7],要修正示教点或添加、删除示教位置,需要修改机器人程序。每个示教数据都需要创建对应程序,导致机器人程序数量增多,维护性可能变差。
示教的种类
#示教有多种类型。
在线示教
#使用示教操作盘,在实际驱动机器人移动的同时创建机器人程序的示教方式。
优点
#- 示教的基本方法
- 所有类型的产业用机器人均可进行在线示教
缺点
#- 需要前往有机器人的现场,独占机器人进行程序编写
- 需要停止生产线
- 因为要驱动实物,因此需要格外注意,防止碰撞等
离线示教
#在没有机器人的环境中使用仿真器等进行示教。在仿真环境中同时运行机器人模型和示教操作盘软件来进行机器人程序的示教。
优点
#- 可以在办公桌上编写机器人程序
- 可在仿真器上进行机器人动作确认,因此安全
- 如果在各 PC 上搭建仿真环境,多人可以同时编写机器人程序
- 可以在编辑器等中直接编写机器人程序本身,然后导入到仿真器进行动作确认
缺点
#- 需要确保生产线与机器人位置及所使用夹具、工具等设置一致
- 如果要通过 IO 等与外部系统联动,需要创建用于模拟外部系统的桩程序
- 使用仿真器时的许可费用较高(仿真器本身免费,但需要一次性购买或年度订阅等)
直接示教
#直接示教是通过手动推动机器人臂进行示教,创建机器人程序。因为属于在线示教的一种,其优缺点与在线示教相同。在协作机器人(可与人一起作业的机器人)中,很多机器人支持直接示教。
优点
#- 操作直观
- 如果只是设置示教点,即使没有示教操作盘也能进行示教
缺点
#- 由于需手动推动,机器臂的位置和姿态精度取决于作业者
无示教
#近年来,据说也出现了可以通过 AI 自动进行示教的无示教环境。
示教方式的区分与选择
#在生产现场,操作员主要以在线示教为主。而在进行机器人 SI 时,由于利用仿真环境进行开发,因此更多地使用离线示教。我们软件工程师的目标不是进行示教,而是开发利用机器人自动化系统,习惯于在熟悉的 IDE 或编辑器中编写机器人程序。因此,相较于生产现场的操作员,我们在示教和使用示教操作盘方面并不太擅长😅
机器人程序的执行方式
#通过示教创建的机器人程序由机器人控制器解释并执行。
- 回放方式
- 以原样重现示教内容的方式
- 将机器人程序编译为二进制格式,机器人控制器直接执行
- 是产业用机器人中常见的执行方式
- 脚本方式
- 由解释器逐行解释执行脚本(机器人程序)的方式
- 应用于对灵活性和易开发性有要求的协作机器人等
- 可以按上下文单元自动生成脚本并执行
- 相较于回放方式,执行速度往往较慢
可以将回放方式类比为 C# 等编译型语言的执行方式,将脚本方式类比为 Python 等脚本语言的执行方式。虽然说是编译,但由于会自动、瞬间完成,无需过于关注。
但是,两种执行方式都是机器人厂商的专有语言。虽然笔者总想象如果能用 C# 或 Python 来编写机器人语言会多么便利,但却有不能这样做的原因。
机器人程序看似是按行从上到下逐次执行,但其实并非如此。为了对示教点之间的移动方式进行插补,内部需要对程序进行预读取。
若将机器人臂从当前位置移动至 A 点 → B 点 → C 点,则设定如下表所示。
| 程序行 | 插补 | 示教点 | 坐标 | 速度 | 快捷距离 |
|---|---|---|---|---|---|
| 1 | 直线 | A点 | (0,0,0) | 10mm/sec | 0mm |
| 2 | 直线 | B点 | (10,0,0) | 10mm/sec | 10mm |
| 3 | 直线 | C点 | (10,-20,0) | 30mm/sec | 0mm |
作为 TCP 的轨迹如下所示。 左图为 B 点的快捷距离为 0mm 的情况,右图为 B 点的快捷距离为 10mm 的示例。当快捷距离为 0mm 时,TCP 会在该示教点处暂停。指定快捷距离可使 TCP 的轨迹更加平滑,速度也能平滑地从 10mm/sec 加速到 30mm/sec。同时,由于距离变短,循环周期也会缩短。
一般的程序语言只会执行目标行中的指令,不会进行预读取。另一方面,要在机器人程序中计算第 2 行执行时(TCP 从 A 点移动到 B 点)的轨迹,不仅需读取 A 点与 B 点的信息,还需要读取 C 点的信息。需要考虑各示教点间的距离、位置关系、移动速度以及快捷距离等信息,因此要执行第 2 行就必须先读取第 3 行。
此外,在从 A 点移动到 B 点的过程中,直到到达 B 点,第 2 行的处理都在持续进行。此时,如果想“在从 A 点移动到 B 点的途中达到 80% 位置时发送数字信号”,就需要通过异步处理来执行数字信号发送任务。
这样一来,机器人程序就需要编写较为复杂的逻辑。但为了让操作员(操作员并非软件工程师)能够理解,并且在示教操作盘上能够示教,必须保持简单的描述,因此不得不使用专有语言。
机器人控制 API
#有时需要从 PC 等设备对机器人进行控制。例如,“使用连接到 PC 的摄像头拍摄工件[8],在 PC 上进行图像解析,计算出工件的位置与姿态,然后将该信息传输到机器人,通过机器人手爪进行抓取”。
此时,需要通过 PC 调用机器人控制器来修改机器人程序所引用示教数据的位置和姿态值。这就是各厂商提供的机器人控制 API。应用程序在 PC 上运行时,引用并使用机器人控制 API 库。
通过使用机器人控制 API,可以访问机器人程序的执行环境。在其中管理了变量、机器人状态、程序状态等,因此可以读取这些值或修改变量。关键点在于无需修改机器人程序本身。可以先将“根据被赋值变量的工件位置和姿态移动机器人并堆叠工件”等步骤模板化编程,然后在运行时通过机器人控制 API 修改变量,以实现适应环境的控制。
需注意的是,各公司对机器人程序的语言规范及控制机制各不相同,因此变量处理方式和机器人的控制单元存在较大差异。
FANUC 公司的机器人
#FANUC 公司是日本代表性的产业用机器人供应商,以其黄色的企业色闻名。
机器人语言
#其具有寄存器(register)的概念,将位置数据、数值和字符串等以固定大小的各数据类型一维数组形式在全局区域中进行管理。
虽然可从任何机器人程序中进行引用和更新,非常方便,但也因作为全局变量使用,如若误更新数据,可能导致其他程序发生错误,因此需要注意。
可以轻松地在一个机器人程序中分别控制多个机器人,或对多个机器人进行同步控制。
机器人控制 API
#称为 RobotInterface,以 .NET 和 C++ 库的形式提供。通过 DataTable 的概念,可高效地管理所使用的寄存器并进行数据传输。
这是一个非常简洁且实用的库,但不知何故在产品资料中未有说明,需要直接向销售人员咨询。
ABB 公司的机器人
#该公司总部位于瑞士,是一家跨国企业。除了产业用机器人外,还提供电力、重工业等多个领域的解决方案。
机器人语言
#每台机器人都会分配一个任务(机器人程序执行线程),并将机器人程序加载到该任务中执行。要控制两台机器人,就需要为每台机器人创建对应的机器人程序,并在各自的任务中执行。因此虽然可以灵活地控制机器人,但相比 FANUC,其机器人间的同步控制难度似乎更高。
除了本地变量和全局变量外,还可以定义任务作用域的变量。全局变量和任务变量都可以持久化,其使用寿命超过机器人程序生命周期。因此也可以像 FANUC 的寄存器概念一样定义变量来编写机器人程序。
机器人控制 API
#称为 PC-SDK,以 .NET 库形式提供。其功能比 FANUC 的 RobotInterface 更丰富,几乎可实现示教操作盘上的所有功能。但与其庞大的类库相比,文档的易读性和示例代码较少,令人印象不佳。
Universal Robots 公司的机器人
#UR(Universal Robots)公司是以协作机器人闻名的丹麦企业。
机器人语言
#使用类似 Python 的脚本语言来编写机器人程序。UR 公司虽然公开了机器人控制 API 的规范,但似乎并未以库的形式发布。
机器人控制 API
#采用将编写好的脚本通过套接字通信传输至机器人控制器,并在控制器端执行脚本的方式。因此可以方便地执行,但由于每次都需要进行脚本传输处理,对于需要动态、频繁更新数据的场景略显不够。可以通过在脚本中进行套接字通信与 PC 联动来作为规避方案。
总结
#对于机器人示教方法以及利用机器人控制 API 进行联动的概念,有没有更加清晰的印象?此外,还常常利用 ROS/ROS2[9] 与机器人进行联动。目前已有使用 AI 来控制机器人或进行云端联动的系统被构建。展望未来,进一步与 AI 融合的机器人系统将被广泛应用,令人充满憧憬。🤖👏
用于示教的类似平板电脑的终端。也称为示教手持器、示教挂件,或简称挂件 ↩︎
Tool Center Point,位于机器人末端执行器(手爪)前端的动作中心点 ↩︎
示教点表示包含三维坐标 (X, Y, Z)、姿态 (RX, RY, RZ 或四元数)、机器人形态信息(关节轴方向)等的变量 ↩︎
指定是否以 直线 方式让 TCP 从 A 点移动到 B 点,或以经过 B 点到达 C 点的 圆弧 方式移动等 ↩︎
包括数字输入 (DI)、数字输出 (DO)、模拟输入 (AI)、模拟输出 (AO) 等 ↩︎
机器人的关节上安装有伺服电机,机器人控制器计算出合适的位置和旋转速度来驱动伺服电机(关节) ↩︎
移动指令和示教点数据分开记录,通常从移动指令中指定示教点数据数组的索引 ↩︎
指机器人执行作业的对象或加工物,是英语单词 workpiece 的缩写 ↩︎
不是机器人 OS,而是为简化机器人开发提供的软件开源框架,包含开发所需的工具和库 ↩︎


