- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
伺服状态与系统参数设置接口
头文件:include/tl_interface.h
1. clear_error - 清除系统错误/清除关节错误代码
方法:clear_error(SOCKETFD socketFd);
功能描述:复位控制器的当前报警状态(清除红色错误)。在机械臂发生碰撞、超限位等错误后,排除物理故障后调用此接口清除报警。清错后需要手动进行下电操作,释放控制器的占用状态才可以继续上电(清错后不能直接上电,先下电再上电)。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 1. 先清除控制器错误和报警,再下电复位确保状态同步
clear_error(socket_fd)
time.sleep(0.3)
set_servo_poweroff(socket_fd)
time.sleep(0.3)
2. set_servo_state - 设置伺服就绪状态(使能)
方法:set_servo_state(SOCKETFD socketFd, int state);
功能描述:控制电机抱闸与使能。state=1=使能(解锁抱闸),state=0=去使能(抱闸锁死)。
参数:
- socketFd:已连接的句柄。
- state:1使能,0去使能。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 设置伺服就绪(READY=使能抱闸)
ret = tl.set_servo_state(socket_fd, tl.ServoState.READY)
if ret == 0:
print(" [信息] 伺服就绪设置成功")
else:
print(f"[ERROR] 设置伺服就绪失败: {ret}")
3. set_servo_poweron - 设置伺服上电状态(先使能)
方法:set_servo_poweron(SOCKETFD socketFd);
功能描述:机器人上电。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
def enable_servo(socket_fd):
"""使能上电 ------
先清错,再检查伺服状态,报警则报错退出,最后上电"""
print("--- 检查伺服状态 ---")
# 1. 先清除控制器错误和报警,再下电复位确保状态同步
ret = clear_error(socket_fd)
time.sleep(0.3)
set_servo_poweroff(socket_fd)
time.sleep(0.3)
# 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
# 3. 上电流程
if state == 0:
print(" [信息] 伺服处于停止状态,设置就绪...")
ret = set_servo_state(socket_fd, 1)
if ret != SUCCESS and ret != OPERATION_NOT_ALLOWED:
print(f"[ERROR] 设置伺服就绪失败: {ret}")
return
time.sleep(0.5)
print(" [信息] 上电使能...")
ret = set_servo_poweron(socket_fd)
if ret != SUCCESS:
print(f"[ERROR] 上电失败: {ret}")
return
time.sleep(2)
# 4. 确认结果
_, state = get_servo_state(socket_fd, state)
if state == 3:
print("[INFO] 机械臂使能上电成功(servo_state = " + str(state) + ")")
else:
print("[ERROR] 机械臂使能上电失败(servo_state = " + str(state) + ")")
4. set_servo_poweroff - 设置伺服下电状态
方法:set_servo_poweroff(SOCKETFD socketFd);
功能描述:机器人下电。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
def disable_servo(socket_fd):
"""使能伺服下电"""
state = -1
_, state = get_servo_state(socket_fd, state)
if state == 1:
print("[INFO] 机械臂已使能下电")
elif state == 3:
set_servo_poweroff(socket_fd)
_, state = get_servo_state(socket_fd, state)
print("[INFO] 机械臂使能下电成功(servo_state = " + str(state) + ")")
return
print("[INFO] 机械臂使能下电失败(servo_state = " + str(state) + ")")
5. set_speed - 设置速度
方法:set_speed(SOCKETFD socketFd, int speed);
功能描述:设置当前模式的速度。
参数:
- socketFd:已连接的句柄。
- speed :速度大小0-100。
返回值:
- 0:成功
- 非 0:失败
使用示例:
test_speeds = [50, 80, 30]
for spd in test_speeds:
print("\n[步骤 5] 设置全局速度: " + str(spd) + "%")
ret = set_speed(sock, spd)
print("set_speed", ret)
time.sleep(0.2)
current_speed = -1
ret, current_speed = get_speed(sock, current_speed)
if ret == SUCCESS:
print(" [信息] 读取确认: 当前速度 = " + str(current_speed) + "%")
6. restore_default_param_DH - 恢复机械臂默认DH参数
方法:restore_default_param_DH(SOCKETFD socketFd, int robotNum);
功能描述:恢复机械臂默认DH参数。
参数:
- socketFd:已连接的句柄。
- robotNum:机器人编号(1-4)。
返回值:
- 0:成功
- 非 0:失败
- DHparam DH:参数
使用示例:
# 该功能不建议测试,请在厂家指导下使用
def demo_restore_default_param_DH(sock):
"""恢复机械臂默认DH参数"""
print("恢复默认DH参数")
robot_num = 1 # TODO: 根据实际机器人编号调整(1-4)
ret = restore_default_param_DH(sock, robot_num)
print("restore_default_param_DH", ret)
print()
7. set_cartesian_params - 设置机器人笛卡尔参数
方法:set_cartesian_params(SOCKETFD socketFd, const CartesianParam& param);
功能描述:配置笛卡尔空间运动动力学约束参数,限定末端执行器最大直线速度、直线加速度、旋转角速度与角加速度,实现轨迹平滑度与运行安全管控。
参数:
- socketFd:已连接的句柄。
- param 包含笛卡尔空间运动参数的结构体。
返回值:
- 0:成功。
- 非 0:失败
使用示例:
# 以下功能不建议测试,请在厂家指导下使用
def demo_set_cartesian_params(sock):
"""设置笛卡尔参数(最大线速度/线加速度/角速度)"""
print("设置笛卡尔参数")
print(" [信息] 以下数值需根据真实机械臂手册调整")
param = CartesianParam()
param.maxSpeed = 500.0 # TODO: 最大线速度(mm/s)
param.maxAcc = 1000.0 # TODO: 最大线加速度(mm/s²)
param.maxDec = 1000.0 # TODO: 最大线减速度(mm/s²)
param.maxAttitudeVel = 100.0 # TODO: 最大姿态角速度(°/s)
param.speedLimitMode = 0 # TODO: 速度限制方式(0=位姿,1=位置)
ret = set_cartesian_params(sock, param)
print("set_cartesian_params", ret)
print()
8. restore_network_factory_settings - 恢复网络出厂设置
方法:restore_network_factory_settings(SOCKETFD socketFd);
功能描述:执行控制器网络参数恢复出厂操作,重置通讯 IP 地址为默认固定地址,属于高危配置操作。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功。
- 非 0:失败
使用示例:
def demo_restore_network_factory_settings(sock):
"""恢复网络出厂设置(危险操作,会重置所有网络参数并可能断连)"""
print("恢复网络出厂设置")
print(" [警告] 恢复网络出厂设置会重置控制器所有网络参数!")
print(" [警告] 执行后需要重新配置网络才能连接!")
ret = restore_network_factory_settings(sock)
print("restore_network_factory_settings", ret)
print()
9. set_robot_joint_param - 设置当前机器人关节参数
方法:set_robot_joint_param(SOCKETFD socketFd, int id, RobotJointParam& param);
功能描述:对指定单关节进行运动与硬限位参数配置,设定各关节最大运行速度、加速度及正负向机械位置软限位,约束关节运动边界保障本体运行安全。
参数:
- socketFd:已连接的句柄。
- id:关节参数1,61,6。
- param:结构体参数。
返回值:
- 0:成功。
- 非 0:失败
使用示例:
# 以下功能不建议测试,请在厂家指导下使用
def demo_set_robot_joint_param(sock):
"""设置关节参数(最大速度/加速度/位置限位)"""
print("设置关节参数")
print(" [信息] 遍历设置关节1~6的参数,以下数值需根据真实机械臂手册调整")
for axis_id in range(1, 7):
param = RobotJointParam()
# --- 运动学参数(不可随意修改,需按实际减速比/编码器设置)---
param.reduceRatio = 100.0 # TODO: 减速比
param.encoderResolution = 17 # TODO: 编码器分辨率
param.motorDirection = 1 # TODO: 电机方向(1=正向,-1=反向)
# --- 位置限位(单位:度)---
param.maxPos = 180.0 # TODO: 轴正限位(°)
param.minPos = -180.0 # TODO: 轴反限位(°)
# --- 速度参数(单位:度/秒)---
param.ratedRotSpeed = 100.0 # TODO: 电机额定转速
param.maxRotSpeed = 150.0 # TODO: 电机最大转速
# --- 加减速度 ---
param.maxAcc = 100.0 # TODO: 最大加速度
param.maxDec = 100.0 # TODO: 最大减速度
ret = set_robot_joint_param(sock, axis_id, param)
print("set_robot_joint_param (关节%d)" % axis_id, ret)
print()
10. set_controller_ip - 配置控制器有线网口IP
方法:set_controller_ip(SOCKETFD socketFd, std::string name, std::string address, std::string gateway, std::string dns);
功能描述:配置控制器有线网口 IP。
参数:
- socketFd:已连接的句柄。
- name:网卡设备名称。
- address:ip地址。
- gateway:网关地址。
- dns:DNS服务器地址。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 危险操作:修改控制器 IP 会立即生效并导致 TCP 断连,请确认新 IP 与电脑在同一网段
# TODO: 根据实际网络环境修改以下参数
name = "eth0" # 网口名称
address = "192.168.1.14" # 目标 IP 地址
gateway = "192.168.1.1" # 网关地址
dns = "8.8.8.8" # DNS 服务器
ret = tl.set_controller_ip(socket_fd, name, address, gateway, dns)
if ret == 0:
print("set_controller_ip 成功")
else:
print(f"set_controller_ip 失败,错误码:{ret}")
11. set_robot_dh_param - 设置机器人 DH 参数
方法:set_robot_dh_param(socketFd, param);
功能描述:设置当前机器人 DH 参数。
参数:
- socketFd:已连接的句柄。
- param:RobotDHParam 结构体(alpha[6] 1-6轴DH参数alpha 单位 deg;a[6] 1-6轴DH参数a 单位 mm;theta[6] 1-6轴DH参数theta 单位 deg;d[6] 1-6轴DH参数d 单位 mm;eulerAngle 欧拉角模式;mountingAngle 安装角度 单位 deg)。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
param = RobotDHParam()
param.alpha = [0, 0, 0, 0, 0, 0]
ret = tl.set_robot_dh_param(socket_fd, param)
12. set_zero_pos_deviation - 设置零位偏差
方法:set_zero_pos_deviation(socketFd, axis, shift);
功能描述:设置零点偏移。
参数:
- socketFd:已连接的句柄。
- axis:轴号(1-7)。
- shift:偏移量(-360 < shift < 360)。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
socket_fd = tl.connect_robot("192.168.1.13", "6001")
ret = tl.set_zero_pos_deviation(socket_fd, 1, 0.5)
13. set_axis_zero_position - 标定当前状态下的零位/指定关节当前位置为零位
方法:set_axis_zero_position(SOCKETFD socketFd, int axis);
功能描述:将当前关节位置记录为零位。axis=0 表示所有轴,axis=1~6 表示单轴。
**警告:**仅在机械臂物理对齐零刻度线后调用,否则将导致坐标系错乱,引发撞机风险!
参数:
- socketFd:已连接的句柄。
- axis:轴号,1~7 代表第 1~7 轴,0 表示全部轴。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
import time
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 设置所有轴原点
axis = 0 # 0表示全部关节
ret = tl.set_axis_zero_position(socket_fd, axis)
print(f"设置轴原点返回值(ret) = {ret}")
time.sleep(1)
14. set_receive_error_or_warnning_message_callback - 设置错误警告回调
方法:set_receive_error_or_warnning_message_callback(SOCKETFD socketFd,void(*function) (int messageType, const char* message, int messageCode));
功能描述:注册异步错误/警告回调函数。当控制器产生错误或警告时,会异步调用该回调。
参数:
- socketFd:已连接的句柄。
- function:指向回调函数的指针。该回调函数在接收到错误或警告信息时被调用。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
# 定义错误/警告回调(在独立线程触发,不能做耗时操作)
def error_warning_callback(message_type, message, code):
print(f"[回调] type={message_type} message={message} code={code}")
# 注册回调
ret = tl.set_receive_error_or_warnning_message_callback(socket_fd, error_warning_callback)
if ret == 0:
print(" [成功] 回调注册成功,后续收到错误/警告会自动触发")
else:
print(f" [失败] 回调注册失败,错误码:{ret}")
