接口通用规则

1. 头文件包含

使用C++接口需包含 include/tl_interface.h 等对应头文件。

2. 句柄要求

除标注为本地计算、无需连接控制器的接口外,接口的第一个参数为 connect_robot 返回的有效 SOCKETFD(即 int 类型)。

3. 返回值约定

  • 0(SUCCESS):执行成功
  • 非 0:执行失败,具体错误码见附录。

4. 数据结构

  • 向量类型:std::vector<double> 或 std::vector<int>。
  • 结构体类型:ModbusMasterParameter、MoveCmd、RobotDHParam、ToolParam 等。

5. 坐标系约定

  • 0:关节坐标系(Joint)
  • 1:直角坐标系(Cartesian)
  • 2:工具坐标系(Tool)
  • 3:用户坐标系(User)

6. 工具函数说明

为保证示例代码输出格式统一、结果清晰规整,本文档所有C++示例统一封装了调试打印工具函数,用于标准化接口返回状态、向量、矩阵、分隔标题的输出展示。

  • print_result:统一打印接口调用结果,区分成功/失败并输出错误码;
  • print_separator:打印章节分隔标题,用于区分多组测试案例;
  • print_vector:格式化打印一维浮点向量,固定 4 位小数,适用于欧拉角、四元数、关节角度等数据;
  • print_matrix:按行主序格式化打印多维矩阵,适配 3×3 旋转矩阵、4×4 位姿矩阵输出。
C++
// ============================================================
// 工具函数
// ============================================================

void print_result(const std::string& msg, int ret)
{
    if (ret == tl::Result::SUCCESS) {
        std::cout << "  [成功] " << msg << std::endl;
    } else {
        std::cout << "  [失败] " << msg << ",错误码: " << ret << std::endl;
    }
}

void print_separator(const std::string& title)
{
    std::cout << "\n========== " << title << " ==========" << std::endl;
}

/// @brief 打印 double 向量
void print_vector(const std::string& name, const std::vector<double>& v)
{
    std::cout << "  " << name << " [";
    for (size_t i = 0; i < v.size(); ++i) {
        std::cout << v[i] << (i + 1 < v.size() ? ", " : "");
    }
    std::cout << "]" << std::endl;
}

/// @brief 打印矩阵(行主序)
void print_matrix(const std::string& name, const std::vector<double>& m, int rows, int cols)
{
    std::cout << "  " << name << " [" << m.size() << "]:" << std::endl;
    for (int r = 0; r < rows; ++r) {
        std::cout << "    ";
        for (int c = 0; c < cols; ++c) {
            int idx = r * cols + c;
            if (idx < (int)m.size()) {
                std::cout << std::fixed << std::setprecision(4) << std::setw(10) << m[idx] << " ";
            }
        }
        std::cout << std::endl;
    }
}