运动

回放运动轨迹

执行已保存的轨迹。

  • 函数名:[Robot]下的方法move_trajectory
  • 参数:
    1. name: [str] 轨迹名称
    2. dir: [str] 轨迹所在文件名称。可选,默认根目录
  • 返回:[int] 运动指令 ID
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_trajectory", "params": [{"name": "", "dir": ""}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"id": 1}, "id": 1 }

示例程序

motion_id = lebai:move_trajectory("traj1")
print(motion_id)

进入示教模式

当机器人处于空闲状态时,调用该指令可进入示教(自由驱动)模式。在示教模式下,机器人各关节可被自由拖拽,故又称自由驱动模式。末端负载配置会影响示教效果,设置值比实际负载大时,机器人会向上用力,反之则会向下用力,请注意检查。

注意

当机器人处于非空闲状态时,调用该指令将会产生错误 1000: 机器人处于空闲中才能示教

  • 函数名:[Robot]下的方法teach_mode
  • 参数:无
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "start_teach_mode", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:teach_mode()

退出示教模式

当机器人处于示教中状态,即示教(自由驱动)模式时,调用该指令可退出示教模式,恢复到空闲状态。处与其他模式时调用不产生错误。

  • 函数名:[Robot]下的方法end_teach_mode
  • 参数:无
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "end_teach_mode", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:end_teach_mode()

暂停运动

暂停所有运动。不影响任务运行状态。

  • 函数名:[Robot]下的方法pause_move
  • 参数:无
  • 返回:无

示例程序

lebai:pause_move()

恢复运动

恢复所有运动。不影响任务运行状态。

  • 函数名:[Robot]下的方法resume_move
  • 参数:无
  • 返回:无

示例程序

lebai:resume_move()

停止运动

停止所有运动,但无法取消后续新发的运动指令。 该命令是 move_until 系列命令的内部实现机制。

  • 函数名:[Robot]下的方法stop_move
  • 参数:无
  • 返回:无

示例程序 可以使用以下代码实现move_until功能

motion_id = lebai:movej({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.0, 0.2, 0, 0)
while true
do
  if lebai:get_motion_state(motion_id) == "FINISHED"
  then
    break
  end
  if lebai:get_di("FLANGE", 1) == 1
  then
    lebai:stop_move()
  end
end
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "stop_move", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

等待运动完成

阻塞等待指定运动完成。未指定运动 ID 时等待全部运动完成。

  • 函数名:[Robot]下的方法wait_move
  • 参数:
    1. id: [int] move_xxx 返回的运动 ID。可选,默认为全部运动
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "wait_move", "params": [{"id": 1}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

motion_id = lebai:movej({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.0, 0.2, 0, 0)
lebai:wait_move(motion_id)

获取运动状态

查询运动状态。

  • 函数名:[Robot]下的方法get_motion_state
  • 参数:
    1. id: [int] move_xxx 返回的运动 ID
  • 返回:[str] 运动状态:"WAIT"排队中;"RUNNING"运动中;"FINISHED"已完成
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "get_motion_state", "params": [{"id": 1}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"state": ""}, "id": 1 }

示例程序

motion_id = lebai:movej({0.2, 0.5, 0.4, 0, 0, 1.57}, 1.0, 0.2, 0, 0)
state = lebai:get_motion_state(motion_id)

获取正在执行的运动 ID

  • 函数名:[Robot]下的方法get_running_motion
  • 参数:无
  • 返回:[int] 当前正在执行的运动 ID
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "get_running_motion", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"id": 1}, "id": 1 }

示例程序

motion_id = lebai:get_running_motion()

关节运动

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

  • 函数名:[Robot]下的方法movej
  • 参数:
    1. p: [Pose] 位置参数。若是 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2] 表示关节角表达的关节位置;若是 {'x': 0.01, 'y': 0, 'z': 0, 'rz': 0, 'ry': 0, 'rx': 0} 表示笛卡尔坐标位置。详情参考 位置和姿态
    2. a: [float] 运动的关节加速度 (rad/s2)
    3. v: [float] 运动的关节速度 (rad/s)
    4. t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。如果时间很短,可能在设定时间内完不成运动指令,但会以安全设置的最大加速度和速度移动到目标位置。可选,默认0
    5. r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。数值越大,连续走多点运动时,允许偏离轨迹路径的值越大,轨迹弧度越大以达到平滑效果。可选,默认0
  • 返回:[int] 运动指令 ID

注意

  • 当位置参数是笛卡尔坐标位置时,如果输入的笛卡尔坐标位置是奇异点或者超出运动范围,反解不出来,就会报错。
  • 安全设置里有各个关节的安全角度范围设置,如果输入的关节位置超出范围,运动过程中会报错,须根据需求设置关节安全角度范围。
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_joint", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

motion_id = lebai:movej({0, -0.7854, 1.5708, -0.7855, 1.5708, 0}, 5, 1.5, 0, 0.5)
motion_id = lebai:movej({x = -0.46, y = -0.121, z = 0.13, rz = -1.57, ry = 0, rx = 1.57}, 5, 1.5, 0, 0.5)

关节跟随运动

连续发出 towardj 运动指令,会忽略前面发出的运动目标位置,不需要运动到之前发出的目标位置,会以最新指令的位置参数为目标进行运动。与 movej 不同,movej 指令发出位置形成轨迹,手臂会按照轨迹一步步执行完成。

  • 函数名:[Robot]下的方法towardj
  • 参数:
    1. p: [Pose] 位置参数。若是 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2] 表示关节角表达的关节位置;若是 {'x': 0.01, 'y': 0, 'z': 0, 'rz': 0, 'ry': 0, 'rx': 0} 表示笛卡尔坐标位置
    2. a: [float] 运动的关节加速度 (rad/s2)
    3. v: [float] 运动的关节速度 (rad/s)
    4. t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。可选,默认0
    5. r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。可选,默认0
  • 返回:[int] 运动指令 ID
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "toward_joint", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:towardj({0, -0.7854, 1.5708, -0.7855, 1.5708, 0}, 5, 1.5, 0, 0.1)
lebai:towardj({-0.3, -0.7854, 1.5708, -0.7855, 1.5708, 0}, 5, 1.5, 0, 0.1)

关节匀速运动

不指定位置,各个关节按照速度矢量定速运动,运动多久根据运动时间参数而定,默认 t = 0,一直运动到限位。收到其他运动指令后,会立即终止当前指令,并执行新运动指令。

  • 函数名:[Robot]下的方法speedj
  • 参数:
    1. a: [float] 运动的关节加速度 (rad/s2)
    2. v: [JointPose] 各个关节速度 (rad/s),如 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2]
    3. t: [float] 运动时间 (s)。可选,默认 t = 0,一直运动到限位
  • 返回:[int] 运动指令 ID

注意

速度参数是列表,代表各个关节的速度设定值,不同于 movej 的 float 类型。

JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "speed_joint", "params": [{"speed": [], "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

motion_id = lebai:speedj(5, {0.1, 0, 0, 0, 0, 0}, 0.5)

直线运动

笛卡尔空间直线运动到目标位姿。

  • 函数名:[Robot]下的方法movel
  • 参数:
    1. p: [Pose] 位置参数。若是 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2] 表示关节角表达的关节位置(将通过运动学正解转为坐标位置);若是 {'x': 0.01, 'y': 0, 'z': 0, 'rz': 0, 'ry': 0, 'rx': 0} 表示笛卡尔坐标位置
    2. a: [float] 运动的工具空间加速度 (m/s2)
    3. v: [float] 运动的工具空间速度 (m/s)。注意这里的速度和加速度指的是在工具空间上的描述
    4. t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。可选,默认0
    5. r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。可选,默认0
  • 返回:[int] 运动指令 ID

注意

当位置参数是笛卡尔坐标位置且处于奇异位置或超出工作空间边界时,反解不出来会报错,需要改用关节运动。当输入的关节位置超出安全角度范围时,运动过程中会报错。

JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_linear", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

motion_id = lebai:movel({x = -0.46, y = -0.121, z = 0.13, rz = -1.57, ry = 0, rx = 1.57}, 2, 1, 0, 0.5)

直线匀速运动

不指定位置,在指定参考坐标系下按照速度矢量定速运动到限位。收到其他运动指令后,会立即终止当前指令,并执行新运动指令。

  • 函数名:[Robot]下的方法speedl
  • 参数:
    1. a: [float] 空间加速度 (m/s2)
    2. v: [CartesianPose] 各个方向的速度 (m/s),如 {'x': 0.01, 'y': 0, 'z': 0, 'rz': 0, 'ry': 0, 'rx': 0}
    3. t: [float] 运动时间 (s)。可选,默认 t = 0,一直运动到限位
    4. frame: [CartesianPose] 运动坐标参考系。可选,默认基座方向
  • 返回:[int] 运动指令 ID

注意

速度参数是各个方向的速度设定值。

示例程序

lebai:speedl(0.1, {x = 0.01, y = 0, z = 0, rz = 0, ry = 0, rx = 0}, 0, {x = 0, y = 0, z = 0, rz = 0, ry = 0, rx = 0})
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "speed_line", "params": [{"speed": {}, "params": {}, "frame": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

圆弧运动

在工具空间内进行圆弧运动,路径为以当前位置、viap 三点组成的唯一圆。

注意

如果三点位于一条直线上无法画圆,或者点之间距离过小以至于唯一圆过大或过小,命令均将执行失败。执行完圆弧运动的机器人姿态与 p 一致,与 rad 无关。

  • 函数名:[Robot]下的方法movec
  • 参数:
    1. via: [Pose] 途径位置
    2. p: [Pose] 目标位置
    3. rad: [float] 路径圆弧的弧度 (rad)。用于指定圆弧运动的弧度大小。特殊且默认地,当 rad = 0 表示运动到 p 作为终点;如果 rad > 0,则表示走一个圆弧运动轨迹,途径 via 和 p,并旋转对应的 rad;如果 rad < 0,则表示反方向走圆弧运动轨迹,via 和 p 在此模式下不一定经过
    4. a: [float] 工具空间加速度 (m/s2)
    5. v: [float] 工具空间速度 (m/s)
    6. t: [float] 运动时间 (s)。可选,默认0
    7. r: [float] 运动轨迹交融半径 (m)。可选,默认0
  • 返回:[int] 运动指令 ID
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_Circular", "params": [{"pose_via": {}, "pose": {}, "rad": 0, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

via = {x = -0.41, y = -0.071, z = 0.13, rz = -1.57, ry = 0, rx = 1.57}
p = {x = -0.46, y = -0.121, z = 0.13, rz = -1.57, ry = 0, rx = 1.57}
motion_id = lebai:movec(via, p, 3.14, 1, 0.5, 0, 0.1)

伺服运动(PVAT)

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

注意

  • 最小可以设置的时间为 0.01 (10ms),小于该值的路径点会被跳过。
  • 2个相邻点位之间的发送间隔必须小于t,超出t会导致机器人自动减速停止。
  • 注意传参,速度在前面。
  • 函数名:[Robot]下的方法move_pvat
  • 参数:
    1. p: [JointPose] 关节位置
    2. v: [list[float]] 每个关节的速度 (rad/s),如 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2]
    3. a: [list[float]] 每个关节的加速度 (rad/s2),如 [1, 1, 1, 1, 0.5, 0.5]
    4. t: [float] 运动时间 (s)
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_pvat", "params": [{"duration": 0.01, "joints": [{"pose": 0, "velocity": 0.1, "acc": 0.1}]}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:move_pvat({0, -0.7854, 1.5708, -0.7855, 1.5708, 0}, {0.1, 0.2, 0.2, 0.3, 0.1, 0.2}, {1, 1, 1, 1, 0.5, 0.5}, 0.5)

伺服运动(PVT)

伺服运动(PVAT),由机器人自动估算各个关节的加速度

  • 函数名:[Robot]下的方法move_pvt
  • 参数:
    1. p: [JointPose] 关节位置
    2. v: [list[float]] 每个关节的速度 (rad/s),如 [0.1, 0.2, 0.2, 0.3, 0.1, 0.2]
    3. t: [float] 运动时间 (s)
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_pvat", "params": [{"duration": 0.01, "joints": [{"pose": 0, "velocity": 0.1, "acc": 0}]}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:move_pvt({0, -0.7854, 1.5708, -0.7855, 1.5708, 0}, {0.1, 0.2, 0.2, 0.3, 0.1, 0.2}, 0.5)

伺服运动(PT)

伺服运动(PVAT),由机器人自动估算各个关节的速度、加速度

  • 函数名:[Robot]下的方法move_pt
  • 参数:
    1. p: [JointPose] 关节位置
    2. t: [float] 运动时间 (s)
  • 返回:无
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_pvat", "params": [{"duration": 0.01, "joints": [{"pose": 0, "velocity": 0, "acc": 0}]}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

示例程序

lebai:move_pt({0, -0.7854, 1.5708, -0.7855, 1.5708, 0}, 0.5)