头文件: 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:输出参数,存储位置数据(长度自动适配)
返回值:
使用示例:
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:输出参数,运行状态码
返回值:
使用示例:
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:输出参数,存储关节角度列表
返回值:
使用示例:
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(是否倒装)等成员
返回值:
使用示例:
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)等
返回值:
使用示例:
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:输出参数,工具手编号
返回值:
使用示例:
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:输出参数,温度列表
返回值:
使用示例:
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;
}