运动 (move)

movej

关节运动。

movej(p, a, v, t, r)

在关节空间内执行线性运动。使用该命令,机器人必须处于静止状态或者上一个命令是 movej 或者带交融的 movel

调用运动命令时,机器人如果处于停止状态会返回 false2.0

  • 参数
    • p。关节位置,或者坐标位置(将通过逆向运动学反解转为关节位置)。
      • 若是 {j1 = 0.1, j2 = 0.2, j3 = 0.2, j4 = 0.3, j5 = 0.1, j6 = 0.2},表示关节位置。
      • 若是 {x, y, z, Rz, Ry, Rx},则表示的是坐标位置。
        • 当指定坐标位置时,可以指定参考坐标系 {x, y, z, Rz, Ry, Rx, base={x0, y0, z0, Rz0, Ry0, Rx0}},默认参考坐标系为世界坐标系 base={0,0,0,0,0,0}2.0
    • a。主轴的关节加速度 (rad/s2)。
    • v。主轴的关节速度 (rad/s)。
    • t。运动时间 (s)。
      • t > 0 时,参数速度 v 和加速度 a 无效。2.1
    • r。交融半径 (m)。用于指定路径的平滑效果。
      • 0 表示关闭平滑运动。
      • 1 表示启用平滑运动(最大交融半径为 1 m),过渡时不一定经过目标位置。
        • 2.2 版本之前设置为其他值无效。
        • 2.3 版本之后支持不同空间内的平滑和交融半径设置。
      • {continued=1, type='smooth'} 支持不同空间之间的平滑过渡,但保证经过目标位置。适用于由算法生成(非示教产生)位置的连续路径运动。 2.1
示例程序
movej({j1 = 0, j2 = 1.57, j3 = -1.57, j4 = 0, j5 = 3.14, j6 = 3.14}, 1.2, 0.2, 0, 0)
movej({0.2, 0.5, 0.4, 0, 0, 0}, 1.2, 0.2, 0, 0)

兼容说明

在 2.x 版本中提供的 HTTP API 如下:

{
  "cmd": "movej",
  "data": {
    "pose_to": [
      0, -0.7853981633974483, 1.5707963267948966, -0.7853981633974483, 1.5707963267948966, 0
    ],
    "is_joint_angle": true,
    "acceleration": 1.23,
    "velocity": 1.23
  }
}

该调用会立刻返回,并不会等到运动完成。可以通过 get_robot_mode 查询状态直到空闲,或调用 sync 指令使得机器人同步等待到当前所有指令执行完成。

movej_until 2.0

关节运动直到。

movej_until(p, a, v, t, fn)

执行运动命令,如果需要在运动过程中当某个条件发生时停止当前运动,则采用 move until 系列命令。

相比于 movej,取消了交融半径 r 的设置,代之以回调函数 fn。该回调函数的效果是,当运动命令执行时,系统会每周期 (约 10ms) 调用一次该函数,如果该函数返回 true,则自动调用 stop_move 命令停止当前运动。如果该函数一直不返回真值,机器人将最终运动到 p。如果该函数无法在 10ms 内完成,会导致跳过后续若干周期的判断。

示例程序

在 Lua 语法中,函数可以是匿名的。

movej_until({j1 = 0, j2 = 1.57, j3 = -1.57, j4 = 0, j5 = 3.14, j6 = 3.14}, 1.2, 0.2, 0, function()
  return get_aio(2) > 10
end)

movej_until_rt 2.0

关节运动直到(实时)。

movej_until_rt(p, a, v, t, logic, io, cb)

进行关节空间的线性运动,实时判断当满足指定条件时停止并回调。

实时系列命令,当满足指定 I/O 组的对应的逻辑触发条件时运动停止,本类运动命令仅支持机器人主机 I/O 和法兰盘 I/O 作为触发条件,相比 movej_until,实时指令可以保证每次条件判断在 10ms 内完成。

  • 参数
    • logic。I/O 组各个判断条件之间的逻辑判断关系。
      • AND,全部满足。
      • OR,任意满足。
    • io。I/O 组各个判断条件的描述,依次为: {'dev', type, pin, value, 'relation'}
    • cb。当 I/O 组对应的条件满足时的回调方法。会通过 cb 回调方法返回机器人的核心位置数据,格式如下:
      {
          target_pose: {x, y, z, Rz, Ry, Rx},
          actual_pose: {x, y, z, Rz, Ry, Rx},
          target_joint_pose: {j1=x, j2=y, j3=z, j4=a, j5=b, j6=c},
          actual_joint_pose: {j1=x, j2=y, j3=z, j4=a, j5=b, j6=c}
      }
      
示例程序
movej_until_rt({j1 = 0, j2 = 1.57, j3 = -1.57, j4 = 0, j5 = 3.14, j6 = 3.14}, 1.2, 0.2, 0, 'AND', {{'robot', 0, 1, 0, '=='}, {'flange', 1, 1, 1, '!='}}, function(data)
  print(data)
end)

movel

直线运动。

movel(p, a, v, t, r)

在工具空间内执行线性运动路径,使用该命令,机器人必须处于静止状态或者上一个命令是movej或者带交融的movel

  • 参数基本同 movej
    • p。坐标位置,或者关节位置(将通过运动学正解转为坐标位置)。
    • a。工具空间加速度 (m/s2)。
    • v。工具空间速度 (m/s)。注意这里的速度和加速度指的是在工具空间上的描述。
示例程序
movel({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.0, 0.2, 0, 0)
movel({j1 = 0, j2 = 1.57, j3 = -1.57, j4 = 0, j5 = 3.14, j6 = 3.14}, 1.0, 0.2, 0, 0)

兼容说明

在 2.x 版本中提供的 HTTP API 如下:

{
  "cmd": "movel",
  "data": {
    "pose_to": [
      0.2, 0.5, 0.4, 0, 0, 1.57
    ],
    "is_joint_angle": false,
    "acceleration": 1.0,
    "velocity": 0.2
  }
}

movel_until 2.0

直线运动直到。

movel_until(p, a, v, t, fn)

在工具空间内执行线性运动路径,即直线运动,当满足指定条件时停止。

参考 movelmovej_until 的说明。

示例程序
movel_until({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.0, 0.2, 0, function()
  return get_tcp_dio(1) == 0
end)

movel_until_rt 2.0

直线运动直到(实时)。

movel_until_rt(p, a, v, t, logic, io, cb)

在工具空间内执行线性运动路径,即直线运动,实时判断当满足指定条件时停止并回调。

参考 movelmovej_until_rt 的说明。

示例程序
movel_until_rt({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.2, 0.2, 0, 'AND', {{'robot', 0, 1, 0, '=='}, {'flange', 1, 0, 1, '!='}}, function(data)
  print(data)
end)

movec

圆弧运动。

movec(via, p, rad, a, v, t, r)

在工具空间内进行圆弧运动,路径为以当前位置、viap 三点组成的唯一圆。如果三点位于一条直线上无法画圆,或者点之间距离过小以至于唯一圆过大或过小,命令均将执行失败。执行完圆弧运动的机器人姿态与 p 一致,与 rad 无关。

  • 参数具体说明可参见 movej
    • via。途经位置。坐标位置,或者关节位置(将转为坐标位置)。
    • p。目标位置。坐标位置,或者关节位置(将转为坐标位置)。
    • rad。路径圆弧的弧度 (rad) 。用于指定圆弧运动的弧度大小。
      • 特殊且默认地,当 rad = 0 表示运动到 p 作为终点。
      • 如果 rad > 0,则表示走一个圆弧运动轨迹,途径 viap,并旋转对应的 rad
      • 如果 rad < 0,则表示反方向走圆弧运动轨迹,viap 在此模式下不一定经过。
    • a。工具空间加速度 (m/s2)
    • v。工具空间速度 (m/s)
    • t。运动时间 (s)
    • r。交融半径 (m)
示例程序
movec({0.2, 0.5, 0.4, 0, 0, 1.57}, {j1 = 0.1, j2 = 0.2, j3 = 0.2, j4 = 0.3, j5 = 0.1, j6 = 0.2}, 0.0, 1.0, 0.2, 0)

movec_until 2.0

圆弧运动直到。

movec_until(via, p, rad, a, v, t, fn)

进行工具空间内的圆弧运动,当满足指定条件时停止。

参考 movecmovej_until 的说明。

示例程序
movec_until({0.2, 0.5, 0.4, 0, 0, 1.57}, {j1 = 0.1, j2 = 0.2, j3 = 0.2, j4 = 0.3, j5 = 0.1, j6 = 0.2}, 0.0, 1.0, 0.2, 0, function()
  return get_tcp_dio(1) == 0
end)

movec_until_rt 2.0

圆弧运动直到(实时)。

movec_until_rt(via, p, rad, a, v, t, logic, io, cb)

在工具空间内执行圆弧运动,实时判断当满足指定条件时停止并回调。

参考 movecmovej_until_rt 的说明。

示例程序
movec_until_rt({0.2, 0.5, 0.4, 0, 0, 1.57}, {j1 = 0.1, j2 = 0.2, j3 = 0.2, j4 = 0.3, j5 = 0.1, j6 = 0.2}, 0.0, 1.0, 0.2, 0, 'AND', {{'robot', 0, 1, 0, '=='}, {'flange', 1, 1, 1, '!='}}, function(data)
  print(data)
end)

stop_move

停止运动。

stop_move()

停止并取消当前正在进行的运动指令。如果后续有运动命令,则会执行下一个。

该命令是 move_until 系列命令的内部实现机制。

move_pvt 2.3.5

伺服运动(PVT)。

move_pvt(p, v, t)

指定速度和时间的伺服运动。指定每个关节的速度和运动时间,让机器人连续地进行伺服运动。最小可以设置的时间为 0.01 (10ms),小于该值的路径点会被跳过。

  • 参数
    • p。关节位置,或者坐标位置(将通过运动学反解转为关节位置)
    • v。每个关节的速度 (rad/s)。如该值为数字,则表示所有关节速度相同。
    • t。运动时间 (s)
示例程序
move_pvt({j1=0.279099,j2=0.0499054,j3=0.320451,j4=0.172128,j5=1.67471,j6=0.427222}, {0.00141239,0.017133,0.015709,0.0477418,0.0037477,0.0504095}, 0.01)

move_pvt({-0.490491,-0.257047,-0.0192966,-1.60649,-0.311108,2.14048}, 0.1, 0.01)

move_pvat 2.3.5

伺服运动(PVAT)。

move_pvat(p, v, a, t)

指定每个关节的速度、加速度和运动时间,让机器人连续地进行伺服运动。

  • 参数
    • p。关节位置,或者坐标位置(将通过运动学反解转为关节位置)
    • v。每个关节的速度 (rad/s)。如该值为数字,则表示所有关节速度相同。
    • a。每个关节的加速度 (rad/s2)。如该值为数字,则表示所有关节加速度相同。
    • t。运动时间 (s)
示例程序
move_pvat({j1=0.279099,j2=0.0499054,j3=0.320451,j4=0.172128,j5=1.67471,j6=0.427222}, {0.00141239,0.017133,0.015709,0.0477418,0.0037477,0.0504095}, 0, 0.01)

move_pvat({-0.490491,-0.257047,-0.0192966,-1.60649,-0.311108,2.14048}, 0.1, 0, 0.01)
上次更新: