五、双臂机器人(nrc_dual_arm.h)
功能概述
双臂机器人接口用于双臂协同场景下的用户坐标系管理、单条运动指令完成回调及双臂 OXY 标定。
双臂用户坐标系特点:
| locationType | 说明 |
|---|---|
| 0 | 静态用户坐标系 |
| 1 | 联动坐标系(跟随另一机械臂运动) |
双臂用户坐标标定流程:设置坐标数据 → OXY 标定 → 计算坐标。
set_one_movecomd_completion_callback
设置一条 move 指令执行完成时的回调函数。
函数原型:
cpp
Result set_one_movecomd_completion_callback(SOCKETFD socketFd, void(*function)());参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| function | void(*)() | 回调函数指针,一条 move 指令执行完成时被调用 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
void on_move_done() {
printf("一条 move 指令执行完成\n");
}
Result result = set_one_movecomd_completion_callback(fd, on_move_done);set_dualarm_user_coord_number / set_dualarm_user_coord_number_robot
设置双臂用户坐标编号。
函数原型:
cpp
Result set_dualarm_user_coord_number(SOCKETFD socketFd, int userNum);
Result set_dualarm_user_coord_number_robot(SOCKETFD socketFd, int robotNum, int userNum);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum | int | 用户坐标编号 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 切换到用户坐标系 2
Result result = set_dualarm_user_coord_number(fd, 2);get_dualarm_user_coord_number / get_dualarm_user_coord_number_robot
获取当前使用的用户坐标编号。
函数原型:
cpp
Result get_dualarm_user_coord_number(SOCKETFD socketFd, int& userNum);
Result get_dualarm_user_coord_number_robot(SOCKETFD socketFd, int robotNum, int& userNum);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum | int& | 输出参数,当前用户坐标编号 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
get_dualarm_user_coord_para / get_dualarm_user_coord_para_robot
获取用户坐标参数(含坐标系类型和机械臂号)。
函数原型:
cpp
Result get_dualarm_user_coord_para(SOCKETFD socketFd, int userNum, std::vector<double>& pos, int& locationType, int& mechID);
Result get_dualarm_user_coord_para_robot(SOCKETFD socketFd, int robotNum, int userNum, std::vector<double>& pos, int& locationType, int& mechID);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum | int | 用户坐标编号 |
| pos | std::vector<double>& | 输出参数,用户坐标参数 |
| locationType | int& | 输出参数,坐标系类型:0=静态用户坐标系,1=联动坐标系 |
| mechID | int& | 输出参数,机器人号 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
set_dualarm_user_coordinate_data / set_dualarm_user_coordinate_data_robot
标定双臂用户坐标(写入坐标数据)。
函数原型:
cpp
Result set_dualarm_user_coordinate_data(SOCKETFD socketFd, int userNum, std::vector<double> pos, int locationType, int mechID);
Result set_dualarm_user_coordinate_data_robot(SOCKETFD socketFd, int robotNum, int userNum, std::vector<double> pos, int locationType, int mechID);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum | int | 用户坐标编号 |
| pos | std::vector<double> | 坐标数据 |
| locationType | int | 坐标系类型:0=静态用户坐标系,1=联动坐标系 |
| mechID | int | 机器人号 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
dualarm_calibration_oxy / dualarm_calibration_oxy_robot
双臂 OXY 标定。
函数原型:
cpp
Result dualarm_calibration_oxy(SOCKETFD socketFd, int userNum, std::string xyo);
Result dualarm_calibration_oxy_robot(SOCKETFD socketFd, int robotNum, int userNum, std::string xyo);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum | int | 用户坐标编号 |
| xyo | std::string | 标定类型:'X'、'Y'、'O'(分别标定 X 轴方向点、Y 轴方向点、原点) |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 依次标定原点、X 轴方向点、Y 轴方向点
dualarm_calibration_oxy(fd, 1, "O");
// 移动机器人到原点位置后...
dualarm_calibration_oxy(fd, 1, "X");
// 移动机器人到 X 轴方向点后...
dualarm_calibration_oxy(fd, 1, "Y");dualarm_calculate_user_coordinate / dualarm_calculate_user_coordinate_robot
计算双臂用户坐标(标定完成后计算最终结果)。
函数原型:
cpp
Result dualarm_calculate_user_coordinate(SOCKETFD socketFd, int userNumber);
Result dualarm_calculate_user_coordinate_robot(SOCKETFD socketFd, int robotNum, int userNum);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| userNum / userNumber | int | 用户坐标编号 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// OXY 三点标定完成后计算用户坐标
Result result = dualarm_calculate_user_coordinate(fd, 1);
if (result == SUCCESS) {
printf("双臂用户坐标计算成功\n");
}