Skip to content

使用servoJ进行关节控制

接口说明

cpp
/**
 * @brief 打开关节跟踪模式
 * @param vmax 速度约束 单位 度/秒
 * @param amax 加速度约束 单位 度/秒^2
 * @param jmax 加加速度约束 单位 度/秒^3
 */
Result open_servoJ(SOCKETFD socketFd, std::vector<double> vmax, std::vector<double> amax, std::vector<double> jmax);


/**
 * @brief 发送跟踪关节位置
 * @param q 目标位置 单位 度
 */
Result set_servoJ_pos(SOCKETFD socketFd, std::vector<double> q);


/**
 * @brief 关闭关节跟踪模式
 */
Result stop_servoJ(SOCKETFD socketFd);

使用示例

cpp
int main()
{
    // 连接6000端口, 用来控制上电,查询机械臂当前位置
    SOCKETFD fd_6000 = connect_robot("192.168.1.13", "6000");
    // 连接7000端口
    SOCKETFD fd_7000 = connect_robot("192.168.1.13", "7000");
    if (fd_6000 < 0 || fd_7000 < 0) 
    {
        return 0; // 连接失败,退出。
    }
    // 设置机器人上电
    std::cout << "就绪: " <<  set_servo_state(fd_6000, 1)<<std::endl;
    std::cout << "上电: " << set_servo_poweron(fd_6000)<<std::endl;
    std::this_thread::sleep_for(std::chrono::milliseconds(30));
    
    // 设置运动约束
    std::vector<double> vMax = {10, 10, 10, 10, 10, 10, 10};  // 速度 10°/s
    std::vector<double> avMax = {1000, 1000, 1000, 1000, 1000, 1000, 1000}; // 加速度 1000°/s^2
    std::vector<double> jMax = {1000, 1000, 1000, 1000, 1000, 1000, 1000}; // 加加速度 1000°/s^3
    std::cout << "打开关节跟随" << open_servoJ(fd_7000, vMax, avMax, jMax) << std::endl;


    int n = 100
    while(n > 0)
    {
        n--;
        std::cout << "当前位置: " << get_current_position(fd_6000, 0, pos) << std::endl;
    
        // 只对第一个元素 pos[0] 增加 0.5,对应机械臂的1轴
        pos[0] += 0.2;
    
        std::cout << "发送关节跟随" << set_servoJ_pos(fd_7000, pos) << std::endl;
        // 每10ms下发一次新的位置
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }


    // 停止servoJ模式
    stop_servoJ(fd_7000);
    return 0;
}