头文件: cpp/interface/nrc_interface.h
1. set_tool_hand_param - 设置工具手参数
方法: int set_tool_hand_param(SOCKETFD socket_fd, int tool_num, const ToolParam& tool_data);
功能描述: 配置指定编号的工具手坐标系偏移参数(TCP)。
参数:
socket_fd:已连接的句柄
tool_num:工具手编号
tool_data:ToolParam结构体,包含X, Y, Z(偏移量,单位mm),A, B, C(姿态欧拉角,单位度)
返回值:
使用示例:
C++
bool test_set_tool_hand_param(int tool_num, const std::vector<double>& offsets) {
// 校验传入的偏移量数据,确保包含完整的直角坐标及姿态数据 [X, Y, Z, A, B, C]
if (offsets.size() < 6) return false;
// 实例化工具手参数结构体,并将偏移量数组依次映射到对应的位置与姿态属性上
ToolParam param;
param.X = offsets[0]; // 末端工具在 X 轴向的距离偏移
param.Y = offsets[1]; // 末端工具在 Y 轴向的距离偏移
param.Z = offsets[2]; // 末端工具在 Z 轴向的距离偏移
param.A = offsets[3]; // 末端工具绕 X 轴(或 RX)的旋转角度偏移
param.B = offsets[4]; // 末端工具绕 Y 轴(或 RY)的旋转角度偏移
param.C = offsets[5]; // 末端工具绕 Z 轴(或 RZ)的旋转角度偏移
// 传入控制端口句柄、目标工具号及配置好的参数结构体,调用底层接口改写工具手参数
int ret = set_tool_hand_param(socket_fd_6001_, tool_num, param);
CHECK_RET(ret, "设置工具手" + std::to_string(tool_num));
return ret == SUCCESS;
}
2. set_user_coordinate_data - 设置用户坐标
方法: int set_user_coordinate_data(SOCKETFD socket_fd, int coord_num, const std::vector<double>& pos_data);
功能描述: 配置指定编号的用户坐标系参数(相对于基座的偏移和旋转)。
参数:
socket_fd:已连接的句柄
coord_num:用户坐标系编号(1~N)
pos_data:6维向量[X,Y,Z,RX,RY,RZ](X,Y,Z单位mm,RX,RY,RZ单位度)
返回值:
使用示例:
C++
bool test_set_user_coordinate(int user_num, const std::vector<double>& data) {
// 校验传入的坐标数据,确保包含完整的直角坐标及姿态数据 [X, Y, Z, RX, RY, RZ]
if (data.size() < 6) return false;
// 传入控制端口句柄、目标用户坐标系号及点位数组,调用底层接口设置用户坐标系偏移量
int ret = set_user_coordinate_data(socket_fd_6001_, user_num, data);
CHECK_RET(ret, "设置用户坐标系" + std::to_string(user_num));
return ret == SUCCESS;
}
3. set_user_coord_number - 设置用户坐标编号
方法: int set_user_coord_number(SOCKETFD socket_fd, int coord_num);
功能描述: 切换当前激活的用户坐标系编号(后续运动将基于该坐标系)。
参数:
socket_fd:已连接的句柄
coord_num:用户坐标系编号
返回值:
使用示例:
C++
bool test_set_user_coord_number(int user_num) {
// 增加统一的前置句柄校验,确保通信链路有效
if (socket_fd_6001_ <= 0) return false;
// 传入控制端口句柄和目标坐标系序号,调用底层接口切换/激活当前使用的用户坐标系
int ret = set_user_coord_number(socket_fd_6001_, user_num);
CHECK_RET(ret, "激活用户坐标系" + std::to_string(user_num));
return ret == SUCCESS;
}
4. get_current_coord - 获取当前工作坐标系
方法: int get_current_coord(SOCKETFD socket_fd, int& coord);
功能描述: 获取当前激活的坐标系类型(0~3)。
参数:
socket_fd:已连接的句柄
coord:输出参数,坐标系代号
返回值:
使用示例:
C++
int test_get_current_coord() {
if (socket_fd_6001_ <= 0) return -1;
// 传入控制端口句柄,调用底层接口获取当前控制器处于激活状态的工作坐标系类型
int coord = 0;
int ret = get_current_coord(socket_fd_6001_, coord);
if (ret == SUCCESS) {
// 获取成功,打印当前工作坐标系类型代号并返回该值
std::cout << "当前工作坐标系: " << coord << std::endl;
return coord;
}
// 获取失败,打印对应的错误码并返回 -1 错误标识
std::cout << "获取工作坐标系失败, 错误码=" << ret << std::endl;
return -1;
}
5. set_current_coord - 切换示教运动坐标系
方法: int set_current_coord(SOCKETFD socket_fd, int coord);
功能描述: 切换点动(Jogging)时使用的坐标系。
参数:
socket_fd:已连接的句柄
coord:准备切换并激活的目标工作坐标系类型代号
- 0:关节坐标系 / 基座坐标系(Joint / Base)
- 1:直角空间坐标系(Cartesian)
- 2:工具坐标系(Tool)
- 3:用户坐标系(User)
返回值:
使用示例:
C++
bool test_set_current_coordinate(int coord_type) {
if (socket_fd_6001_ <= 0) return false;
// 传入控制端口句柄和指定的坐标系类型代号,调用底层接口切换当前系统的工作坐标系
int ret = set_current_coord(socket_fd_6001_, coord_type);
// 映射坐标系类型的可读文本名称,便于在日志和文档中展示
std::string coord_name = "Unknown";
switch (coord_type) {
case 0: coord_name = "Joint"; break;
case 1: coord_name = "Cartesian"; break;
case 2: coord_name = "Tool"; break;
case 3: coord_name = "User"; break;
default: break;
}
CHECK_RET(ret, "Set current coordinate system to " + coord_name);
return ret == SUCCESS;
}