基础状态查询接口

头文件:include/tl_interface.h

相关示例代码:examples\cpp\ex_info_query.cpp

1. get_current_position - 获取机械臂当前坐标信息

方法:Result get_current_position(SOCKETFD socketFd, Coord coord, std::vector< double >& pos);

功能描述:获取机械臂当前在指定坐标系下的位置数据。

参数:

  • socketFD:已连接的句柄。
  • coord 坐标系 Coord::JOINT / Coord::BASE / Coord::TOOL / Coord::USER(分别对应关节,直角,工具,用户)。
  • pos:输出参数,存储位置数据(长度自动适配);需要说明,当坐标系为直角坐标系时,返回 [X,Y,Z,RX,RY,RZ](mm, rad),姿态角统一为弧度,与运动指令的弧度契约一致。

返回值:

  • 0:成功。
  • 非 0:失败。

使用示例:

C++
    // ----获取机械臂当前坐标----
    std::cout << "[INFO] **********获取机械臂当前坐标**********" << std::endl;
    tl::Coord coord = tl::Coord::JOINT;
    std::vector<double> current_position;
    auto ret = tl::get_current_position(socket_fd, coord, current_position);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 获取机械臂当前坐标失败,程序退出!" << std::endl;
        return -1;
    }
    std::cout << "[INFO] 机械臂当前坐标: ";
    for (const auto& pos : current_position) {
        std::cout << pos << " ";
    }
    std::cout << std::endl;
    std::cout << std::endl;

2. get_robot_running_state - 获取机器人运行状态

方法:Result get_robot_running_state(SOCKETFD socketFd, RunState& status);

功能描述:获取当前作业文件的运行状态,执行前需要延时0.1秒。

参数:

  • socketFd:已连接的句柄。
  • status 输出:RunState::STOP(停止)/ RunState::PAUSE(暂停)/ RunState::RUNNING(运行)

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----获取机械臂运行状态----
    std::cout << "[INFO] **********获取机械臂运行状态**********" << std::endl;
    tl::RunState status;
    ret = tl::get_robot_running_state(socket_fd, status);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 获取机械臂运行状态失败,程序退出!" << std::endl;
        return -1;
    }
    switch (status)
    {
        case tl::RunState::STOP:
            std::cout << "[INFO] 机械臂处于停止状态 (status = " << static_cast<int>(status) << ")" << std::endl;
            break;
        case tl::RunState::PAUSE:
            std::cout << "[INFO] 机械臂处于暂停状态 (status = " << static_cast<int>(status) << ")" << std::endl;
            break;
        case tl::RunState::RUNNING:
            std::cout << "[INFO] 机械臂处于运行状态 (status = " << static_cast<int>(status) << ")" << std::endl;
            break;
        default:
            break;
    }
    std::cout << std::endl;

3. get_servo_state - 获取伺服状态

方法:Result get_servo_state(SOCKETFD socketFd, ServoState& status);

功能描述:获取机械臂当前伺服状态信息。

参数:

  • socketFd:已连接的句柄。
  • status 输出:ServoState::STOP / READY / ALARM / RUNNINGstatus (分别对应停止状态, 就绪状态, 报警状态, 运行状态)

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
  // 2. 检查伺服状态
  tl::ServoState state;
  auto ret = tl::get_servo_state(socket_fd, state);
  if (ret != tl::Result::SUCCESS) {
    std::cerr << "[ERROR] 获取伺服状态失败: " << ret << std::endl;
    return;
  }
  std::cout << "  [信息] 当前伺服状态: " << static_cast<int>(state)
            << " (STOP=停止 READY=就绪 ALARM=报警 RUNNING=运行)" << std::endl;

  if (state == tl::ServoState::ALARM) {
    std::cerr << "[ERROR] 伺服处于报警状态,无法上电,请排查报警原因后重试" << std::endl;
    return;
  }

  if (state == tl::ServoState::RUNNING) {
    std::cout << "[INFO] 机械臂已在使能上电状态" << std::endl;
    return;
  }

  // 3. 上电流程
  if (state == tl::ServoState::STOP) {
    std::cout << "  [信息] 伺服处于停止状态,设置就绪..." << std::endl;
    ret = tl::set_servo_state(socket_fd, tl::ServoState::READY);
    if (ret != tl::Result::SUCCESS && ret != tl::Result::OPERATION_NOT_ALLOWED) {
      std::cerr << "[ERROR] 设置伺服就绪失败: " << ret << std::endl;
      return;
    }
    std::this_thread::sleep_for(std::chrono::milliseconds(500));
  }

4. get_current_mode - 获取机器人当前模式

方法:Result get_current_mode(SOCKETFD socketFd, RobotMode& mode);

功能描述:获取机械臂当前模式。

参数:

  • socketFd:已连接的句柄。
  • mode 输出:RobotMode::TEACH(示教)/ RobotMode::REMOTE(远程)/ RobotMode::RUN(运行)

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
        // 先获取当前模式
        tl::RobotMode current_mode;
        tl::Result ret = tl::get_current_mode(sock, current_mode);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 获取当前模式失败: " << ret << std::endl;
            tl::disconnect_robot(sock);
            return -1;
        }
        std::cout << "  [信息] 当前模式: " << static_cast<int>(current_mode) << " (RobotMode::TEACH/REMOTE/RUN)" << std::endl;

5. get_robot_dh_param - 获取机械臂DH参数

方法:Result get_robot_dh_param(SOCKETFD socketFd, RobotDHParam& param);

功能描述:获取机械臂当前的 DH 几何参数(运动学标定数据)。

参数:

  • socketFd:已连接的句柄。
  • param:输出参数,RobotDHParam 结构体,主要成员:
    • alpha[6]:1-6 轴 DH 参数 alpha,单位 deg
    • a[6]:1-6 轴 DH 参数 a,单位 mm
    • theta[6]:1-6 轴 DH 参数 theta,单位 deg
    • d[6]:1-6 轴 DH 参数 d,单位 mm
    • eulerAngle:欧拉角模式
    • mountingAngle:机器人安装角度,单位 deg

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 获取机械臂DH参数
    std::cout << "[INFO] **********获取机械臂DH参数**********" << std::endl;
    tl::RobotDHParam dh_params;
    auto ret = tl::get_robot_dh_param(socket_fd, dh_params);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 获取机械臂DH参数失败,程序退出!" << std::endl;
        return -1;
    }
    std::cout << "[INFO] 机械臂DH参数: ";
    std::cout << "alpha=[";
    for (int i = 0; i < 6; ++i) std::cout << (i ? "," : "") << dh_params.alpha[i];
    std::cout << "], a=[";
    for (int i = 0; i < 6; ++i) std::cout << (i ? "," : "") << dh_params.a[i];
    std::cout << "], theta=[";
    for (int i = 0; i < 6; ++i) std::cout << (i ? "," : "") << dh_params.theta[i];
    std::cout << "], d=[";
    for (int i = 0; i < 6; ++i) std::cout << (i ? "," : "") << dh_params.d[i];
    std::cout << "], eulerAngle=" << dh_params.eulerAngle
              << ", mountingAngle=" << dh_params.mountingAngle << std::endl;
    std::cout << std::endl;

6. get_library_version - 读取机械臂软件信息

方法:std::string get_library_version();

功能描述:获取 SDK 库版本信息。

参数:

  • 无

返回值:

  • 非空字符串:成功,返回版本信息字符串,格式 "<sdk版本>(Base:<base版本>)",如 "V2.5.1-0-gabc1234-20260916(Base:2.0.4-20260914-6cf4a3b)"。
  • 空字符串:失败(库未正确加载)。

使用示例:

C++
    // 获取 SDK 版本
    std::string version = tl::get_library_version();
    std::cout << "[INFO] SDK 版本: " << version << std::endl;

7. get_robot_joint_param - 获取指定关节配置参数

方法:Result get_robot_joint_param(SOCKETFD socketFd, int id, RobotJointParam& param);

功能描述:获取指定关节的运动与硬件参数(减速比、编码器分辨率、限位、转速等)。

参数:

  • socketFd:已连接的句柄。
  • id:关节编号,取值范围 [1,6](6 轴,对应 J1~J6);7 轴为 [1,7](对应 J1~J7)。
  • param:输出参数,RobotJointParam 结构体,主要成员:
    • reduceRatio:减速比
    • encoderResolution:编码器分辨率数值
    • maxAcc:最大加速度
    • maxDec:最大减速度
    • maxPos:正向软限位
    • minPos:负向软限位
    • maxRotSpeed:最大转速
    • ratedRotSpeed:电机额定转速
    • motorDirection:电机方向
    • axisDirection:关节轴正方向

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 获取指定关节参数
    std::cout << "[INFO] **********获取指定关节参数**********" << std::endl;
    int joint_id = 1;  // J1 轴
    tl::RobotJointParam joint_param;
    ret = tl::get_robot_joint_param(socket_fd, joint_id, joint_param);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 获取关节" << joint_id << "参数失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[INFO] 关节" << joint_id << "参数:" << std::endl;
    std::cout << "  减速比=" << joint_param.reduceRatio
              << ", 额定转速=" << joint_param.ratedRotSpeed
              << ", 最大加速度=" << joint_param.maxAcc
              << ", 电机方向=" << joint_param.motorDirection
              << ", 正向软限位=" << joint_param.maxPos
              << ", 负向软限位=" << joint_param.minPos << std::endl;
    std::cout << std::endl;

8. query_joint_software_version - 查询指定关节(轴)的软件版本号

方法:Result query_joint_software_version(SOCKETFD socketFd, int axisNum, std::string& version_string);

功能描述:查询指定关节(轴)的软件版本号(SDO 0x100A)。

参数:

  • socketFd:已连接的句柄。
  • axisNum:轴编号。
  • version_string:输出参数,用于接收查询到的软件版本号字符串。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 查询关节软件版本号
    std::cout << "[INFO] **********查询关节软件版本号**********" << std::endl;
    {
        int query_axis = 1;  // 查询 J1 轴
        std::string joint_version;
        auto ret = tl::query_joint_software_version(socket_fd, query_axis, joint_version);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 查询关节" << query_axis << "软件版本号失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] 关节" << query_axis << "软件版本号: " << joint_version << std::endl;
        }
    }
    std::cout << std::endl;

9. get_nexmotion_lib_version - 获取底层 nexmotion 库版本信息

方法:Result get_nexmotion_lib_version(SOCKETFD socketFd, std::string& version);

功能描述:获取底层算法库(nexmotion)版本号。

参数:

  • socketFd:已连接的句柄。
  • version:输出参数,算法库版本号字符串。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----获取底层 nexmotion 库版本----
    std::cout << "[INFO] **********获取底层 nexmotion 库版本**********" << std::endl;
    {
        std::string nexmotion_version;
        auto ret = tl::get_nexmotion_lib_version(socket_fd, nexmotion_version);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 获取 nexmotion 库版本失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] nexmotion 库版本: " << nexmotion_version << std::endl;
        }
    }
    std::cout << std::endl;

10. get_robot_state - 获取机器人整体状态

方法:Result get_robot_state(SOCKETFD socketFd, RobotState param);

功能描述:通过 7000 端口查询机器人整体状态。需要连接 7000 端口。

参数:

  • socketFd:已连接的句柄(7000 端口)。
  • param:RobotState 结构体(输入配置),主要成员:
    • channel:查询的通道,最多 9 个通道
    • stop:为 true 时停止持续发送
    • mode:0-查询只回复一次,1-查询持续回复
    • interval:仅 mode=1 时有效,回复时间范围 [10,60000] ms
    • ioState:查询 IO
    • position:0-关节坐标,1-基坐标
    • dataildmotionpos:机械臂的运动点位
    • programRunStatus:运行状态
    • servoStatus:伺服状态
    • operationMode:操作模式
    • globalSpeed:全局速度
    • syncPosition:外部轴坐标

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 回调函数:收到控制器状态时被调用(在独立线程中触发,不能做耗时操作)
    void on_robot_state(const char* message)
    {
        if (message != nullptr) {
            std::cout << "[回调] 收到状态: " << message << std::endl;
        }
    }

    // ----查询机器人状态与注册状态回调(7000 端口,需先连接)----
    std::cout << "[INFO] **********查询机器人状态(7000 端口)**********" << std::endl;
    {
        std::string port_7000 = "7000";
        auto sock_7000 = tl::connect_robot(ip, port_7000);
        if (sock_7000 < 0) {
            std::cerr << "[ERROR] 连接 7000 端口失败,错误码: " << sock_7000 << std::endl;
        } else {
            std::cout << "[INFO] 7000 端口连接成功 (socket=" << sock_7000 << ")" << std::endl;

            // 注册状态回调(回调在独立线程触发,不能做耗时操作)
            ret = tl::robot_state_callback(sock_7000, on_robot_state_message);
            if (ret != tl::Result::SUCCESS) {
                std::cerr << "[ERROR] 注册状态回调失败,错误码: " << ret << std::endl;
            } else {
                std::cout << "[INFO] 状态回调注册成功" << std::endl;
            }

            // 查询机器人状态(单次回复)
            tl::RobotState robot_state;
            robot_state.channel = 1;
            robot_state.stop = false;
            robot_state.mode = 0;             // 0-查询只回复一次 1-持续回复
            robot_state.interval = 1000;
            robot_state.position = 0;         // 0-关节坐标 1-直角坐标
            robot_state.servoStatus = true;
            robot_state.programRunStatus = true;
            ret = tl::get_robot_state(sock_7000, robot_state);
            if (ret != tl::Result::SUCCESS) {
                std::cerr << "[ERROR] 查询机器人状态失败,错误码: " << ret << std::endl;
            } else {
                std::cout << "[INFO] 状态查询请求已发送,等待回调..." << std::endl;
                std::this_thread::sleep_for(std::chrono::seconds(1));
            }

            // 停止持续推送并断开 7000
            tl::RobotState stop_param;
            stop_param.channel = 1;
            stop_param.stop = true;
            tl::get_robot_state(sock_7000, stop_param);
            tl::disconnect_robot(sock_7000);
            std::cout << "[INFO] 7000 端口已断开" << std::endl;
        }
    }
    std::cout << std::endl;

11. get_robot_type - 获取机器人类型

方法:Result get_robot_type(SOCKETFD socketFd, RobotType& type);

功能描述:获取机器人类型(枚举重载)。返回 RobotType 枚举,标识机器人机械结构类型。

参数:

  • socketFd:已连接的句柄。
  • type:输出参数,RobotType 枚举,完整取值如下表:

RobotType 枚举说明:

枚举值 数值 说明
SIX_AXIS_SERIAL 1 六轴串联多关节
FOUR_AXIS_SCARA 2 四轴 SCARA
FOUR_AXIS_PALLETIZING 3 四轴码垛
FOUR_AXIS_SERIAL 4 四轴串联多关节
SINGLE_AXIS 5 单轴
FIVE_AXIS_SERIAL 6 五轴串联多关节
SIX_AXIS_COLLABORATIVE 7 六轴协作
TWO_AXIS_SCARA 8 二轴 SCARA
THREE_AXIS_SCARA 9 三轴 SCARA
THREE_AXIS_CARTESIAN 10 三轴直角
THREE_AXIS_SPECIAL 11 三轴异形
SEVEN_AXIS_SERIAL 12 七轴串联多关节
SCARA_SPECIAL 13 SCARA 异形一
FOUR_AXIS_PALLETIZING_LEAD 14 四轴码垛丝杆

上表与 include/tl_types.h 的 tl::RobotType 一致,数值即 get_robot_type 的 int 重载返回值。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----查询机器人类型----
    std::cout << "[INFO] **********查询机器人类型**********" << std::endl;
    {
        tl::RobotType robot_type;
        ret = tl::get_robot_type(socket_fd, robot_type);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 获取机器人类型失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] 机器人类型编号: " << static_cast<int>(robot_type) << std::endl;
        }
    }
    std::cout << std::endl;

12. get_current_line_speed_and_joint_speed - 获取当前线速度与关节速度

方法:Result get_current_line_speed_and_joint_speed(SOCKETFD socketFd, double& line_speed, std::vector< double >& joint_speed, std::vector< double >& joint_speed_sync);

功能描述:获取当前末端线速度和关节速度。

参数:

  • socketFd:已连接的句柄。
  • line_speed:输出参数,末端线速度,单位 [mm/s]。
  • joint_speed:输出参数,关节速度,长度 7,单位 [度/s]。
  • joint_speed_sync:输出参数,外部轴关节速度,长度 5,单位 [度/s]。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----查询当前末端线速度和关节速度----
    std::cout << "[INFO] **********查询当前末端线速度和关节速度**********" << std::endl;
    {
        double line_speed = 0;
        std::vector<double> joint_speed;
        std::vector<double> joint_speed_sync;
        ret = tl::get_current_line_speed_and_joint_speed(socket_fd, line_speed, joint_speed, joint_speed_sync);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 获取当前末端线速度和关节速度失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] 末端线速度: " << line_speed << " mm/s" << std::endl;
            std::cout << "[INFO] 关节速度: ";
            for (const auto& val : joint_speed) {
                std::cout << val << " ";
            }
            std::cout << std::endl;
            std::cout << "[INFO] 外部轴关节速度: ";
            for (const auto& val : joint_speed_sync) {
                std::cout << val << " ";
            }
            std::cout << std::endl;
        }
    }
    std::cout << std::endl;

13. get_pos_reachable - 查询点位可达性

方法:Result get_pos_reachable(SOCKETFD socketFd, std::vector< double > pos, std::string movetype, bool& result);

功能描述:检测目标点位是否可达。

参数:

  • socketFd:已连接的句柄。
  • pos:目标点位坐标数据,vector 长度 14:
    • [0] 坐标系 0:关节 1:直角 2:工具 3:用户
    • [1] 单位 0:角度 1:弧度
    • [2] 形态
    • [3] 工具手坐标序号
    • [4] 用户坐标序号
    • [5][6] 备用
    • [7-13] 点位信息
  • movetype:移动方式,"MOVJ" 或 "MOVL"。
  • result:输出参数,点位是否可达(true=可达)。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----查询点位是否可达(示例点位,可自行修改)----
    std::cout << "[INFO] **********查询点位是否可达**********" << std::endl;
    {
        // 目标点位 14 位: [0]坐标系 0关节 1直角 2工具 3用户 [1]0角度制 1弧度制 [2]形态 [3]工具号 [4]用户坐标号 [5][6]备用 [7-13]点位值
        std::vector<double> pos(14, 0);
        pos[0] = 0;  // 关节坐标系
        pos[1] = 0;  // 角度制
        pos[7] = 0.0;   // J1
        pos[8] = 0.0;   // J2
        pos[9] = 0.0;   // J3
        pos[10] = 0.0;  // J4
        pos[11] = 0.0;  // J5
        pos[12] = 0.0;  // J6
        std::string movetype = "MOVJ";
        bool reachable = false;
        ret = tl::get_pos_reachable(socket_fd, pos, movetype, reachable);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 查询点位是否可达失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] 点位 " << movetype << " 是否可达: " << (reachable ? "可达" : "不可达") << std::endl;
        }
    }
    std::cout << std::endl;

14. robot_state_callback - 注册机器人状态回调

方法:Result robot_state_callback(SOCKETFD socketFd, void (*function)(const char* state));

功能描述:注册 7000 端口状态返回的回调函数。需要连接 7000 端口。

参数:

  • socketFd:已连接的句柄(7000 端口)。
  • function:回调函数指针,签名 void (const char* state),收到控制器状态时在独立线程中触发。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 回调函数:收到控制器状态时被调用
    void on_robot_state(const char* message)
    {
        if (message != nullptr) {
            std::cout << "[回调] 收到状态: " << message << std::endl;
        }
    }

    // 注册回调(7000 端口)
    auto ret = tl::robot_state_callback(sock_7000, on_robot_state);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 注册回调失败,错误码: " << ret << std::endl;
    } else {
        std::cout << "[INFO] 回调注册成功" << std::endl;
    }

15. get_speed - 获取速度

方法:Result get_speed(SOCKETFD socketFd, int& speed);

功能描述:获取当前全局速度倍率。

参数:

  • socketFd:已连接的句柄。
  • speed:输出参数,当前速度百分比。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 查询当前速度
    int speed = -1;
    auto ret = tl::get_speed(sock, speed);
    if (ret == tl::Result::SUCCESS) {
        std::cout << "  [信息] 当前全局速度: " << speed << "%" << std::endl;
    } else {
        std::cerr << "[ERROR] 获取速度失败,错误码: " << ret << std::endl;
    }

16. get_cartesian_params - 获取笛卡尔参数

方法:Result get_cartesian_params(SOCKETFD socketFd, CartesianParam& param);

功能描述:获取笛卡尔空间运动参数。

参数:

  • socketFd:已连接的句柄。
  • param:输出参数,CartesianParam 结构体,主要成员:
    • maxSpeed{1000}:最大线速度 (mm/s)
    • maxAcc{3}:最大线加速度 (mm/s²)
    • maxDec{-3}:最大线减速度 (mm/s²)
    • maxAttitudeVel{500}:最大姿态角速度 (deg/s)
    • speedLimitMode{0}:速度限制方式 0:位姿 1:位置
    • posResolution{0.01}:绝对位置分辨率,范围 [0.0001, 0.1]
    • maxJerk{10000}:最大线加加速度 (mm/s³)
    • interpType{0}:插补方式 0:S型 1:梯形
    • minAccTime{100}:最小加速时间 (ms)
    • minDecTime{100}:最小减速时间 (ms)

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // ----查询笛卡尔空间参数----
    std::cout << "[INFO] **********查询笛卡尔空间参数**********" << std::endl;
    {
        tl::CartesianParam cartesian_param;
        ret = tl::get_cartesian_params(socket_fd, cartesian_param);
        if (ret != tl::Result::SUCCESS) {
            std::cerr << "[ERROR] 获取笛卡尔空间参数失败,错误码: " << ret << std::endl;
        } else {
            std::cout << "[INFO] 笛卡尔空间参数:" << std::endl;
            std::cout << "  最大线速度: " << cartesian_param.maxSpeed << " mm/s" << std::endl;
            std::cout << "  最大线加速度: " << cartesian_param.maxAcc << " mm/s^2" << std::endl;
            std::cout << "  最大线减速度: " << cartesian_param.maxDec << " mm/s^2" << std::endl;
            std::cout << "  最大姿态角速度: " << cartesian_param.maxAttitudeVel << " deg/s" << std::endl;
            std::cout << "  速度限制方式: " << cartesian_param.speedLimitMode << " (0-位姿 1-位置)" << std::endl;
            std::cout << "  绝对位置分辨率: " << cartesian_param.posResolution << std::endl;
            std::cout << "  最大线加加速度: " << cartesian_param.maxJerk << " mm/s^3" << std::endl;
            std::cout << "  插补方式: " << cartesian_param.interpType << " (0-S型 1-梯形)" << std::endl;
            std::cout << "  最小加速时间: " << cartesian_param.minAccTime << " ms" << std::endl;
            std::cout << "  最小减速时间: " << cartesian_param.minDecTime << " ms" << std::endl;
        }
    }
    std::cout << std::endl;