一种适用于主流工业机器人的简单的码垛算法

  1. 适用场景
    ● 产品尺寸规整,长宽高都有数值,最好是箱型体
    ● 简单的“长X宽X高”的码法,非五花垛等复杂垛型,垛型方向一致,无需旋转产品。
    ● 抓取和放置方式为从上方进行抓取和放置
  2. 要求
    ● 工业机器人需要有位置信息变量且X、Y、Z、W、P、R能被计算
    ● 工业机器人夹爪需要有夹取放置的功能
  3. 程序简介
    该程序能够实现简单的码垛,可以根据外部输入如PLC等设置码垛的个数,码垛垛型(XXX),码垛各方向的偏移量,垛满后输出信号提示。
  4. 程序设计
    注:该代码块使用KUKA工业机器人编程语言KRL编写,本程序注重提供思路。如有不对的地方还请大佬指正
DEF Pallet1 ( )
//======================================================================================
// 定义变量
DECL INT num_count  //码垛个数计数器
DECL INT num_x,num_y,num_z  //码垛时XYZ方向上的计数器,如x方向上码一个则num_x就等于1
DECL INT num_limit_x,num_limit_y,num_limit_z  //外部输入的码垛限制,如需要码3x3x3的垛。
DECLINT fxied_offset_x,fxied_offset_y,fxied_offset_z  //外部输入的码垛偏移量
//======================================================================================

//======================================================================================
//定义信号
GLOBAL SIGNAL GI_Gap_X $IN[1] TO $IN[16]  //xyz方向的偏移量
GLOBAL SIGNAL GI_Gap_Y $IN[17] TO $IN[32] 
GLOBAL SIGNAL GI_Gap_Z $IN[33] TO $IN[49] 

GLOBAL SIGNAL GI_num $IN[50] TO $IN[65]  //需要的码垛数量

GLOBAL SIGNAL GI_limit_x $IN[61] TO $IN[68]  //需要的码垛垛型,如3x3x3,这里使用8位组成
GLOBAL SIGNAL GI_limit_y $IN[71] TO $IN[78]  //的信号已经够使用了,最大可以输入255
GLOBAL SIGNAL GI_limit_z $IN[81] TO $IN[88] 

GLOBAL SIGNAL GO_Act_Count $OUT[1] to $OUT[16]  //组输出,实际码垛数量

GLOBAL SIGNAL OUT_Pallet_OK $OUT[100]  //bool量,码垛垛满信号
GLOBAL SIGNAL IN_Pallet_OK $IN[100]  //bool量,确认收到垛满信号
//======================================================================================

INI
//======================================================================================
//初始化所有变量
num_count = 0
num_x = 0
num_y = 0
num_z = 0
num_limit_x = 0
num_limit_y = 0
num_limit_z = 0
fxied_offset_x = 0
fxied_offset_y = 0
fxied_offset_z = 0
OUT_Pallet_OK = FALSE
//======================================================================================

//======================================================================================
//接收外部输入的各种参数
LOOP
fxied_offset_x = GI_Gap_X  //接收偏移量
fxied_offset_y = GI_Gap_Y
fxied_offset_z = GI_Gap_Z

num_limit_x = GI_limit_x  //接收垛型要求
num_limit_y = GI_limit_y
num_limit_z = GI_limit_z

IF (fxied_offset_x <> 0) AND (fxied_offset_y <> 0) AND ( fxied_offset_z <> 0) THEN

IF (num_limit_x > 0) AND (num_limit_y > 0) AND (num_limit_z > 0) THEN
EXIT  //判断是否全部参数都已接收完成,如果完成,执行EXIT跳出死循环
ENDIF

ENDIF

ENDLOOP
//======================================================================================

//======================================================================================
LOOP  //开始循环

TAKE()  //取料程序

XP_put = XP_TEACH  //将固定点位赋值给临时点位
XP_put_up = XP_put  //临时点位上方点
XP_put_up.Z = XP_put_up.Z + 100

XP_put.X = XP_put.X + (num_x * fxied_offset_x)  //偏移量计算
XP_put.Y = XP_put.Y + (num_y * fxied_offset_y)
XP_put.Z = XP_put.Z + (num_z * fxied_offset_z)

;------------------------------
;主动作程序
PTP Xhome 
PTP XP_put_up 
LIN XP_put 
Gripper_Opn () //夹爪打开程序
LIN XP_put_up 
PTP Xhome 
;-------------------------------

num_count = num_count + 1  //码垛计数器自增
GO_Act_Count = num_count  //反馈给外部当前码垛个数
num_x = num_x + 1  //x方向计数

IF num_x >= num_limit_x THEN //判断条件,x方向是否码完
num_x = 0
num_y = num_y + 1
ENDIF

IF num_y >= num_limit_y  THEN  //判断条件,y方向是否码完
num_x = 0
num_y = 0
num_z = num_z + 1
ENDIF

IF num_z >= num_limit_z  THEN  //判断条件,z方向是否码完
num_x = 0
num_y = 0
num_z = 0
ENDIF

IF num_count == GI_num  THEN  //如果码垛个数已经达到外部所输入的个数,则发出垛满完成信号
OUT_Pallet_OK = TRUE
num_count = 0
WAIT IN_Pallet_OK == TRUE  //等待外部确认
OUT_Pallet_OK = FALSE  //垛满信号复位
GO_Act_Count = 0
EXIT  //跳出码垛死循环
ENDIF

ENDLOOP
//======================================================================================
END
---------------------------------------------------------------------------
DEF Pos_store()  //点位存放程序
PTP XP_put_up 
PTP XP_put 
PTP XP_TEACH 
END
---------------------------------------------------------------------------
DEF Gripper_Opn ()  //夹爪打开程序

END
---------------------------------------------------------------------------
DEF TAKE ()  // 取料程序

END
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毕业设计题目:基于工业机器人码垛系统设计与实现 一、项目背景 随着制造业的发展,工业机器人在各种生产领域中得到了广泛应用,其中工业机器人搬运码垛是其中之一。码垛是指将相同或不同规格的产品按照一定的规则码放到指定的位置,以达到提高储存密度、节省空间、便于管理的目的。传统的码垛方式需要大量的人力和时间,而机器人搬运码垛则可以大大的提高生产效率和生产质量。 二、设计目标 本设计旨在实现基于工业机器人码垛系统,通过机器人对产品进行分拣、搬运和码放,实现生产线自动化和智能化。具体目标如下: 1. 实现机器人对产品的识别和分类; 2. 实现机器人对产品的搬运; 3. 实现机器人对产品的码放; 4. 实现系统的远程监控和控制。 三、设计方案 本设计采用机器人搬运码垛的方式,通过视觉识别和控制算法实现自动化生产线。具体方案如下: 1. 系统框架 本设计采用工业机器人和视觉传感器作为系统的核心部件,通过视觉识别和控制算法实现自动化生产线。系统框架如下: 2. 码垛系统流程图 本设计的码垛系统流程图如下: 3. 系统硬件设计 本设计采用机器人、视觉传感器、控制电路等硬件组成系统。具体硬件设计如下: 机器人:采用六自由度工业机器人,可以实现各种角度和路径的搬运和码放。 视觉传感器:采用高清晰度的工业相机,可以实现对产品的识别和分类。 控制电路:采用单片机控制器和电机驱动模块,实现机器人的控制和运动。 4. 系统软件设计 本设计采用C++和ROS作为开发语言和开发平台。具体软件设计如下: 视觉识别算法:采用OpenCV库实现对产品的识别和分类。 控制算法:采用PID控制算法实现机器人的控制和运动。 通信协议:采用ROS通信协议实现系统的远程监控和控制。 四、预期成果 本设计预期实现基于工业机器人码垛系统,通过机器人对产品进行分拣、搬运和码放,实现生产线自动化和智能化。具体预期成果如下: 1. 实现机器人对产品的识别和分类; 2. 实现机器人对产品的搬运; 3. 实现机器人对产品的码放; 4. 实现系统的远程监控和控制。 五、创新点 本设计的创新点如下: 1. 采用机器人搬运码垛的方式,实现生产线自动化和智能化; 2. 采用视觉识别和控制算法,提高生产线的生产效率和生产质量; 3. 采用ROS通信协议,实现系统的远程监控和控制。 六、实验验证 本设计将通过对实验样品的搬运码垛操作,验证系统的正确性和可行性。具体实验步骤如下: 1. 对实验样品进行分类和识别; 2. 通过控制算法实现机器人的运动; 3. 对实验样品进行搬运和码放。 七、结论 本设计实现了基于工业机器人码垛系统,通过机器人对产品进行分拣、搬运和码放,实现生产线自动化和智能化。实验结果表明,系统具有较高的识别精度和搬运效率,可以满足实际生产的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值