Skip to content

五、双臂机器人(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)());

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
functionvoid(*)()回调函数指针,一条 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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNumint用户坐标编号

返回值: 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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNumint&输出参数,当前用户坐标编号

返回值: 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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNumint用户坐标编号
posstd::vector<double>&输出参数,用户坐标参数
locationTypeint&输出参数,坐标系类型:0=静态用户坐标系,1=联动坐标系
mechIDint&输出参数,机器人号

返回值: 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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNumint用户坐标编号
posstd::vector<double>坐标数据
locationTypeint坐标系类型:0=静态用户坐标系,1=联动坐标系
mechIDint机器人号

返回值: 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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNumint用户坐标编号
xyostd::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);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
userNum / userNumberint用户坐标编号

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// OXY 三点标定完成后计算用户坐标
Result result = dualarm_calculate_user_coordinate(fd, 1);
if (result == SUCCESS) {
    printf("双臂用户坐标计算成功\n");
}