- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
队列运动接口
头文件:include/tl_interface.h
1. queue_motion_set_status - 打开/关闭队列运动模式
方法:queue_motion_set_status(SOCKETFD socketFd, boolstatus);
参数:
- socketFd:已连接的句柄。
- status:bool型True打开,False关闭。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 1. 打开队列运动模式(会清空远端队列)
ret = queue_motion_set_status(sock, True)
print_result("queue_motion_set_status(true)", ret)
if ret != SUCCESS:
return False
2. queue_motion_push_back_moveJ - 队列运动模式的本地队列最后插入一条moveJ运动
方法:queue_motion_push_back_moveJ(SOCKETFD socketFd, MoveCmd moveCmd);
功能描述:向本地队列尾部添加一条关节运动指令。
参数:
- socketFd:已连接的句柄。
- moveCmd:结构体。
- targetPos 目标点坐标 长度7位。
- velocity 参数范围(1,100] 度/s。
- acc,dec 参数范围(1,100]。
- pl 多条轨迹之间平滑参数 参数范围0,50,5。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# ============================================================
# MoveCmd 构建函数
# ============================================================
# @brief 构建 MoveCmd(关节坐标模式)
# @param joints 6 个关节角度值,单位 °(度),顺序 [J1, J2, J3, J4, J5, J6]
# @param vel 百分比 % (1,100],最大关节速度的百分比,实际受全局速度限制
# @param acc 百分比 % (1,100]
# @param dec 百分比 % (1,100]
# @param pl 平滑参数 [0,5]
# @note 实际运动速度 = 全局速度 × (vel / 100)
def make_movej_cmd(joints, vel=30, acc=50, dec=50, pl=0):
cmd = MoveCmd()
cmd.coord = 0 # 关节坐标系
cmd.velocity = vel
cmd.acc = acc
cmd.dec = dec
cmd.pl = pl
# 填充 targetPosValue(前7位为关节值,后7位为外部轴,补零到14位)
# 注意: 需要 VectorDouble 类型,不能用 Python list 直接赋值
target = VectorDouble()
for i in range(14):
target.append(joints[i] if i < len(joints) else 0.0)
cmd.targetPosValue = target
return cmd
r = queue_motion_push_back_moveJ(sock, make_movej_cmd([0, 20, 0, 0, 0, 0], 30))
print(" push_back_moveJ: J1=0°, J2=20°")
print_result("push_back_moveJ", r)
if r != SUCCESS:
return False
3. queue_motion_push_back_moveL - 队列运动模式的本地队列最后插入一条move L运动
方法:queue_motion_push_back_moveL(SOCKETFD socketFd, MoveCmd moveCmd);
功能描述:向本地队列尾部添加一条直线运动指令。
参数:
- socketFd:已连接的句柄。
- moveCmd:结构体。
- targetPos 目标点坐标 长度7位。
- velocity 参数范围(1,1000] mm/s。
- acc,dec 参数范围(1,100]。
- pl 多条轨迹之间平滑参数 参数范围0,50,5。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# @brief 构建 MoveCmd(直角坐标模式)
# @param pose 位姿 [X, Y, Z, Rx, Ry, Rz],位置单位 mm,姿态单位 °
# @param vel 百分比 % (1,1000],最大 TCP 线速度的百分比
# @param acc 百分比 % (1,100]
# @param dec 百分比 % (1,100]
# @param pl 平滑参数 [0,5]
# @note 实际运动速度 = 全局速度 × (vel / 100)
def make_movel_cmd(pose, vel=100, acc=50, dec=50, pl=0):
cmd = MoveCmd()
cmd.coord = 1 # 直角坐标系,可切换到 2:工具坐标系,3:用户坐标系
cmd.velocity = vel
cmd.acc = acc
cmd.dec = dec
cmd.pl = pl
# 填充 targetPosValue(前7位为位姿值,后7位为外部轴,补零到14位)
target = VectorDouble()
for i in range(14):
target.append(pose[i] if i < len(pose) else 0.0)
cmd.targetPosValue = target
return cmd
r = queue_motion_push_back_moveL(sock, make_movel_cmd([400, 100, 300, 3.141, 0, 0], 30))
print(" push_back_moveL: X=400, Y=100, Z=300")
print_result("push_back_moveL", r)
if r != SUCCESS:
return False
4. queue_motion_push_back_moveC - 队列运动本地队列末尾插入一条 MoveC 运动
方法:queue_motion_push_back_moveC(socketFd, moveCmd);
功能描述:队列运动模式的本地队列最后插入一条 MoveC 运动。
参数:
- socketFd:已连接的句柄。
- moveCmd:MoveCmd 结构体(targetPosValue 目标点坐标长度 7 位;velocity 参数范围 (1,1000] mm/s;acc、dec 参数范围 (1,100];pl 平滑参数 [0,5])。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
cmd = MoveCmd()
cmd.coord = 1
cmd.velocity = 100
cmd.targetPosValue = VectorDouble([100.0, 0.0, 200.0, 0.0, 0.0, 0.0, 0.0])
ret = tl.queue_motion_push_back_moveC(socket_fd, cmd)
5. queue_motion_push_back_moveS - 队列运动本地队列末尾插入一条 MoveS 运动
方法:queue_motion_push_back_moveS(socketFd, moveCmd);
功能描述:队列运动模式的本地队列最后插入一条 MoveS 运动。
参数:
- socketFd:已连接的句柄。
- moveCmd:MoveCmd 结构体(同 MoveC)。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
cmd = MoveCmd()
cmd.coord = 1
cmd.velocity = 100
cmd.targetPosValue = VectorDouble([100.0, 0.0, 200.0, 0.0, 0.0, 0.0, 0.0])
ret = tl.queue_motion_push_back_moveS(socket_fd, cmd)
6. queue_motion_send_to_controller - 将本地队列的前size个数据发送到控制器
方法:queue_motion_send_to_controller(SOCKETFD socketFd,int size,bool isContinue = false);
功能描述:将本地队列的前size个数据发送到控制器。
参数:
- socketFd:已连接的句柄。
- size:要发送的队列大小 size =0时将当前运动队列全部指令发送,范围0,310,31。
- is_continue:是否选择继续发送,true -继续;false-不继续,继续发送时可以继续发送点位,机器人不运动;不继续时机器人接收点位后立刻运动,默认为false。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 4. 发送队列到控制器并等待执行完成
print(" [信息] 发送队列到控制器...")
ret = queue_motion_send_to_controller(sock, 0, False)
print_result("send_to_controller", ret)
if ret != SUCCESS:
queue_motion_set_status(sock, False)
return False
# 注意:控制器接收到队列后,将立马开始运动。调用前请先调用 queue_motion_set_status(true)。
# 是否选择继续发送:true-继续(可继续发送点位,机器人不运动);false-不继续(机器人接收点位后立刻运动,默认 false)
7. queue_motion_get_status - 查询队列模式状态
方法:queue_motion_get_status(SOCKETFD socketFd, bool& status);
功能描述:查询控制器当前是否打开队列运动模式。
参数:
- socketFd:已连接的句柄。
- status 用来存储返回值 false-关闭 true-已打开。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
status = False
_, status = tl.queue_motion_get_status(socket_fd, status)
print(" [信息] 队列模式状态: " + ("已开启" if status else "已关闭"))
8. queue_motion_size - 查询当前运动队列的长度
方法:queue_motion_size(SOCKETFD socketFd, int& size);
功能描述:查询当前运动队列的长度。
参数:
- socketFd:已连接的句柄。
- size:返回的队列长度。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 3. 查询本地队列长度
# 注意: size 为输出参数
size = 0
ret, size = queue_motion_size(sock, size)
if ret == SUCCESS:
print(" [信息] 本地队列长度: " + str(size) + " 条指令")
9. queue_motion_get_queuelen - 查询当前运动队列剩余的指令数量
方法:queue_motion_get_queuelen(SOCKETFD socketFd, int& len);
功能描述:查询当前运动队列剩余的指令数量。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 辅助:等待队列剩余数减少到 target_len
def wait_queue_len(sock, target_len):
while True:
time.sleep(0.2)
length = -1
_, length = queue_motion_get_queuelen(sock, length)
if length <= target_len or length == -1:
break
10. queue_motion_suspend - 暂停连续运动(轨迹暂停)
方法:queue_motion_suspend(SOCKETFD socketFd);
功能描述:暂停队列正在执行的连续运动轨迹,伺服维持使能锁定,调用恢复指令即可从断点继续运行。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
r = queue_motion_suspend(sock)
print("暂停 (suspend)", r)
time.sleep(2)
11. queue_motion_restart - 暂停后再次运行运动队列(继续当前轨迹运动)
方法:queue_motion_restart(SOCKETFD socketFd);
功能描述:恢复已暂停的运动队列任务,从轨迹中断断点处继续执行剩余运动路径。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
r = queue_motion_restart(sock)
print_result("恢复 (restart)", r)
print(" [信息] 等待第 1 条完成...")
wait_queue_len(sock, 3)
print(" [信息] 第 1 条完成")
12. queue_motion_stop - 停止队列运动
方法:queue_motion_stop(socketFd);
功能描述:停止队列运动(暂停后可通过 restart 恢复)。该接口已废弃,建议使用 queue_motion_stop_not_power_off 替代(后续版本将移除)。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
ret = tl.queue_motion_stop(socket_fd)
13. queue_motion_stop_not_power_off - 停止连续运动保持上电状态(轨迹缓停)
方法:queue_motion_stop_not_power_off(SOCKETFD socketFd);
功能描述:对队列中待执行运动指令执行平滑缓停,伺服驱动器保持上电使能状态,可直接继续下发运动任务。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
r = queue_motion_stop_not_power_off(sock)
print("停止保持上电 (stop_not_power_off)", r)
time.sleep(1)
14. queue_motion_clear_Data - 清空本地队列数据
方法:queue_motion_clear_Data(socketFd);
功能描述:清空缓存的运动队列数据。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
ret = tl.queue_motion_clear_Data(socket_fd)
