- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
伺服状态与系统参数设置接口
头文件:include/tl_interface.h
1. clear_error - 清除系统错误
方法:Result clear_error(SOCKETFD socketFd);
功能描述:复位控制器的当前报警状态(清除红色错误)。在机械臂发生碰撞、超限位等错误后,排除物理故障后调用此接口清除报警。清错后需要手动进行下电操作,释放控制器的占用状态才可以继续上电(清错后不能直接上电,先下电再上电)。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功。
- 非0:失败(如错误仍未清除需手动排除故障)。
使用示例:
print_separator("清错与伺服复位");
ret = tl::clear_error(sock_6001);
print_result("clear_error", ret);
std::this_thread::sleep_for(std::chrono::milliseconds(300));
2. set_servo_state - 设置伺服就绪状态
方法: Result set_servo_state(SOCKETFD socketFd, ServoState state);
功能描述:控制电机抱闸与使能。state=READY=使能(解锁抱闸),state=STOP=去使能(抱闸锁死)。
参数:
- socketFd:已连接的句柄。
- state ServoState::STOP(停止)/ ServoState::READY(就绪)。
返回值:
- 0:成功。
- -4:操作不允许(如未清除报警)。
- 其他非0:失败。
使用示例:
std::cout << " [信息] 伺服处于停止状态,设置就绪..." << std::endl;
ret = tl::set_servo_state(socket_fd, tl::ServoState::READY);
if (ret != tl::Result::SUCCESS && ret != tl::Result::OPERATION_NOT_ALLOWED) {
std::cerr << "[ERROR] 设置伺服就绪失败: " << ret << std::endl;
return;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
3. set_servo_poweron - 设置伺服上电状态
方法:Result set_servo_poweron(SOCKETFD socketFd);
功能描述:闭合强电接触器,为电机供电。需先调用 set_servo_state(1)。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功。
- -4:操作不允许(如未清除报警)。
- 其他非0:失败。
使用示例:
void enable_servo(const int socket_fd)
{
std::cout << "--- 检查伺服状态 ---" << std::endl;
// 1. 先清除控制器错误和报警,再下电复位确保状态同步
tl::clear_error(socket_fd);
std::this_thread::sleep_for(std::chrono::milliseconds(300));
tl::set_servo_poweroff(socket_fd);
std::this_thread::sleep_for(std::chrono::milliseconds(300));
// 2. 检查伺服状态
tl::ServoState state;
auto ret = tl::get_servo_state(socket_fd, state);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取伺服状态失败: " << ret << std::endl;
return;
}
std::cout << " [信息] 当前伺服状态: " << static_cast<int>(state)
<< " (STOP=停止 READY=就绪 ALARM=报警 RUNNING=运行)" << std::endl;
if (state == tl::ServoState::ALARM) {
std::cerr << "[ERROR] 伺服处于报警状态,无法上电,请排查报警原因后重试" << std::endl;
return;
}
if (state == tl::ServoState::RUNNING) {
std::cout << "[INFO] 机械臂已在使能上电状态" << std::endl;
return;
}
// 3. 上电流程
if (state == tl::ServoState::STOP) {
std::cout << " [信息] 伺服处于停止状态,设置就绪..." << std::endl;
ret = tl::set_servo_state(socket_fd, tl::ServoState::READY);
if (ret != tl::Result::SUCCESS && ret != tl::Result::OPERATION_NOT_ALLOWED) {
std::cerr << "[ERROR] 设置伺服就绪失败: " << ret << std::endl;
return;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
std::cout << " [信息] 上电使能..." << std::endl;
ret = tl::set_servo_poweron(socket_fd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 上电失败: " << ret << std::endl;
return;
}
std::this_thread::sleep_for(std::chrono::seconds(2));
// 4. 确认结果
tl::get_servo_state(socket_fd, state);
if (state == tl::ServoState::RUNNING) {
std::cout << "[INFO] 机械臂使能上电成功(servo_state = " << static_cast<int>(state) << ")" << std::endl;
} else {
std::cerr << "[ERROR] 机械臂使能上电失败(servo_state = " << static_cast<int>(state) << ")" << std::endl;
}
}
4. set_servo_poweroff - 设置伺服下电状态
方法:Result set_servo_poweroff(SOCKETFD socketFd);
功能描述:切断强电,电机抱闸锁死。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功。
- -4:操作不允许(如未清除报警)。
- 其他非0:失败。
使用示例:
void disable_servo(const int socket_fd)
{
tl::ServoState state;
tl::get_servo_state(socket_fd, state);
switch (state)
{
case tl::ServoState::READY:
std::cout << "[INFO] 机械臂已使能下电" << std::endl;
break;
case tl::ServoState::RUNNING:
tl::set_servo_poweroff(socket_fd);
tl::get_servo_state(socket_fd, state);
std::cout << "[INFO] 机械臂使能下电成功(servo_state = " << static_cast<int>(state) << ")" << std::endl;
return;
default:
break;
}
std::cout << "[INFO] 机械臂使能下电失败(servo_state = " << static_cast<int>(state) << ")" << std::endl;
}
5. set_speed - 设置速度
方法: Result set_speed(SOCKETFD socketFd, int speed);
功能描述:设置全局自动运行速度百分比(1~100)。
参数:
- socketFd:已连接的句柄。
- speed:速度百分比。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 设置全局速度
ret = tl::set_speed(socket_fd, 30);
std::this_thread::sleep_for(std::chrono::milliseconds(200));
6. restore_default_param_DH - 恢复机械臂默认DH参数
方法:Result restore_default_param_DH(SOCKETFD socketFd, int robotNum);
功能描述:恢复机械臂默认DH参数。
参数:
- socketFd:已连接的句柄。
- robotNum:机器人编号(1-4)
返回值:
- Result:
- 0:成功。
- 非0:失败
- DHparam DH:参数。
使用示例:
// // ⚠️ 以下功能不建议测试,请在厂家指导下使用
// // ============================================================
// // 6. 恢复机械臂默认 DH 参数
// // ============================================================
// print_separator("恢复机械臂默认 DH 参数");
// ret = restore_default_param_DH(sock, 1);
// print_result("restore_default_param_DH (robot=1)", ret);
// std::cout << std::endl;
7. set_cartesian_params - 设置机器人笛卡尔参数
方法:Result set_cartesian_params(SOCKETFD socketFd, const CartesianParam& param);
功能描述:配置笛卡尔空间运动动力学约束参数,限定末端执行器最大直线速度、直线加速度、旋转角速度与角加速度,实现轨迹平滑度与运行安全管控。
参数:
- socketFd:已连接的句柄。
- param 包含笛卡尔空间运动参数的结构体
返回值:
- Result:
- 0:成功。
- 非0:失败
使用示例:
// // ⚠️ 以下功能不建议测试,请在厂家指导下使用
// // ============================================================
// // 8. 设置笛卡尔参数
// // ============================================================
// print_separator("设置笛卡尔参数");
// {
// CartesianParam cart_param;
// cart_param.maxSpeed = 500.0; // 最大线速度 (mm/s)
// cart_param.maxAcc = 5.0; // 最大线加速度 (mm/s^2)
// cart_param.maxDec = -5.0; // 最大线减速度 (mm/s^2)
// cart_param.maxAttitudeVel = 180.0; // 最大姿态角速度 (deg/s)
// cart_param.speedLimitMode = 1; // 速度限制方式: 0=位姿, 1=位置
// std::cout << std::fixed << std::setprecision(2);
// ret = set_cartesian_params(sock, cart_param);
// if (ret == Result::SUCCESS) {
// std::cout << "[成功] 设置笛卡尔参数" << std::endl;
// std::cout << " 最大线速度: " << cart_param.maxSpeed << " mm/s" << std::endl;
// std::cout << " 最大线加速度: " << cart_param.maxAcc << " mm/s^2" << std::endl;
// std::cout << " 最大线减速度: " << cart_param.maxDec << " mm/s^2" << std::endl;
// std::cout << " 最大姿态角速度: " << cart_param.maxAttitudeVel << " deg/s" << std::endl;
// std::cout << " 速度限制方式: " << (cart_param.speedLimitMode == 0 ? "位姿" : "位置") << std::endl;
// } else {
// std::cerr << "[ERROR] 设置笛卡尔参数失败,错误码: " << ret << std::endl;
// }
// }
// std::cout << std::endl;
8. restore_network_factory_settings - 恢复网络出厂设置
方法:Result restore_network_factory_settings(SOCKETFD socketFd);
功能描述:执行控制器网络参数恢复出厂操作,重置通讯 IP
地址为默认固定地址,属于高危配置操作。
参数:
- socketFd:已连接的句柄。
返回值:
- Result:
- 0:成功。
- 非0:失败
使用示例:
// ============================================================
// 10. 恢复网络出厂设置(危险操作,默认注释)
// ============================================================
// ⚠️ 危险: 恢复网络出厂设置会重置控制器 IP 为 192.168.1.13
// 取消下面代码的注释前,请确认当前网络环境允许 IP 变更
//
// print_separator("恢复网络出厂设置");
// ret = restore_network_factory_settings(sock);
// print_result("restore_network_factory_settings", ret);
// std::cout << std::endl;
9. set_robot_joint_param - 设置当前机器人关节参数
方法:Result set_robot_joint_param(SOCKETFD socketFd, int id, RobotJointParam& param);
功能描述:对指定单关节进行运动与硬限位参数配置,设定各关节最大运行速度、加速度及正负向机械位置软限位,约束关节运动边界保障本体运行安全。
参数:
- socketFd:已连接的句柄。
- id:关节编号,取值范围 [1,6](6轴,对应 J1~J6);7轴为 [1,7](对应 J1~J7)。
- param:结构体参数。
返回值:
- Result:
- 0:成功。
- 非0:失败
使用示例:
// // ============================================================
// // 7. 设置关节参数(遍历关节 1~6)
// // ============================================================
// print_separator("设置关节参数");
// {
// RobotJointParam joint_param;
// joint_param.reducRatio = 1; // 减速比
// joint_param.encoderResolution = 2; // 编码器位数
// joint_param.posSWLimit = 3; // 轴正限位
// joint_param.negSWLimit = -4; // 轴反限位
// joint_param.ratedRotSpeed = 5; // 电机额定正转速
// joint_param.ratedDeRotSpeed = -6; // 电机额定反转速
// joint_param.maxRotSpeed = 2; // 电机最大正转速
// joint_param.maxDeRotSpeed = -2; // 电机最大反转速
// joint_param.ratedVel = 300; // 额定正速度 (度/秒)
// joint_param.deRatedVel = -300; // 额定反速度 (度/秒)
// joint_param.maxAcc = 2; // 最大加速度 (度/秒^2)
// joint_param.maxDecel = -2; // 最大减速度 (度/秒^2)
// joint_param.direction = -1; // 模型方向: 1=正向, -1=反向
// // 遍历关节 1~6
// for (int joint_id = 1; joint_id <= 6; ++joint_id) {
// std::cout << "--- 关节 " << joint_id << " ---" << std::endl;
// ret = set_robot_joint_param(sock, joint_id, joint_param);
// if (ret == Result::SUCCESS) {
// std::cout << " [成功] 设置关节 " << joint_id << " 参数" << std::endl;
// } else {
// std::cout << " [失败] 设置关节 " << joint_id << " 参数,错误码: " << ret << std::endl;
// }
// }
// // 打印参数(仅供示意,TODO: 各关节应根据实际需求独立设置参数值)
// std::cout << "\n========== 机器人关节参数设置 (仅供参考) ==========" << std::endl;
// std::cout << " 减速比: " << joint_param.reducRatio << std::endl;
// std::cout << " 编码器位数: " << joint_param.encoderResolution << std::endl;
// std::cout << " 正限位: " << joint_param.posSWLimit << " 度" << std::endl;
// std::cout << " 反限位: " << joint_param.negSWLimit << " 度" << std::endl;
// std::cout << " 额定正转速: " << joint_param.ratedRotSpeed << " RPM" << std::endl;
// std::cout << " 额定反转速: " << joint_param.ratedDeRotSpeed << " RPM" << std::endl;
// std::cout << " 最大正转速: " << joint_param.maxRotSpeed << " RPM" << std::endl;
// std::cout << " 最大反转速: " << joint_param.maxDeRotSpeed << " RPM" << std::endl;
// std::cout << " 额定正速度: " << joint_param.ratedVel << " 度/秒" << std::endl;
// std::cout << " 额定反速度: " << joint_param.deRatedVel << " 度/秒" << std::endl;
// std::cout << " 最大加速度: " << joint_param.maxAcc << " 度/秒^2" << std::endl;
// std::cout << " 最大减速度: " << joint_param.maxDecel << " 度/秒^2" << std::endl;
// std::cout << " 模型方向: " << (joint_param.direction == 1 ? "正向" : "反向") << std::endl;
// std::cout << "================================================" << std::endl;
// }
// std::cout << std::endl;
10. set_controller_ip - 配置控制器有线网口IP
方法:Result set_controller_ip(SOCKETFD socketFd, const std::string& name, const std::string& address, const std::string& gateway, const std::string& dns);
功能描述:配置控制器有线网口 IP
参数:
- socketFd:已连接的句柄。
- name:网卡设备名称。
- address:ip地址。
- gateway:网关地址。
- dns:DNS服务器地址。
返回值:
- Result:
- 0:成功。
- 非0:失败
使用示例:
// ============================================================
// 9. 配置有线网口 IP 地址(危险操作,默认注释)
// ============================================================
// ⚠️ 危险: 错误配置会导致控制器网络断连,仅能在已知网络参数时使用
// 取消下面代码的注释前,请确认 IP/网关/DNS 参数正确
//
// print_separator("配置有线网口 IP 地址");
// ret = set_controller_ip(sock, "eth0", "192.168.1.14", "192.168.1.1", "8.8.8.8");
// print_result("set_controller_ip", ret);
// print_separator("配置有线网口 IP 地址完成, 新IP: 192.168.1.14");
// std::cout << std::endl;
11. set_robot_dh_param - 设置机器人 DH 参数
方法:Result set_robot_dh_param(SOCKETFD socketFd, const RobotDHParam& param);
功能描述:设置当前机器人DH参数。
参数:
- socketFd:已连接的句柄。
- param:alpha[6]{0} 1-6轴DH参数alpha,单位:deg;a[6]{0} 1-6轴DH参数a,单位:mm;theta[6]{0}1-6轴DH参数theta,单位:deg;d[6]{0} 1-6轴DH参数d,单位:mm;eulerAngle{0} 欧拉角模式等参数。
返回值:
- 0:成功。
- 非0:失败
12. set_zero_pos_deviation - 设置零位偏差
方法:Result set_zero_pos_deviation(SOCKETFD socketFd, int axis, double shift);
功能描述:设置指定关节的零位偏差(零点偏移)。
参数:
- socketFd:已连接的句柄。
- axis:轴号(1-7)。
- shift:偏移量(-360° < shift < 360°)。
返回值:
- 0:成功。
- 非 0:失败。
13. set_axis_zero_position - 指定关节当前位置为零位/标定当前状态下的零位
方法:Result set_axis_zero_position(SOCKETFD socketFd, int axis);
功能描述:将当前关节位置记录为零位。axis=0 表示所有轴,axis=1~6 表示单轴。
警告:仅在机械臂物理对齐零刻度线后调用,否则将导致坐标系错乱,引发撞机风险!
参数:
- socket_fd:已连接的句柄。
- axis:轴号(0=全轴,1~6=单轴)
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// ----设置指定关节零位(危险操作,默认注释)----
// ⚠️ 危险: set_axis_zero_position 会修改机器人关节零位标定,
// 错误的值会导致所有后续运动出现定位偏差,严重时可能造成机械碰撞。
// 仅在专业指导下、确认当前零位确需校正时使用。
// 取消下面代码的注释前,请确认 axis 值正确且已理解全部后果。
//
// std::cout << "[INFO] **********设置指定关节零位**********" << std::endl;
// int axis = 1;
// ret = set_axis_zero_position(socket_fd, axis);
// if (ret != Result::SUCCESS) {
// std::cerr << "[ERROR] 设置指定关节零位失败,程序退出!" << std::endl;
// return -1;
// }
// std::cout << "[INFO] 设置指定关节零位成功" << std::endl;
// std::cout << std::endl;
14. set_receive_error_or_warnning_message_callback - 设置错误警告回调
方法:Result set_receive_error_or_warnning_message_callback(SOCKETFD socketFd,
void (*function)(int messageType, const char *message,
int messageCode));
功能描述:注册异步错误/警告回调函数。当控制器产生错误或警告时,会异步调用该回调。
参数:
- socketFd:已连接的句柄。
- function:指向回调函数的指针。该回调函数在接收到错误或警告信息时被调用。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// ---- 注册错误/警告回调 ----
print_separator("注册错误回调");
ret = tl::set_receive_error_or_warnning_message_callback(sock, on_error_or_warning);
print_result("set_receive_error_or_warnning_message_callback", ret);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 注册回调失败" << std::endl;
tl::disconnect_robot(sock);
return -1;
}
