PE 迁移 ARCS 对应文档
本文档对比 PE 与 ARCS 系统在工程管理、脚本接口和系统配置三大方面的功能差异,帮助用户从 PE 平滑迁移至 ARCS。
1 工程管理
1.1 新建工程功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 新建工程 | ![]() 点击新建可创建一个新的工程,程序列表处会出现一个根节点(New Project)。 | ![]() 通过【编程】界面可创建或编写机器人运行程序。 点击新建可创建一个新的工程,程序列表处会出现一个机器人编程。 |
| 保存工程 | ![]() 点击最左侧的保存按键,输入名称,点击右侧的保存按键,进行工程保存。 工程文件以 xml 格式保存。 | ![]() ![]() 点击保存按键,输入文件名称,点击下方的保存按键,进行工程保存。 工程文件以 pro 格式保存。 |
| 默认工程 | ![]() 点击默认工程,在默认工程文件列表处选择需要操作的工程,根据需求勾选不同选项。 勾选自动加载默认工程,打开编程环境后自动载入默认工程。 勾选自动加载并运行默认工程,打开编程环境后自动载入并运行默认工程。 点击确定,确定默认工程配置。 | ![]() 依次点击【配置】、选项卡【启动】,可设置默认程序与自动初始化。默认程序是控制器开机后自动加载的程序,系统在进入运行程序且未加载任何程序时,将自动加载默认程序。 当自动连接机器人、自动上电、自动加载程序被启用时,只要输入信号与选定的信号电平相匹配,机器人在控制器上电后立即运行程序。例如:在低电平情况下,不需要边沿转换到选定的信号电平。 信号电平设置为低电平时请小心。输入信号默认为低电平,使程序自动运行而不受外部信号的触发。 |
| 加载工程 | ![]() 点击加载,找到目标程序,加载工程。 打开后,程序列表中会载入打开的程序。 | ![]() ![]() 点击打开,输入密码,找到目标程序,加载工程。 |
| 运行工程 | ![]() 工程文件编辑完成后,可以点击开始进行工程的运行,操作步骤如下: • 点击界面下方的开始按钮; • 长按自动移动直到机械臂运行到初始点位置(cancel 按键显示为 OK); • 点击 OK 按键; • 再次点击开始按键。 | ![]() 单击左侧菜单栏的【运行】按钮,选择【从起始点运行程序】,进入【移动】界面, 长按【自动】至按钮置灰,即移动机械臂到程序初始位姿, 此时【点击确定开始程序】按钮,单击即可运行程序。 |
1.2 子工程功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 新建过程文件 | ![]() Procedure 是子工程(过程)编辑命令。在 Procedure 程序段里,可以编辑用于复用的程序段,很方便的加载到其它的项目程序段中。工程文件和子工程文件中均可以调用子工程命令。在工具栏工程或者过程下点击新建,工程逻辑处显示 New Project 或 New Procedure。 | ![]() …:加载已写好的程序 保存为:将子程序作为单独的文件在磁盘中保存。 清除:清除子程序内打开的文件。 保持子程序文件与此程序一起更新:勾选后,在打开的子程序中的修改将自动保存到该子程序文件中。 |
| 调用子工程命令 | ![]() 新建工程或过程文件,选择高级条件,点击 Procedure 命令。 ![]() 选中工程列表处的 Procedure Undefined,在属性窗口会显示可供调用的子工程文件。选中子工程文件,点击确认即调用了该子工程文件,此时,被调用的子工程文件中的命令显示在工程列表处。 • 点击刷新为文件更新按钮,检索当前文件保存目录,更新显示文件变动。 • 点击移除可删除此选中的 Procedure。 | ![]() 【调用】命令,调用子程序。当程序执行到此节点时,会跳转到调用的子程序中运行。 |
1.3 移动命令功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 添加命令 | ![]() Move(移动)命令用于机器人末端工具中心点在路点间的移动操作。通过基本路点(waypoint)控制机器人的运行,路点(waypoint)必须置于运动命令下。 • 在程序列表里新增一个 Move 节点,下面含有一个 Waypoint 节点。 • 点击昵称右侧输入框可修改命令名称。 • 选中 Move 节点,可以对 Move 命令进行状态配置。 • 点击移除可删除此 Move 命令。 • 必须点击确认,确认配置完成,并保存。 | ![]() 单击【移动】图标,在程序树中会新增一个【关节运动】节点,下面包含一个【路点】节点。 【移动】节点包含移动类型:关节运动、直线运动、样条曲线。程序树中【移动】节点的显示名称由选择的移动类型来决定。 选中【关节运动/直线运动/样条曲线】节点,可以对该节点进行设置。 |
| 关节运动 | ![]() 根据路点间的各个关节的运行角度,根据设定的电机的最大速度和最大加速度(六个机械臂的公共参数)限制,各个关节以最快的速度同步到达目标的路点(始末速度均为零)。 关节运行中可分别设置关节 1-关节 6 的关节最大角速度和最大角加速度百分比,点击共享按钮可将速度或加速度复制到其他关节处。 | ![]() 关节运动,即通过控制机器人关节完成移动。关节运动为工具中心点(Tool Center Point, TCP)提供一个曲线路径。 机器人在运动时,如果设置了交融参数,就可以在两个轨迹之间平顺过渡,使机器人的移动更快更稳。 使用关节角度: 勾选后,程序运行时会在脚本中记录关节角,代替机器人的位置信息。同时,系统会禁用此处的【设置工具中心点(TCP)】和【坐标系】。启用该功能后,当工程发生迁移时,机器人将不会调整该路点信息,数据仍可使用。 |
| 直线运动 | ![]() 将使工具中心点在路点之间进行线性移动。这意味着每个关节都会执行更为复杂的移动,以使工具保持在直线路径上。 | ![]() 直线运动,即机器人的工具中心点(TCP)以线性方式运动至目标路点。这意味着每个关节都会执行更为复杂的移动,以使 TCP 保持在直线路径上,工具速度能否达到和保持最大速度取决于直线位移和最大加速度参数。 |
| 圆弧以及圆运动 | ![]() 三点法确定圆弧,并按照顺序进行从起始路点运动至结束路点,属于笛卡尔空间轨迹规划。姿态变化仅受始末点影响。最大速度和加速度意义同直线运动。轨迹类型选择 Arc 时,为圆弧运动。参数类型选择 Cir 时,为圆周运动,右侧文本输入框可输入圆周循环的次数。 | ![]() 【圆】命令,设置机器人末端的 TCP 以恒定的速度进行圆弧运动或圆周运动。采用三点法确定圆弧或圆周,并按照顺序从起始路点运动至结束路点,属于笛卡尔空间轨迹规划。机器人进行圆弧运动或圆周运动时,起点和终点会影响机器人的姿态变化,运动过程中的最大速度和加速度意义同直线运动。 注意: • 【圆】节点需在【直线运动】下使用。 • 设置圆的三个点不能共线,否则系统将弹窗提示错误。 • 【圆】节点需设置 3 个路点:起点(路点_0)、经过点(路点_1)和终点(路点_2)。默认所有路点使用相同的交融半径。 方向模式: • 固定模式:工具姿态相对于圆弧路径坐标系保持不变。 • 无约束模式:工具姿态呈线性变化,绕空间定轴转动,从起始点姿态变化到目标点姿态。 • 经过点模式:工具姿态从起点开始,经过中间点姿态,变化到目标点姿态。 选择圆的轨迹: • 完整的圆:勾选后,机器人将按照三点法确定的圆进行完整圆运动。取消勾选后,机器人在起点、经过点、终点之间以圆周轨迹运动,运动到终点后以直线轨迹回到起点。 • 圈数:设置完整圆运动的圈数。 |
| B 样条 | ![]() B 样条曲线(B_Spline):根据给定的路径点拟合出一条路径曲线。生成拟合曲线所使用的路点越多,拟合出的曲线离预期越接近。B 样条曲线为一条平滑经过所有给定路点的曲线,需注意曲线的始末点不能闭合。 | ![]() 样条曲线,即机器人根据给定路点拟合一条曲线路径,以恒定速度平滑经过所有给定路点。在预期曲线上给定的路点数量越多,拟合出的曲线路径越符合期望。 设置该样条曲线的相关参数:TCP、坐标系、关节速度、关节加速度等。 在【样条曲线】节点下添加多个【路点】节点,设置各个路点位置,完成【样条曲线】的添加。 |
| 路点命令 | ![]() 点击昵称右侧输入框可修改命令名称。昵称更改后,可以自定义路点的全局功能。新建相同昵称的路点,以最初命名的路点数据为准,修改昵称及相关参数后的路点,以修改后的路点昵称和参数为准。 • Waypoint 只能添加于 Move 命令后。 • 点击添加到之前可在该路点前添加一个新路点。 • 点击添加到之后可在该路点后添加一个新路点。 • 点击移动到这里可让机器人运动到当前路点,针对真实机器人有效。 • 可以选择关节运动到这里或者直线运行到这里。 • 点击移除删除此路点。 • 点击设置路点可设置从路点的位置姿态。点击设置路点后,面板自动切换为机械臂示教,用户可以移动机器人末端到新路点的位置,然后点击右下角的确认按键。 • 点击确认保存此路点状态配置,此时会有弹窗跳出显示条件已被保存。 可变路点(变量点): 在 waypoint 条件界面处选择变量点,确认后,此路点为变量设置中设置的路点,当变量中的路点更改后,工程文件中所有的路点均会更改,此功能可以批量更改相同的路点的参数,节省编程时间。变量点对应变量配置中的类型为 pose 变量。 ![]() 相对路点(相对偏移): 用户通过相对于选定坐标系的位置或姿态偏移量对机器人手臂或者末端工具坐标进行运动控制。 | 【路点】命令,是机器人的工具中心点(TCP)将要到达的位置点,通过设置路点可以设置机器人移动的具体位置。通常机器人的工具中心点(TCP)的运动轨迹由两个或多个路点构成。【路点】节点可配置【固定位置】、【变量位置】、【相对位置】三种类型。 【固定位置】: 通过操作机器人【移动】界面或拖动机器人来设置【路点】位姿。 ![]() 在【固定位置】界面,单击【设置路点】,切换至机器人示教界面,可使用界面的【位置/姿态控制按键】移动机器人,或者进入拖动示教模式手动移动机器人到目标路点。设置完毕后,单击【确定】按钮保存【路点】的位姿。 【路点】命名与切换: 默认路点名称为 "路点_n",n 的初始值为 0,每新增一个路点即为 n+1。 修改路点名称:单击【重命名】可对路点名称进行修改,但不支持重名的路点。 链接:单击图标或单击【链接】,选择程序中的路点,即可使用目标路点的位姿。链接成功后,【链接】按钮变为【取消链接】,单击【取消链接】可恢复原始路点。 交融参数: • 【在该点停止】:即交融半径为 0 mm,机器人将在该路点位置处停止。 • 使用共享交融半径:设置该路点使用共享交融半径(关节运动和样条曲线不可选择该项)。 • 使用交融半径:设置该路点的交融半径。 速度: • 使用共享参数:设置该路点使用共享速度参数(关节/工具速度、关节/工具加速度)。 • 时间:设置上个路点运行到此路点的总移动时间(单位:s),该设置将影响机器人的速度。若设置不合理的总移动时间可能会造成机器人的运动参数超出机器人的参数范围,AuboStudio 会对此进行优化,请以机器人运行时参数为准。 • 关节/工具速度、关节/工具加速度:设置该路点的关节/工具速度、关节/工具加速度。 ![]() 【变量位置】: 通过配置变量来设置【路点】位姿。【变量位置】常用于批量更改相同路点的参数,以节省编程时间。 选择变量:单击【<变量>】下拉框,选择变量。变量的设置请参见赋值、变量。 变量类型:设置该变量的类型。 • 关节类型:变量的六个参数对应六个关节角,关节角采用弧度制(rad)。例如:i_变量_1 = {0, -0.261796, 1.74532, 0.436316, 1.5708, 0}。 • 位姿类型:变量的六个参数代表机器人末端的笛卡尔位姿,格式为 {x, y, z, roll, pitch, yaw}:前 3 个参数 x, y, z 为末端在世界坐标系中的位置坐标,单位为米(m);后 3 个参数为末端姿态角(滚转角 Roll、俯仰角 Pitch、偏航角 Yaw,即 RPY 欧拉角表示法),采用弧度制(rad)。 ![]() 【相对位置】: 通过两个给定位置(源路点、目标路点)之间的差距来定义该【路点】位姿。 注意:编程时,程序中须至少有一个除【相对位置】路点之外的其他路点,否则机器人将发生不可预测的错误。 • 距离:指源路点和目标路点之间的笛卡尔距离。 • 角度:指源路点和目标路点之间方向变化的旋转矢量的长度。 • 设置源路点、设置目标路点:单击后切换至机器人示教界面,使用界面的【位置/姿态控制按键】移动机器人,或者使用示教模式人为移动机器人到目标路点。设置完毕后,单击【确定】按钮保存源路点或目标路点的位姿。 |
1.4 基础条件命令功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 循环命令 | ![]() Loop 命令可用于连续多次重复的程序代码。需要重复的程序代码放在循环命令中。loop 命令可以配置为无限重复,特定次数,或表达式为真(例如变量或输入信号)。 • Loop 是循环命令,Loop 节点包含的程序会循环运行,直到终止条件成立。 • 点击昵称右侧空白口会弹出输入框,可修改命令名称。 • 选择无限循环可实现程序无限循环。 • 选择循环__次设置循环次数,到达次数后退出循环。 • 选择 loop 条件设置循环条件表达式,表达式成立时进入循环,表达式不成立时退出循环。点击清除清空表达式。 • 点击确定确认此命令状态配置,并保存。 | ![]() 【循环】命令,创建循环程序块。 • 一直循环:勾选后,程序块内的节点将无限循环运行。 • 循环 N 次:勾选后,设置"循环次数",N为循环次数,程序块内的节点将循环运行 N次。程序会创建一个专用循环变量(如图所示的 循环_0),此变量可在循环内部的表达式中使用。进入循环后,循环变量从 0开始计数,直至N-1,结束循环。 • 当表达式为真时循环:勾选后,设置表达式,程序运行到该节点时,先判断表达式是否为真:如果表达式判断为真,进入该循环,运行程序块内的节点;如果表达式判断为假,跳过此循环。 • 连续检查表达式:勾选后,在执行循环程序块期间,持续检查表达式,一旦表达式判断为假随时跳出【循环】程序块。 |
| 跳出循环命令 | ![]() Break 命令是跳出循环命令,当 Break 条件成立时,跳出循环。 • 点击昵称右侧空白口会弹出输入框,可修改命令名称。 • 用户要注意 Break 命令使用时的语法,Break 只能用于 Loop 循环中,且 Break前必须有一条 If 命令,当 If 中的判断条件成立时,运行 Break 命令,跳出循环。否则弹出错误提示。 • 点击移除删除此 Break 命令。 | ![]() 设置跳出方式:跳出循环:直接跳出循环,程序运行循环节点的下一个程序节点。 |
| 结束单次循环命令 | ![]() Continue 是结束单次循环命令,Continue 条件成立时,结束本次循环。注意其与Break 命令的区别,Break 跳出整个循环,不再进入,Continue 跳出单次循环,下个循环周期还会进入循环中。 | ![]() 设置跳出方式:跳至下次循环。跳出本次循环,立即进入下一次循环。如果循环节点不需要变量或表达式判断,则直接进入下一次循环。如果循环节点需要变量或表达式判断,则先进行判断,如果判断为真,进入下一次循环;如果判断为假,结束循环。 |
| If 命令 | ![]() If…else 是选择判断命令,通过判断条件运行不同的程序分支。 • 点击昵称右侧空白口会弹出输入框,可修改命令名称。 • 点击 If 条件下空白窗口会弹出输入框,可输入选择判断条件表达式,表达式的运算遵循 C 语言运算规则。当表达式成立时,执行 If 节点包含的程序,若表达式不成立,则执行 Else 或 Else if 节点包含的程序。 • 点击移除清除表达式。 • 点击添加 Else if 可添加一个 Else If 节点。一个 If 可以添加多个 Else If。 • 点击添加 Else 可添加一个 Else 节点,与当前 If 节点组成一个 If…Else 组合。一个 If 只能添加一个 Else。 • 点击移除可删除此 If 命令,与此 If 对应的 Else If 及 Else 也会一并被删除。 • 点击确定为确认状态配置,并保存。 | ![]() 【如果】命令,创建条件判断程序块。 【否则如果】命令,在如果节点下创建条件判断程序块。 【否则】命令,在如果或否则如果节点下创建程序块。 如果设置: 在如果界面单击表达式,编辑条件表达式。 连续检查表达式:勾选后,在执行如果程序块期间,持续检查条件表达式,一旦条件表达式判断为假,随时跳出如果程序块。 否则如果设置: 在否则如果界面单击表达式,编辑条件表达式。 连续检查表达式:勾选后,在执行否则如果程序块期间,持续检查条件表达式,一旦条件表达式判断为假,随时跳出否则如果程序块。 |
| 条件选择命令 | ![]() Switch...Case...Default 是条件选择命令,通过判断条件运行不同的 Case 程序分支。此可用于根据变量的值控制程序的流程。 • 点击昵称右侧空白口会弹出输入框,可修改命令名称。 • 点击条件下空白窗口会弹出输入框,可输入选择判断条件表达式,表达式的运算遵循 Lua 语言运算规则。当运行 Switch 命令,程序会计算表达式的数值,并与下面的 Case 语句的条件数值依次比较,若相等,则执行该 Case 下面的程序段,若没有满足条件的 Case 数值,则执行 Default 对应的程序段。 • 注意:判断真伪只能用 true/false,不能用 1/0 代替。 • 点击移除清除表达式。 • 点击添加 Case 可添加一个 Case 节点,与当前 Switch 节点组成一个Switch...Case 组合。一个 Switch 可添加多个 Case。 • 点击添加 Default 可添加一个 Default 节点。一个 Switch 只能添加一个 Default。 • 点击移除可删除此选中的 Switch,与此 Switch 对应的 Case 及 Default 也会一并被删除。 • 点击确认为确认状态配置,并保存。 | ![]() 分支/条件/默认 【分支】命令,创建多重分支,可根据变量的值控制程序的流程。可设置是否在程序树中添加默认程序块。"同步" 请参考赋值中关于 "同步" 的介绍。 【条件】命令,在分支下创建条件程序块。条件节点只能在分支节点下插入。 分支……条件……默认……:通过判断条件运行不同的条件程序块。用户可在分支界面输入选择判断条件表达式,在条件界面输入可匹配的值。当程序运行分支节点时,先计算分支节点的表达式的数值,然后与分支下的条件的数值依次比较:如果在所有条件中匹配到相同的数值,则执行该条件程序块;如果没有匹配到满足条件的条件数值,则执行该分支下的默认程序块。 • 一个分支可以有 0 个到多个条件程序块。 • 一个分支可以有 0 个到 1 个默认程序块,勾选分支中的 "添加默认条件" 即可添加默认程序块。 |
| 设置命令 | ![]() • 点击昵称右侧输入框可修改命令名称。 • 勾选工具参数:可选择设置过的工具中心。 • 勾选碰撞等级,可选择安全等级。 • 设置命令用于设置某路 DO/AO 的状态。 • 勾选变量:下侧下拉列表选择一个变量,右侧输入一个表达式给选中的变量赋值,表达式的运算遵循 C 语言运算规则。 • 点击移除为移除 set 命令。 • 点击确认为确认并保存此命令状态配置。 • set 变量时 bool 型变量不能赋值 0 或 1;int 型变量不能赋值 true 或 false。 | ![]() • 无动作:无操作。 • 数字输出:可设置数字输出信号。 • 模拟输出:可设置模拟输出信号。 • 设置:可设置数字输出口或模拟输出口的表达式。数字输出口仅支持 true/false 或1/0,其中 Modbus 口仅支持 1/0。 • 单脉冲:设置数字输出口持续输出高/低电平的时间。 • 将配置变量递增:配置选择变量的递增值。 • 设置工具中心点(TCP):可选择 TCP。TCP 的创建与设置请参见工具中心点。 • 碰撞级别:可设置碰撞等级。 • 测试:执行一次该节点的设置。当选择【设置】或【将配置变量增加 1】时,该节点不可进行测试。 • 超时终止:勾选启用并设置非 0 时间后,若总线写入操作在设定时间内未完成,程序将立即终止并弹窗报运行时错误。未勾选或时间设为 0.00s 时,直接返回,不判断是否写入成功。 |
| 等待命令 | ![]() Wait(等待)命令用于等待时间或数字输入信号。 • 点击昵称右侧输入框可修改命令名称。 • 勾选等待时间可设置等待的时间,时间值由用户设置。 • 勾选 wait 条件可通过输入表达式来设置等待方式。 • 点击清除,可清除条件内容。 • 点击确认为确认保存 wait 条件。 • 点击移除为移除 wait(等待)命令。 | ![]() 【等待】命令,设置等待时间或数字输入信号。 • 不等待:机器人不等待。 • 等待……秒:机器人等待设置的时间后继续运行。 • 等待数字信号输入:等待收到设置的数字信号后继续运行。 • 等待模拟信号输入:等待接收到设置的模拟信号后继续运行。 • 等待表达式:等待表达式成立后继续运行。 |
| 行注释命令 块注释命令 | ![]() ![]() Line Comment 是行注释命令,通过行注释对下面的程序行进行解释说明。 Block Comment 是块注释命令,通过块注释对下面的程序段进行解释说明。 | ![]() 【备注】命令,帮助用户记录注释信息,备注文本在程序运行过程中不会被显示。 |
| 弹窗命令 | ![]() Message 是信息弹出命令,通过弹出信息窗口,向使用者传达状态信息。利用弹窗命令(Message)可指定一则消息,程序运行至此命令时在屏幕显示该消息。 • 点击昵称右侧输入框可修改命令名称。 • 可以选择消息的类型。点击 Message 类型下拉菜单,分别对应 Information,Warning,Critical,三种不同的图标样式的消息类型。 • 点击消息右侧空白输入框,可输入文字,来传达状态信息。 • 显示弹出窗口后,机器人将等待用户/操作员按下窗口中的确定按钮,才能继续运行程序。 • 勾选当消息框弹出时停止工程,当有信息窗口弹出时,工程项目将自动停止。 • 点击移除可删除此选中的 Message。 • 点击确认为确认状态配置,并保存。 | 【弹窗】命令,用户指定一则信息,程序运行到该节点时会在屏幕显示该信息。• 文本:输入信息文本,可单击【预览弹窗】查看弹窗效果。文本弹窗分消息、警告、错误三类。 • 变量:可以选择变量,当程序运行到该节点时,弹窗提示该变量的值,并等待用户关闭对话框。变量弹窗分消息、警告、错误三类。 • 弹窗时中止程序运行:勾选后,当程序运行至【弹窗】节点时,屏幕上显示弹窗消息并中止程序的运行。 |
1.5 高级条件功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 多线程控制命令 | ![]() Thread 是多线程控制命令。在 Thread 程序段里,必须有一个 Loop 循环命令,在该Loop 循环中,可以实现与主程序的并行控制。 注意:建议尽量避免多线程的使用。若必须使用多线程,请注意主线程和辅线程的并行逻辑和时序匹配。 • 点击昵称右侧输入框可修改命令名称。 • 点击移除可删除此选中的 Thread。 • 点击确认为确认状态配置,并保存。 | ![]() 【线程】命令,创建多线程,即创建可以与主程序并行的程序。线程可用于控制与机械臂无关的其他外部设备。 注意: • 线程节点下可以添加设置、等待、赋值等与运动无关的节点。 • 如果线程节点下添加移动、路点等与运动相关的节点,将可能导致机器人运行冲突,引发其他安全风险。 • 建议尽量避免多线程的使用。若必须使用多线程,请注意主线程和辅线程的并行逻辑和时序匹配。 • 无限循环:勾选后,线程内的程序可以无限循环运行,直到停止程序。 |
| 脚本命令 | ![]() Script 是脚本编辑命令。在 Script 中,可以选择添加行脚本和脚本文件。 点击昵称右侧输入框可修改命令名称。 点击行脚本可添加行脚本,在下方的输入框中可以输入一行脚本控制指令。 点击脚本文件可添加脚本文件,可以在文件列表处选择需要加载脚本文件。 • 点击刷新为文件更新按钮,检索当前文件保存目录,更新显示文件变动。 • 点击移除可删除此选中的 Script 命令。 • 点击确认为确认状态配置,并保存。 | ![]() 【脚本】命令,添加脚本行或脚本文件。 • 行:通过编辑器输入作为脚本代码执行的文本。 • 文件:可以打开或另存脚本文件,并对已打开的脚本文件进行编辑、清除、另存等操作。 |
1.6 轨迹记录功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 记录轨迹 | ![]() 新建轨迹:点击开始按钮后开始记录机械臂运动轨迹,点击完成按钮结束记录,在输入框中输入轨迹名称,点击保存后,完成轨迹记录。 轨迹回放:选中轨迹图标,点击界面中的加载,长按移动到准备点按钮,将机械臂移动至轨迹记录的初始位置,然后点击运行后,即可进行轨迹回放。 轨迹暂停:点击停止,会将回放中的机械臂暂停。 轨迹暂停后恢复:长按移动到准备点将机械臂同步到当前进度位姿后,点击运行,即可恢复轨迹回放。 间隔时间:轨迹记录时间单位为每个路点 100ms,间隔时间的含义是用多少时间播放这 100ms,例如将间隔时间设置为 50ms,则以 2 倍的速度播放轨迹,若设置为200ms,则以 0.5 倍的速度慢放。 | 【记录】界面可以存储一段时间内机器人运动的轨迹,存储的轨迹可以添加在程序里。![]() • 创建轨迹:单击【创建轨迹】按钮进入【移动】界面,通过位置/姿态控制按钮操控机器人,系统开始记录机器人的运行轨迹。运行结束后,单击【确定】,编辑轨迹名称保存轨迹。 • 搜索:通过轨迹名称搜索轨迹。 • 刷新:刷新轨迹列表。 • 加载:加载轨迹。 • 重命名:重命名轨迹文件。 • 删除:删除轨迹。 • 播放:播放当前加载的轨迹。单击【播放】后,进入【移动】界面,将机器人移动至初始位置,单击【确定】开始播放轨迹,【播放】会变为【暂停】。 |
| 调用轨迹记录命令 | ![]() Record Track 命令是轨迹回放命令。 • 新建或打开一个工程文件,在工具栏中选中高级条件。 • 在属性窗口点击 Record Track,在工程逻辑处点击 Record Track。 • 在其右侧的属性窗口处选择轨迹图标,点击确认按钮,可将轨迹记录加载到工程逻辑中。 • 间隔时间:轨迹记录时间单位为每个路点 100ms,间隔时间的含义是用多少时间播放这 100ms,例如将间隔时间设置为 50ms,则以 2 倍的速度播放轨迹,若设置为 200ms,则以 0.5 倍的速度慢放。 • 界面下侧运行到准备点参数输入框可以设置机械臂运动到准备点时各个关节的速度及加速度。修改后请点击确认按钮。 • 点击刷新为文件更新按钮,检索当前文件保存目录,更新显示文件变动。 • 点击移除可删除工程逻辑处的 Track_Record 命令。 | ![]() 【轨迹回放】命令,可以在程序中插入轨迹文件,当程序运行至轨迹回放节点时,播放轨迹文件,机器人按照文件中记录的轨迹运动。轨迹文件是记录机器人运动轨迹的文件,一般存储在安装配置文件中。 • 加载文件:单击 "加载文件" 或图标,选择轨迹文件,程序运行至该节点后进行轨迹回放。 • 刷新:单击后可以刷新 "加载文件" 的下拉菜单。 • 间隔时间:调整轨迹运行的速度。 |
1.7 变量配置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 变量配置 | 变量设置目前仅支持 bool、int、double、pose 类型的变量。表格中显示所有当前已配置的变量列表,包括变量名称,变量类型,全局保持,变量值。选中表格中某个变量,该变量信息会显示到下方的变量类型下拉列表,变量名称输入框和变量值选择/输入选项中。 • bool:定义一个 bool 型变量,其变量值为 true/false,点击变量值后选项赋值。 • int:定义一个整型变量,其变量值为整数,在变量值后单元格内输入赋值。 • double:定义一个双精度型变量,其变量值为双精度浮点数,在变量值后单元格内输入赋值。 • pose:定义一个位置型变量,其变量值为机器人路点信息,点击变量值单元格后方【设置路点】按钮,跳转至机器人示教界面,完成路点设置后点击【确认】,完成变量赋值。变量 pose 的表示形式为 3 组(共 13 位)数据,其中前 3 位为位置参数,单位为米,中间 4 位为姿态参数,以四元数方式显示,单位为弧度,后 6 位为 6 个关节参数,单位为弧度。可以只提供位置参数和姿态参数,或者只提供关节参数,同时提供时,关节参数优先使用,未提供的参数需用数值 0 替代。 全局保持:勾选全局保持,表示将变量值固化到数据库中,如未勾选全局保持,当程序重新运行时,变量值仍为添加变量时的初始值。 ![]() • 添加变量:选择一个变量类型,输入变量名称和变量值,点击添加。注意:变量名称必须唯一,只能包含数字、字母和下划线。 • 修改变量:在表格中选中一个变量,点击修改来更改变量名称和变量值。注意:变量类型不能修改。 • 删除变量:在表格中选中一个变量,点击删除。 | 【变量】界面可创建配置变量,并设置配置变量的初始值,单击配置管理工具栏的【保存】即可保存至配置文件。程序运行过程中,该界面可实时更新配置变量的状态。ARCS 系统中变量共分为以下三种类型: • 配置变量:该变量可以用于多个程序,只要不切换当前加载的配置文件,变量名与变量值将持续保存,属于保持型变量。 • 程序变量:该变量仅适用于正在运行的程序,且变量值在程序停止后即丢失,属于常规程序变量,具体请参见 "编程选项卡-基础程序节点-赋值"。 • 脚本变量:该变量来自脚本文件,可被赋予不同的变量类型。脚本变量不出现在【编程】界面或【配置】界面中。机器人程序使用脚本变量来存储有关路点的信息。 ![]() 在变量界面单击【新增】即可开始新增变量。 • 变量名称:新增变量的名称,可根据需求进行修改。 • 类型:支持【整型】、【浮点型】、【布尔型】、【路点】及【任意类型】。 • 值:变量类型取值,可在程序中通过赋值等操作更改。 - 整型:整数类型数字,支持自定义取值上下限;配置的上下限不得超出区间:-10000 ≤ 取值范围 ≤ 10000。 - 浮点型:小数类型数字,采用 64 位双精度浮点,最多 16 位有效数字;支持自定义取值上下限。 - 布尔型:逻辑状态类型,仅支持 true、false 两种取值。 - 路点:机器人复合点位数据类型,包含笛卡尔位姿、关节角度、TCP 偏移、姿态特征信息。可通过单击页面下方的【示教】、【编辑】进行修改,单击【关节移动到这里】可让机器人移动至路点变量位置。 - 任意类型:可存储整型、浮点型、布尔型、路点等多种类型数据。 • 初始值:在变量界面创建或修改变量后,变量对应的值将同步为初始值。 • 全局保持:控制在程序中加载变量时,使用【初始值】或在程序中被改变的【值】。 - 开启【全局保持】:界面【初始值】输入框隐藏;程序运行中修改【值】,修改后的数值会持久化保存。重启示教器,变量加载程序最后保存的【值】。 - 关闭【全局保持】:创建变量时填写的【值】会同步保存为【初始值】;程序运行过程中【值】可以被修改,但【初始值】固定不变。示教器重启后,变量会加载【初始值】作为当前【值】。 • 删除变量:在变量界面左侧选中目标变量后,在页面右上角单击【删除】即可删除目标变量。 • 修改变量:在变量界面选中目标变量,即可在页面下方区域修改参数,参数设定规则与创建参数时相同。 |
1.8 定时器功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 插入定时器 | ![]() Timer 命令为定时命令,可测量工程文件中节点的运行时间。 • 点击昵称右侧空白输入框,可修改命令名称。 • 点击移除可删除此选中的行注释命令。 • 点击确认为确认状态配置,并保存。 | 【计时器】命令,记录程序运行的时间。![]() 【计时器】界面的下拉框中可以选择计时器,也可以选择下拉框中的【新建】来新建计时器。 计时器默认名称为 "计时_0",每次新建,默认数值加 1。 重命名:单击可以自定义计时器名称。 【计时器】状态: • 开始:计时器开始计时。 • 停止:计时器停止计时。 • 重置:计时器重置计时。 |
| 定时器状态显示 | ![]() 菜单栏选择在线编程,工具栏选择状态-定时器,可查看定时器状态显示。 • 昵称对应工程文件中的命令名称。 • 时间为程序起始点运行到此 Timer 命令时所用的时间。 • 次表示此条 Timer 命令在程序文件中执行的次数。 • Timer1 及 Timer2 为选中某条 Timer 命令时,显示的对应时间。 • 时间间隔为选中的 Timer 距离上一个选中 Timer 的时间间隔。 • 注意:timer1 与 timer2 的显示与点击列表中的条件名称顺序有关系,以按钮显示灰色为准,与 time 名称的显示顺序没有关系。 | ![]() 程序运行时间的值会在【变量】界面中显示。 |
1.9 工程日志功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 工程日志 | ![]() 工程日志可以显示实时的工程运行情况。点击启动运行一个程序时,会自动切换到工程日志界面。 | ![]() 【跟踪】标签页实时显示当前工程的起始、运行程序节点的时间,单击记录列表中的【变量】按钮可查看详细信息,方便调试程序。 |
1.10 脚本文件功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 脚本文件 | ![]() 菜单栏选择在线编程,工具栏选择脚本,可以对脚本文件进行编辑、新建、加载及保存处理。注意:在编辑脚本文件时需要符合 LUA 语法,否则无法保存脚本文件。 | ![]() 编辑脚本前,请先打开已保存的脚本或将脚本【保存为】,然后单击【编辑】编辑脚本,否则无法编辑脚本。 脚本编辑器自带语法检查工具,当输入正确脚本代码时,编辑器背景为白色,否则编辑器背景为黄色。只有输入正确脚本的代码,才可保存至脚本文件中。 |
2 脚本接口
2.1 数学模块
| 功能项 | PE | ARCS |
|---|---|---|
| 欧拉角转换为四元数 | 函数原型:{oriW,oriX,oriY,oriZ} rpy2quaternion({oriRX,oriRY,oriRZ})参数: 欧拉角(弧度) 返回: 根据参数欧拉角转换后的四元数 示例: quaternion = rpy2quaternion({0.611, 0.785, 0.960}) | 函数原型:rpyToQuaternion(rpy: table) -> table参数: rpy 欧拉角 返回: 四元数 示例: rpyToQuaternion({0.611, 0.785, 0.960}) |
| 四元数转换为欧拉角 | 函数原型:{oriRX,oriRY,oriRZ} quaternion2rpy({oriW,oriX,oriY,oriZ})参数: 四元数 返回: 根据参数四元数转换后的欧拉角(弧度) 示例: rpy = quaternion2rpy({0.834722, 0.0780426, 0.451893, 0.304864}) | 函数原型:quaternionToRpy(quat: table) -> table参数: quat 四元数 返回: 欧拉角 示例: rpy = quaternionToRpy({0.834722, 0.0780426, 0.451893, 0.304864}) |
2.2 运动模块
| 功能项 | PE | ARCS |
|---|---|---|
| 关节运动 | 函数原型:void move_joint({double joint1Angle, double joint2Angle, double joint3Angle, double joint4Angle, double joint5Angle, double joint6Angle}, bool isBlock)参数: • {joint1Angle ~ joint6Angle} 目标路点的六个关节角弧度值 • isBlock 是否阻塞 返回: 无 示例: move_joint({-2.05177, -0.400292, 1.19625, 0.0285152, 1.57033, -2.28774}, true) | 函数原型:moveJoint(q: table, a: number, v: number, blend_radius: number, duration: number) -> nil参数: • 非阻塞运动 • q 关节角,单位 rad • a 加速度,单位 rad/s²,最大值可通过 RobotConfig 类中的接口 getJointMaxAccelerations() 来获取 • v 速度,单位 rad/s,最大值可通过 RobotConfig 类中的接口 getJointMaxSpeeds() 来获取 • blend_radius 交融半径,单位 m • duration 运行时间,单位 s。通常当给定了速度和加速度,便能够确定轨迹的运行时间。如果想延长轨迹的运行时间,便要设置 duration 这个参数。duration 可以延长轨迹运动的时间,但是不能缩短轨迹时间。当 duration = 0 时,表示不指定运行时间,将根据速度与加速度计算运行时间。如果 duration 不等于 0,a 和 v 的值将被忽略 返回: • 0 成功 • AUBO_BAD_STATE(1) 当前安全模式处于非 Normal、ReducedMode、Recovery 状态 • AUBO_QUEUE_FULL(2) 规划队列已满 • AUBO_BUSY(3) 上一条指令正在执行中 • -AUBO_BAD_STATE(-1) 线程已分离、线程被终止、task_id 未找到,或当前机器人模式非 Running • -AUBO_TIMEOUT(-4) 调用接口超时 • -AUBO_INVL_ARGUMENT(-5) 参数数组 q 的长度小于当前机器臂的自由度 • AUBO_REQUEST_IGNORE(13) 参数数组 q 的长度太短且无需在该点停留 示例: moveJoint({-2.05177, -0.400292, 1.19625, 0.0285152, 1.57033, -2.28774}, 0.3, 0.3, 0, 0) |
| 直线运动 | 函数原型:void move_line({double joint1Angle, double joint2Angle, double joint3Angle, double joint4Angle, double joint5Angle, double joint6Angle}, bool isBlock)参数: 与 move_joint 函数参数完全一致 返回: 无 示例: move_line({-0.000003, -0.127267, -1.321122, 0.376934, -1.570796, -0.000008}, true) | 函数原型:moveLine(pose: table, a: number, v: number, blend_radius: number, duration: number) -> nil参数: • 非阻塞运动 • pose 目标位姿 • a 加速度(如果位置变化小于1mm,姿态变化大于 1e-4 rad,此加速度会被作为角加速度,单位 rad/s²;否则为线加速度,单位 m/s²),最大值可通过 RobotConfig 类中的接口 getTcpMaxAccelerations() 来获取 • v 速度(如果位置变化小于1mm,姿态变化大于 1e-4 rad,此速度会被作为角速度,单位 rad/s;否则为线速度,单位 m/s),最大值可通过 RobotConfig 类中的接口 getTcpMaxSpeeds() 来获取 • blend_radius 交融半径,单位 m,值介于 0.001 和 1 之间 • duration 运行时间,单位 s。通常当给定了速度和加速度,便能够确定轨迹的运行时间。如果想延长轨迹的运行时间,便要设置 duration 这个参数。duration 可以延长轨迹运动的时间,但是不能缩短轨迹时间。当 duration = 0 时,表示不指定运行时间,将根据速度与加速度计算运行时间。如果 duration 不等于 0,a 和 v 的值将被忽略 返回: • 0 成功 • AUBO_BAD_STATE(1) 当前安全模式处于非 Normal、ReducedMode、Recovery 状态 • AUBO_QUEUE_FULL(2) 轨迹队列已满 • AUBO_BUSY(3) 上一条指令正在执行中 • -AUBO_BAD_STATE(-1) 线程已分离、线程被终止、task_id 未找到,或当前机器人模式非 Running • -AUBO_TIMEOUT(-4) 调用接口超时 • -AUBO_INVL_ARGUMENT(-5) 参数数组 pose 的长度小于当前机器臂的自由度 • AUBO_REQUEST_IGNORE(13) 参数数组 pose 路径长度太短且无需在该点停留 示例: moveLine({0.58815, 0.0532, 0.62391, 2.46, 0.479, 1.619}, 1.3, 1.0, 0, 0) |
| 获取当前路点 | 函数原型:get_current_waypoint(void)返回类型为 table 的嵌套结构: • pos = {x, y, z} 位置 • ori = {w, x, y, z} 姿态(四元数) • joint = {j1, j2, j3, j4, j5, j6} 关节角 参数: 无 返回: 类型为 table 的实时路点位置、姿态、关节角 示例: realPoint = get_current_waypoint() | 函数原型:getJointPositions() -> table获取机械臂关节角度 参数: 无 返回: 机械臂关节角度 示例: JointPositions = getJointPositions()函数原型: getToolPose() -> table获取工具端的位姿(不带TCP偏移) 参数: 无 返回: 工具端的位姿,形式为(x,y,z,rx,ry,rz) 示例: ToolPose = getToolPose() |
| 逆运动学求解 | 函数原型:{joint1Angle, joint2Angle, joint3Angle, joint4Angle, joint5Angle, joint6Angle} get_target_pose(bool isMulSol, ikRefPoint, toolEndPos, toolEndOri, enableEndRotate, endRotateAngle, toolPos, toolOri, coordCalibrateMethod, point1, point2, point3, toolEndPositionForCalibCoord)参数: • isMulSol 是否返回多解(选传参数,默认 false。为 true 返回多组解,为 false 或不传参返回一组解) • ikRefPoint 逆解参考点关节角 • toolEndPos / toolEndOri 工具末端位置和姿态 • enableEndRotate 是否启用末端旋转 • endRotateAngle 末端旋转角度 • toolPos / toolOri 工具位置和姿态 • coordCalibrateMethod 坐标系标定方法 • point1 / point2 / point3 标定点关节角 • toolEndPositionForCalibCoord 标定坐标系工具末端位置 返回: 根据指定的位置参数、姿态参数、工具参数、用户坐标系参数逆解后的关节角度 {joint1Angle ~ joint6Angle};如果逆解失败,返回 false 示例: joint = get_target_pose({0, 0, -0.131415}, {0.707114, 0.000014, 0.7071, 0.000007}, true, d2r(20), {0.1, 0.2, 0.3}, {1.0, 0.0, 0.0, 0.0}, CoordCalibrateMethod.zOzy, {-0.000003, -0.127267, -1.321122, 0.376934, -1.570796, -0.000008}, {-0.186826, -0.164422, -1.351967, 0.383250, -1.570795, -0.186831}, {-0.157896, 0.011212, -1.191991, 0.367593, -1.570795, -0.157901}, {0.1, 0.2, 0.3}) | 函数原型:inverseKinematics(qnear: table, pose: table) -> table, int运动学逆解,输入 TCP 位姿和参考关节角度,输出关节角度 参数: • qnear 参考关节角 • pose TCP 位姿 返回: 关节角和逆解结果是否有效。返回值的第一个参数为逆解结果,第二个为逆解错误码: • 0 成功 • -1 机械臂状态不对(未初始化完成,可尝试再次调用) • -5 输入的参考关节角或 TCP 位姿无效(维度错误) • -23 逆解计算不收敛,计算出错 • -24 逆解计算超出机器人最大限制 • -25 逆解输入配置存在错误 • -26 逆解雅可比矩阵计算失败 • -27 目标点存在解析解,但均不满足选解条件 • -28 逆解返回未知类型错误 若错误码非 0,则返回值的第一个参数为输入参考关节角 qnear 示例: joint, ik_result = inverseKinematics({0, 0, 0, 0, 0, 0}, {0.81665, -0.20419, 0.43873, -3.135, 0.004, 1.569}) |
| 功能项 | PE | ARCS |
|---|---|---|
| 添加路点 | 函数原型:void add_waypoint({double joint1Angle, double joint2Angle, double joint3Angle, double joint4Angle, double joint5Angle, double joint6Angle})向全局路点列表中添加路点,服务于 move_track 函数 参数: 类型 table,六个关节角弧度值 返回: 无 示例: add_waypoint({-0.000003, -0.127267, -1.321122, 0.376934, -1.570796, -0.000008}) | 函数原型:pathBufferAppend(name: string, waypoints: table) -> nil向路径缓存添加路点 参数: • name 路径缓存的名字 • waypoints 路点 返回: • 成功返回 0 • 失败返回错误码:-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: pathBufferAppend("traje_name", {{-0.000000, 0.000009, -0.000001, 0.000002, 0.000002, 0.000000}, {-0.000001, 0.000010, -0.000002, 0.000000, 0.000003, 0.000002}}) |
| 清除路点列表 | 函数原型:void clear_global_waypoint_list(void)清除全局路点列表 参数: 无 返回: 无 示例: clear_global_waypoint_list() | 函数原型:pathBufferFree(name: string) -> nil释放路径缓存 参数: name 缓存路径的名字 返回: • 成功返回 0 • 失败返回错误码:-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: pathBufferFree("traje_name") |
| 轨迹运动 | 函数原型:void move_track(MoveTrackType trackType, bool isBlock)根据全局路点列表(通过 add_waypoint 函数添加)执行轨迹运动 参数: • trackType 轨迹类型(moveP、B 样条等) • isBlock 是否阻塞 返回: 无 示例: move_track(MoveTrackType.ARC_CIR, true) | 函数原型:movePathBuffer(name: string) -> nil执行缓存的路径 参数: name 缓存路径的名字 返回: • 成功返回 0 • 失败返回错误码:-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: movePathBuffer("traje_name")函数原型: moveCircle(via_pose: table, end_pose: table, a: number, v: number, blend_radius: number, duration: number) -> nil添加圆弧运动 参数: • via_pose 圆弧运动途中点的位姿 • end_pose 圆弧运动结束点的位姿 • 加速度(如果via_pose与上一个路点位置变化小于1mm,姿态变化大于 1e-4 rad, 此加速度会被作为角加速度,单位 rad/s^2.否则为线加速度,单位 m/s^2) • 速度(如果via_pose与上一个路点位置变化小于1mm, 姿态变化大于 1e-4 rad, 此速度会被作为角速度, 单位 rad / s.否则为线速度, 单位 m / s) • blend_radius 交融半径,单位 m,值介于 0.001 和 1 之间 • duration 运行时间,单位 s。通常当给定了速度和加速度,便能够确定轨迹的运行时间。如果想延长轨迹的运行时间,便要设置 duration 这个参数。duration 可以延长轨迹运动的时间,但是不能缩短轨迹时间。当 duration = 0 时,表示不指定运行时间,将根据速度与加速度计算运行时间。如果 duration 不等于 0,a 和 v 的值将被忽略 返回: • 成功返回 0 • 失败返回错误码:-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: moveCircle({0.440164,-0.00249391,0.398658,2.45651,0,1.5708},{0.440164,0.166256,0.297599,2.45651,0,1.5708},1.2,0.25,0,0) |
| 功能项 | PE | ARCS |
|---|---|---|
| 设置交融半径 | 函数原型:void set_blend_radius(double blendRadius)设置交融半径(即转弯半径) 参数: blendRadius 为交融半径,单位米 返回: 无 示例: set_blend_radius(0.01) | 函数原型:moveLine(pose: table, a: number, v: number, blend_radius: number, duration: number) -> nil函数原型: moveJoint(q: table, a: number, v: number, blend_radius: number, duration: number) -> nil交融半径在直线运动和关节运动中直接设置 |
| 设置碰撞等级 | 函数原型:void set_robot_collision_class(int collisionClass)设置碰撞等级 参数: collisionClass 0~10 返回: 无 示例: set_robot_collision_class(6) | 函数原型:setCollisionLevel(level: number) -> nil设置碰撞灵敏度等级,数值越大越灵敏 参数: • level 碰撞灵敏度等级 • 0:关闭碰撞检测功能 • 1~9:碰撞灵敏等级 返回: • 成功返回 0 • 失败返回错误码:AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setCollisionLevel(6) |
| 设置工具运动学参数 | 函数原型:void set_tool_kinematics_param({double posX, double posY, double posZ}, {double oriW = 1, double oriX = 0, double oriY = 0, double oriZ = 0})设置工具运动学参数,姿态可以不传递 参数: 两个 table: • 第一个 table 为位置(必传) • 第二个 table 为姿态(可以不传) 返回: 无 示例: set_tool_kinematics_param({0.1, 0.2, 0.3}) | 函数原型:setTcpOffset(offset: table) -> nil设置当前的 TCP 偏移。TCP 偏移表示形式为 (x, y, z, rx, ry, rz)。其中 x、y、z 是工具中心点(TCP)在基坐标系下相对于法兰盘中心的位置偏移,单位是 m。rx、ry、rz 是工具中心点(TCP)在基坐标系下相对于法兰盘中心的姿态偏移,是 ZYX 欧拉角,单位是 rad 参数: offset 当前的 TCP 偏移,形式为 (x, y, z, rx, ry, rz) 返回: • 成功返回 0 • 失败返回错误码:AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setTcpOffset({0.1, 0.2, 0.3, 0.0, 0.0, 0.0}) |
| 获取工具运动学参数 | 函数原型:{double toolEndPosX, toolEndPosY, toolEndPosZ}, {double toolEndOriW, toolEndOriX, toolEndOriY, toolEndOriZ} get_tool_kinematics_param(string toolName)获取工具运动学参数 参数: toolName 工具名称,需要与示教器工具标定界面中的工具名称一致 返回: 返回工具末端位置参数、工具末端姿态参数 示例: get_tool_kinematics_param("toolName") | 函数原型:getTcpOffset() -> table参数: 获取当前的 TCP 偏移。TCP 偏移表示形式为 (x, y, z, rx, ry, rz)。其中 x、y、z 是工具中心点(TCP)在基坐标系下相对于法兰盘中心的位置偏移,单位是 m。rx、ry、rz 是工具中心点(TCP)在基坐标系下相对于法兰盘中心的姿态偏移,是 ZYX 欧拉角,单位是 rad 返回: 当前的 TCP 偏移,形式为 (x, y, z, rx, ry, rz) 示例: TcpOffset = getTcpOffset() |
| 设置工具动力学参数 | 函数原型:void set_tool_dynamics_param(double payload, {double gravityCenterX, double gravityCenterY, double gravityCenterZ}, {double inertiaXX = 0, double inertiaXY = 0, double inertiaXZ = 0, double inertiaYY = 0, double inertiaYZ = 0, double inertiaZZ = 0})设置工具动力学参数,负载和重心 xyz 必传,惯量可以不传 参数: • payload 负载,单位 kg • 重心 table • 惯量 table 返回: 无 示例: set_tool_dynamics_param(3, {0.1, 0.2, 0.3}) | 函数原型:setPayload(m: number, cog: table, aom: table, inertia: table) -> nil设置有效负载 参数: • m 质量, 单位: kg • cog 重心, 单位: m, 形式为(CoGx, CoGy, CoGz) • aom 力矩轴的方向, 单位: rad, 形式为(rx, ry, rz) • inertia 惯量, 单位: kg*m^2, 形式为(Ixx, Iyy, Izz, Ixy, Ixz, Iyz)或(Ixx, Ixy, Ixz, Iyx, Iyy, Iyz, Izx, Izy, Izz) 返回: • 成功返回 0 • 失败返回错误码:AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setPayload(3, {0.1, 0.2, 0.3}, {0,0,0}, {0,0,0,0,0,0,0,0,0}) |
| 功能项 | PE | ARCS |
|---|---|---|
| 暂停运动 | 函数原型:void robot_pause(void)机械臂暂停运动。当且仅当机械臂处于运动状态时,才可以调用 参数: 无 返回: 无 示例: robot_pause() | 函数原型:pause() -> number暂停解释器 参数: 无 返回: 无 示例: pause() |
| 恢复运动 | 函数原型:void robot_continue(void)机械臂恢复运动。当且仅当机械臂处于暂停状态时,才可以调用 参数: 无 返回: 无 示例: robot_continue() | 函数原型:resume() -> number恢复解释器 参数: 无 返回: 无 示例: resume() |
| 急停 | 函数原型:void robot_fast_stop(void)机械臂急停。当且仅当机械臂处于运动状态时,才可以调用 参数: 无 返回: 无 示例: robot_fast_stop() | 函数原型:abort() -> number终止机器人运行。如果只是考虑停止运行时,可以调用 RuntimeMachine::stop 接口。如果脚本运行时处于 Running 状态,则终止运行时;如果运行时处于 Stopped 且机器人正在移动,则停止机器人移动;如果此时力控开启了,则机器人停止力控 参数: 无 返回: 无 示例: abort() |
| 功能项 | PE | ARCS |
|---|---|---|
| 位姿变换 | 函数原型:{Fca_PosX, Fca_PosY, Fca_PosZ}, {Fca_OriW, Fca_OriX, Fca_OriY, Fca_OriZ} pose_trans({Fba_PosX, Fba_PosY, Fba_PosZ}, {Fba_OriW, Fba_OriX, Fba_OriY, Fba_OriZ}, {Fcb_PosX, Fcb_PosY, Fcb_PosZ}, {Fcb_OriW, Fcb_OriX, Fcb_OriY, Fcb_OriZ})参数: • {Fba_PosX, Fba_PosY, Fba_PosZ} 坐标系 a 在坐标系 b 下的位置 • {Fba_OriW, Fba_OriX, Fba_OriY, Fba_OriZ} 坐标系 a 在坐标系 b 下的姿态 • {Fcb_PosX, Fcb_PosY, Fcb_PosZ} 坐标系 b 在坐标系 c 下的位置 • {Fcb_OriW, Fcb_OriX, Fcb_OriY, Fcb_OriZ} 坐标系 b 在坐标系 c 下的姿态 返回: 坐标系 a 在坐标系 c 下的位置和姿态 示例: target_pos, target_ori = pose_trans({0.2, 0.5, 0.1}, {1.0, 0, 0, 0}, {0.2, 0.5, 0.6}, {1.0, 0, 0, 0}) | 函数原型:poseTrans(pose_from: table, pose_from_to: table) -> table第一个参数 p_from 用于转换第二个参数 p_from_to,并返回结果。这意味着结果是从 p_from 的坐标系开始,然后在该坐标系中移动 p_from_to 后的位姿。 如果将姿态视为转换矩阵: • T_world->to = T_world->from * T_from->to • 已知 B 相对于 A 的位姿、C 相对于 B 的位姿,求 C 相对于 A 的位姿 参数: • pose_from 起始位姿(空间向量) • pose_from_to 相对于起始位姿的姿态变化(空间向量) 返回: 结果位姿(空间向量) 示例: pose_trans = poseTrans({0.2, 0.5, 0.1, 1.57, 0, 0}, {0.2, 0.5, 0.6, 1.57, 0, 0}) |
| 位姿求逆 | 函数原型:{Fab_PosX, Fab_PosY, Fab_PosZ}, {Fab_OriW, Fab_OriX, Fab_OriY, Fab_OriZ} pose_inv({Fba_PosX, Fba_PosY, Fba_PosZ}, {Fba_OriW, Fba_OriX, Fba_OriY, Fba_OriZ})参数: • {Fba_PosX, Fba_PosY, Fba_PosZ} 坐标系 a 在坐标系 b 下的位置 • {Fba_OriW, Fba_OriX, Fba_OriY, Fba_OriZ} 坐标系 a 在坐标系 b 下的姿态 返回: 坐标系 b 在坐标系 a 下的位置和姿态 示例: pose_inverse_pos, pose_inverse_ori = pose_inv({0.2, 0.5, 0.1}, {1.0, 0, 0, 0}) | 函数原型:poseInverse(pose: table) -> table参数: pose 工具位姿(空间向量) 返回: 工具位姿的逆转换(空间向量) 示例: pose_inverse = poseInverse({0.2, 0.5, 0.1, 1.57, 0, 3.14}) |
代码示例1:pose_trans — 机械臂沿着法兰坐标系Z轴运动100mm,并同时绕法兰坐标系Z轴旋转90°
lua
-- 移动到准备点
moveJoint({-3e-06, -0.176728, -1.93304, -0.807424, -1.5708, -8e-06}, 0.3, 0.3, 0, 0)
sleep(2)
-- 目标点在法兰坐标系下的位姿 [x,y,z,rx,ry,rz]
pose_wrt_tool = {0, 0, 0.1, 0, 0, 1.5708}
-- 法兰坐标系在基坐标系下位姿
current_joint = getJointPositions()
pose, fk_result = forwardToolKinematics(current_joint)
-- 通过 poseTrans 计算目标点在基坐标系下位姿
pose_trans = poseTrans(pose, pose_wrt_tool)
-- 计算逆解
joint, ik_result = inverseKinematics(current_joint, pose_trans)
-- 直线移动过去
moveLine(pose_trans, 1.3, 1.0, 0)代码示例2:pose_inv — 已知目标点在基坐标系下位姿以及用户坐标系在基座标系下位姿,求得目标点在用户坐标系下位姿
lua
-- 已知目标点在基坐标系下的位姿
pose_wrt_base = {-0.3, -0.3, 0.4, 3.14159, 2.05266e-06, -1.57079}
-- 已知feature坐标系在基坐标系下位姿
feature_wrt_base = {-0.3, -0.3, 0.3, 0, 0, 0}
-- 通过 poseInverse 计算基坐标系在feature坐标系下位姿
base_wrt_feature = poseInverse(feature_wrt_base)
-- 通过 poseTrans 计算目标点在feature坐标系下位姿
pose_trans = poseTrans(base_wrt_feature, pose_wrt_base)
-- 打印
textmsg("---------- pose wrt feature--------------- ")
textmsg("pos [" .. tostring(pose_trans[1]) .. ", " .. tostring(pose_trans[2]) .. ", " .. tostring(pose_trans[3]) .. "]")
textmsg("rpy [" .. tostring(pose_trans[4]) .. ", " .. tostring(pose_trans[5]) .. ", " .. tostring(pose_trans[6]) .. "]")2.3 内部模块
| 功能项 | PE | ARCS |
|---|---|---|
| 设置机械臂本体 IO | 函数原型:void set_robot_io_status(RobotIOType ioType, string name, double value)设置机械臂本体 IO 状态 参数: • ioType 表示 IO 类型,枚举类型 • name IO 名称 • value IO 状态值 返回: 无 示例: set_robot_io_status(RobotIOType.RobotBoardUserDI, "U_DO_00", 1) | 函数原型:setStandardAnalogOutput(index: number, value: number) -> nil设置标准模拟输出值 参数: • index 表示 IO 口的管脚,管脚编号从 0 开始。例如 0 表示第一个管脚 • value 模拟输出值 返回: • 成功返回 0 • 失败返回错误码:AUBO_REQUEST_IGNORE、AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setStandardAnalogOutput(0, 5.4)函数原型: setStandardDigitalOutput(index: number, value: boolean) -> nil设置标准数字输出值 参数: • index 表示 IO 口的管脚,管脚编号从 0 开始。例如 0 表示第一个管脚 • value 输出值 返回: • 成功返回 0 • 失败返回错误码:AUBO_REQUEST_IGNORE、AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setStandardDigitalOutput(0, true) |
| 获取机械臂本体 IO | 函数原型:double get_robot_io_status(RobotIOType ioType, string name)获取机械臂本体 IO 状态 参数: • ioType 表示 IO 类型,枚举类型 • name IO 名称 返回: 对应 IO 的状态值,double 类型 示例: a = get_robot_io_status(RobotIOType.RobotBoardUserDI, "U_DI_00")print(a) | 函数原型:getStandardAnalogInput(index: number) -> number获取标准模拟输入数量 参数: index 表示 IO 口的管脚,管脚编号从 0 开始。例如 0 表示第一个管脚 返回: 标准模拟输入值 示例: getStandardAnalogInput(0)函数原型: getStandardDigitalInput(index: number) -> boolean获取标准数字输入值 参数: index 表示 IO 口的管脚,管脚编号从 0 开始。例如 0 表示第一个管脚 返回: 高电平返回true; 低电平返回false 示例: getStandardDigitalInput(0) |
| 设置工具电源电压 | 函数原型:void set_tool_power_voltage(ToolPowerType toolPowerType)设置工具电源电压 参数: toolPowerType 工具电源电压枚举值,参考枚举类型章节 返回: 对应 IO 的状态值,double 类型 示例: set_tool_power_voltage(ToolPowerType.OUT_12V) | 函数原型:setToolVoltageOutputDomain(domain: number) -> nil参数: domain 工具端电源电压值,可选三个档位: • 0 表示 0V • 12 表示 12V • 24 表示 24V 返回: • 成功返回 0 • 失败返回错误码:AUBO_REQUEST_IGNORE、AUBO_BUSY、AUBO_BAD_STATE、-AUBO_INVL_ARGUMENT、-AUBO_BAD_STATE 示例: setToolVoltageOutputDomain(24) |
2.4 Modbus
| 功能项 | PE | ARCS |
|---|---|---|
| 获取 Modbus IO 状态 | 函数原型:double get_modbus_io_status(string ioName)获取 Modbus IO 状态 参数: ioName Modbus IO 名称(由示教器扩展→外设→Modbus→IO Config 定义) 返回: Modbus IO 状态 示例: get_modbus_io_status("M_DO_0") | 函数原型:modbusGetSignalStatus(signal_name: string) -> number参数: signal_name 要获取值的信号的名称 返回: • 对于数字信号:1 或 0 • 对于寄存器信号:表示为整数的寄存器值。如果值为 -1,则表示该信号不存在 示例: var0 = modbusGetSignalStatus("Modbus_0") |
| 设置 Modbus IO 状态 | 函数原型:void set_modbus_io_status(string ioName, double ioValue)设置 Modbus IO 状态 参数: • ioName Modbus IO 名称(由示教器扩展→外设→Modbus→IO Config 定义) • ioValue IO 值 返回: 无 示例: set_modbus_io_status("M_DO_0", 1) | 函数原型:modbusSetOutputSignal(signal_name: string, value: number) -> nil参数: • signal_name 提前被添加的输出寄存器信号 • value 必须是有效的整数,范围是 0-65535 返回: Modbus IO 状态 示例: modbusSetOutputSignal("Modbus_0", 0) |
2.5 TCP 服务器
| 功能项 | PE | ARCS |
|---|---|---|
| 监听端口 | 函数原型:void listen(int port)TCP 服务器监听端口 参数: port 端口号 返回: 无 示例: tcp.server.listen(8888) | 函数原型:socket.bind(address, port [, backlog])参数: • address 本地地址 • port 本地端口 • backlog(可选)传递给 listen 方法的最大等待连接队列长度,默认为 32 返回: 一个 TCP 服务器对象,该对象已绑定到指定的本地地址和端口,并处于可接受客户端连接的状态 示例: local server = assert(socket.bind(ip, port)) |
| 判断客户端连接 | 函数原型:bool is_connected(string IP)判断地址为 IP 的客户端是否与本地服务器建立连接 参数: IP IP 地址 返回: 如果参数中的 IP 已经连接了 TCP 服务器,则返回 true;否则返回 false 示例: while (tcp.server.is_connected(ip) ~= true) do sleep(1)endprint("connection succeeded") | 函数原型:server:accept()参数: 无(该方法在服务器对象上调用,不接收额外参数) 返回: • 连接成功时:返回一个 client 对象,代表该连接 • 超时时:返回 nil,后跟错误字符串 'timeout' • 其他错误时:返回 nil,后跟描述该错误的消息 示例: local client = server:accept() |
| 接收数据 | 函数原型:string recv_str_data(string IP)本地服务器以字符串形式接收来自地址为 IP 的客户端的数据 参数: IP IP 地址 返回: 返回接收到的数据 示例: recv = tcp.server.recv_str_data("127.0.0.1") | 函数原型:client:receive([pattern [, prefix]])参数: pattern(可选)读取模式,遵循 Lua 文件 I/O 格式: • '*a':从 socket 读取数据,直到连接关闭,不进行行尾转换 • '*l':从 socket 读取一行文本,以 LF 字符结尾(默认模式) • number:读取指定数量的字节 • prefix(可选)会在返回前拼接到接收数据前面 返回: • 成功时:返回接收到的内容 • 出错时:返回 nil 后跟错误消息('closed' 或 'timeout'),以及传输的部分结果 示例: local recv = client:receive(3) |
| 发送数据 | 函数原型:void send_str_data(string IP, string msg)本地服务器以字符串形式向地址为 IP 的客户端发送消息 参数: • IP IP 地址 • msg 发送的消息 返回: 无 示例: tcp.server.send_str_data("127.0.0.1", "Hello world") | 函数原型:client:send(data [, i [, j]])参数: • data 要发送的字符串 • i(可选)子串起始位置,与 string.sub 一致 • j(可选)子串结束位置,与 string.sub 一致 通过 i 和 j 可以选取 data 的一个子串进行发送 返回: • 成功时:返回最后一个已发送字节的索引(i 为 1 或省略时即为已发送总字节数) • 出错时:返回 nil 后跟错误消息('closed' 或 'timeout'),以及最后一个已发送字节的索引 示例: client:send("Hello ") |
| 关闭服务器 | 函数原型:void close(void)本地服务器停止监听并断开所有已经建立的连接 参数: 无 返回: 无 示例: tcp.server.close() | 函数原型:close()参数: 无 返回: 无 示例: server:close() |
代码示例3:TCP 服务器 — 通过 ASCII 码形式接收来自客户端的数据,如果接收到的数据为 "end" 则退出程序
lua
local socket = require("socket")
-- 定义 printTable 函数(必须放在调用之前)
function printTable(tbl, level, keyName)
if type(tbl) ~= "table" then
return
end
if next(tbl) == nil then
return
end
level = level or 1
keyName = keyName or ""
local indent = string.rep(" ", level)
if keyName ~= "" then
textmsg(indent .. keyName .. " = {")
else
textmsg(indent .. "{")
end
for k, v in pairs(tbl) do
if type(v) == "table" then
printTable(v, level + 1, tostring(k))
else
textmsg(string.format("%s %s = %s", indent, tostring(k), tostring(v)))
end
end
textmsg(indent .. "}")
end
-- 服务端配置
local ip = "0.0.0.0" -- 监听所有网卡
local port = 8866
local server = assert(socket.bind(ip, port))
textmsg("正在监听 " .. ip .. ":" .. port)
local client = server:accept()
textmsg("客户端已连接")
client:send("Hello ")
client:send("world")
-- 接收循环
while true do
client:settimeout(1) -- 1 秒超时
local recv = client:receive(3)
if recv then
textmsg("recv from port " .. port .. " :")
-- 把字符串转成字节表再传给 printTable
local byteTable = { string.byte(recv, 1, #recv) }
printTable(byteTable)
if recv == "end" then
textmsg("break")
break
end
end
end
client:close()
server:close()
textmsg("tcp server end")2.6 TCP 客户端
| 功能项 | PE | ARCS |
|---|---|---|
| 连接服务器 | 函数原型:void connect(string IP, int port)连接指定 IP 和 port 的 TCP 服务器 参数: • IP IP 地址 • port 端口号 返回: 无 示例: tcp.client.connect("127.0.0.1", 7777) | 函数原型:connect(address, port)参数: • address IP 地址或主机名 • port 端口号,必须是范围在 [1..64K) 内的整数 返回: • 出错时:返回 nil 后跟描述错误的字符串 • 成功时:返回 1 示例: local client1 = assert(socket.connect(ip, port1)) |
| 接收数据 | 函数原型:string recv_str_data(string IP, int port)以字符串形式接收从指定 IP 和 port 的 TCP 服务器发送来的数据 参数: IP IP 地址 返回: 返回从服务器发送来的数据 示例: recv = tcp.client.recv_str_data("127.0.0.1", "7777")print(recv) | 函数原型:client:receive([pattern [, prefix]])参数: pattern(可选)读取模式,遵循 Lua 文件 I/O 格式: • '*a':从 socket 读取数据,直到连接关闭,不进行行尾转换 • '*l':从 socket 读取一行文本,以 LF 字符结尾(默认模式) • number:读取指定数量的字节 • prefix(可选)会在返回前拼接到接收数据前面 返回: • 成功时:返回接收到的内容 • 出错时:返回 nil 后跟错误消息('closed' 或 'timeout'),以及传输的部分结果 示例: local recv = client:receive(3) |
| 发送数据 | 函数原型:void send_str_data(string IP, int port, string msg)以字符串形式向指定 IP 和 port 的 TCP 服务器发送数据 参数: • IP IP 地址 • port 端口号 • msg 发送的消息 返回: 无 示例: tcp.client.send_str_data("127.0.0.1", 7777, "Hello world") | 函数原型:client:send(data [, i [, j]])参数: • data 要发送的字符串 • i(可选)子串起始位置,与 string.sub 一致 • j(可选)子串结束位置,与 string.sub 一致 通过 i 和 j 可以选取 data 的一个子串进行发送 返回: • 成功时:返回最后一个已发送字节的索引(i 为 1 或省略时即为已发送总字节数) • 出错时:返回 nil 后跟错误消息('closed' 或 'timeout'),以及最后一个已发送字节的索引 示例: client:send("Hello ") |
| 断开连接 | 函数原型:void disconnect(string IP, int port)断开指定 IP 和 port 的 TCP 服务器 参数: • IP IP 地址 • port 端口号 返回: 无 示例: tcp.client.disconnect("127.0.0.1", 7777) | 函数原型:close()参数: 无 返回: 无 示例: server:close() |
代码示例4:TCP 客户端 — 连接 IP 地址相同、端口号不同的两个 TCP 服务器,通过 ASCII 码形式接收数据,收到 "end" 则退出
lua
local socket = require("socket")
key = ""
function printTable(table, level)
if (#table == 0) then
return
end
level = level or 1
local indent = ""
for i = 1, level do
indent = indent .. " "
end
if key ~= "" then
textmsg(indent .. key .. " " .. "=" .. " " .. "{")
else
textmsg(indent .. "{")
end
key = ""
for k, v in pairs(table) do
if (type(v) == "table") then
key = k
printTable(v, level + 1)
else
local content = string.format("%s%s = %s", indent .. "", tostring(k), tostring(v))
textmsg(content)
end
end
textmsg(indent .. "}")
end
-- =========================================================
-- tcp client
-- =========================================================
local ip = "192.168.18.1"
local port1 = 9601
local port2 = 9602
-- 建立两条 TCP 连接
local client1 = assert(socket.connect(ip, port1))
local client2 = assert(socket.connect(ip, port2))
-- 端口1:先发字符串 "Hello",再发 "world" 的字节序列
client1:send("Hello")
local world = {
string.byte("world", 1), string.byte("world", 2), string.byte("world", 3),
string.byte("world", 4), string.byte("world", 5)
}
-- 把字节表拼成字符串发送(LuaSocket 只能发字符串)
local worldStr = string.char(table.unpack(world))
client1:send(worldStr)
-- 端口2:先发 "Hello" 的字节序列,再发字符串 " world"
local hello = {
string.byte("Hello", 1), string.byte("Hello", 2), string.byte("Hello", 3),
string.byte("Hello", 4), string.byte("Hello", 5)
}
local helloStr = string.char(table.unpack(hello))
client2:send(helloStr)
client2:send(" world")
textmsg("string.byte : " .. string.byte("end"))
recv = {}
-- 非阻塞轮询:设一个很短的超时,收不到就返回 nil
client1:settimeout(0)
client2:settimeout(0)
while (true) do
-- 端口1:字节数据
local recv1 = client1:receive(3)
-- 端口2:字符串数据
local recv2 = client2:receive(3)
-- 端口1 是否为 "end"
if (recv1 ~= nil) and (#recv1 == 3) then
local byteTable = { string.byte(recv1, 1, #recv1) }
if (string.format("%c%c%c", byteTable[1], byteTable[2], byteTable[3]) == "end") then
textmsg("from port1 break")
break
end
textmsg(string.format("recv data from port %d,data length %d", port1, #byteTable))
printTable(byteTable)
end
-- 端口2 是否为 "end"
if (recv2 ~= nil) and (#recv2 == 3) then
if (recv2 == "end") then
textmsg("from port2 break")
break
end
textmsg(string.format("recv data from port %d,data length %d", port2, #recv2))
textmsg(recv2)
end
end
client1:close()
client2:close()
socket.sleep(1)
textmsg("tcp client end")3 系统配置
3.1 机械臂设置
3.1.1 固定位姿功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 选择初始位姿 | ![]() 操作方式: 点击「设置固定点」→ 通过操作机器人示教界面或拖动示教来移动机械臂 → 设定机器人初始位置 → 同步到示教界面下方的「初始位姿」。 | ![]() 操作方式: 通过「编辑位置」设定机器人初始位置,支持操作示教界面或拖动示教方式移动机械臂,设定后同步到移动界面的「原点」。 |
| 选择打包位姿 | ![]() 操作方式: 点击「运动到这里」→ 将机械臂运动到打包位姿; 点击「设置固定点」→ 修改打包位姿。 | ![]() 操作方式: 打包位姿默认不支持修改; 通过移动界面长按「自动」按钮移动到打包位姿。 |
| 初始位置IO设置 | ![]() 配置步骤: 在下拉菜单中选中一个DO → 勾选「high」→ 点击保存IO; 机械臂移动到初始位置后,选中的DO会有信号输出; 输入关节阈值 → 点击保存IO。 | ![]() 配置步骤: 在I/O界面选中DO,配置「到达路点时高」及对应路点变量;机械臂到达路点变量后DO输出信号;支持设置关节容差范围。 |
3.1.2 工具标定功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 运动学标定 | ![]() 工具运动学标定包括位置标定和姿态标定,建议先确定位置标定点,再确定姿态标定点。 位置标定: • 需要 ≥4 个路点(必选项) • 所有位置标定点需满足工具末端位置相对于机械臂基坐标系位置不变 • 操作:设置 → 工具标定 → 运动学标定 → 标定点类型选「位置标定点」→ 添加 → 示教界面确定位置点 姿态标定: • 需要有且仅有 2 个路点(不计参考点) • 可选项,若不标定则工具姿态与法兰盘姿态相同 • 第一类(有参考点):xOxy、yOyz、zOzx • 第二类(无参考点):TxRBz_TxyPBzAndTyABnz、TyRBz_TyzPBzAndTzABnz、TzRBz_TzxPBzAndTxABnz 运动学参数设置: ![]() • 运动学参数为工具相对于腕部3工具端的距离参数和姿态参数 • 标定完成后参数自动添加到数据显示区 • 输入运动学名称 → 点击「添加」 • 支持手动输入参数 • 可选中列表中的参数 → 「修改」或「删除」 • 注意:flange_center 为系统默认参数,不能修改和删除 | ![]() 位置标定: 通过「配置→一般→工具中心点→新增→位置→测量」进入,示教4个路点后系统自动计算TCP与法兰中心的偏差值。 姿态标定: 通过「方向→测量」进入,选择坐标系后示教工具姿态,系统自动计算方向参数并填入。 ![]() 参数管理: 计算结果自动填入「方向」参数,无需手动输入。 |
| 动力学标定 | ![]() 操作方式: • 输入工具动力学名称、工具负载、工具重心参数 → 点击「添加」完成标定 • 修改:选中要修改项 → 输入数值 → 点击「修改」 • 删除:选中要修改项 → 点击「删除」 • 注意:flange_center 为系统默认参数,不能修改和删除 | ![]() 功能按钮说明: • 当前默认:当前默认有效负载 • 默认:设置为默认有效负载 • 新增:新增有效负载 • 重命名:重命名当前选择的有效负载 • 删除:删除选择的有效负载 • 现在设置:立即生效当前设置的有效负载 • 测量:有效负载辨识向导 - 方法一:手动输入有效负载和重心的值 - 方法二:使用有效负载辨识向导来自动计算有效负载和重心 (CoG) |
3.1.3 坐标系标定功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 坐标系标定 | ![]() 操作流程: 通过「坐标系标定方法」下拉菜单选择坐标系类型 → 选中「标定方法」 → 依次设置 Point1/Point2/Point3(点击「设置路点」进入示教界面标定)→ 输入「坐标系名称」→ 点击「添加」保存。 功能说明: • 修改:选中坐标系 → 点击「修改」→ 可修改 Point1-3 及名称 • 删除:选中坐标系 → 点击「删除」 • 清除:清空 Point1-3 的标定结果 • 显示模式:显示已标定坐标系三个路点的数值,选中坐标系后自动进入,点击 Point1-3 在仿真界面中显示对应路点 • 移动到这里:在标定模式或显示模式中,选中 Point1-3 任意一个,点击「移动到这里」运动到对应路点 | ![]() 通过点、线、面三种方式构建新坐标系,坐标系通过 TCP 位置定位。 通过点构建: ![]() • 通过 TCP 示教新坐标系原点位置,坐标系轴方向与 TCP 方向相同 • 通常用来定义机器人的安全边界或全局主配置 • 支持「关节运动到此处」或「直线运动到此处」回到构建位姿 通过线构建: ![]() • 原点由第一点定义;Y 轴为第一点指向第二点的轴;Z 轴为第一点的 Z 轴在垂直于直线的平面上的投影 通过面构建(三点标定法): ![]() • 原点由第一点定义;X 轴为第一点指向第二点的轴;第三点落在 XY 平面上,Z 轴垂直于 XY 面,满足右手定则 • 一般在需要高精度框架时选择使用 |
3.1.4 机械臂安全配置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 基础条件 | ![]() 碰撞等级: • 共有 1-10 个安全等级 • 等级越高,碰撞检测后停止所需的力越小 • 第 6 级为默认等级 碰撞模式: • Free:碰撞后进入拖动示教模式 • Stuck:碰撞后保持当前位置,不会被拖动 运动限制初始值: • 为工程运行速度的限制值 • 完成配置后重启软件生效 • 仅启动软件后初始化一次有效,之后以更改后的值为准 重置防护停止: • 手动重置:需防护重置外部输入信号有效方能解除保护 • 自动重置:忽略外部输入信号,当防护停止信号无效时自动解除保护 | ![]() 碰撞等级: • 共有 10 个安全等级 • 数值越小等级越高,触发碰撞事件所需的力越大 • 系统默认碰撞等级为 6 碰撞模式: • 碰撞后浮动:停机进入拖动示教模式,可手动拖动至安全位置 • 碰撞后静止:停机保持静止不动 • 碰撞后抱闸:停机抱闸保持静止(仅适用于固件版本 1.*.* 的机器人) 导航栏: ![]() 可设置默认运行速度 安全输入信号配置: ![]() 手动重置 → 分别设置安全停止和安全重置: • 安全停止(触发方式:逻辑低):电平触发,信号置为逻辑低时触发安全停止。可与安全重置同时使用 • 安全重置(触发方式:上升沿):边缘触发,安全停止恢复后在上升沿解除安全停止。须与安全停止同时配置 自动重置 → 设置使能装置: • 使能装置(触发方式:逻辑低):保持逻辑高信号正常运行,逻辑低时触发安全停止。双路I/O需同时收到有效信号;手动模式下有效 |
| 缩减模式 | ![]() 该模式激活后,机械臂运动速度受限: • 关节空间:1/2/3关节 1~150°/s,4/5/6关节 1~180°/s • 笛卡尔空间:TCP速度限制 1~2800mm/s ![]() 关节限制说明: 关节限制默认为关节能到达的最大限制,用户可限制运行时各关节角度。如设置的角度超出实际范围,数值自动恢复默认。如机械臂运行到设置角度之外,停止运动并弹出警示,需重新调整关节限制。超过角度过大会导致断电,恢复后关节限制恢复默认,需移动机械臂到合适位置后重新设置。 | ![]() 关节限制说明: 【关节限制】界面可设置机械臂各关节能到达的最大限制,限制各关节在关节空间的移动。 用户可设置「正常模式」或「缩减模式」下每个关节的旋转角度、关节最大速度限制。 • 「缩减模式」内数值不可大于「正常模式」,否则系统将提示不可保存 • 关节最大值、关节最小值、关节最大速度限制默认值为最大范围,用户只能在默认范围内进行修改 |
3.2 系统设置
3.2.1 语言设置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 语言设置 | ![]() 支持语言: 提供英文,中文(简体&繁体),捷克语,德语,法语,意大利语,日语,韩语的设置。 | ![]() 系统语言: 支持捷克语、英语、日语、韩语、俄语、简体中文及繁体中文 键盘语言: 支持中文及英语 |
3.2.2 日期时间设置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 日期时间设置 | ![]() 时间设置: 可以设置系统日期和时间。 基本设置: 可以设置语言、单位和日期等。 | ![]() 单位:设置系统的单位 日期:设置时间及日期格式 时间:支持跟随系统时间和自定义时间两种方式 • 跟随系统时间:自动同步 • 不跟随:单击【修改】自定义时间 应用:设置生效 取消:设置取消 |
3.2.3 网络设置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 网络设置 | ![]() 功能说明: 网络设置单元用于第三方接口控制的网络设置。 此界面可配置指定网卡名称及其 IP 地址、子网掩码、默认网关。第三方接口的网络 IP 地址需与本机的 IP 地址在同一网段。 网络调试: • ping:查看与外部设备是否 ping 通 • ifconfig:查看网卡信息 • server status:查看机械臂服务器端口号是否属于监听状态 | ![]() 功能说明: 【网络】可设置第三方接口控制的网络,设置后可以使系统连接外网或局域网。 注意事项: • 第三方接口的网络 IP 地址需与本机的 IP 地址在同一网段 • 修改网络配置会导致网络连接中断。请在机器人空闲时修改配置,并确保程序和配置已保存,避免数据丢失 • 请优先使用 DHCP 方式连接网络。若选择静态地址方式,请牢记设置的 IP 地址,并确保该地址是空闲的,否则可能无法连接控制器 |
3.2.4 密码设置功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 密码设置 | ![]() 权限管理: 提供管理员密码和操作员密码两级权限管理。 | ![]() 权限管理: 提供管理员、操作模式和安全三种密码的设置与修改功能。 不同密码管理不同功能的权限。 |
3.2.5 更新功能对比
| 功能项 | PE | ARCS |
|---|---|---|
| 恢复出厂设置 | ![]() | ![]() 【恢复】界面可对系统进行恢复出厂设置。 |
| 软件/固件更新 | ![]() 对应内容软件升级界面 | ![]() AuboStudio 支持在线和离线两种方式更新软件。 软件版本在线更新: 需保证控制器可连接外网,通过【软件升级】下载安装包后安装,支持切换到当前版本并重启生效。 软件版本离线更新: 从官网下载安装包(.run 文件)导入控制器后,通过【软件升级】筛选本地安装包进行安装。 软件版本切换: 通过下拉菜单选择版本后切换,重启控制器生效。 |
| 工程文件日志 导出与导入 | ![]() 日志导出: 用户可以在「主页 > 日志」卡片中单击【下载】按钮导出日志。 | ![]() 日志导出方式: • 本地:保存至本地 • U 盘:保存至外部 USB 驱动器 • LANDrop:通过第三方软件进行文件传输 U 盘导入: ![]() 插入 U 盘后系统自动识别,挂载成功后即可导入文件至控制器。 导入的工程文件、安装配置文件和安装包分别在对应功能模块下使用。 操作完成后需先卸载再拔出 U 盘。 |

















































【弹窗】命令,用户指定一则信息,程序运行到该节点时会在屏幕显示该信息。




















































