实时运动控制接口

头文件: cpp/interface/nrc_interface.h

1. robot_movej - 关节空间运动到目标位姿

方法: int robot_movej(SOCKETFD socket_fd, const MoveCmd& move_cmd);

功能描述: 立即下发关节角度数据,驱动机械臂实时运动到目标位置(在线点对点控制)。不依赖作业文件。

参数:

  • socket_fd:已连接的机械臂控制器句柄,整型格式(int)
  • move_cmd:需设置以下成员:
    • coord:固定0(关节坐标系)
    • targetPosValue:需要resize到7维(前6轴角度,第7轴为外部扩展轴,填0)
    • velocity、acc、dec、pl

返回值:

  • int
    • 0:成功
    • 负值:失败(如超限位、未使能等)

使用示例:

C++
bool test_move_joint(const std::vector<double>& angles, int vel = 20, int acc = 50, int dec = 50) {
    if (socket_fd_6001_ <= 0) return false;
    // 实例化并初始化 MoveCmd 运动命令结构体
    MoveCmd cmd;
    cmd.coord          = 0;                // 指定参考坐标系(0通常代表关节坐标系)
    cmd.velocity       = vel;               // 设置实时运动速度百分比
    cmd.acc            = acc;               // 设置实时加速百分比
    cmd.dec            = dec;               // 设置实时减速百分比
    cmd.pl             = 0;                 // 设置平滑过渡等级(0代表精准到位,不拐弯)
    // 初始化目标位置向量(这里固定预留7维空间以兼容6轴或7轴机器人),并将传入的关节角度安全地复制进去
    cmd.targetPosValue.resize(7, 0.0);
    for (size_t i = 0; i < angles.size() && i < cmd.targetPosValue.size(); ++i) {
        cmd.targetPosValue[i] = angles[i];
    }
    // 传入控制端口句柄和配置好的指令结构体,调用底层接口驱动机器人立即执行关节运动
    int ret = robot_movej(socket_fd_6001_, cmd);
    CHECK_RET(ret, "实时关节运动");
    return ret == SUCCESS;
}

完整关节空间运动到目标位姿测试代码见使用示例3


2. robot_movel - 笛卡尔空间直线运动到目标位姿

方法: int robot_movel(SOCKETFD socket_fd, const MoveCmd& move_cmd);

功能描述: 立即下发直角坐标数据,驱动机械臂末端沿直线运动到目标位姿。

参数:

  • socket_fd:已连接的句柄
  • move_cmd:需设置以下成员:
    • coord = 1(直角坐标系)
    • targetPosValue 7维:[X(mm), Y(mm), Z(mm), RX(rad), RY(rad), RZ(rad), 0]
    • velocity、acc、dec、pl

返回值:

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

使用示例:

C++
bool test_move_linear(const std::vector<double>& coords, int vel = 20, int acc = 50, int dec = 50) {
    if (socket_fd_6001_ <= 0) return false;
    // 实例化并初始化 MoveCmd 运动命令结构体
    MoveCmd cmd;
    cmd.coord          = 1;                // 指定参考坐标系(1通常代表基坐标系/直角坐标系)
    cmd.velocity       = vel;               // 设置实时运动速度
    cmd.acc            = acc;               // 设置实时加速百分比
    cmd.dec            = dec;               // 设置实时减速百分比
    cmd.pl             = 0;                 // 设置平滑过渡等级(0代表精准到位,不拐弯)
    // 初始化目标位置向量(预留7维空间),并将传入的直角坐标数据[X, Y, Z, RX, RY, RZ]安全地复制进去
    cmd.targetPosValue.resize(7, 0.0);
    for (size_t i = 0; i < coords.size() && i < cmd.targetPosValue.size(); ++i) {
        cmd.targetPosValue[i] = coords[i];
    }
    // 传入控制端口句柄和配置好的指令结构体,调用底层接口驱动机器人立即执行直角坐标直线运动
    int ret = robot_movel(socket_fd_6001_, cmd);
    CHECK_RET(ret, "实时直线运动");
    return ret == SUCCESS;
}

完整笛卡尔空间直线运动到目标位姿测试代码见使用示例4