7000端口使用方式

头文件: cpp/interface/nrc_interface.h

1. open_servoJ - 打开关节跟踪模式

方法: int open_servoJ(SOCKETFD socket_fd, const std::vector<double>& vmax_vec, const std::vector<double>& amax_vec, const std::vector<double>& jmax_vec);

功能描述: 激活高速流式伺服跟踪模式(ServoJ)。需提供各轴的最大速度、加速度、加加速度限制。

参数:

  • socket_fd:已连接的句柄(7000端口)
  • vmax_vec:各轴最大速度(度/秒),长度至少6
  • amax_vec:各轴最大加速度(度/秒²)
  • jmax_vec:各轴最大加加速度(度/秒³)

返回值:

  • int
    • 0:成功
    • 负值:失败
C++
bool test_open_servoJ(const std::vector<double>& vmax, const std::vector<double>& amax, const std::vector<double>& jmax) {
    // 严格判断并使用7000实时伺服控制端口句柄,确保低延迟通信链路有效
    if (socket_fd_7000_ <= 0) return false;
    // 向7000伺服端口发送指令,并传入各轴的最大速度、最大加速度、最大加加速度限制
    int ret = open_servoJ(socket_fd_7000_, vmax, amax, jmax);
    if (ret != SUCCESS) {
        std::cout << "[失败] 开启servoJ实时伺服模式失败,错误码: " << ret << std::endl;
        return false;
    }
    std::cout << "[成功] 开启7000端口的servoJ关节跟踪模式" << std::endl;
    return true;
}

2. close_servoJ - 关闭关节跟踪模式

方法: int close_servoJ(SOCKETFD socket_fd);

功能描述: 退出伺服跟踪模式,恢复常规轨迹规划。

参数:

  • socket_fd:已连接的机械臂高速实时跟踪控制通道(通常固定为7000端口)句柄

返回值:

  • int
    • 0:成功
    • 负值:失败
C++
bool test_close_servoJ() {
    // 严格判断并使用7000实时伺服控制端口句柄,确保该专用低延迟通道有效
    if (socket_fd_7000_ <= 0) return false;
    // 向7000伺服端口发送关闭指令,通知控制器退出高频实时关节跟踪模式
    int ret = close_servoJ(socket_fd_7000_);
    if (ret != SUCCESS) {
        std::cout << "[失败] 关闭servoJ实时伺服模式失败,错误码: " << ret << std::endl;
        return false;
    }
    std::cout << "[成功] 关闭7000端口的servoJ实时伺服模式" << std::endl;
    return true;
}

3. set_servoJ_pos - 设置实时跟踪关节位置

方法: int set_servoJ_pos(SOCKETFD socket_fd, const std::vector<double>& q_vec);

功能描述: 在跟踪模式下实时发送目标关节角度。需以固定周期(如10ms)持续调用。

参数:

  • socket_fd:7000端口句柄
  • q_vec:7维向量,前6轴角度(度),第7轴补0

返回值:

  • int
    • 0:成功
    • 负值:失败
C++
bool test_set_servoJ_pos(const std::vector<double>& q) {
    // 严格判断并使用7000实时伺服控制端口句柄,确保高频流式通信链路有效
    if (socket_fd_7000_ <= 0) return false;
    // 向7000伺服端口发送当前插补周期内的目标关节角度流q
    int ret = set_servoJ_pos(socket_fd_7000_, q);
    // 实时伺服透传通常运行在毫秒级周期(如4ms/8ms),一般不推荐在此处频繁打印成功日志以免阻塞IO
    if (ret != SUCCESS) {
        std::cout << "[失败] 实时伺服点位透传失败,错误码: " << ret << std::endl;
    }
    return ret == SUCCESS;
}

完整关节实时跟踪servoJ使用示例测试代码见使用示例2。