信息查询接口

头文件: cpp/interface/nrc_interface.h

1. get_current_position - 获取机械臂当前坐标信息

方法: int get_current_position(SOCKETFD socket_fd, int coord_type, std::vector<double>& pos);

功能描述: 获取机械臂当前在指定坐标系下的位置数据。

参数:

  • socket_fd:已连接的句柄
  • coord_type:坐标系类型(0关节,1直角,2工具,3用户)
  • pos:输出参数,存储位置数据(长度自动适配)

返回值:

  • int
    • 0:成功
    • 非0:失败

使用示例:

C++
bool test_get_current_position(int coord_type) {
    if (socket_fd_6001_ <= 0) return false;
    // 传入控制端口句柄与坐标系类型,获取位置数据并存入 pos 向量
    std::vector<double> pos;
    int ret = get_current_position(socket_fd_6001_, coord_type, pos);
    if (ret == SUCCESS) {
        // 打印当前坐标系以及遍历输出所有轴的位置数据
        std::cout << "[成功] 坐标系: " << coord_type << " | 数据: ";
        for (double val : pos) std::cout << val << " ";
        std::cout << std::endl;
        return true;
    }
    // 获取失败,打印对应的坐标系和错误码
    std::cerr << "[失败] 坐标系: " << coord_type << " | 错误码: " << ret << std::endl;
    return false;
}

2. get_robot_running_state - 获取机器人运行状态

方法: int get_robot_running_state(SOCKETFD socket_fd, int& state);

功能描述: 获取当前作业文件的运行状态。

参数:

  • socket_fd:已连接的句柄
  • state:输出参数,运行状态码

返回值:

  • int
    • 0:成功
    • 非0:失败

使用示例:

C++
int test_get_robot_running_state() {
    if (socket_fd_6001_ <= 0) return -1;
    // 传入控制端口句柄,调用底层接口获取当前机器人的运行状态码(如:停止、运行、暂停等)
    int state = 0;
    int ret = get_robot_running_state(socket_fd_6001_, state);
    if (ret == SUCCESS) {
        // 获取成功,打印当前状态码并返回该状态值
        std::cout << "机器人运行状态: " << state << std::endl;
        return state;
    }
    // 获取失败,打印对应的错误码并返回 -1 错误标识
    std::cout << "获取运行状态失败, 错误码=" << ret << std::endl;
    return -1;
}

3. get_joint_position - 获取当前各关节直角坐标

方法: int get_joint_position(SOCKETFD socket_fd, int dof, std::vector<double>& joint_pos);

功能描述: 获取机械臂当前各关节的实时角度(单位:度)。

参数:

  • socket_fd:已连接的句柄
  • dof:机械臂的自由度(轴数,例如6)
  • joint_pos:输出参数,存储关节角度列表

返回值:

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

使用示例:

C++
std::vector<double> test_get_joint_position() {
    std::vector<double> pos;
    if (socket_fd_6001_ <= 0) return pos;
    // 根据机器人自由度(dof_)预分配空间,并调用底层接口获取各关节当前的角度/位置值
    pos.resize(dof_);
    int ret = get_joint_position(socket_fd_6001_, dof_, pos);
    if (ret == SUCCESS) {
        // 获取成功,遍历并打印输出当前所有关节的位置数据
        std::cout << "关节位置: ";
        for (auto v : pos) std::cout << v << " ";
        std::cout << std::endl;
        return pos;
    }
    // 获取失败,清空可能存在残留数据的向量,并打印错误码
    pos.clear();
    std::cout << "获取关节位置失败, 错误码=" << ret << std::endl;
    return pos;
}

4. get_robot_dh_param - 获取机械臂DH参数

方法: int get_robot_dh_param(SOCKETFD socket_fd, RobotDHParam& dh_param);

功能描述: 获取机械臂的DH几何参数。

参数:

  • socket_fd:已连接的句柄
  • dh_param:输出参数,RobotDHParam结构体,包含L1~L6(连杆长度)、dynamicLimit_max、threeAxisDirection、upsideDown(是否倒装)等成员

返回值:

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

使用示例:

C++
bool test_get_robot_dh_param() {
    if (socket_fd_6001_ <= 0) return false;
    // 声明 DH 参数结构体,并传入控制端口句柄调用底层接口获取控制器的 DH 模型参数
    RobotDHParam dh;
    int ret = get_robot_dh_param(socket_fd_6001_, dh);
    if (ret == SUCCESS) {
        // 获取成功,格式化输出机械臂各连杆的 DH 参数(通常对应各关节轴的外形几何尺寸)
        std::cout << "DH参数: L1=" << dh.L1 << " | L2=" << dh.L2
                  << " | L3=" << dh.L3 << " | L4=" << dh.L4
                  << " | L5=" << dh.L5 << " | L6=" << dh.L6 << std::endl;
        return true;
    }
    // 获取失败,打印对应的错误码
    std::cout << "获取DH参数失败, 错误码=" << ret << std::endl;
    return false;
}

5. get_library_version - 读取机械臂软件信息

方法: std::string get_library_version();

功能描述: 获取本地动态库的版本字符串。

参数:

  • 无

返回值:

  • std::string
    • 非空字符串:成功,返回版本号(如"1.0.0")
    • 空字符串:失败(库未正确加载)

使用示例:

C++
void test_get_library_version() {
    // 这个接口属于本地动态库信息,一般不需要 socket_fd 连接成功即可调用
    std::string version = get_library_version();
    
    if (!version.empty()) {
        std::cout << "[成功] 获取动态库版本号: " << version << std::endl;
    } else {
        std::cout << "[失败] 获取动态库版本号为空" << std::endl;
    }
}

6. get_robot_joint_param - 获取指定关节配置参数

方法: int get_robot_joint_param(SOCKETFD socket_fd, int joint_id, RobotJointParam& param);

功能描述: 获取指定关节的减速比、额定转速、最大加速度、电机方向等参数。

参数:

  • socket_fd:已连接的句柄
  • joint_id:机械臂关节轴号(通常为1~6)
  • param:输出参数,RobotJointParam结构体,包含reducRatio(减速比)、ratedRotSpeed(额定转速rpm)、maxAcc(最大加速度°/s²)、direction(电机方向±1)等

返回值:

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

使用示例:

C++
bool test_get_joint_param(int joint_id) {
    if (socket_fd_6001_ <= 0) return false;
    // 声明参数结构体,并传入关节 ID 调用底层接口获取该关节的硬件参数
    RobotJointParam param;
    int ret = get_robot_joint_param(socket_fd_6001_, joint_id, param);
    if (ret == SUCCESS) {
        // 获取成功,格式化输出该关节的减速比、额定转速、最大加速度和电机方向等核心参数
        std::cout << "关节 " << joint_id << " 参数: 减速比=" << param.reducRatio
                  << " | 额定转速=" << param.ratedRotSpeed
                  << " | 最大加速度=" << param.maxAcc
                  << " | 电机方向=" << param.direction << std::endl;
        return true;
    }
    // 获取失败,打印对应的错误码
    std::cout << "获取关节参数失败, 错误码=" << ret << std::endl;
    return false;
}

7. get_tool_hand_number - 获取当前工具手编号

方法: int get_tool_hand_number(SOCKETFD socket_fd, int& tool_num);

功能描述: 获取当前激活的工具手坐标系编号(Tool0~ToolN)。

参数:

  • socket_fd:已连接的句柄
  • tool_num:输出参数,工具手编号

返回值:

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

使用示例:

C++
int test_get_tool_hand_number() {
    if (socket_fd_6001_ <= 0) return -1;
    // 传入控制端口句柄,调用底层接口获取当前机器人所使用的工具手(末端夹爪/工具)的编号
    int toolNum = 0;
    int ret = get_tool_hand_number(socket_fd_6001_, toolNum);
    if (ret == SUCCESS) {
        // 获取成功,打印工具手编号并返回该编号值
        std::cout << "当前工具手编号: " << toolNum << std::endl;
        return toolNum;
    }
    // 获取失败,打印对应的错误码并返回 -1 错误标识
    std::cout << "获取工具手编号失败, 错误码=" << ret << std::endl;
    return -1;
}

8. get_joint_temperature - 获取各关节电机温度

方法: int get_joint_temperature(SOCKETFD socket_fd, std::vector<double>& temperatures);

功能描述: 获取各关节电机当前温度(单位:摄氏度)。

参数:

  • socket_fd:已连接的句柄
  • temperatures:输出参数,温度列表

返回值:

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

使用示例:

C++
std::vector<double> test_get_joint_temperature() {
    std::vector<double> temps;
    if (socket_fd_6001_ <= 0) return temps;
    // 传入控制端口句柄,调用底层接口获取各个关节的当前温度并存入 temps 向量
    int ret = get_joint_temperature(socket_fd_6001_, temps);
    if (ret == SUCCESS) {
        // 获取成功,遍历并格式化输出所有关节的温度值(单位:℃)
        std::cout << "关节温度: ";
        for (auto t : temps) std::cout << t << "℃ ";
        std::cout << std::endl;
        return temps;
    }
    // 获取失败,打印对应的错误码
    std::cout << "获取关节温度失败, 错误码=" << ret << std::endl;
    return temps;
}