运动

回放运动轨迹

motion_id = lebai:move_trajectory(name)
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_trajectory", "params": [{"name": "", "dir": ""}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"id": 1}, "id": 1 }

进入示教模式

lebai:teach_mode()

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

注意

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

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

退出示教模式

lebai:end_teach_mode()

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

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

暂停运动

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

lebai:pause_move()

恢复运动

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

lebai:resume_move()

停止运动

lebai:stop_move()

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

示例程序

可以使用以下代码实现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 }

等待运动完成

lebai:wait_move(motion_id)
  • 参数
    • motion_id move_xxx 返回的 motion_id。可选,默认为0全部运动
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "wait_move", "params": [{"id": 1}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

获取运动状态

state = lebai:get_motion_state(motion_id)
  • 参数
    • motion_id move_xxx 返回的 motion_id
  • 返回
    • state 运动状态:"WAIT"排队中;"RUNNING"运动中;"FINISHED"已完成
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "get_motion_state", "params": [{"id": 1}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"state": ""}, "id": 1 }

获取正在执行的运动 ID

motion_id = lebai:get_running_motion()
  • 返回
    • motion_id move_xxx 返回的 motion_id
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "get_running_motion", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {"id": 1}, "id": 1 }

关节运动

motion_id = lebai:movej(p, a, v, t, r)
  • 参数
    • p 相对于基座的位姿
      • 若是 {0.1, 0.2, 0.2, 0.3, 0.1, 0.2},表示关节位置
      • 若是 {x = 0, y = 0, z = 0, rz = 0, ry = 0, rx = 0},则表示的是坐标位置
    • a 主轴的关节加速度 (rad/s2)。
    • v 主轴的关节速度 (rad/s)。
    • t 运动时间 (s)。 当 t > 0 时,参数速度 v 和加速度 a 无效
    • r 交融半径 (m)。用于指定路径的平滑效果
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_joint", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

关节跟随运动

motion_id = lebai:towardj(p, a, v, t, r)
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "toward_joint", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

关节匀速运动

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

motion_id = lebai:speedj(a, v, t)
  • 参数
    • a 关节加速度 (rad/s2)。
    • v 各个关节速度 (rad/s),如{0.1, 0.2, 0.2, 0.3, 0.1, 0.2}
    • t 运动时间 (s)。 可空,默认t = 0,一直运动到限位
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "speed_joint", "params": [{"speed": [], "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

直线运动

motion_id = lebai:movel(p, a, v, t, r)
  • 参数基本同 关节运动
    • p。坐标位置,或者关节位置(将通过运动学正解转为坐标位置)。
    • a。工具空间加速度 (m/s2)。
    • v。工具空间速度 (m/s)。注意这里的速度和加速度指的是在工具空间上的描述。
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "move_line", "params": [{"pose": {}, "params": {}}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }

直线匀速运动

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

motion_id = lebai:speedl(a, v, t, frame)
  • 参数
    • a 空间加速度 (m/s2)。
    • v 各个方向的速度 (m/s)。
    • t 运动时间 (s)。 可空,默认t = 0,一直运动到限位
    • frame 参考系。可空,默认基座方向
示例程序
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 }

圆弧运动

motion_id = lebai:movec(via, p, rad, a, v, t, r)

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

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

伺服运动(PVT)

lebai:move_pvt(p, v, t)

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

  • 参数
    • p 关节位置
    • v 每个关节的速度 (rad/s)
    • t 运动时间 (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 }

伺服运动(PVAT)

lebai:move_pvat(p, v, a, t)

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

  • 参数
    • p 关节位置
    • v 每个关节的速度 (rad/s)
    • a 每个关节的加速度 (rad/s2)
    • t 运动时间 (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 }