- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
基础状态查询接口
头文件:include/tl_interface.h
1. get_current_position - 获取机械臂当前坐标信息
方法:get_current_position(socketFd, coord, pos);
功能描述:获取机器人当前位置。
参数:
- socketFd:已连接的句柄。
- coord:坐标系类型。
- 0:关节坐标系。
- 1:直角坐标系。
- 2:工具坐标系。
- pos:输出参数,用于存储当前位置的向量。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 获取关节坐标系下的当前位置
current_pos = tl.VectorDouble()
coord = 0 # 关节坐标系
ret = tl.get_current_position(socket_fd, coord, current_pos)
if ret == 0:
pos_list = list(current_pos)
print(f"获取位置成功:{pos_list}")
else:
print(f"获取位置失败,错误码:{ret}")
2. get_robot_running_state - 获取作业文件运行状态
方法:get_robot_running_state(SOCKETFD socketFd, int& status);
功能描述:获取当前作业文件的运行状态,执行前需要延时0.1秒。
参数:
- socketFd:已连接的句柄。
- status:程序运行状态,0 停止 1 暂停 2 运行。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
time.sleep(0.1)
status = 0
ret, status = tl.get_robot_running_state(socket_fd, status)
if ret != SUCCESS:
print("[ERROR] 获取机械臂运行状态失败,程序退出!")
else:
if status == 0:
print("[INFO] 机械臂处于停止状态 (status = " + str(status) + ")")
elif status == 1:
print("[INFO] 机械臂处于暂停状态 (status = " + str(status) + ")")
elif status == 2:
print("[INFO] 机械臂处于运行状态 (status = " + str(status) + ")")
3. get_servo_state - 获取伺服状态
方法:get_servo_state(SOCKETFD socketFd, int& status);
功能描述:获取机械臂当前伺服状态信息。
参数:
- socketFd:已连接的句柄。
- status 接收获取结果 0:停止状态 1:就绪状态 2:报警状态 3:运行状态。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 2. 检查伺服状态
state = -1
ret, state = get_servo_state(socket_fd, state)
if ret != SUCCESS:
print(f"[ERROR] 获取伺服状态失败: {ret}")
return
print(f" [信息] 当前伺服状态: {state} (0=停止 1=就绪 2=报警 3=运行)")
if state == 2:
print("[ERROR] 伺服处于报警状态,无法上电,请排查报警原因后重试")
return
if state == 3:
print("[INFO] 机械臂已在使能上电状态")
return
4. get_current_mode - 获取机器人当前模式
方法:get_current_mode(SOCKETFD socketFd, int& mode);
功能描述:获取机械臂当前模式。
参数:
- socketFd:已连接的句柄
- mode:当前模式 0:示教 1:远程 2:运行。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# ---- 检查模式并确保伺服运行 ----
# 先获取当前模式
current_mode = -1
ret, current_mode = get_current_mode(sock, current_mode)
if ret != SUCCESS or current_mode < 0:
print("[ERROR] 获取当前模式失败: " + str(ret))
disconnect_robot(sock)
return -1
print(" [信息] 当前模式: " + str(current_mode) + " (0=示教 1=远程 2=运行)")
5. get_robot_dh_param - 获取机械臂 DH 参数
方法:get_robot_dh_param(SOCKETFD socketFd, RobotDHParam& param);
参数:
- socketFd:已连接的句柄。
- param:输出参数,RobotDHParam 结构体,包含 alpha/a/theta/d(标准 DH 参数双精度数组)、eulerAngle(欧拉角)、mountingAngle(安装角)等成员。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
dh_params = tl.RobotDHParam()
ret = tl.get_robot_dh_param(socket_fd, dh_params)
if ret == 0:
print("alpha=" + str(list(dh_params.alpha)))
print("a=" + str(list(dh_params.a)))
print("theta=" + str(list(dh_params.theta)))
print("d=" + str(list(dh_params.d)))
print("eulerAngle=" + str(dh_params.eulerAngle))
print("mountingAngle=" + str(dh_params.mountingAngle))
else:
print(f"获取机械臂DH参数失败,错误码:{ret}")
6. get_library_version - 读取机械臂软件信息
方法:get_library_version();
功能描述:获取 SDK 库版本信息。
参数:
- None
返回值:
- str:成功返回版本信息字符串,格式 "<sdk版本>(Base:<base版本>)",如 "V2.5.1-0-gabc1234-20260916(Base:2.0.4-20260914-6cf4a3b)"。
使用示例:
import tl_interface as tl
# 获取库版本
version = tl.get_library_version()
print(f"机器人库版本 = {version}")
7. get_robot_joint_param - 获取关节参数
方法:get_robot_joint_param(socketFd, id, param);
功能描述:获取指定关节参数。
参数:
- socketFd:已连接的句柄。
- id:关节轴号,1~7 代表第 1~7 轴。
- param:输出参数,用于存储关节参数的结构体。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 创建关节参数对象
joint_param = tl.RobotJointParam()
# 获取第 1 轴参数
ret = tl.get_robot_joint_param(socket_fd, 1, joint_param)
if ret == 0:
print(f"返回值(ret) = {ret}")
print(f"减速比 = {joint_param.reduceRatio}")
print(f"额定转速 = {joint_param.ratedRotSpeed}")
print(f"最大加速度 = {joint_param.maxAcc}")
print(f"电机方向 = {joint_param.motorDirection}")
print(f"正向软限位 = {joint_param.maxPos}")
print(f"负向软限位 = {joint_param.minPos}")
else:
print(f"获取关节参数失败,错误码:{ret}")
8. query_joint_software_version - 查询指定关节轴的软件版本号
方法:query_joint_software_version(socketFd, axisNum);
功能描述:查询指定关节(轴)的软件版本号。
参数:
- socketFd:已连接的句柄。
- axisNum:轴编号
返回值:
- tuple:(ret, version),ret 为执行结果,version 为查询到的软件版本号字符串。
- 0:成功。
- 非 0:失败。
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 查询 J1~J7 关节软件版本号
for i in range(1, 8):
ret, version = tl.query_joint_software_version(socket_fd, i)
if ret == 0:
print(f"关节{i} 软件版本: {version}")
else:
print(f"查询关节{i}软件版本失败,错误码: {ret}")
9. get_nexmotion_lib_version - 获取底层 nexmotion 库版本信息
方法:get_nexmotion_lib_version(socketFd);
功能描述:获取算法库版本。
参数:
- socketFd:已连接的句柄。
返回值:
- tuple:(ret, version),version 为算法库版本号字符串
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
ret, version = tl.get_nexmotion_lib_version(socket_fd)
10. get_robot_state - 获取机器人整体状态
方法:get_robot_state(socketFd, param);
功能描述:7000 端口查询状态。
参数:
- socketFd:已连接的句柄(7000 端口)。
- param:RobotState 结构体,查询参数(channel 查询通道,最多 9 个通道;ioState 查询 IO;position 0-关节坐标 1-基坐标;dataildmotionpos 机械臂运动点位;programRunStatus 运行状态;servoStatus 伺服状态;operationMode 操作模式;globalSpeed 全局速度等)。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 7000 端口建立连接(机器人状态查询走 7000)
socket_fd_7000 = tl.connect_robot("192.168.1.13", "7000")
# 构造查询参数(单次回复)
param = tl.RobotState()
param.channel = 1
param.stop = False
param.mode = 0 # 0-查询只回复一次 1-持续回复
param.interval = 1000
param.position = 0 # 0-关节坐标 1-直角坐标
param.servoStatus = True
param.programRunStatus = True
ret = tl.get_robot_state(socket_fd_7000, param)
if ret == 0:
print("机器人状态查询请求已发送,等待回调")
# 停止持续推送并断开
stop_param = tl.RobotState()
stop_param.channel = 1
stop_param.stop = True
tl.get_robot_state(socket_fd_7000, stop_param)
tl.disconnect_robot(socket_fd_7000)
11. get_robot_type - 获取机器人类型
方法:get_robot_type(socketFd, type);
功能描述:获取机器人类型(返回机器人类型编号)。
参数:
- socketFd:已连接的句柄。
- type:传入占位值(
RobotType枚举成员或int),实际类型以返回值为准。
RobotType 枚举说明:
| 枚举值 | 数值 | 说明 |
|---|---|---|
| SIX_AXIS_SERIAL | 1 | 六轴串联多关节 |
| FOUR_AXIS_SCARA | 2 | 四轴 SCARA |
| FOUR_AXIS_PALLETIZING | 3 | 四轴码垛 |
| FOUR_AXIS_SERIAL | 4 | 四轴串联多关节 |
| SINGLE_AXIS | 5 | 单轴 |
| FIVE_AXIS_SERIAL | 6 | 五轴串联多关节 |
| SIX_AXIS_COLLABORATIVE | 7 | 六轴协作 |
| TWO_AXIS_SCARA | 8 | 二轴 SCARA |
| THREE_AXIS_SCARA | 9 | 三轴 SCARA |
| THREE_AXIS_CARTESIAN | 10 | 三轴直角 |
| THREE_AXIS_SPECIAL | 11 | 三轴异形 |
| SEVEN_AXIS_SERIAL | 12 | 七轴串联多关节 |
| SCARA_SPECIAL | 13 | SCARA 异形一 |
| FOUR_AXIS_PALLETIZING_LEAD | 14 | 四轴码垛丝杆 |
返回值:
- tuple:(ret, type),ret 为执行结果,type 为机器人类型(
RobotType枚举) - 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 第 2 个参数为占位值,实际类型以返回值为准
ret, robot_type = tl.get_robot_type(socket_fd, tl.RobotType.SIX_AXIS_SERIAL)
if ret == 0:
print(f"机器人类型:{robot_type},编号:{int(robot_type)}")
12. get_current_line_speed_and_joint_speed - 获取当前线速度与关节速度
方法:get_current_line_speed_and_joint_speed(socketFd, joint_speed, joint_speed_sync);
功能描述:获取当前末端线速度和关节速度。
参数:
- socketFd:已连接的句柄。
- joint_speed:输出参数,关节速度,长度 7,单位 度/s(需传入 VectorDouble 实例)。
- joint_speed_sync:输出参数,外部轴关节速度,长度 5,单位 度/s(需传入 VectorDouble 实例)。
返回值:
- tuple:(ret, line_speed),ret 为执行结果、line_speed 为末端线速度 mm/s
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 出参必须传 VectorDouble 实例
joint_speed = tl.VectorDouble() # 关节速度,长度 7
joint_speed_sync = tl.VectorDouble() # 外部轴关节速度,长度 5
ret, line_speed = tl.get_current_line_speed_and_joint_speed(socket_fd, joint_speed, joint_speed_sync)
if ret == 0:
print(f"末端线速度: {line_speed} mm/s")
print(f"关节速度: {list(joint_speed)}")
print(f"外部轴关节速度: {list(joint_speed_sync)}")
13. get_pos_reachable - 查询点位可达性
方法:get_pos_reachable(socketFd, pos, movetype, result);
功能描述:检测目标点位是否可达。
参数:
- socketFd:已连接的句柄。
- pos:目标点位坐标数据,vector 长度 14([0]坐标系 0:关节 1:直角 2:工具 3:用户;[1]单位 0:角度 1:弧度;[2]形态;[3]工具手坐标序号;[4]用户坐标序号;[5][6]备用;[7-13]点位信息)。
- movetype:移动方式,"MOVJ" 或 "MOVL"。
- result:输出参数,点位是否可达(true=可达)。
返回值:
- tuple:(ret, result),ret 为执行结果、result 为点位是否可达
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 目标点位 14 位: [7-13] 为点位值
pos = tl.VectorDouble([0, 0, 0, 0, 0, 0, 0, 20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
ret, reachable = tl.get_pos_reachable(socket_fd, pos, "MOVJ", False)
if ret == 0:
print(f"点位可达:{reachable}")
14. robot_state_callback - 注册机器人状态回调
方法:robot_state_callback(socketFd, function);
功能描述:7000 端口状态返回的回调函数,状态变化时自动调用 function。
参数:
- socketFd:已连接的句柄(7000 端口)。
- function:回调函数,接收状态字符串参数。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 7000 端口建立连接(状态回调走 7000)
socket_fd_7000 = tl.connect_robot("192.168.1.13", "7000")
# 定义状态回调(回调在独立线程触发,不能做耗时操作)
def on_robot_state(state):
print(f"[回调] 收到状态:{state}")
# 注册回调
ret = tl.robot_state_callback(socket_fd_7000, on_robot_state)
if ret == 0:
print("状态回调注册成功")
15. get_speed - 获取速度
方法:get_speed(socketFd, speed);
功能描述:获得当前模式的速度。
参数:
- socketFd:已连接的句柄。
- speed:速度大小,0~100。
返回值:
- tuple:(ret, speed),ret 为执行结果、speed 为当前速度 0~100
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
speed = 0
ret, speed = tl.get_speed(socket_fd, speed)
if ret == 0:
print(f"当前速度: {speed} (0<speed≤100 百分比)")
else:
print(f"获取速度失败,错误码:{ret}")
16. get_cartesian_params - 获取笛卡尔参数
方法:get_cartesian_params(socketFd, param);
功能描述:获取笛卡尔空间参数。
参数:
- socketFd:已连接的句柄。
- param:CartesianParam 输出参数(maxSpeed 最大线速度 mm/s;maxAcc 最大线加速度 mm/s^2;maxDec 最大线减速度 mm/s^2;maxAttitudeVel 最大姿态角速度 deg/s;speedLimitMode 速度限制方式;posResolution 绝对位置分辨率;maxJerk 最大线加加速度 mm/s^3 等)。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
param = tl.CartesianParam()
ret = tl.get_cartesian_params(socket_fd, param)
if ret == 0:
print(f"最大线速度:{param.maxSpeed} mm/s")
17. get_joint_position - 查询指定关节位置
方法:get_joint_position(socketFd, axisNum, pos);
功能描述:查询指定关节在基坐标系中的位置。
参数:
- socketFd:已连接的句柄。
- axisNum:关节轴号(如 1 表示 J1 轴)。
- pos:输出参数,关节位置坐标(需传入 VectorDouble 实例)。
返回值:
- 0:成功。
- 非 0:失败。
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
pos = tl.VectorDouble() # 输出参数,需传入 VectorDouble 实例
# 查询 J1 轴位置
ret = tl.get_joint_position(socket_fd, 1, pos)
if ret == 0:
print(f"J1 位置: {list(pos)}")
else:
print(f"查询失败,错误码:{ret}")
