十三、传送带跟踪工艺(nrc_craft_conveyor_belt_track.h)
功能概述
传送带跟踪(Conveyor Belt Tracking)工艺用于机器人在运动中的传送带上动态抓取/放置工件。系统利用编码器实时获取传送带位置,结合用户输入的物料点位置,实时计算工件位置并通过运动追踪物料。
核心参数分组:
| 参数组 | 说明 | 对应结构体 |
|---|---|---|
| 基本参数 | 编码器设置、传送带速度、用户坐标、跟踪高度 | ConveyorBasicParams |
| 识别参数 | 检测源(传感器/视觉)、触发方式 | ConveyorIdentificationParams |
| 传感器参数 | 传感器标定位置 | ConveyorSensorParams |
| 跟踪范围 | 跟踪窗口范围(X/Y/Z 最大最小) | ConveyorTrackRangeParams |
| 等待点 | 无工件等待位置 | ConveyorWaitPointParams |
使用前需在示教器【工艺】-【传送带跟踪工艺】中设置工艺号,每个工艺号(1-9)保存一组参数。
conveyor_belt_tracking_set_basic_parameter / conveyor_belt_tracking_set_basic_parameter_robot
设置传送带跟踪的基本参数(编码器、速度、坐标等)。
函数原型:
Result conveyor_belt_tracking_set_basic_parameter(SOCKETFD socketFd, int encoderVal, int time, int encoderDirection,
double encoderResolution, double maxEncoderVal, double minEncoderVal, int posRecordMode, double speed, int userCoord,
int conveyorID, int height, int trackOnRunModeWithTargetOverrun, int compensationEncoderVal);
Result conveyor_belt_tracking_set_basic_parameter_robot(SOCKETFD socketFd, int robotNum, int encoderVal, int time, int encoderDirection,
double encoderResolution, double maxEncoderVal, double minEncoderVal, int posRecordMode, double speed, int userCoord,
int conveyorID, int height, int trackOnRunModeWithTargetOverrun, int compensationEncoderVal);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| encoderVal | int | 编码器当前值,单位线 |
| time | int | 跟踪补偿时间,单位毫秒 |
| encoderDirection | int | 编码器方向,用于确定正反转 |
| encoderResolution | double | 编码器分辨率,每转或每单位的脉冲数 |
| maxEncoderVal / minEncoderVal | double | 编码器最大/最小值,限制或标定读数范围,单位线 |
| posRecordMode | int | 位置记录模式:编码器/恒速设置 |
| speed | double | 传送带速度,单位 mm/s(环形传送带为 °/s) |
| userCoord | int | 用户坐标系编号,指定操作在哪个坐标下进行 |
| conveyorID | int | 传送带 ID |
| height | int | 跟踪目标高度:传感器感知/跟踪指令示教 |
| trackOnRunModeWithTargetOverrun | int | 目标超限运行方式:等待下一个目标/跳行到追踪结束运行 |
| compensationEncoderVal | int | 跟踪补偿编码器值,单位线 |
返回值: SUCCESS(0) 表示成功,-1 表示等待消息失败,-2 表示找不到指定的客户端。
使用示例:
// 设置传送带1的基本参数
Result result = conveyor_belt_tracking_set_basic_parameter(
fd, // 连接句柄
1000, // 编码器当前值
50, // 补偿时间 50ms
1, // 编码器正向
10.0, // 分辨率 10 线/mm
100000, 0, // 编码器范围
0, // 位置记录模式:编码器
500.0, // 速度 500mm/s
1, // 用户坐标系 1
1, // 传送带 ID 1
100, // 跟踪高度 100mm
0, // 目标超限:等待下一个目标
0 // 补偿编码器值
);conveyor_belt_tracking_set_identification_parameter / conveyor_belt_tracking_set_identification_parameter_robot
设置传送带参数识别的配置(检测源与识别方式)。
函数原型:
Result conveyor_belt_tracking_set_identification_parameter(SOCKETFD socketFd, int conveyorID, int detectSrcType, int capturePos, int visionID, int visionIoFilterType, int visionLatchEncoderValueType, int communication, int sensorTrg, int type);
Result conveyor_belt_tracking_set_identification_parameter_robot(SOCKETFD socketFd, int robotNum, int conveyorID, int detectSrcType, int capturePos, int visionID, int visionIoFilterType, int visionLatchEncoderValueType, int communication, int sensorTrg, int type);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| detectSrcType | int | 检测源类型 |
| capturePos | int | 信号源参数(捕获位置 IO) |
| visionID | int | 视觉系统 ID |
| visionIoFilterType | int | 视觉输入输出过滤类型 |
| visionLatchEncoderValueType | int | 视觉锁存编码器值类型 |
| communication | int | 通讯方式 |
| sensorTrg | int | 传感器触发方式(0=下降沿,1=上升沿) |
| type | int | 识别类型 |
返回值: SUCCESS(0) 表示成功,-1 表示等待消息失败,-2 表示找不到指定的客户端。
conveyor_belt_tracking_set_sensor_calibration / conveyor_belt_tracking_set_sensor_calibration_robot
设置传送带上的传感器标定参数。
函数原型:
Result conveyor_belt_tracking_set_sensor_calibration(SOCKETFD socketFd, int conveyorID, const std::vector<double> sensorPos);
Result conveyor_belt_tracking_set_sensor_calibration_robot(SOCKETFD socketFd, int robotNum, int conveyorID, const std::vector<double> sensorPos);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| sensorPos | const std::vector<double> | 传感器位置,长度 6 |
返回值: SUCCESS(0) 表示成功,-1 表示等待消息失败,-2 表示找不到指定的客户端。
conveyor_belt_tracking_set_tracking_range / conveyor_belt_tracking_set_tracking_range_robot
设置传送带跟踪范围参数(跟踪窗口)。
函数原型:
Result conveyor_belt_tracking_set_tracking_range(SOCKETFD socketFd, int conveyorID, double receLatestPos, double trackRangeXMax, double trackRangeYMax, double trackRangeYMin, double trackRangeZMax, double trackRangeZMin, double trackStartXPoint);
Result conveyor_belt_tracking_set_tracking_range_robot(SOCKETFD socketFd, int robotNum, int conveyorID, double receLatestPos, double trackRangeXMax, double trackRangeYMax, double trackRangeYMin, double trackRangeZMax, double trackRangeZMin, double trackStartXPoint);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| receLatestPos | double | 最新接收位置(最迟接收 X 值) |
| trackRangeXMax | double | X 轴最大跟踪范围 |
| trackRangeYMax / trackRangeYMin | double | Y 轴最大/最小跟踪范围 |
| trackRangeZMax / trackRangeZMin | double | Z 轴最大/最小跟踪范围 |
| trackStartXPoint | double | 跟踪起始 X 点 |
返回值: SUCCESS(0) 表示成功,-1 表示等待消息失败,-2 表示找不到指定的客户端。
工件进入跟踪范围后机器人开始同步;超出跟踪最大范围或未在最迟接收位置前收到数据,则放弃该工件。
conveyor_belt_tracking_set_tracking_wait_point / conveyor_belt_tracking_set_tracking_wait_point_robot
标定传送带跟踪等待点的位置参数(无工件时等待位置)。
函数原型:
Result conveyor_belt_tracking_set_tracking_wait_point(SOCKETFD socketFd, int conveyorID, bool isWait, double delayDetectTime, const std::vector<double> pos);
Result conveyor_belt_tracking_set_tracking_wait_point_robot(SOCKETFD socketFd, int robotNum, int conveyorID, bool isWait, double delayDetectTime, const std::vector<double> pos);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| isWait | bool | 无工件是否到指定点等待 |
| delayDetectTime | double | 等待延时时间 |
| pos | const std::vector<double> | 机器人位置坐标,含 X/Y/Z 轴坐标及三个旋转轴角度(弧度制),长度 7 |
返回值: SUCCESS(0) 表示成功,-1 表示等待消息失败,-2 表示找不到指定的客户端。
conveyor_belt_set_sensor_calibration / conveyor_belt_set_sensor_calibration_robot
标定获得传感器位置。
函数原型:
Result conveyor_belt_set_sensor_calibration(SOCKETFD socketFd, int conveyorID);
Result conveyor_belt_set_sensor_calibration_robot(SOCKETFD socketFd, int robotNum, int conveyorID);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_calibrate_for_sensor_point / conveyor_belt_calibrate_for_sensor_point_robot
标定获得传感器位置(传感器标定流程第二步)。
函数原型:
Result conveyor_belt_calibrate_for_sensor_point(SOCKETFD socketFd, int conveyorID);
Result conveyor_belt_calibrate_for_sensor_point_robot(SOCKETFD socketFd, int robotNum, int conveyorID);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_calculate_for_sensor_point / conveyor_belt_calculate_for_sensor_point_robot
计算传感器位置(传感器标定流程第三步,标定完成后计算)。
函数原型:
Result conveyor_belt_calculate_for_sensor_point(SOCKETFD socketFd, int conveyorID);
Result conveyor_belt_calculate_for_sensor_point_robot(SOCKETFD socketFd, int robotNum, int conveyorID);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_get_basic_paramters / conveyor_belt_get_basic_paramters_robot
获取基本参数。
函数原型:
Result conveyor_belt_get_basic_paramters(SOCKETFD socketFd, int conveyorID, ConveyorBasicParams& param);
Result conveyor_belt_get_basic_paramters_robot(SOCKETFD socketFd, int robotNum, int conveyorID, ConveyorBasicParams& param);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| param | ConveyorBasicParams& | 输出参数,基本参数结构体 |
ConveyorBasicParams 结构体:
| 字段 | 类型 | 说明 |
|---|---|---|
| conveyorID | int | 传送带 ID |
| compensation_encoderVal | double | 补偿编码器值 |
| compensation_time | double | 补偿时间 |
| conveyor_encoderDirection | int | 编码器方向 |
| conveyor_encoderResolution | double | 编码器分辨率 |
| conveyor_encoderValue | double | 编码器当前值 |
| conveyor_maxEncoderVal / conveyor_minEncoderVal | double | 编码器最大/最小值 |
| conveyor_posRecordMode | int | 位置记录模式 |
| conveyor_speed | double | 传送带速度 |
| conveyor_userCoord | int | 用户坐标系 |
| track_height | int | 轨道高度 |
| track_on_run_mode_with_target_overrun | int | 轨道运行模式与目标超限 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_get_identification_paramters / conveyor_belt_get_identification_paramters_robot
获取识别参数。
函数原型:
Result conveyor_belt_get_identification_paramters(SOCKETFD socketFd, int conveyorID, ConveyorIdentificationParams& param);
Result conveyor_belt_get_identification_paramters_robot(SOCKETFD socketFd, int robotNum, int conveyorID, ConveyorIdentificationParams& param);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| param | ConveyorIdentificationParams& | 输出参数,识别参数结构体 |
ConveyorIdentificationParams 结构体:
| 字段 | 类型 | 说明 |
|---|---|---|
| conveyorID | int | 传送带 ID |
| detectSrc_DI_capturePos | int | 捕获位置(触发信号 IO) |
| detectSrc_globalVar | std::string | 全局变量 |
| detectSrc_type | int | 检测源类型(0=传感器,1=视觉,2=传感器+视觉等) |
| detectSrc_visionID | int | 视觉 ID |
| detectSrc_vision_io_filter_type | int | 视觉 IO 过滤类型 |
| detectSrc_vision_latch_encoder_value_type | int | 视觉锁存编码器值类型 |
| identification_communication | std::string | 识别通讯 |
| identification_sensorTrg | int | 识别传感器触发 |
| identification_type | int | 识别类型 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_get_sensor_paramters / conveyor_belt_get_sensor_paramters_robot
获取传感器参数。
函数原型:
Result conveyor_belt_get_sensor_paramters(SOCKETFD socketFd, int conveyorID, ConveyorSensorParams& param);
Result conveyor_belt_get_sensor_paramters_robot(SOCKETFD socketFd, int robotNum, int conveyorID, ConveyorSensorParams& param);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| param | ConveyorSensorParams& | 输出参数,传感器参数结构体 |
ConveyorSensorParams 结构体:
| 字段 | 类型 | 说明 |
|---|---|---|
| conveyorID | int | 传送带 ID |
| sensorPosDeg_X / Y / Z | double | 传感器位置 X/Y/Z(角度) |
| sensorPosDeg_A / B / C | double | 传感器姿态 A/B/C(角度) |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_get_track_range_paramters / conveyor_belt_get_track_range_paramters_robot
获取跟踪范围参数。
函数原型:
Result conveyor_belt_get_track_range_paramters(SOCKETFD socketFd, int conveyorID, ConveyorTrackRangeParams& param);
Result conveyor_belt_get_track_range_paramters_robot(SOCKETFD socketFd, int robotNum, int conveyorID, ConveyorTrackRangeParams& param);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| param | ConveyorTrackRangeParams& | 输出参数,跟踪范围结构体 |
ConveyorTrackRangeParams 结构体:
| 字段 | 类型 | 说明 |
|---|---|---|
| conveyorID | int | 传送带 ID |
| position_receLatestPos | double | 最迟到接收位置 |
| position_trackRangeXMax | double | 轨道范围 X 最大 |
| position_trackRangeYMax / YMin | double | 轨道范围 Y 最大/最小 |
| position_trackRangeZMax / ZMin | double | 轨道范围 Z 最大/最小 |
| position_trackStartXPoint | double | 轨道起始 X 点 |
返回值: SUCCESS(0) 表示成功,负数表示失败。
conveyor_belt_get_wait_point_paramters / conveyor_belt_get_wait_point_paramters_robot
获取等待点参数。
函数原型:
Result conveyor_belt_get_wait_point_paramters(SOCKETFD socketFd, int conveyorID, ConveyorWaitPointParams& param);
Result conveyor_belt_get_wait_point_paramters_robot(SOCKETFD socketFd, int robotNum, int conveyorID, ConveyorWaitPointParams& param);参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| conveyorID | int | 传送带 ID |
| param | ConveyorWaitPointParams& | 输出参数,等待点参数结构体 |
ConveyorWaitPointParams 结构体:
| 字段 | 类型 | 说明 |
|---|---|---|
| conveyorID | int | 传送带 ID |
| delayDetectTime | double | 延迟检测时间 |
| isWait | bool | 是否等待 |
| pos | std::vector<double> | 位置数组 |
返回值: SUCCESS(0) 表示成功,负数表示失败。