运动
回放运动轨迹
执行已保存的轨迹。
- 函数名:[Robot]下的方法
move_trajectory - 参数:
- name: [str] 轨迹名称
- 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)
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()
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()
lebai.end_teach_mode()
暂停运动
暂停所有运动。不影响任务运行状态。
- 函数名:[Robot]下的方法
pause_move - 参数:无
- 返回:无
示例程序
lebai:pause_move()
lebai.pause_move()
恢复运动
恢复所有运动。不影响任务运行状态。
- 函数名:[Robot]下的方法
resume_move - 参数:无
- 返回:无
示例程序
lebai: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
motion_id = lebai.movej([0.2, 0.5, 0.4, 0, 0, 1.57], 1.0, 0.2, 0, 0)
while True:
if lebai.get_motion_state(motion_id) == "FINISHED":
break
if lebai.get_di("FLANGE", 1) == 1:
lebai.stop_move()
JSON-RPC
// 请求:
{ "jsonrpc": "2.0", "method": "stop_move", "params": [{}], "id": 1 }
// 响应:
{ "jsonrpc": "2.0", "result": {}, "id": 1 }
等待运动完成
阻塞等待指定运动完成。未指定运动 ID 时等待全部运动完成。
- 函数名:[Robot]下的方法
wait_move - 参数:
- 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)
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 - 参数:
- 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)
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()
motion_id = lebai.get_running_motion()
关节运动
在关节空间内执行线性运动。使用该命令,机器人必须处于静止状态或者上一个命令是 movej 或者带交融的 movel。
- 函数名:[Robot]下的方法
movej - 参数:
- 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}表示笛卡尔坐标位置。详情参考 位置和姿态 - a: [float] 运动的关节加速度 (rad/s2)
- v: [float] 运动的关节速度 (rad/s)
- t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。如果时间很短,可能在设定时间内完不成运动指令,但会以安全设置的最大加速度和速度移动到目标位置。可选,默认0
- r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。数值越大,连续走多点运动时,允许偏离轨迹路径的值越大,轨迹弧度越大以达到平滑效果。可选,默认0
- p: [Pose] 位置参数。若是
- 返回:[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)
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 - 参数:
- 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}表示笛卡尔坐标位置 - a: [float] 运动的关节加速度 (rad/s2)
- v: [float] 运动的关节速度 (rad/s)
- t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。可选,默认0
- r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。可选,默认0
- p: [Pose] 位置参数。若是
- 返回:[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)
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 - 参数:
- a: [float] 运动的关节加速度 (rad/s2)
- v: [JointPose] 各个关节速度 (rad/s),如
[0.1, 0.2, 0.2, 0.3, 0.1, 0.2] - 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)
motion_id = lebai.speedj(5, [0.1, 0, 0, 0, 0, 0], 0.5)
直线运动
笛卡尔空间直线运动到目标位姿。
- 函数名:[Robot]下的方法
movel - 参数:
- 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}表示笛卡尔坐标位置 - a: [float] 运动的工具空间加速度 (m/s2)
- v: [float] 运动的工具空间速度 (m/s)。注意这里的速度和加速度指的是在工具空间上的描述
- t: [float] 运动时间 (s)。当 t > 0 时,参数速度 v 和加速度 a 无效。可选,默认0
- r: [float] 运动轨迹交融半径 (m)。用于指定路径的平滑效果,范围 0 到 1。可选,默认0
- p: [Pose] 位置参数。若是
- 返回:[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)
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 - 参数:
- a: [float] 空间加速度 (m/s2)
- v: [CartesianPose] 各个方向的速度 (m/s),如
{'x': 0.01, 'y': 0, 'z': 0, 'rz': 0, 'ry': 0, 'rx': 0} - t: [float] 运动时间 (s)。可选,默认 t = 0,一直运动到限位
- 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})
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 }
圆弧运动
在工具空间内进行圆弧运动,路径为以当前位置、via 和 p 三点组成的唯一圆。
注意
如果三点位于一条直线上无法画圆,或者点之间距离过小以至于唯一圆过大或过小,命令均将执行失败。执行完圆弧运动的机器人姿态与 p 一致,与 rad 无关。
- 函数名:[Robot]下的方法
movec - 参数:
- 返回:[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)
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 - 参数:
- p: [JointPose] 关节位置
- v: [list[float]] 每个关节的速度 (rad/s),如
[0.1, 0.2, 0.2, 0.3, 0.1, 0.2] - a: [list[float]] 每个关节的加速度 (rad/s2),如
[1, 1, 1, 1, 0.5, 0.5] - 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)
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 - 参数:
- p: [JointPose] 关节位置
- v: [list[float]] 每个关节的速度 (rad/s),如
[0.1, 0.2, 0.2, 0.3, 0.1, 0.2] - 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)
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),由机器人自动估算各个关节的速度、加速度
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)
lebai.move_pt([0, -0.7854, 1.5708, -0.7855, 1.5708, 0], 0.5)
