拖拽示教与轨迹记录回放

头文件:include/tl_interface.h、include/tl_track.h
相关示例代码:examples\cpp\ex_track_queue_drag.cpp、examples\cpp\ex_six_axis_force_drag.cpp、examples\cpp\ex_teach_control.cpp

1. set_darg_mode - 设置拖拽示教的拖拽方式

方法:Result set_darg_mode(SOCKETFD socketFd, DragMode mode);

功能描述:配置机械臂拖拽示教执行模式,可选择力矩柔顺拖拽、位置锁定拖拽、3D 鼠标操控等不同拖动方式,适配现场不同示教操作需求。推荐使用 DragMode 枚举重载版本,int 旧版已废弃。需在切换拖拽类型(set_teach_type)之前设置。

参数:

  • socketFd:已连接的句柄。
  • mode:拖拽方式,DragMode 枚举:
    • DragMode::NONE:无(关闭拖拽)
    • DragMode::MOUSE_3D:3D 鼠标
    • DragMode::TORQUE:力矩模式
    • DragMode::POSITION:位置模式(22.07 版本无位置模式)

返回值:

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

使用示例:

C++
    // 设置拖拽方式为 3D 鼠标
    auto ret = tl::set_darg_mode(socket_fd, tl::DragMode::MOUSE_3D);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 设置拖拽模式失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 设置拖拽模式成功(MOUSE_3D)" << std::endl;

2. set_teach_type - 设置示教模式类型

方法:Result set_teach_type(SOCKETFD socketFd, TeachType type);

功能描述:设置示教模式类型。推荐使用 TeachType 枚举重载版本,int 旧版已废弃。

参数:

  • socketFd:已连接的句柄。
  • type:示教模式类型,TeachType 枚举:
    • TeachType::JOG:点动
    • TeachType::DRAG:拖拽

返回值:

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

使用示例:

C++
    // 切换为拖拽示教类型
    auto ret = tl::set_teach_type(socket_fd, tl::TeachType::DRAG);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 设置示教类型失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 已切换为拖拽示教类型" << std::endl;

3. get_teach_type - 查询示教模式类型

方法:Result get_teach_type(SOCKETFD socketFd, TeachType& type);

功能描述:查询当前的示教模式类型。推荐使用 TeachType 枚举重载版本,int 旧版已废弃。

参数:

  • socketFd:已连接的句柄。
  • type:输出,示教模式类型,TeachType 枚举(JOG / DRAG)。

返回值:

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

使用示例:

C++
    // 查询示教模式类型
    tl::TeachType type;
    auto ret = tl::get_teach_type(socket_fd, type);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 查询示教模式类型失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 当前示教模式类型: " << static_cast<int>(type)
              << " (0=点动 1=拖拽)" << std::endl;

4. set_current_teach_sensitivity - 设置电流环拖动示教灵敏度

方法:Result set_current_teach_sensitivity(SOCKETFD socketFd, const std::vector<double>& sensitivity);

功能描述:设置电流环拖动示教灵敏度。

参数:

  • socketFd:已连接的句柄。
  • sensitivity:各关节电流环拖动示教灵敏度参数向量,按实际轴数排列(6 轴为 J1-J6,7 轴为 J1-J7),范围 [0, 3],数值越小灵敏度越低。

返回值:

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

使用示例:

C++
    // 设置电流环拖动示教灵敏度(J1-J6 均为 1.5)
    std::vector<double> sensitivity = {1.5, 1.5, 1.5, 1.5, 1.5, 1.5};
    auto ret = tl::set_current_teach_sensitivity(socket_fd, sensitivity);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 设置电流环拖动示教灵敏度失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 设置电流环拖动示教灵敏度成功" << std::endl;

5. get_current_teach_sensitivity - 获取电流环拖动示教灵敏度

方法:Result get_current_teach_sensitivity(SOCKETFD socketFd, std::vector<double>& sensitivity);

功能描述:获取各关节电流环拖动示教灵敏度参数。

参数:

  • socketFd:已连接的句柄。
  • sensitivity:输出,各关节电流环拖动示教灵敏度参数向量,按实际轴数排列。

返回值:

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

使用示例:

C++
    // 获取电流环拖动示教灵敏度
    std::vector<double> sensitivity;
    auto ret = tl::get_current_teach_sensitivity(socket_fd, sensitivity);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 获取电流环拖动示教灵敏度失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 各关节灵敏度:";
    for (const auto& s : sensitivity) {
        std::cout << " " << s;
    }
    std::cout << std::endl;

6. get_drag_thread_is_end - 查询拖拽是否结束

方法:Result get_drag_thread_is_end(SOCKETFD socketFd, bool& endFlag);

功能描述:查询拖拽是否已结束。

参数:

  • socketFd:已连接的句柄。
  • endFlag:输出,true 拖拽结束 / false 拖拽中。

返回值:

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

使用示例:

C++
    // 查询拖拽是否结束
    bool drag_finished = false;
    auto ret = tl::get_drag_thread_is_end(socket_fd, drag_finished);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 查询拖拽结束标志失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 拖拽是否结束: " << (drag_finished ? "是" : "否") << std::endl;

7. track_record_start - 轨迹记录开始

方法:Result track_record_start(SOCKETFD socketFd, double maxSamplingNum, double samplingInterval);

功能描述:开始记录拖动示教轨迹(需先进入拖拽示教模式)。

参数:

  • socketFd:已连接的句柄。
  • maxSamplingNum:最大采样点数,范围 [200, 12000]。
  • samplingInterval:采样间隔,范围 [0.03, 1]。

返回值:

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

使用示例:

C++
    // 开始轨迹记录
    double max_sampling_num = 10000;   // 最大采样点数
    double sampling_interval = 1;      // 采样间隔 (s)
    auto ret = tl::track_record_start(socket_fd, max_sampling_num, sampling_interval);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 轨迹记录开始失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹记录已开始" << std::endl;

8. get_track_record_status - 轨迹记录开启状态查询

方法:Result get_track_record_status(SOCKETFD socketFd, bool& recordStart);

功能描述:查询轨迹记录是否处于开启状态。

参数:

  • socketFd:已连接的句柄。
  • recordStart:输出,true 开启 / false 关闭。

返回值:

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

使用示例:

C++
    // 查询轨迹记录状态
    bool record_status = false;
    auto ret = tl::get_track_record_status(socket_fd, record_status);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 查询轨迹记录状态失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹记录状态: " << (record_status ? "开启" : "关闭") << std::endl;

9. track_record_stop - 轨迹记录关闭

方法:Result track_record_stop(SOCKETFD socketFd);

功能描述:关闭轨迹记录。

参数:

  • socketFd:已连接的句柄。

返回值:

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

使用示例:

C++
    // 关闭轨迹记录
    auto ret = tl::track_record_stop(socket_fd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 轨迹记录关闭失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹记录已关闭" << std::endl;

10. track_record_save - 保存拖动示教轨迹

方法:Result track_record_save(SOCKETFD socketFd, std::string trajName);

功能描述:将当前录制的轨迹保存到控制器。

参数:

  • socketFd:已连接的句柄。
  • trajName:保存的轨迹名称。

返回值:

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

使用示例:

C++
    // 保存轨迹
    std::string traj_name = "traj_01";
    auto ret = tl::track_record_save(socket_fd, traj_name);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 轨迹记录保存失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹记录已保存(trajName = " << traj_name << ")" << std::endl;

11. track_record_playback - 轨迹回放

方法:Result track_record_playback(SOCKETFD socketFd, int vel);

功能描述:回放已保存的拖动示教轨迹(回放前建议先退出拖拽模式、切回点动)。

参数:

  • socketFd:已连接的句柄。
  • vel:回放速度。

返回值:

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

使用示例:

C++
    // 轨迹回放
    int vel = 100;  // 回放速度
    auto ret = tl::track_record_playback(socket_fd, vel);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 轨迹回放失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹回放开始(vel = " << vel << ")" << std::endl;

12. track_record_delete - 轨迹清除

方法:Result track_record_delete(SOCKETFD socketFd);

功能描述:清除控制器内缓存的当前录制轨迹数据,释放轨迹占用存储空间。

参数:

  • socketFd:已连接的句柄。

返回值:

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

使用示例:

C++
    // 轨迹清除
    auto ret = tl::track_record_delete(socket_fd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 轨迹清除失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 轨迹清除成功" << std::endl;