- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
拖拽示教与轨迹记录回放
头文件:include/tl_interface.h
1. set_darg_mode - 设置拖拽示教的拖拽方式
方法:set_darg_mode(SOCKETFD socketFd, int mode);
功能描述:配置机械臂拖拽示教执行模式,可选择力矩柔顺拖拽、位置锁定拖拽、3D鼠标操控等不同拖动方式,适配现场不同示教操作需求。
参数:
- socketFd:已连接的句柄。
- mode:拖拽模式 0-无 1-3D鼠标 2-力矩模式 3-位置。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# mode: 0=无 1=力矩模式 2=位置
print_title("测试2: set_darg_mode(1) 力矩模式")
ret = set_darg_mode(sock, 1)
if ret == SUCCESS:
print_ok("set_darg_mode(1) 力矩模式已开启")
pass_count += 1
else:
print_fail("set_darg_mode(1)", ret)
fail_count += 1
2. set_teach_type - 设置示教模式类型
方法:set_teach_type(SOCKETFD socketFd, int type);
功能描述:设置机器人本地示教操作类型,可切换为点动单轴微调模式或力矩拖拽直接拖动模式,满足点位精细校准与快速示教两种作业需求。
参数:
- socketFd:已连接的句柄。
- type :0 点动 1 拖拽。
返回值:
- 0:成功
- 非 0:失败
使用示例:
print_title("测试2b: set_teach_type(1) 切换到拖拽")
ret = set_teach_type(sock, 1)
if ret == SUCCESS:
print_ok("已切换到拖拽模式")
else:
print_fail("set_teach_type(1)", ret)
3. get_teach_type - 查询示教模式类型
方法:get_teach_type(SOCKETFD socketFd, int& type);
功能描述:查询示教模式下是何种操作类型。
参数:
- socketFd:已连接的句柄。
- type :0 点动 1 拖拽。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 确认
teach_type = -1
ret, teach_type = get_teach_type(sock, teach_type)
if ret == SUCCESS:
name = {0: "点动", 1: "拖拽"}.get(teach_type, "未知")
print_ok("确认: teach_type=%d (%s)" % (teach_type, name))
4. set_current_teach_sensitivity - 设置电流环拖动示教灵敏度
方法:set_current_teach_sensitivity(SOCKETFD socketFd, const std::vector<double>& friction_offsets);
功能描述:用于配置拖动示教模式下各关节电流环力矩触发阈值,调节手动拖拽示教时关节柔顺度与外力感知灵敏度**。**
参数:
- socketFd:已连接的句柄。
- friction_offsets:包含6个关节电流环拖动示教灵敏度参数的向量,顺序为J1-J6,范围应在0-3之间。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
friction_offsets = tl.VectorDouble()
friction_offsets.append(1) # J1
friction_offsets.append(1) # J2
friction_offsets.append(1) # J3
friction_offsets.append(1) # J4
friction_offsets.append(1) # J5
friction_offsets.append(1) # J6
ret = tl.set_current_teach_sensitivity(socket_fd, friction_offsets)
if ret == 0:
print("[INFO] 设置电流环拖动示教灵敏度成功")
else:
print(f"[ERROR] 设置电流环拖动示教灵敏度失败,错误码: {ret}")
5. get_current_teach_sensitivity - 获取电流环拖动示教灵敏度
方法:get_current_teach_sensitivity(SOCKETFD socketFd,std::vector<double>& friction_offsets);
功能描述:读取拖动示教模式下各轴电流环力矩检测阈值,获取当前手动拖拽柔顺度与外力触发灵敏度配置参数。
参数:
- socketFd:已连接的句柄。
- friction_offsets:输出参数,用于接收6个关节电流环拖动示教灵敏度参数的向量,顺序为J1-J6。
返回值:
- 0:成功
- 非 0:失败
使用示例:
import tl_interface as tl
# 建立连接
socket_fd = tl.connect_robot("192.168.1.13", "6001")
friction_offsets = tl.VectorDouble()
ret = tl.get_current_teach_sensitivity(socket_fd, friction_offsets)
if ret == 0:
print("[INFO] 各关节电流环拖动示教灵敏度: ", end="")
for i in range(len(friction_offsets)):
print("J" + str(i + 1) + "=" + str(friction_offsets[i]) + " ", end="")
print("")
else:
print(f"[ERROR] 获取电流环拖动示教灵敏度失败,错误码: {ret}")
6. get_drag_thread_is_end - 查询拖拽是否结束
方法:get_drag_thread_is_end(SOCKETFD socketFd, bool& endFlag);
功能描述:查询拖拽是否已经结束。
参数:
- socketFd:已连接的句柄。
- endFlag:拖拽结束标志位,True 结束 False 未结束。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 查询拖拽线程是否结束(绑定返回 [ret, endFlag] 列表)
ret, drag_finished = get_drag_thread_is_end(sock, False)
if ret != SUCCESS:
print("[ERROR] 查询拖拽结束状态失败! ret = " + str(ret))
break
if drag_finished:
print("\n[INFO] 检测到拖拽已结束")
break
7. track_record_start - 轨迹记录开始
方法:track_record_start(SOCKETFD socketFd, double maxSamplingNum, double samplingInterval);
功能描述:启动机器人运动轨迹采集任务,配置最大采样总点数与点位采样时间间隔,用于记录拖拽示教过程中的连续运动路径。
参数:
- socketFd:已连接的句柄。
- maxSamplingNum:最大采样点数200,12000200,12000。
- samplingInterval:采样间隔0.03,10.03,1。
返回值:
- 0:成功
- 非 0:失败
使用示例:
MAX_SAMPLES = 500
SAMPLE_INTERVAL = 1
ret = track_record_start(sock, MAX_SAMPLES, SAMPLE_INTERVAL)
if ret != SUCCESS:
print_fail("track_record_start", ret)
8. get_track_record_status - 轨迹记录开启状态查询
方法:get_track_record_status(SOCKETFD socketFd, bool& recordStart);
功能描述:查询轨迹录制功能当前运行状态,通过出参返回轨迹记录是否处于开启采集状态。
参数:
- socketFd:已连接的句柄。
- recordStart:记录状态 true 开启 false 关闭。
返回值:
- 0:成功
- 非 0:失败
使用示例:
# 查询轨迹记录状态
print_title("测试1: 查询初始记录状态")
recordStart = False
ret, recordStart = get_track_record_status(sock, recordStart)
if ret == SUCCESS:
print_ok("初始状态: %s (ret=%d)" % ("记录中" if recordStart else "未记录", ret))
else:
print_fail("get_track_record_status", ret)
9. track_record_stop - 轨迹记录关闭
方法:track_record_stop(SOCKETFD socketFd);
功能描述:终止机器人连续运动轨迹采样录制。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
ret = track_record_stop(sock)
if ret == SUCCESS:
print_ok("track_record_stop")
else:
print_fail("track_record_stop", ret)
10. track_record_save - 保存拖动示教轨迹
方法:track_record_save(SOCKETFD socketFd, std::string trajName);
功能描述:将已采集完成的拖拽示教轨迹以指定名称存储至控制器,实现轨迹文件持久化留存以便后续调用回放。
参数:
- socketFd:已连接的句柄。
- trajName:保存名字。
返回值:
- 0:成功
- 非 0:失败
使用示例:
print_title("测试5: 保存轨迹")
# 按示教器格式生成轨迹名
TRAJ_NAME = time.strftime("轨迹名-%m月%d日%H时%M分%S", time.localtime())
ret = track_record_save(sock, TRAJ_NAME)
if ret == SUCCESS:
print_ok("轨迹已保存为: %s" % TRAJ_NAME)
else:
print_fail("track_record_save('%s')" % TRAJ_NAME, ret)
11. track_record_playback - 轨迹回放
方法:track_record_playback(SOCKETFD socketFd, int vel);
功能描述:调用已录制完成的轨迹文件进行复现运行,可通过传入速度参数设定轨迹回放的整体运行速率。
参数:
- socketFd:已连接的句柄。
- vel:速度。
返回值:
- 0:成功
- 非 0:失败
使用示例:
print("\n [用例A] 低速回放 (vel=20)")
ret = track_record_playback(sock, 20)
if ret == SUCCESS:
print_ok("低速回放已开始,等待完成...")
if wait_playback_done(sock, timeout=120):
print_ok("低速回放完成")
else:
print(" [WARN] 低速回放等待超时")
12. track_record_delete - 轨迹清除
方法:track_record_delete(SOCKETFD socketFd);
功能描述:清空控制器内缓存的当前录制轨迹数据,释放轨迹占用存储空间。
参数:
- socketFd:已连接的句柄。
返回值:
- 0:成功
- 非 0:失败
使用示例:
print_title("测试8: 清除轨迹数据")
ret = track_record_delete(sock)
if ret == SUCCESS:
print_ok("track_record_delete")
else:
print_fail("track_record_ delete", ret)
