我正在参加「初夏创意投稿大赛」详情请看:初夏创意投稿大赛

今天公司组织发福利,端午的福利,粽子、、、 也不是直接的发粽子。而是给你礼品卷,自己选择相应的礼品进行兑换。

就是这么个东西,由于我们公司一直致力于做工业智能化,我就查了一下粽子的生产流程: 我的个乖乖,从来没有关注过粽子的生产,今天以卡,基本上属于人工生产的方式,这怎么能忍。一个做智能制造的,怎么能忍受人工生产呢。所以,我就农了这篇文章,表达一下我的看法,当然了,实现全自动的可能性应该没有,应为预算太高,粽子一年就买几天,回本太慢了。

基本上都属于人工,那么我们就来对粽子生产的的某些功能进行升级吧!

粽子的分类以及抓取放到包装盒

由于我这里没有粽子的产线,智能放一个大体上相同的

我们通过前端的视觉拍照,得到粽子的大小以及在传送带上的位置,把他发送给机器人,机器人根据得到的数据在后方将粽子抓取到相应的包装盒。

前期标定

我们通过手眼标定的方式将机器人和相机标定到同一个坐标系下面,具体操作不走如下:

1.我们首先在视觉相机下方找到九个点,平且求出9个点在相机坐标下的像素坐标值P(i);

2.传送带万千移动,我们记录一下传送带往前走了的编码的脉冲量M;

3.将九个点的位置以机器人为坐标,记录下9个点的机器人坐标数据q(i);

我们通过机器人端的开发包建立随动坐标,将我们的数据传入到随动坐标中;

视觉这块,我们将的到的机械的坐标和视觉的坐标合二为一,通过halcon9点标定的方式来进行一个标定;

```js

*图像坐标 areacenter(SortedRegions,Area,Row,Column) % Columnrobot := [275,225,170,280,230,180,295,240,190]

*机器人9点的列坐标 Rowrobot := [55,50,45,5,0,-5,-50,-50,-50] *机器人9点的行坐标 vectortohommat2d(Row,Column,Rowrobot,Columnrobot,HomMat2D) *求解变换矩阵,HomMat2D是图像坐标和机械手坐标之间的关系 ```

`affinetranspoint_2d(HomMat2D,Row2,Column2,Qx,Qy)'

'*由像素坐标和标定方式求出机器人基础坐标系中的坐标 `

视觉程序

我们首先以粽子的原图作为模型,通过模型识别定位

示例如下:

```js


  • This example program uses shape-based matching to align ROIs for the measure
  • tool, which then inspects individual razor blades.
  • The program can be run in two modes: (1) with the full affine transformation
  • (2) using translate_measure
  • Modify the next line to switch between the modes. USINGTRANSLATEMEASURE := 0

  • general configuration of HDevelop devupdatewindow ('off')
  • image acquisition and window size readimage (ModelImage, 'razors1') getimagepointer1 (ModelImage, Pointer, Type, Width, Height) devclosewindow () devopenwindow (0, 0, Width, Height, 'white', WindowHandle) devsetpart (0, 0, Height - 1, Width - 1) devdisplay (ModelImage)
  • colors and other settings for the visualization devsetcolor ('cyan') devsetdraw ('margin') devsetline_width (2) stop ()
  • ------------------- start of the application ----------------
  • -> select the model object Row1 := 46 Column1 := 57 Row2 := 79 Column2 := 94 genrectangle1 (ROIPart1, Row1, Column1, Row2, Column2) genrectangle1 (ROIPart2, Row1 + 364, Column1 + 13, Row2 + 364, Column2 + 13) union2 (ROIPart1, ROIPart2, ModelROI) areacenter (ModelROI, Area, CenterROIRow, CenterROIColumn) devdisplay (ModelImage) dev_display (ModelROI) stop ()
  • -> create the model reducedomain (ModelImage, ModelROI, ImageROI) createshapemodel (ImageROI, 4, 0, 0, 'auto', 'none', 'usepolarity', 30, 10, ModelID) inspectshapemodel (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30) getshapemodelcontours (ShapeModel, ModelID, 1) devclearwindow () devsetcolor ('blue') devdisplay (ShapeModelRegion) stop ()
  • step 1: create variables describing the measurement ROIs and display them Rect1Row := 244 Rect1Col := 73 DistColRect1Rect2 := 17 Rect2Row := Rect1Row Rect2Col := Rect1Col + DistColRect1Rect2 RectPhi := rad(90) RectLength1 := 122 RectLength2 := 2 genrectangle2 (MeasureROI1, Rect1Row, Rect1Col, RectPhi, RectLength1, RectLength2) genrectangle2 (MeasureROI2, Rect2Row, Rect2Col, RectPhi, RectLength1, RectLength2) devdisplay (ModelImage) devsetcolor ('yellow') devdisplay (MeasureROI1) dev_display (MeasureROI2)
  • translate measurement ROIs to lie on XLD model (without clipping!) getsystem ('clipregion', OriginalClipRegion) setsystem ('clipregion', 'false') moveregion (MeasureROI1, MeasureROI1Ref, -CenterROIRow, -CenterROIColumn) moveregion (MeasureROI2, MeasureROI2Ref, -CenterROIRow, -CenterROIColumn) setsystem ('clipregion', OriginalClipRegion) DistRect1CenterRow := Rect1Row - CenterROIRow DistRect1CenterCol := Rect1Col - CenterROIColumn DistRect2CenterRow := Rect2Row - CenterROIRow DistRect2CenterCol := Rect2Col - CenterROIColumn if (USINGTRANSLATEMEASURE != 0)
    • -> measure objects are created only once in advance and then translated later genmeasurerectangle2 (Rect1Row, Rect1Col, RectPhi, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1) genmeasurerectangle2 (Rect2Row, Rect2Col, RectPhi, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2) endif stop ()
  • step 2: find the objects in another image readimage (SearchImage, 'razors2') devdisplay (SearchImage) findshapemodel (SearchImage, ModelID, 0, 0, 0.8, 0, 0.5, 'leastsquares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score) if (|Score| > 0) for i := 0 to |Score| - 1 by 1 * step 3: determine the affine transformation vectorangletorigid (0, 0, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject) affinetranscontourxld (ShapeModel, ModelAtNewPosition, MovementOfObject) devdisplay (ModelAtNewPosition) * step 4: measure width and distance of the teeth * -> display the moved ROIs affinetransregion (MeasureROI1Ref, MeasureROI1AtNewPosition, MovementOfObject, 'constant') affinetransregion (MeasureROI2Ref, MeasureROI2AtNewPosition, MovementOfObject, 'constant') devdisplay (MeasureROI1AtNewPosition) devdisplay (MeasureROI2AtNewPosition) affinetranspixel (MovementOfObject, DistRect1CenterRow, DistRect1CenterCol, Rect1RowCheck, Rect1ColCheck) affinetranspixel (MovementOfObject, DistRect2CenterRow, DistRect2CenterCol, Rect2RowCheck, Rect2ColCheck) if (USINGTRANSLATEMEASURE != 0) * -> translate the already created measure objects translatemeasure (MeasureHandle1, Rect1RowCheck, Rect1ColCheck) translatemeasure (MeasureHandle2, Rect2RowCheck, Rect2ColCheck) measurepairs (SearchImage, MeasureHandle1, 2, 25, 'negative', 'all', RowEdge11, ColEdge11, Amp11, RowEdge21, ColEdge21, Amp21, Width1, Distance1) measurepairs (SearchImage, MeasureHandle2, 2, 25, 'negative', 'all', RowEdge12, ColEdge12, Amp12, RowEdge22, ColEdge22, Amp22, Width2, Distance2) else * -> create new measure objects and destroy them after the measurement RectPhiCheck := RectPhi + AngleCheck[i] genmeasurerectangle2 (Rect1RowCheck, Rect1ColCheck, RectPhiCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1) genmeasurerectangle2 (Rect2RowCheck, Rect2ColCheck, RectPhiCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2) * step 5: perform the measurement measurepairs (SearchImage, MeasureHandle1, 2, 25, 'negative', 'all', RowEdge11, ColEdge11, Amp11, RowEdge21, ColEdge21, Amp21, Width1, Distance1) measurepairs (SearchImage, MeasureHandle2, 2, 25, 'negative', 'all', RowEdge12, ColEdge12, Amp12, RowEdge22, ColEdge22, Amp22, Width2, Distance2) closemeasure (MeasureHandle1) closemeasure (MeasureHandle2) endif * step 6: check for too short or missing teeth NumberTeeth1 := |Width1| NumberTeeth2 := |Width2| devsetcolor ('red') if (NumberTeeth1 < 37) for j := 0 to NumberTeeth1 - 2 by 1 if (Distance1[j] > 4.0) RowFault := round(0.5 * (RowEdge11[j + 1] + RowEdge21[j])) ColFault := round(0.5 * (ColEdge11[j + 1] + ColEdge21[j])) disprectangle2 (WindowHandle, RowFault, ColFault, 0, 4, 4) devopenwindow (0, Width + 20, 80, 80, 'black', WindowHandleZoom) devsetpart (RowFault - 10, ColFault - 10, RowFault + 10, ColFault + 10) devdisplay (SearchImage) disprectangle2 (WindowHandleZoom, RowFault, ColFault, 0, 4, 4) stop () devclosewindow () devsetpart (0, 0, Height - 1, Width - 1) endif endfor endif if (NumberTeeth2 < 37) for j := 0 to NumberTeeth2 - 2 by 1 if (Distance2[j] > 4.0) RowFault := round(0.5 * (RowEdge12[j + 1] + RowEdge22[j])) ColFault := round(0.5 * (ColEdge12[j + 1] + ColEdge22[j])) disprectangle2 (WindowHandle, RowFault, ColFault, 0, 4, 4) devopenwindow (0, Width + 20, 80, 80, 'black', WindowHandleZoom) devsetpart (RowFault - 10, ColFault - 10, RowFault + 10, ColFault + 10) devdisplay (SearchImage) disprectangle2 (WindowHandleZoom, RowFault, ColFault, 0, 4, 4) stop () devclosewindow () devsetpart (0, 0, Height - 1, Width - 1) endif endfor endif devsetcolor ('yellow') stop () endfor endif
  • ------------------- end of the application -----------------
  • clean up if (USINGTRANSLATEMEASURE != 0) closemeasure (MeasureHandle1) closemeasure (MeasureHandle2) endif devupdatewindow ('on') clearshapemodel (ModelID) ```

    机器人配合

在我们做完酒店标定以后,机器人只需要将视觉传过来的坐标带入到随动坐标系中,这样就能够得到准确的随动坐标。

结束语

本次我们提升了包装的速率,后续我们将对整个产线都实行自动化的功能升级;

关于粽子的生产产线提速相关推荐

  1. 直击Huawei Mate 40产线背后的华为云IoT智能制造

    摘要:数字孪生?在数字世界找到物理世界的设备! 本文分享自华为云社区<[云驻共创]Huawei Mate 40产线直击之华为云IoT智能制造助力工厂数字化转型>,原文作者:启明. Part ...

  2. 遨博机器人执行线程_智造洞察 | 遨博机器人推出国内首条“用机器人生产机器人”产线;服务机器人等助力8月经济回升;浙江企业研发飞机发动机榫槽数控拉床...

    智造要闻 NEWS 01 遨博机器人推出国内首条"用机器人生产机器人"产线 近日,遨博机器人推出国内首条生产机器人的自动化产线.该产线采用模块化设计,可根据实际需要灵活部署,适应不 ...

  3. 车间生产管理(一)· 产线流程控制及产品质量追溯解决方案

    产线 MES 系统能够带来哪些实际应用呢? 主近灯光模组线上,在总成压入工位的机械手抓取一个主近模组,准备往灯光支架上安装前,通过模组二维码,查询该模组的生产数据.MES 系统根据读到的模组二维码,快 ...

  4. ipqc异常处理流程图_产线异常处理流程

    与<产线异常处理流程>相关的范文 供应商来料异常管理流程 1. 目的: 规范来料产品的异常处理流程控制,提高来料合格率. 2. 范围: 本规范适用于所有外购零部件及外包加工件. 3. 职责 ...

  5. 产线数字化软件源码_数字化工厂规划的十大核心要素

    导读 在当前智能制造的热潮之下,很多企业都在规划建设智能工厂.众所周知,智能工厂的规划建设是一个十分复杂的系统工程,为了少走弯路,本文整理了在建设中要考虑的十个核心要素以及需要关注的重点维度. 数据的 ...

  6. 产线数字化软件源码_品质笔记⑥丨卢宇聪:把握数字化趋势,坚定创新发展道路...

    6天5夜,跨越3座城市,深度走访7家企业,对话多位企业家-- 这是一趟开阔视野之旅.我接触了很多之前极少有机会接触的企业,比如做光缆的法尔胜泓晟集团.做节能装备的双良集团.做密封件的天生密封件有限公司 ...

  7. 易飞扬宣布完成100G CWDM4PSM4光模块量产线建设

    讯,易飞扬即日宣布量产两款高性能的100G光模块:100G QSFP28 CWDM4 和100G QSFP28 PSM4.两种产品采用同一个技术平台和生产平台.本次建设投产的CWDM4/PSM4 车间 ...

  8. 国内产线 OLED 良率低,产能释放缓慢

    当前国内 OLED 产线工艺技术尚未完全成熟,蒸镀工艺与国外尚存在一定差距,产线良品率较低,下游用户认可度低,导致国内 OLED 产业出现高产能低产量问题.本文将围绕国内 OLED 产线产能利用情况. ...

  9. 网络基础系统红枫产线落地金华,助力打造千亿级产业集群!

    "把握网络根基技术升级的历史契机,把金华网络根基研究中心作为红枫系统产业化研发的创新中心,落地红枫系统产业化装配和测试生产基地,为金义新区.金华市.浙江省的科技创新和战略性新兴产业发展服务, ...

最新文章

  1. 五分钟使你的Firefox快两倍
  2. 谁说用 Git 一定要用命令行?试试 SourceTree 吧
  3. 2021年信号与系统期中考试的补测试题
  4. CentOS系统NAT共享上网
  5. Centos kvm虚拟sever
  6. 理解浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
  7. Java中的PrintWriter的write方法和print方法的区别是什么?
  8. [美丽的烦恼] SQL删除某些字段重复的记录(只保留一条)
  9. 获江苏国资阿里小米等入股 苏宁易购复牌涨停
  10. 争议下的「中台之路」,该如何破局?
  11. matlab2c使用c++实现matlab函数系列教程-conv函数
  12. Linux服务器初步配置JDK+Tomcat+redis
  13. 内部类之.this.new
  14. eNSP教程 —— 物理机如何使用web登录到防火墙
  15. 剪贴板查看器clipbrd.exe
  16. win10没有realtek高清晰音频管理器_千万小心:山寨Win10更新工具正作祟!
  17. python深浅拷贝应用_简述Python的深浅拷贝以及应用场景?
  18. 阿里云被攻击封多久,又该怎么解决?
  19. 十句话,不黄不色,但很经典~~~~~~~~~~
  20. require()的基本用法

热门文章

  1. mysql expire_mysql expire_logs_days是怎么生效和计算出来的
  2. 弘辽科技:腾讯发力XR新业态有赞打通腾讯惠聚新增私域引流能力
  3. 电视root工具_TapTap | 无需Root,成功移植 IOS14,拿下!!!
  4. 光猫,路由器,机顶盒的区别
  5. 【安卓笔记】图片特效之黑白效果
  6. 三种照片保存形式 :JPEG、TIFF、RAW
  7. PCA(主成分分析)-------原理,推导,步骤、实例、代码
  8. Tomcat和Was服务器中文乱码问题总结
  9. c语言课程设计--贪吃蛇
  10. Cannot determine value type from string ‘5ca68b45-78bc-4a68-b3a6-97b0ff73797‘