运动控制
- 位置
pos
,pos_via
的类型为table
。- 若是
{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】
- 若是
- 速度
v
和加速度a
参数用于控制梯形速度分布。 - 运动时间
t
默认为 0,无效。- 当
t > 0
时,参数速度v
和加速度a
无效 ()【2.1】
- 当
- 交融半径
r
用于指定路径的平滑效果。0
表示关闭平滑移动。1
表示启用平滑移动(最大交融半径为 1 m),过渡时不一定经过目标位置。2.2之前设置为其他值无效,2.3之后支持不同空间内的平滑和交融半径设置。{continued=1, type='smooth'}
支持不同空间之间的平滑过渡,但保证经过目标位置。适用于由算法生成(非示教产生)位置的连续路径移动。【2.1】
调用移动命令时,机器人如果处于停止状态会返回 false
。【2.0】
移动 move
线性移动(关节空间)
在关节空间内执行线性移动。
使用该命令,机器人必须处于静止状态或者上一个命令是movej
或者带交融的movel
。速度和加速度参数用于控制梯形速度分布,也可以设置可选参数time
来控制移动的时间,当time > 0
时,优先级高于速度和加速度参数,速度和加速度参数的控制无效。
Lua请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 关节位置,或者坐标位置(将通过运动学反解转为关节位置) |
a |
number | 主轴的关节加速度 (rad/s2) |
v |
number | 主轴的关节速度 (rad/s) |
t |
number | 运动时间 (s) |
r |
number | 交融半径 (m) |
JSON请求参数
参数名 | 类型 | 描述 |
---|---|---|
pose_to | double数组 |
[0.1,0.2,0.3,0.4,0.5,0.6],关节空间 或是 工具空间。 |
is_joint_angle | bool |
is_joint_angle:true 表示关节空间,is_joint_angle:false 表示工具空间,系统会自动将工具空间转换成关节空间。 |
acceleration | double |
单位:rad/s^2,主轴的关节加速度 |
velocity | double |
单位:rad/s,主轴的关节速度 |
time | double |
单位:s,运动时间 (目前暂不支持) |
smooth_move_to_next | double |
是否平滑交融到下一个move,0:不平滑过渡;1:平滑过渡(目前仅支持同类型的移动平滑交融过渡过去)(目前暂不支持) |
JSON返回结果
返回值 | 数据类型 | 说明 |
---|---|---|
task_id | int |
任务id |
示例
Lua 命令 | 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) |
JSON 请求 | {"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}} |
JSON 响应 | {"data":{"task_id":75},"code":0} |
线性移动(工具空间)
在工具空间内执行线性移动路径,即直线运动。
local v = 0.06
local a = 0.1
function 画☆(base, r)
local x = r * math.sin(math.rad(18))
local a = {0,0,0,0,0,0,base=base}
movej(a, 0.4, 1, 0, 1)
local b = {-x,-y,0,0,0,0,base=base}
movel(b, v, a, 0, 0)
local c = {r / 2, -r / 2 * math.cos(math.rad(36)), 0,0,0,0,base=base}
movel(c, v, a, 0, 0)
local d = {-r / 2, c[2], 0,0,0,0,base=base}
movel(d, v, a, 0, 0)
local e = {x, -y, 0,0,0,0,base=base}
movel(e, v, a, 0, 0)
movel(a, v, a, 0, 0)
end
local a = get_actual_tcp_pose()
画☆(a, 0.1)
在工具空间内执行线性移动路径,使用该命令,机器人必须处于静止状态或者上一个命令是movej
或者带交融的movel
。速度和加速度参数用于控制梯形速度分布,也可以设置可选参数time
来控制移动的时间,当time > 0
时,优先级高于速度和加速度参数,速度和加速度参数的控制无效。
Lua请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 坐标位置,或者关节位置(将通过运动学正解转为坐标位置) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
r |
number | 交融半径 (m) |
JSON请求参数
参数名 | 类型 | 描述 |
---|---|---|
pose_to | double数组 |
[0.1,0.2,0.3,0.4,0.5,0.6],关节空间或是工具空间。 |
is_joint_angle | bool |
is_joint_angle:true 表示关节空间,is_joint_angle:false 表示工具空间,系统会自动将关节空间转换成工具空间。 |
acceleration | double |
单位:rad/s^2,主轴的关节加速度 |
velocity | double |
单位:rad/s,主轴的关节速度 |
time | double |
单位:s,运动时间 (目前暂不支持) |
smooth_move_to_next | double |
是否平滑交融到下一个move,0:不平滑过渡;1:平滑过渡(目前仅支持同类型的移动平滑交融过渡过去)(目前暂不支持) |
示例
Lua 命令 | 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) |
JSON 请求 | {"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}} |
JSON 响应 | {"data":{"task_id":88},"code":0} |
圆弧移动(工具空间)
进行工具空间内的圆弧移动,其运动路径为以当前位置、pos_via
和 pos
三点组成的唯一圆。如果三点位于一条直线上无法画圆,或者点之间距离过小以至于唯一圆过大或过小,命令均将执行失败。
弧度 rad
用于指定圆弧移动的弧度大小。
- 特殊且默认地,当
rad = 0
表示移动到pos
作为终点。 - 如果
rad > 0
,则表示走一个圆弧移动轨迹,途径pos_via
和pos
,并旋转对应的rad
。 - 如果
rad < 0
,则表示反方向走圆弧移动轨迹,pos_via
和pos
在此模式下不一定经过。 执行完圆弧移动的机器人姿态与pos
一致,与rad
无关。
Lua请求参数
参数 | 类型 | 说明 |
---|---|---|
pos_via |
table | 途经位置。坐标位置,或者关节位置(将转为坐标位置) |
pos |
table | 目标位置。坐标位置,或者关节位置(将转为坐标位置) |
rad |
number | 路径圆弧的弧度 (rad) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
r |
number | 交融半径 (m) |
示例
Lua 命令 | 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) |
JSON 请求 | 暂无 |
JSON 响应 | 暂无 |
停止当前移动
停止当前移动命令。如果后续有移动命令,则继续执行。
该命令是 move_until
系列命令的内部实现机制。
停止当前移动,并不影响后续移动命令的执行。
示例
Lua 命令 | stop_move() |
JSON 请求 | {"cmd":"stop_move"} |
JSON 响应 | {"data":{"task_id":99},"code":0} |
移动到某个条件为止 move_until
执行移动命令,如果需要在运动过程中当某个条件发生时停止当前移动,则采用 move_until
系列命令。
相比于 move
系列命令,取消了交融半径 r
的设置,代之以回调函数 fn
。该回调函数的效果是,当移动命令执行时,系统会每周期 (约 10ms) 调用一次该函数,如果该函数返回 true
,则自动调用 stop_move()
命令停止当前移动。如果该函数一直不返回真值,机器人将最终移动到 pos
。在 Lua 语法中,函数可以是匿名的。
线性移动到(关节空间)
进行关节空间的线性移动,直到满足指定条件时停止。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 关节位置,或者坐标位置(将通过运动学反解转为关节位置) |
a |
number | 主轴的关节加速度 (rad/s2) |
v |
number | 主轴的关节速度 (rad/s) |
t |
number | 运动时间 (s) |
fn |
function | 判断条件回调函数 |
返回值
类型 | 说明 |
---|---|
bool |
成功或者失败 |
示例
-- 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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
线性移动到(工具空间)
在工具空间内执行线性移动路径,即直线运动,当满足指定条件时停止。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 坐标位置,或者关节位置(将通过运动学正解转为坐标位置) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
fn |
function | 判断条件回调函数 |
示例
-- Lua示例
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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
圆弧移动到(工具空间)
进行工具空间内的圆弧移动,当满足指定条件时停止。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos_via |
table | 途经位置。坐标位置,或者关节位置(将转为坐标位置) |
pos |
table | 目标位置。坐标位置,或者关节位置(将转为坐标位置) |
rad |
number | 路径圆弧的弧度 (rad) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
fn |
function | 判断条件回调函数 |
示例
-- Lua示例
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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
移动到某个条件为止(实时) move_until_rt
实时系列命令,当满足指定 I/O 组的对应的逻辑触发条件时移动停止,本类移动命令仅支持机器人主机 I/O 和法兰盘 I/O 作为触发条件,同时相比 movej_util
完全自定义的触发条件拥有更高速更实时的处理条件,适用于对于触发后移动实时性要求较高的场景。
- 逻辑关系
logic
: IO组各个判断条件之间的逻辑判断关系,支持AND
和OR
两种逻辑判断。 - I/O 条件组合
io
:IO组各个判断条件的描述,table语法规则为:{'io_device', io_type, pin, value, 'logic operation'}
io_device
为:robot
和flange
;io_type
为:0: 模拟IO类型,1:数字IO类型;pin
:端口引脚编号,从0开始,即0对应IO引脚1;value为:对应IO端口引脚需要比较的值,number类型;logic operation
:引脚对应IO值和value的逻辑判断操作符,比较顺序为:<value of the pin> <operation> value,其中<operation>支持:>、>=、=、!=、<、<=几种操作符
- 条件满足回调函数
cb
: 当IO组对应的条件满足时的回调方法,会通过cb
回调方法返回机器人的核心位置数据,类型为table
,返回的data
数据格式为{ 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=xx, j5=yy, j6=zz}, actual_joint_pose: {j1=x, j2=y, j3=z, j4=xx, j5=yy, j6=zz} }
线性移动到(关节空间)
进行关节空间的线性移动,实时判断当满足指定条件时停止并回调。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 关节位置,或者坐标位置(将通过运动学反解转为关节位置) |
a |
number | 主轴的关节加速度 (rad/s2) |
v |
number | 主轴的关节速度 (rad/s) |
t |
number | 运动时间 (s) |
logic |
string | 逻辑关系 |
io |
table | I/O 条件组合 |
cb |
function | 条件满足回调函数 |
示例
-- Lua示例
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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
线性移动到(工具空间)
在工具空间内执行线性移动路径,即直线运动,实时判断当满足指定条件时停止并回调。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos |
table | 坐标位置,或者关节位置(将通过运动学正解转为坐标位置) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
logic |
string | 逻辑关系 |
io |
table | I/O 条件组合 |
cb |
function | 条件满足回调函数 |
示例
-- Lua示例
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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
圆弧移动到(工具空间)
进行工具空间的圆弧移动,当满足指定IO组的对应的逻辑触发条件时移动停止,本类移动命令仅支持机器人主机IO和法兰盘IO作为触发条件,同时相比movec_util
完全自定义的触发条件拥有更高速更实时的处理条件,适用于对于触发后移动实时性要求较高的场景。
请求参数
参数 | 类型 | 说明 |
---|---|---|
pos_via |
table | 途经位置。坐标位置,或者关节位置(将转为坐标位置) |
pos |
table | 目标位置。坐标位置,或者关节位置(将转为坐标位置) |
rad |
number | 路径圆弧的弧度 (rad) |
a |
number | 工具空间加速度 (m/s2) |
v |
number | 工具空间速度 (m/s) |
t |
number | 运动时间 (s) |
logic |
string | 逻辑关系 |
io |
table | I/O 条件组合 |
cb |
function | 条件满足回调函数 |
示例
-- Lua示例
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)
JSON 请求 | 暂不支持 |
JSON 响应 | 暂不支持 |
伺服移动 movep
指定速度和时间的伺服移动
指定每个关节的速度和运动时间,让机器人连续地进行伺服移动。最小可以设置的时间为 0.01 (10ms),小于该值的路径点会被跳过。
Lua请求参数
参数 | 类型 | 说明 |
---|---|---|
p |
table | 关节位置,或者坐标位置(将通过运动学反解转为关节位置) |
v |
table 或 number | 每个关节的速度 (rad/s)。如该值为数字,则表示所有关节速度相同。 |
t |
number | 运动时间 (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)
指定速度、加速度和时间的伺服移动
指定每个关节的速度、加速度和运动时间,让机器人连续地进行伺服移动。
Lua请求参数
参数 | 类型 | 说明 |
---|---|---|
p |
table | 关节位置,或者坐标位置(将通过运动学反解转为关节位置) |
v |
table 或 number | 每个关节的速度 (rad/s)。如该值为数字,则表示所有关节速度相同。 |
a |
table 或 number | 每个关节的加速度 (rad/s)。如该值为数字,则表示所有关节加速度相同。 |
t |
number | 运动时间 (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)