-- ==========================================================
-- 函数名称:banyun (通用搬运)
-- 功能:包含避障逻辑的点对点搬运
-- ==========================================================
function banyun(zqd, fzd, gd1, gd2, do1, do2, y1, y2, type)
-- ================= 1. 去抓取侧 (Pick Sequence) =================
-- [1.1] 快速移动到全局过渡点 (避免碰撞外部设备)
PTP(gd1, 100, -1, 0)
-- [1.2] 移动到抓取点上方的高位安全点 (带Y轴偏移)
-- 目的:确保在Z轴下降前,机器人位于相机或光源的侧面,而非正上方
Lin(zqd, 100, -1, 0, 1, 0, y1, 150, 0, 0, 0)
-- [1.3] 垂直下降到低位安全点 (带Y轴偏移)
-- 目的:准备水平切入
Lin(zqd, 100, -1, 0, 1, 0, y1, 35, 0, 0, 0)
-- [1.4] 水平平移到抓取点正上方 (消除Y轴偏移) ★核心避障动作★
-- 此时 Z=35,机器人从侧面伸入相机下方,避免Z轴直接撞击相机
Lin(zqd, 100, -1, 0, 1, 0, 0, 35, 0, 0, 0)
-- [1.5] 垂直下降到抓取点 (Z=0)
Lin(zqd, 100, -1, 0, 1, 0, 0, 0, 0, 0, 0)
-- [1.6] 执行抓取动作
SetDO(do1, 1, 0, 0) -- 主动作信号 (吸真空/闭合)
if type == 2 then
SetDO(do2, 0, 0, 0) -- 如果是夹爪,复位反向信号
end
WaitMs(500) -- 等待动作稳定
-- ================= 2. 抓取后撤退 (Retract Sequence) =================
-- [2.1] 垂直微抬 (Z=35)
Lin(zqd, 100, -1, 0, 1, 0, 0, 35, 0, 0, 0)
-- [2.2] 水平平移退刀 (恢复Y轴偏移)
-- 带着工件安全离开相机下方区域
Lin(zqd, 100, -1, 0, 1, 0, y1, 35, 0, 0, 0)
-- [2.3] 抬升到高位安全点
Lin(zqd, 100, -1, 0, 1, 0, y1, 150, 0, 0, 0)
-- [2.4] 回到过渡点
PTP(gd1, 100, -1, 0)
-- ================= 3. 去放置侧 (Place Sequence) =================
-- 逻辑与抓取侧完全一致,只是目标点换成了 fzd,偏移换成了 y2
PTP(gd2, 100, -1, 0) -- 去放置过渡点
-- 进刀逻辑 (高位偏移 -> 低位偏移 -> 正上方 -> 放置点)
Lin(fzd, 100, -1, 0, 1, 0, y2, 150, 0, 0, 0)
Lin(fzd, 100, -1, 0, 1, 0, y2, 35, 0, 0, 0)
Lin(fzd, 100, -1, 0, 1, 0, 0, 35, 0, 0, 0)
Lin(fzd, 100, -1, 0, 1, 0, 0, 0, 0, 0, 0)
-- [3.1] 执行放置动作
SetDO(do1, 0, 0, 0) -- 复位主信号 (破真空/松开)
if type == 2 then
SetDO(do2, 1, 0, 0) -- 如果是夹爪,触发反向信号 (张开)
end
WaitMs(500)
-- 退刀逻辑 (微抬 -> 平移退出 -> 高抬)
Lin(fzd, 100, -1, 0, 1, 0, 0, 35, 0, 0, 0)
Lin(fzd, 100, -1, 0, 1, 0, y2, 35, 0, 0, 0)
Lin(fzd, 100, -1, 0, 1, 0, y2, 150, 0, 0, 0)
PTP(gd2, 100, -1, 0) -- 任务完成
end