搬运函数 function banyun()

专为工业 SCARA/六轴机器人设计的智能防撞搬运逻辑。集成视觉坐标补偿、L型安全路径规划及夹爪/吸盘双模式控制。

代码

Lua Script
-- ==========================================================
-- 函数名称: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