四、轨迹记录与回放(nrc_track.h)
功能概述
轨迹记录与回放功能用于手动示教时记录机器人末端运动轨迹,并可按设定速度回放,适用于喷涂、点胶等需要复现人工轨迹的工艺场景。
基本流程: 开始记录 → 手动移动机器人 → 停止记录 → 保存轨迹 → 回放轨迹
| 步骤 | 接口 | 说明 |
|---|---|---|
| 1. 开始记录 | track_record_start | 设置采样点数与采样间隔 |
| 2. 手动示教 | 示教器/点动 | 移动机器人到目标轨迹 |
| 3. 停止记录 | track_record_stop | 结束轨迹采集 |
| 4. 保存 | track_record_save | 以名称保存轨迹数据 |
| 5. 回放 | track_record_playback | 按设定速度复现轨迹 |
所有接口均提供
_robot后缀版本,用于指定机器人编号(1-4)。
track_record_start / track_record_start_robot
轨迹记录开始。设置采样参数后开始采集机器人末端轨迹。
函数原型:
cpp
Result track_record_start(SOCKETFD socketFd, double maxSamplingNum, double samplingInterval);
Result track_record_start_robot(SOCKETFD socketFd, int robotNum, double maxSamplingNum, double samplingInterval);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| maxSamplingNum | double | 最大采样点数,范围 [200, 12000] |
| samplingInterval | double | 采样间隔(秒),范围 [0.03, 1] |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 以 5000 个采样点、0.05s 间隔开始轨迹记录
Result result = track_record_start(fd, 5000, 0.05);
if (result == SUCCESS) {
printf("轨迹记录已开始\n");
// 此时手动移动机器人进行示教...
}track_record_stop / track_record_stop_robot
轨迹记录关闭,结束轨迹数据采集。
函数原型:
cpp
Result track_record_stop(SOCKETFD socketFd);
Result track_record_stop_robot(SOCKETFD socketFd, int robotNum);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 示教完成后停止记录
Result result = track_record_stop(fd);get_track_record_status / get_track_record_status_robot
查询轨迹记录开启状态。
函数原型:
cpp
Result get_track_record_status(SOCKETFD socketFd, bool& recordStart);
Result get_track_record_status_robot(SOCKETFD socketFd, int robotNum, bool& recordStart);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| recordStart | bool& | 输出参数,记录状态:true=开启,false=关闭 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
bool isRecording = false;
Result result = get_track_record_status(fd, isRecording);
if (result == SUCCESS && isRecording) {
printf("轨迹正在记录中\n");
}track_record_save / track_record_save_robot
轨迹记录保存,将采集到的轨迹数据以指定名称保存。
函数原型:
cpp
Result track_record_save(SOCKETFD socketFd, std::string trajName);
Result track_record_save_robot(SOCKETFD socketFd, int robotNum, std::string trajName);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| trajName | std::string | 保存的轨迹名称 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 将记录的轨迹保存为 "paint_path"
Result result = track_record_save(fd, "paint_path");
if (result == SUCCESS) {
printf("轨迹保存成功\n");
}track_record_playback / track_record_playback_robot
轨迹回放,按设定速度复现已保存的轨迹。
函数原型:
cpp
Result track_record_playback(SOCKETFD socketFd, int vel);
Result track_record_playback_robot(SOCKETFD socketFd, int robotNum, int vel);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| vel | int | 回放速度(百分比) |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 以 80% 速度回放已保存轨迹
Result result = track_record_playback(fd, 80);
if (result == SUCCESS) {
printf("轨迹回放开始\n");
}track_record_delete / track_record_delete_robot
轨迹清除,删除当前保存的轨迹数据。
函数原型:
cpp
Result track_record_delete(SOCKETFD socketFd);
Result track_record_delete_robot(SOCKETFD socketFd, int robotNum);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
使用示例:
cpp
// 清除轨迹数据
Result result = track_record_delete(fd);