- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
拖拽示教与轨迹记录回放
头文件: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:失败。
使用示例:
// 设置拖拽方式为 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:失败。
使用示例:
// 切换为拖拽示教类型
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:失败。
使用示例:
// 查询示教模式类型
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:失败。
使用示例:
// 设置电流环拖动示教灵敏度(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:失败。
使用示例:
// 获取电流环拖动示教灵敏度
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:失败。
使用示例:
// 查询拖拽是否结束
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:失败。
使用示例:
// 开始轨迹记录
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:失败。
使用示例:
// 查询轨迹记录状态
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:失败。
使用示例:
// 关闭轨迹记录
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:失败。
使用示例:
// 保存轨迹
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:失败。
使用示例:
// 轨迹回放
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:失败。
使用示例:
// 轨迹清除
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;
