坐标系与工具管理接口

头文件: 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(姿态欧拉角,单位度)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

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单位度)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

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:用户坐标系编号

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

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:输出参数,坐标系代号

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

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)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

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;
}