跳到主要内容

运动指令

指令列表

运动指令用于控制机械臂进行运动,使用前请阅读通用说明。

指令功能
MovJ关节运动
MovL直线运动
Arc圆弧插补运动
Circle整圆插补运动
MovJIO关节运动并输出DO
MovLIO直线运动并输出DO
StartPath复现录制的运动轨迹
GetPathStartPose获取轨迹的起始点
PositiveKin将关节角度正解为位姿
InverseKin将位姿逆解为关节角度

MovJ

原型:

MovJ(point, {user = 1, tool = 0, a = 20, v = 50, cp = 100, stopcond = "expression"})

描述:

从当前位置以关节运动方式运动至目标点。

必选参数:

  • point:目标点。

可选参数:

  • user:目标点的用户坐标系。
  • tool:目标点的工具坐标系。
  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]
  • v:执行该条指令时的机械臂运动速度比例。取值范围:(0,100]
  • cp:平滑过渡比例。取值范围:[0,100]
  • stopcond:停止条件表达式,满足该条件时会结束当前运动去执行下一条指令。 详细介绍请参见通用说明。

示例:

-- 机械臂以默认设置关节运动至P1点。
MovJ(P1)
-- 机械臂以默认设置关节运动至指定关节角。
MovJ({joint={0,0,90,0,90,0} })
-- 机械臂关节运动至指定位姿,位姿对应用户坐标系1和工具坐标系1,运动加速度与速度均为50%,平滑过渡比例为50%。
MovJ({pose={300,200,300,180,0,0} },{user=1,tool=1,a=50,v=50,cp=50})
-- 先定义点位再在运动指令中调用,运行效果和上一条指令相同。
customPoint={pose={300,200,300,180,0,0} }
MovJ(customPoint,{user=1,tool=1,a=50,v=50,cp=50})
-- 机械臂关节运动至P1点,运动过程中DI1为ON时会结束当前运动。
MovJ(P1,{stopcond="DI(1) == ON"})

MovL

原型:

MovL(point, {user = 1, tool = 0, a = 20, v = 50, speed = 500, cp = 100, r = 5, stopcond = "expression"})

描述:

从当前位置以直线运动方式运动至目标点。

必选参数:

point:目标点。

可选参数:

  • user:目标点的用户坐标系。目标点为关节变量时,坐标系参数无效。
  • tool:目标点的工具坐标系。目标点为关节变量时,坐标系参数无效。
  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]
  • v:执行该条指令时的机械臂运动速度比例,与speed互斥。取值范围:(0,100]
  • speed:执行该条指令时的机械臂运动目标速度,与v互斥,若同时存在以speed为准。取值范围:[1, 最大运动速度],单位:mm/s
  • cp:平滑过渡比例,与r互斥。取值范围:[0,100]
  • r:平滑过渡半径,与cp互斥,若同时存在以r为准。取值范围:[0,100],单位:mm
  • stopcond:停止条件表达式,满足该条件时会结束当前运动去执行下一条指令。 详细介绍请参见通用说明。

示例:

-- 机械臂以默认设置直线运动至P1点。
MovL(P1)
-- 机械臂500m/s的绝对速度直线运动至P1点。
MovL(P1,{speed=500})
-- 机械臂以默认设置直线运动至指定关节角。
MovL({joint={0,0,90,0,90,0} })
-- 机械臂直线运动至指定位姿,位姿对应用户坐标系1和工具坐标系1,运动加速度与速度均为50%,平滑过渡半径为5mm。
MovL({pose={300,200,300,180,0,0} },{user=1,tool=1,a=50,v=50,r=5})
-- 先定义点位再在运动指令中调用,运行效果和上一条指令相同。
customPoint={pose={300,200,300,180,0,0} }
MovL(customPoint,{user=1,tool=1,a=50,v=50,r=5})
-- 同时携带speed和v,speed生效,同时控制器会打印对应的警告日志。
-- 同时携带cp和r,r生效,同时控制器会打印对应的警告日志。
MovL(P1,{v=50,speed=500,cp=60,r=5}) -- 执行时可选参数仅speed和r生效
-- 机械臂直线运动至P1点,运动过程中DI1为ON时会结束当前运动。
MovL(P1,{stopcond="DI(1) == ON"})

Arc

原型:

Arc(P1, P2, {user = 1, tool = 0, a = 20, v = 50, speed = 500, cp = 100, r = 5, stopcond = "expression"})

描述:

从当前位置以圆弧插补方式运动至目标点。

需要通过当前位置,P1,P2三个点确定一个圆弧,因此当前位置不能在P1和P2确定的直线上。

运动过程中的机械臂末端姿态通过当前点和P2点的姿态插补算出,P1点的姿态不参与运算(即运动过程中机械臂到达P1点时的姿态可能与示教姿态不同)。

必选参数:

  • P1:圆弧中间点。

  • P2:目标点。 可选参数:

  • user:目标点的用户坐标系。

  • tool:目标点的工具坐标系。

  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]

  • v:执行该条指令时的机械臂运动速度比例,与speed互斥。取值范围:(0,100]

  • speed:执行该条指令时的机械臂运动目标速度,与v互斥,若同时存在以speed为准。取值范围:[1, 最大运动速度],单位:mm/s

  • cp:平滑过渡比例,与r互斥。取值范围:[0,100]

  • r:平滑过渡半径,与cp互斥,若同时存在以r为准。取值范围:[0,100],单位:mm

  • stopcond:停止条件表达式,满足该条件时会结束当前运动去执行下一条指令。 详细介绍请参见通用说明。

示例:

-- 机械臂运动至P1,然后经由P2以默认设置圆弧运动至P3。
MovJ(P1)
Arc(P2,P3)
-- 机械臂运动至P1,然后经由点{300,200,300,180,0,0}圆弧运动至P3,用户坐标系与工具坐标系都为1,运动加速度与速度均为50%。
MovJ(P1)
Arc({pose={300,200,300,180,0,0} },P3,{user=1,tool=1,a=50,v=50})
-- 机械臂运动至P1,然后经由P2以默认设置圆弧运动至P3,运动过程中DI1为ON时会结束当前运动。
MovJ(P1)
Arc(P2,P3,{stopcond="DI(1) == ON"})

Circle

原型:

Circle(P1, P2, Count, {user = 1, tool = 0, a = 20, v = 50, speed = 500, cp = 100, r = 5, stopcond = "expression"})

描述:

从当前位置进行整圆插补运动,运动指定圈数后重新回到当前位置。

需要通过当前位置,P1,P2三个点确定一个整圆,因此当前位置不能在P1和P2确定的直线上,且三个点确定的整圆不能超出机械臂的运动范围。

运动过程中的机械臂末端姿态通过当前点和P2点的姿态插补算出,P1点的姿态不参与运算(即运动过程中机械臂到达P1点时的姿态可能与示教姿态不同)。

必选参数:

  • P1:整圆定位点1。

  • P2:整圆定位点2。

  • Count:进行整圆运动的圈数,取值范围1~999。 可选参数:

  • user:目标点的用户坐标系。

  • tool:目标点的工具坐标系。

  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]

  • v:执行该条指令时的机械臂运动速度比例,与speed互斥。取值范围:(0,100]

  • speed:执行该条指令时的机械臂运动目标速度,与v互斥,若同时存在以speed为准。取值范围:[1, 最大运动速度],单位:mm/s

  • cp:平滑过渡比例,与r互斥。取值范围:[0,100]

  • r:平滑过渡半径,与cp互斥,若同时存在以r为准。取值范围:[0,100],单位:mm

  • stopcond:停止条件表达式,满足该条件时会结束当前运动去执行下一条指令。 详细介绍请参见通用说明。

示例:

-- 机械臂运动至P1,然后进行沿着P1,P2,P3确定的整圆运动一圈。
MovJ(P1)
Circle(P2,P3,1)
-- 机械臂运动至P1,然后沿着P1,点{300,200,300,180,0,0},P3确定的整圆运动10圈,用户坐标系与工具坐标系都为1,运动加速度与速度均为50%。
MovJ(P1)
Circle({pose={300,200,300,180,0,0} },P3,10,{user=1,tool=1,a=50,v=50})
-- 机械臂运动至P1,然后进行沿着P1,P2,P3确定的整圆运动一圈,运动过程中DI1为ON时会结束当前运动。
MovJ(P1)
Circle(P2,P3,1,{stopcond="DI(1) == ON"})

MovJIO

原型:

MovJIO(P,{ {Mode,Distance,Index,Status},{Mode,Distance,Index,Status}...}, {user = 1, tool = 0, a = 20, v = 50, cp = 100})

描述:

从当前位置以关节运动方式运动至目标点,运动时并行设置数字输出端口状态。

必选参数:

  • P:目标点。 并行数字输出参数:设置当机械臂运动到指定距离或百分比时,触发指定DO。可设置多组,每组含有以下参数:

  • Mode:触发模式。0表示百分比触发,1表示距离触发。系统会将各关节角合成一个角度向量,并计算终点和起点的角度差作为运动的总距离。

  • Distance:指定百分比/角度。因角度计算使用的是合成角向量,建议使用百分比模式,效果更直观。

  • Distance为正数时,表示离起点的百分比/角度。

  • Distance为负数时,表示离目标点的百分比/角度。

  • Mode为0时,Distance表示和总角度的百分比。取值范围:(0,100]

  • Mode为1时,Distance表示角度的值。单位:°

  • Index:DO端子的编号。

  • Status:要设置的DO状态,0和OFF表示无信号,1和ON表示有信号。 可选参数:

  • user:目标点的用户坐标系。

  • tool:目标点的工具坐标系。

  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]

  • v:执行该条指令时的机械臂运动速度比例。取值范围:(0,100]

  • cp:平滑过渡比例。取值范围:[0,100] 平滑过渡会改变机械臂运动轨迹,对DO输出的时机造成影响,请谨慎使用。

详细介绍请参见通用说明。

示例:

-- 机械臂以默认设置向P1点关节运动,当运动到距离起点30%的位置时,将DO2设置为开。
MovJIO(P1, { {0, 30, 2, 1} })


-- 机械臂以默认设置向P1点关节运动,当运动到距离终点还有15°的位置时,将DO3设置为关。
MovJIO(P1, { {1, -15, 3, 0} })

MovLIO

原型:

MovLIO(P,{ {Mode,Distance,Index,Status},{Mode,Distance,Index,Status}...},{user = 1, tool = 0, a = 20, v = 50, speed = 500, cp = 100, r = 5})

描述:

从当前位置以直线运动方式运动至目标点,运动时并行设置数字输出端口状态。

必选参数:

  • P:目标点。 并行数字输出参数:设置当机械臂运动到指定距离或百分比时,触发指定DO。可设置多组,每组含有以下参数:

  • Mode:触发模式。0表示百分比触发,1表示距离触发。

  • Distance:指定百分比/距离。

  • Distance为正数时,表示离起点的百分比/距离。

  • Distance为负数时,表示离目标点的百分比/距离。

  • Mode为0时,Distance表示和总距离的百分比。取值范围:(0,100]

  • Mode为1时,Distance表示距离的值。单位:mm

  • Index:DO端子的编号。

  • Status:要设置的DO状态,0和OFF表示无信号,1和ON表示有信号。 可选参数:

  • user:目标点的用户坐标系。

  • tool:目标点的工具坐标系。

  • a:执行该条指令时的机械臂运动加速度比例。取值范围:(0,100]

  • v:执行该条指令时的机械臂运动速度比例,与speed互斥。取值范围:(0,100]

  • speed:执行该条指令时的机械臂运动目标速度,与v互斥,若同时存在以speed为准。取值范围:[1, 最大运动速度],单位:mm/s

  • cp:平滑过渡比例,与r互斥。取值范围:[0,100]

  • r:平滑过渡半径,与cp互斥,若同时存在以r为准。取值范围:[0,100],单位:mm 平滑过渡会改变机械臂运动轨迹,对DO输出的时机造成影响,请谨慎使用。

详细介绍请参见通用说明。

示例:

-- 机械臂以默认设置向P1点直线运动,当运动到距离起点30%的位置时,将DO2设置为开。
MovLIO(P1, { {0, 30, 2, 1} })


-- 机械臂以默认设置向P1点直线运动,当运动到距离终点15mm的位置时,将DO3设置为关。
MovLIO(P1, { {1, -15, 3, 0} })

StartPath

原型:

StartPath(string, {multi = 1, isConst = 0, sample = 50, freq = 0.2, user = 0,tool = 0})

描述:

复现指定的轨迹文件中录制的轨迹。调用该指令前需要用户自行运行机械臂到轨迹的起始点。

必选参数:

string:轨迹文件名(含后缀名)。

可选参数:

  • multi:复现时的速度倍数,仅当isConst=0时有效。取值范围:[0.1, 2],不带参时默认值为1。
  • isConst:是否匀速复现。不带参时默认值为0。
    • 1表示匀速复现,机械臂会按照全局速率匀速复现轨迹;
    • 0表示按照轨迹录制时的原速复现,并可以使用multi参数等比缩放运动速度,此时机械臂的运动速度不受全局速率的影响。
  • sample:轨迹点位采样间隔,即生成轨迹文件时相邻两个点位的采样时间差。取值范围:[8, 1000],单位:ms,不带参时默认值为50(控制器录制轨迹文件时的采样间隔)。
  • freq:滤波系数,该参数的值越小,复现的轨迹曲线约平滑,但相对原轨迹的变形越严重,请根据原轨迹的平滑程度设置合适的滤波系数。取值范围:(0,1],1表示关闭滤波,不带参时默认值为0.2。
  • user:指定轨迹点位对应的用户坐标系索引,不指定时使用轨迹文件中记录的用户坐标系索引。
  • tool:指定轨迹点位对应的工具坐标系索引,不指定时使用轨迹文件中记录的工具坐标系索引。 示例:
-- 关节运动到track.csv轨迹文件的起始点后,按2倍的原速复现文件中记录的轨迹。
local StartPoint = GetPathStartPose("track.csv")
MovJ(StartPoint)
StartPath("track.csv", {multi = 2, isConst = 0})
-- 关节运动到track.csv轨迹文件的起始点后,匀速复现文件中记录的轨迹。
local StartPoint = GetPathStartPose("track.csv")
MovJ(StartPoint)
StartPath("track.csv", {isConst = 1})

GetPathStartPose

原型:

GetPathStartPose(string)

描述:

获取轨迹的起始点。根据轨迹文件不同,点位数据的类型(示教点/关节/位姿)也可能会不同。

必选参数:

string:轨迹文件名(含后缀名)。

示例:

-- 获取track.csv轨迹文件的起始点并打印。
local StartPoint = GetPathStartPose("track.csv")
print(StartPoint)
-- StartPoint = {joint={j1,j2,j3,j4,j5,j6},"name" = "",user = userIndex,tool = toolIndex,pose = {x,y,z,a,b,c}}
-- StartPoint = {joint={j1,j2,j3,j4,j5,j6}}
-- StartPoint = {pose = {x,y,z,a,b,c}}

PositiveKin

原型:

PositiveKin(joint, {user = 1, tool = 0})

描述:

进行正解运算:给定机械臂各关节角度,计算机械臂末端在给定的笛卡尔坐标系中的坐标值。

必选参数:

joint:关节变量,格式为 {joint = { j1, j2, j3, j4, j5, j6 } }

可选参数: user:用户坐标系索引,不指定时使用全局用户坐标系。 tool:工具坐标系索引,不指定时使用全局工具坐标系。

返回:

正解得出的位姿变量,格式为{pose = {x, y, z, rx, ry, rz} }

示例:

PositiveKin({joint={0,0,-90,0,90,0} },{user=1,tool=1})
关节坐标为{0,0,-90,0,90,0},计算机械臂末端在用户坐标系1和关节坐标系1下的笛卡尔坐标。

InverseKin 原型:

InverseKin(pose, {useJointNear = true, jointNear = joint, user = 1, tool = 0})

描述:

进行逆解运算:给定机械臂末端在给定的笛卡尔坐标系中的坐标值,计算机械臂各关节角度。

由于笛卡尔坐标仅定义了TCP的空间坐标与倾斜角,所以机械臂可以通过多种不同的姿态到达同一个位姿,意味着一个位姿变量可以对应多个关节变量。为得出唯一的解,系统需要一个指定的关节坐标,选择最接近该关节坐标的解作为逆解结果。

必选参数:

  • pose:位姿变量,格式为{pose = {x, y, z, rx, ry, rz} }

可选参数:

  • useJointNear:布尔值,用于设置JointNear参数是否有效。
    • true表示根据JointNear参数就近选解;
    • false或者不带参表示JointNear参数无效,系统根据机械臂当前关节角度就近选解。 如果仅携带此参数而不携带jointNear参数,此参数无效。
  • jointNear:用于就近选解的关节变量,格式为 {joint = { j1, j2, j3, j4, j5, j6 } }
  • user:用户坐标系索引,不指定时使用全局用户坐标系。
  • tool:工具坐标系索引,不指定时使用全局工具坐标系。

返回:

  • 错误码,0表示逆解成功,-1表示逆解失败(无解)。
  • 逆解得出的关节变量,格式为 {joint = { j1, j2, j3, j4, j5, j6 } },逆解失败时j1~j6全部为0。

示例:

local errId, jointPoint = InverseKin(
{ pose = {300, 200, 300, 180, 0, 0} },
{
useJointNear = true,
jointNear = { joint = {90, 30, -90, 180, 30, 0} }
}
)

机械臂末端在全局用户坐标系和全局关节坐标系下的笛卡尔坐标为0,计算关节坐标,选择离关节角度0最近的解。