- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
坐标系与用户坐标管理接口
头文件:include/tl_interface.h
相关示例代码:examples\cpp\ex_coord_transform.cpp
1. set_user_coordinate_data - 设置用户坐标
方法:Result set_user_coordinate_data(SOCKETFD socketFd, int userNum, const UserCoordParam& param);
功能描述:设置(标定)用户坐标系参数。推荐使用 UserCoordParam 结构体重载版本(含类型/联动信息),旧版 vector<double> 参数已废弃。
参数:
- socketFd:已连接的句柄。
- userNum:用户坐标编号。
- param:用户坐标参数结构体,可设置以下成员:
- location_type:用户坐标类型,0:静态 1:联动 2:动态
- name:用户坐标名称
- position[6]:用户坐标参数 [X, Y, Z, A, B, C]
- related_type:联动对象类型,0:机器人 1:外部轴
- related_num:联动对象编号
- related_coord_type:联动坐标类型,0:直角 1:工具 2:用户
- related_coord_num:联动坐标编号
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 设置用户坐标系(编号 1,与基坐标重合)
int userNum = 1;
tl::UserCoordParam user_coord;
user_coord.location_type = 0; // 静态
user_coord.name = "USER01";
user_coord.position[0] = 0.0; // X (mm)
user_coord.position[1] = 0.0; // Y (mm)
user_coord.position[2] = 0.0; // Z (mm)
user_coord.position[3] = 0.0; // A (rad)
user_coord.position[4] = 0.0; // B (rad)
user_coord.position[5] = 0.0; // C (rad)
auto ret = tl::set_user_coordinate_data(socket_fd, userNum, user_coord);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 设置用户坐标系失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 设置用户坐标系成功" << std::endl;
2. set_user_coord_number - 设置用户坐标编号
方法:Result set_user_coord_number(SOCKETFD socketFd, int userNum);
功能描述:设置当前使用的用户坐标编号,后续运动将基于该用户坐标系。
参数:
- socketFd:已连接的句柄。
- userNum:用户坐标编号。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 设置用户坐标编号为 2
int userNum = 2;
auto ret = tl::set_user_coord_number(socket_fd, userNum);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 设置用户坐标编号失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 设置用户坐标编号成功" << std::endl;
3. get_user_coord_para - 获取当前使用的用户坐标的参数
方法:Result get_user_coord_para(SOCKETFD socketFd, int userNum, UserCoordParam& param);
功能描述:查询指定编号的用户坐标参数(返回 UserCoordParam 结构体,含类型/联动信息),旧版 vector<double> 输出已废弃。
参数:
- socketFd:已连接的句柄。
- userNum:用户坐标编号。
- param:输出,用户坐标参数结构体(UserCoordParam)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取用户坐标参数(编号 1)
int userNum = 1;
tl::UserCoordParam user_para;
auto ret = tl::get_user_coord_para(socket_fd, userNum, user_para);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取用户坐标参数失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 用户坐标名称: " << user_para.name << std::endl;
std::cout << "[信息] 用户坐标位置: ["
<< user_para.position[0] << ", "
<< user_para.position[1] << ", "
<< user_para.position[2] << ", "
<< user_para.position[3] << ", "
<< user_para.position[4] << ", "
<< user_para.position[5] << "]" << std::endl;
4. get_user_coord_number - 获取当前使用的用户坐标编号
方法:Result get_user_coord_number(SOCKETFD socketFd, int& userNum);
功能描述:获取当前使用的用户坐标编号。
参数:
- socketFd:已连接的句柄。
- userNum:输出,当前使用的用户坐标编号。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取当前用户坐标编号
int userNum = 0;
auto ret = tl::get_user_coord_number(socket_fd, userNum);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取用户坐标编号失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 当前用户坐标编号: " << userNum << std::endl;
5. get_current_coord - 获取当前工作坐标系
方法:Result get_current_coord(SOCKETFD socketFd, Coord& coord);
功能描述:获取机器人当前工作坐标系(推荐使用 Coord 枚举重载版本,int 输出旧版已废弃)。
参数:
- socketFd:已连接的句柄。
- coord:输出,当前工作坐标系,Coord 枚举(JOINT / BASE / TOOL / USER)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取当前工作坐标系
tl::Coord coord;
auto ret = tl::get_current_coord(socket_fd, coord);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取当前工作坐标系失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 当前坐标系编号: " << static_cast<int>(coord) << std::endl;
6. set_current_coord - 切换示教运动坐标系
方法:Result set_current_coord(SOCKETFD socketFd, Coord coord);
功能描述:切换示教运动坐标系(推荐使用 Coord 枚举重载版本,int 旧版已废弃)。
参数:
- socketFd:已连接的句柄。
- coord:目标坐标系,Coord 枚举(JOINT / BASE / TOOL / USER)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 切换当前工作坐标系为基坐标系
auto ret = tl::set_current_coord(socket_fd, tl::Coord::BASE);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 设置当前工作坐标系失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 设置当前工作坐标系成功" << std::endl;
7. calibration_oxy - 三点法自动设置用户坐标系
方法:Result calibration_oxy(SOCKETFD socketFd, int userNum, std::string xyo);
功能描述:三点法用户坐标系标定。依次手动移动机械臂到原点 O、X 方向点、Y 方向点,分别调用本接口标定,最后用 calculate_user_coordinate 计算用户坐标。
参数:
- socketFd:已连接的句柄。
- userNum:用户坐标编号。
- xyo:标定类型,取值 'X' / 'Y' / 'O'。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 三点法标定(需先手动移动机械臂到对应位置)
// 步骤1: 移动到原点 O,标定 O
auto ret = tl::calibration_oxy(socket_fd, 1, "O");
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 标定原点 O 失败,错误码: " << ret << std::endl;
return -1;
}
// 步骤2: 移动到 X 方向点,标定 X
ret = tl::calibration_oxy(socket_fd, 1, "X");
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 标定 X 方向点失败,错误码: " << ret << std::endl;
return -1;
}
// 步骤3: 移动到 Y 方向点,标定 Y
ret = tl::calibration_oxy(socket_fd, 1, "Y");
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 标定 Y 方向点失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 三点标定完成,下一步请调用 calculate_user_coordinate 计算坐标" << std::endl;
8. calculate_user_coordinate - 计算用户坐标
方法:Result calculate_user_coordinate(SOCKETFD socketFd, int userNumber);
功能描述:根据三点法标定的 O / X / Y 数据计算用户坐标系(需先完成 calibration_oxy 标定)。
参数:
- socketFd:已连接的句柄。
- userNumber:用户坐标编号。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 计算用户坐标(三点法标定完成后调用)
auto ret = tl::calculate_user_coordinate(socket_fd, 1);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 计算用户坐标失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 用户坐标计算成功" << std::endl;
9. get_target_coord_pos_value - 获取目标坐标位置值
方法:Result get_target_coord_pos_value(SOCKETFD socketFd, std::string name, Coord targetCoord, std::vector<double>& targetPos);
功能描述:获取指定点位在目标坐标系下的位置值(推荐使用 Coord 枚举重载版本,int 旧版已废弃)。
参数:
- socketFd:已连接的句柄。
- name:点位名(P 点、GP 点、E 点、GE 点),如 "GP0001"。
- targetCoord:目标坐标系,Coord 枚举(JOINT / BASE / TOOL / USER)。
- targetPos:输出,转换后的位置,14 位点位(坐标系, 角度/弧度, 形态/左右手, 工具号, 用户坐标号, 预留, 预留, 1~7 轴)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取全局点位 GP0001 在基坐标系下的位置值
std::vector<double> target_pos;
auto ret = tl::get_target_coord_pos_value(socket_fd, "GP0001", tl::Coord::BASE, target_pos);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取目标坐标位置值失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] GP0001 在基坐标系下的位置(共 " << target_pos.size() << " 位):" << std::endl;
for (size_t i = 0; i < target_pos.size(); ++i) {
std::cout << " [" << i << "] " << target_pos[i] << std::endl;
}
10. get_local_pos_p_value - 获取本地位置变量 P 值
方法:Result get_local_pos_p_value(SOCKETFD socketFd, std::string name, std::vector<double>& pos);
功能描述:获取本地位置变量 P 点的位置值。
参数:
- socketFd:已连接的句柄。
- name:点位名,范围 P0001 - P9999。
- pos:输出,转换后的位置,14 位点位(坐标系, 角度/弧度, 形态/左右手, 工具号, 用户坐标号, 预留, 预留, 1~7 轴)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取本地位置变量 P0001 的值
std::vector<double> pos;
auto ret = tl::get_local_pos_p_value(socket_fd, "P0001", pos);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取本地位置变量 P 值失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] P0001 的位置(共 " << pos.size() << " 位):" << std::endl;
for (size_t i = 0; i < pos.size(); ++i) {
std::cout << " [" << i << "] " << pos[i] << std::endl;
}
11. set_default_cartesian_params - 设置笛卡尔参数为默认值
方法:Result set_default_cartesian_params(SOCKETFD socketFd);
功能描述:将机械臂末端(笛卡尔)相关参数恢复为默认值。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 设置机械臂末端参数为默认值
auto ret = tl::set_default_cartesian_params(socket_fd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 设置笛卡尔参数为默认值失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 设置笛卡尔参数为默认值成功" << std::endl;
